├── .gitignore ├── package.json ├── todesktop-variants.js ├── README.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@todesktop/tailwind-variants", 3 | "version": "1.0.1", 4 | "description": "", 5 | "main": "todesktop-variants.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "tailwindcss", 11 | "plugin", 12 | "todesktop", 13 | "variants" 14 | ], 15 | "author": "Dave Jeffery ", 16 | "license": "MIT", 17 | "devDependencies": { 18 | "tailwindcss": "^3.4.0" 19 | }, 20 | "peerDependencies": { 21 | "tailwindcss": "^3.4.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /todesktop-variants.js: -------------------------------------------------------------------------------- 1 | const plugin = require("tailwindcss/plugin"); 2 | 3 | const todesktopPlugin = plugin(function ({ addVariant, e }) { 4 | // Add support for `todesktop` modifier 5 | // Usage:
...
6 | addVariant("todesktop", ({ modifySelectors, separator }) => { 7 | modifySelectors(({ className }) => { 8 | return `html.todesktop .${e(`todesktop${separator}${className}`)}`; 9 | }); 10 | }); 11 | 12 | // Add support for `mac`, `windows` and `linux` modifiers 13 | // Usage:
...
14 | const platformMap = { 15 | darwin: "mac", 16 | win32: "windows", 17 | linux: "linux", 18 | }; 19 | Object.keys(platformMap).forEach((platform) => { 20 | const variant = platformMap[platform]; 21 | addVariant(variant, ({ modifySelectors, separator }) => { 22 | modifySelectors(({ className }) => { 23 | return `html.todesktop-platform-${platform} .${e( 24 | `${variant}${separator}${className}` 25 | )}`; 26 | }); 27 | }); 28 | }); 29 | }); 30 | 31 | module.exports = todesktopPlugin; 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ToDesktop Tailwind Variants Plugin 2 | 3 | This Tailwind CSS plugin provides custom variants to apply styles to apps that are running on the [ToDesktop](https://www.todesktop.com) platform. There are also platform specific variants that target Windows, macOS, and Linux. 4 | 5 | ## Features 6 | 7 | - Provides `.todesktop` variant to target apps running on the ToDesktop platform. 8 | - Provides `.windows`, `.mac`, and `.linux` variants. 9 | 10 | ## Installation 11 | 12 | Install the plugin from npm: 13 | 14 | ```bash 15 | npm install @todesktop/tailwind-variants 16 | ``` 17 | 18 | ## Usage 19 | 20 | Add the plugin to your `tailwind.config.js` file: 21 | 22 | ```js 23 | module.exports = { 24 | // ... 25 | plugins: [ 26 | require("@todesktop/tailwind-variants"), 27 | // ... 28 | ], 29 | }; 30 | ``` 31 | 32 | Once the plugin is installed and enabled, you can use the variants in your Tailwind CSS classes like so: 33 | 34 | ```html 35 | 36 |
37 | 38 |
39 | ``` 40 | 41 | ```html 42 | 43 | 46 | ``` 47 | 48 | ```html 49 | 50 |
51 | 52 |
53 | ``` 54 | 55 | ```html 56 | 57 |
58 | 59 |
60 | ``` 61 | 62 | ## Acknowledgements 63 | 64 | - Thanks to [Peer Richelsen](https://twitter.com/peer_rich) for requesting this. 65 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | tailwindcss: 9 | specifier: ^3.4.0 10 | version: 3.4.0 11 | 12 | packages: 13 | 14 | /@alloc/quick-lru@5.2.0: 15 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 16 | engines: {node: '>=10'} 17 | dev: true 18 | 19 | /@isaacs/cliui@8.0.2: 20 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 21 | engines: {node: '>=12'} 22 | dependencies: 23 | string-width: 5.1.2 24 | string-width-cjs: /string-width@4.2.3 25 | strip-ansi: 7.1.0 26 | strip-ansi-cjs: /strip-ansi@6.0.1 27 | wrap-ansi: 8.1.0 28 | wrap-ansi-cjs: /wrap-ansi@7.0.0 29 | dev: true 30 | 31 | /@jridgewell/gen-mapping@0.3.3: 32 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 33 | engines: {node: '>=6.0.0'} 34 | dependencies: 35 | '@jridgewell/set-array': 1.1.2 36 | '@jridgewell/sourcemap-codec': 1.4.15 37 | '@jridgewell/trace-mapping': 0.3.20 38 | dev: true 39 | 40 | /@jridgewell/resolve-uri@3.1.1: 41 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 42 | engines: {node: '>=6.0.0'} 43 | dev: true 44 | 45 | /@jridgewell/set-array@1.1.2: 46 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 47 | engines: {node: '>=6.0.0'} 48 | dev: true 49 | 50 | /@jridgewell/sourcemap-codec@1.4.15: 51 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 52 | dev: true 53 | 54 | /@jridgewell/trace-mapping@0.3.20: 55 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 56 | dependencies: 57 | '@jridgewell/resolve-uri': 3.1.1 58 | '@jridgewell/sourcemap-codec': 1.4.15 59 | dev: true 60 | 61 | /@nodelib/fs.scandir@2.1.5: 62 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 63 | engines: {node: '>= 8'} 64 | dependencies: 65 | '@nodelib/fs.stat': 2.0.5 66 | run-parallel: 1.2.0 67 | dev: true 68 | 69 | /@nodelib/fs.stat@2.0.5: 70 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 71 | engines: {node: '>= 8'} 72 | dev: true 73 | 74 | /@nodelib/fs.walk@1.2.8: 75 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 76 | engines: {node: '>= 8'} 77 | dependencies: 78 | '@nodelib/fs.scandir': 2.1.5 79 | fastq: 1.16.0 80 | dev: true 81 | 82 | /@pkgjs/parseargs@0.11.0: 83 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 84 | engines: {node: '>=14'} 85 | requiresBuild: true 86 | dev: true 87 | optional: true 88 | 89 | /ansi-regex@5.0.1: 90 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 91 | engines: {node: '>=8'} 92 | dev: true 93 | 94 | /ansi-regex@6.0.1: 95 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 96 | engines: {node: '>=12'} 97 | dev: true 98 | 99 | /ansi-styles@4.3.0: 100 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 101 | engines: {node: '>=8'} 102 | dependencies: 103 | color-convert: 2.0.1 104 | dev: true 105 | 106 | /ansi-styles@6.2.1: 107 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 108 | engines: {node: '>=12'} 109 | dev: true 110 | 111 | /any-promise@1.3.0: 112 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 113 | dev: true 114 | 115 | /anymatch@3.1.3: 116 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 117 | engines: {node: '>= 8'} 118 | dependencies: 119 | normalize-path: 3.0.0 120 | picomatch: 2.3.1 121 | dev: true 122 | 123 | /arg@5.0.2: 124 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 125 | dev: true 126 | 127 | /balanced-match@1.0.2: 128 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 129 | dev: true 130 | 131 | /binary-extensions@2.2.0: 132 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 133 | engines: {node: '>=8'} 134 | dev: true 135 | 136 | /brace-expansion@2.0.1: 137 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 138 | dependencies: 139 | balanced-match: 1.0.2 140 | dev: true 141 | 142 | /braces@3.0.2: 143 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 144 | engines: {node: '>=8'} 145 | dependencies: 146 | fill-range: 7.0.1 147 | dev: true 148 | 149 | /camelcase-css@2.0.1: 150 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 151 | engines: {node: '>= 6'} 152 | dev: true 153 | 154 | /chokidar@3.5.3: 155 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 156 | engines: {node: '>= 8.10.0'} 157 | dependencies: 158 | anymatch: 3.1.3 159 | braces: 3.0.2 160 | glob-parent: 5.1.2 161 | is-binary-path: 2.1.0 162 | is-glob: 4.0.3 163 | normalize-path: 3.0.0 164 | readdirp: 3.6.0 165 | optionalDependencies: 166 | fsevents: 2.3.3 167 | dev: true 168 | 169 | /color-convert@2.0.1: 170 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 171 | engines: {node: '>=7.0.0'} 172 | dependencies: 173 | color-name: 1.1.4 174 | dev: true 175 | 176 | /color-name@1.1.4: 177 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 178 | dev: true 179 | 180 | /commander@4.1.1: 181 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 182 | engines: {node: '>= 6'} 183 | dev: true 184 | 185 | /cross-spawn@7.0.3: 186 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 187 | engines: {node: '>= 8'} 188 | dependencies: 189 | path-key: 3.1.1 190 | shebang-command: 2.0.0 191 | which: 2.0.2 192 | dev: true 193 | 194 | /cssesc@3.0.0: 195 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 196 | engines: {node: '>=4'} 197 | hasBin: true 198 | dev: true 199 | 200 | /didyoumean@1.2.2: 201 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 202 | dev: true 203 | 204 | /dlv@1.1.3: 205 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 206 | dev: true 207 | 208 | /eastasianwidth@0.2.0: 209 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 210 | dev: true 211 | 212 | /emoji-regex@8.0.0: 213 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 214 | dev: true 215 | 216 | /emoji-regex@9.2.2: 217 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 218 | dev: true 219 | 220 | /fast-glob@3.3.2: 221 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 222 | engines: {node: '>=8.6.0'} 223 | dependencies: 224 | '@nodelib/fs.stat': 2.0.5 225 | '@nodelib/fs.walk': 1.2.8 226 | glob-parent: 5.1.2 227 | merge2: 1.4.1 228 | micromatch: 4.0.5 229 | dev: true 230 | 231 | /fastq@1.16.0: 232 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 233 | dependencies: 234 | reusify: 1.0.4 235 | dev: true 236 | 237 | /fill-range@7.0.1: 238 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 239 | engines: {node: '>=8'} 240 | dependencies: 241 | to-regex-range: 5.0.1 242 | dev: true 243 | 244 | /foreground-child@3.1.1: 245 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 246 | engines: {node: '>=14'} 247 | dependencies: 248 | cross-spawn: 7.0.3 249 | signal-exit: 4.1.0 250 | dev: true 251 | 252 | /fsevents@2.3.3: 253 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 254 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 255 | os: [darwin] 256 | requiresBuild: true 257 | dev: true 258 | optional: true 259 | 260 | /function-bind@1.1.2: 261 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 262 | dev: true 263 | 264 | /glob-parent@5.1.2: 265 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 266 | engines: {node: '>= 6'} 267 | dependencies: 268 | is-glob: 4.0.3 269 | dev: true 270 | 271 | /glob-parent@6.0.2: 272 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 273 | engines: {node: '>=10.13.0'} 274 | dependencies: 275 | is-glob: 4.0.3 276 | dev: true 277 | 278 | /glob@10.3.10: 279 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 280 | engines: {node: '>=16 || 14 >=14.17'} 281 | hasBin: true 282 | dependencies: 283 | foreground-child: 3.1.1 284 | jackspeak: 2.3.6 285 | minimatch: 9.0.3 286 | minipass: 7.0.4 287 | path-scurry: 1.10.1 288 | dev: true 289 | 290 | /hasown@2.0.0: 291 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 292 | engines: {node: '>= 0.4'} 293 | dependencies: 294 | function-bind: 1.1.2 295 | dev: true 296 | 297 | /is-binary-path@2.1.0: 298 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 299 | engines: {node: '>=8'} 300 | dependencies: 301 | binary-extensions: 2.2.0 302 | dev: true 303 | 304 | /is-core-module@2.13.1: 305 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 306 | dependencies: 307 | hasown: 2.0.0 308 | dev: true 309 | 310 | /is-extglob@2.1.1: 311 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 312 | engines: {node: '>=0.10.0'} 313 | dev: true 314 | 315 | /is-fullwidth-code-point@3.0.0: 316 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 317 | engines: {node: '>=8'} 318 | dev: true 319 | 320 | /is-glob@4.0.3: 321 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 322 | engines: {node: '>=0.10.0'} 323 | dependencies: 324 | is-extglob: 2.1.1 325 | dev: true 326 | 327 | /is-number@7.0.0: 328 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 329 | engines: {node: '>=0.12.0'} 330 | dev: true 331 | 332 | /isexe@2.0.0: 333 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 334 | dev: true 335 | 336 | /jackspeak@2.3.6: 337 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 338 | engines: {node: '>=14'} 339 | dependencies: 340 | '@isaacs/cliui': 8.0.2 341 | optionalDependencies: 342 | '@pkgjs/parseargs': 0.11.0 343 | dev: true 344 | 345 | /jiti@1.21.0: 346 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 347 | hasBin: true 348 | dev: true 349 | 350 | /lilconfig@2.1.0: 351 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 352 | engines: {node: '>=10'} 353 | dev: true 354 | 355 | /lilconfig@3.0.0: 356 | resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} 357 | engines: {node: '>=14'} 358 | dev: true 359 | 360 | /lines-and-columns@1.2.4: 361 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 362 | dev: true 363 | 364 | /lru-cache@10.1.0: 365 | resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} 366 | engines: {node: 14 || >=16.14} 367 | dev: true 368 | 369 | /merge2@1.4.1: 370 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 371 | engines: {node: '>= 8'} 372 | dev: true 373 | 374 | /micromatch@4.0.5: 375 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 376 | engines: {node: '>=8.6'} 377 | dependencies: 378 | braces: 3.0.2 379 | picomatch: 2.3.1 380 | dev: true 381 | 382 | /minimatch@9.0.3: 383 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 384 | engines: {node: '>=16 || 14 >=14.17'} 385 | dependencies: 386 | brace-expansion: 2.0.1 387 | dev: true 388 | 389 | /minipass@7.0.4: 390 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 391 | engines: {node: '>=16 || 14 >=14.17'} 392 | dev: true 393 | 394 | /mz@2.7.0: 395 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 396 | dependencies: 397 | any-promise: 1.3.0 398 | object-assign: 4.1.1 399 | thenify-all: 1.6.0 400 | dev: true 401 | 402 | /nanoid@3.3.7: 403 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 404 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 405 | hasBin: true 406 | dev: true 407 | 408 | /normalize-path@3.0.0: 409 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 410 | engines: {node: '>=0.10.0'} 411 | dev: true 412 | 413 | /object-assign@4.1.1: 414 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 415 | engines: {node: '>=0.10.0'} 416 | dev: true 417 | 418 | /object-hash@3.0.0: 419 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 420 | engines: {node: '>= 6'} 421 | dev: true 422 | 423 | /path-key@3.1.1: 424 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 425 | engines: {node: '>=8'} 426 | dev: true 427 | 428 | /path-parse@1.0.7: 429 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 430 | dev: true 431 | 432 | /path-scurry@1.10.1: 433 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} 434 | engines: {node: '>=16 || 14 >=14.17'} 435 | dependencies: 436 | lru-cache: 10.1.0 437 | minipass: 7.0.4 438 | dev: true 439 | 440 | /picocolors@1.0.0: 441 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 442 | dev: true 443 | 444 | /picomatch@2.3.1: 445 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 446 | engines: {node: '>=8.6'} 447 | dev: true 448 | 449 | /pify@2.3.0: 450 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 451 | engines: {node: '>=0.10.0'} 452 | dev: true 453 | 454 | /pirates@4.0.6: 455 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 456 | engines: {node: '>= 6'} 457 | dev: true 458 | 459 | /postcss-import@15.1.0(postcss@8.4.32): 460 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 461 | engines: {node: '>=14.0.0'} 462 | peerDependencies: 463 | postcss: ^8.0.0 464 | dependencies: 465 | postcss: 8.4.32 466 | postcss-value-parser: 4.2.0 467 | read-cache: 1.0.0 468 | resolve: 1.22.8 469 | dev: true 470 | 471 | /postcss-js@4.0.1(postcss@8.4.32): 472 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 473 | engines: {node: ^12 || ^14 || >= 16} 474 | peerDependencies: 475 | postcss: ^8.4.21 476 | dependencies: 477 | camelcase-css: 2.0.1 478 | postcss: 8.4.32 479 | dev: true 480 | 481 | /postcss-load-config@4.0.2(postcss@8.4.32): 482 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 483 | engines: {node: '>= 14'} 484 | peerDependencies: 485 | postcss: '>=8.0.9' 486 | ts-node: '>=9.0.0' 487 | peerDependenciesMeta: 488 | postcss: 489 | optional: true 490 | ts-node: 491 | optional: true 492 | dependencies: 493 | lilconfig: 3.0.0 494 | postcss: 8.4.32 495 | yaml: 2.3.4 496 | dev: true 497 | 498 | /postcss-nested@6.0.1(postcss@8.4.32): 499 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 500 | engines: {node: '>=12.0'} 501 | peerDependencies: 502 | postcss: ^8.2.14 503 | dependencies: 504 | postcss: 8.4.32 505 | postcss-selector-parser: 6.0.15 506 | dev: true 507 | 508 | /postcss-selector-parser@6.0.15: 509 | resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} 510 | engines: {node: '>=4'} 511 | dependencies: 512 | cssesc: 3.0.0 513 | util-deprecate: 1.0.2 514 | dev: true 515 | 516 | /postcss-value-parser@4.2.0: 517 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 518 | dev: true 519 | 520 | /postcss@8.4.32: 521 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 522 | engines: {node: ^10 || ^12 || >=14} 523 | dependencies: 524 | nanoid: 3.3.7 525 | picocolors: 1.0.0 526 | source-map-js: 1.0.2 527 | dev: true 528 | 529 | /queue-microtask@1.2.3: 530 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 531 | dev: true 532 | 533 | /read-cache@1.0.0: 534 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 535 | dependencies: 536 | pify: 2.3.0 537 | dev: true 538 | 539 | /readdirp@3.6.0: 540 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 541 | engines: {node: '>=8.10.0'} 542 | dependencies: 543 | picomatch: 2.3.1 544 | dev: true 545 | 546 | /resolve@1.22.8: 547 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 548 | hasBin: true 549 | dependencies: 550 | is-core-module: 2.13.1 551 | path-parse: 1.0.7 552 | supports-preserve-symlinks-flag: 1.0.0 553 | dev: true 554 | 555 | /reusify@1.0.4: 556 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 557 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 558 | dev: true 559 | 560 | /run-parallel@1.2.0: 561 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 562 | dependencies: 563 | queue-microtask: 1.2.3 564 | dev: true 565 | 566 | /shebang-command@2.0.0: 567 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 568 | engines: {node: '>=8'} 569 | dependencies: 570 | shebang-regex: 3.0.0 571 | dev: true 572 | 573 | /shebang-regex@3.0.0: 574 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 575 | engines: {node: '>=8'} 576 | dev: true 577 | 578 | /signal-exit@4.1.0: 579 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 580 | engines: {node: '>=14'} 581 | dev: true 582 | 583 | /source-map-js@1.0.2: 584 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 585 | engines: {node: '>=0.10.0'} 586 | dev: true 587 | 588 | /string-width@4.2.3: 589 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 590 | engines: {node: '>=8'} 591 | dependencies: 592 | emoji-regex: 8.0.0 593 | is-fullwidth-code-point: 3.0.0 594 | strip-ansi: 6.0.1 595 | dev: true 596 | 597 | /string-width@5.1.2: 598 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 599 | engines: {node: '>=12'} 600 | dependencies: 601 | eastasianwidth: 0.2.0 602 | emoji-regex: 9.2.2 603 | strip-ansi: 7.1.0 604 | dev: true 605 | 606 | /strip-ansi@6.0.1: 607 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 608 | engines: {node: '>=8'} 609 | dependencies: 610 | ansi-regex: 5.0.1 611 | dev: true 612 | 613 | /strip-ansi@7.1.0: 614 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 615 | engines: {node: '>=12'} 616 | dependencies: 617 | ansi-regex: 6.0.1 618 | dev: true 619 | 620 | /sucrase@3.35.0: 621 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 622 | engines: {node: '>=16 || 14 >=14.17'} 623 | hasBin: true 624 | dependencies: 625 | '@jridgewell/gen-mapping': 0.3.3 626 | commander: 4.1.1 627 | glob: 10.3.10 628 | lines-and-columns: 1.2.4 629 | mz: 2.7.0 630 | pirates: 4.0.6 631 | ts-interface-checker: 0.1.13 632 | dev: true 633 | 634 | /supports-preserve-symlinks-flag@1.0.0: 635 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 636 | engines: {node: '>= 0.4'} 637 | dev: true 638 | 639 | /tailwindcss@3.4.0: 640 | resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==} 641 | engines: {node: '>=14.0.0'} 642 | hasBin: true 643 | dependencies: 644 | '@alloc/quick-lru': 5.2.0 645 | arg: 5.0.2 646 | chokidar: 3.5.3 647 | didyoumean: 1.2.2 648 | dlv: 1.1.3 649 | fast-glob: 3.3.2 650 | glob-parent: 6.0.2 651 | is-glob: 4.0.3 652 | jiti: 1.21.0 653 | lilconfig: 2.1.0 654 | micromatch: 4.0.5 655 | normalize-path: 3.0.0 656 | object-hash: 3.0.0 657 | picocolors: 1.0.0 658 | postcss: 8.4.32 659 | postcss-import: 15.1.0(postcss@8.4.32) 660 | postcss-js: 4.0.1(postcss@8.4.32) 661 | postcss-load-config: 4.0.2(postcss@8.4.32) 662 | postcss-nested: 6.0.1(postcss@8.4.32) 663 | postcss-selector-parser: 6.0.15 664 | resolve: 1.22.8 665 | sucrase: 3.35.0 666 | transitivePeerDependencies: 667 | - ts-node 668 | dev: true 669 | 670 | /thenify-all@1.6.0: 671 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 672 | engines: {node: '>=0.8'} 673 | dependencies: 674 | thenify: 3.3.1 675 | dev: true 676 | 677 | /thenify@3.3.1: 678 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 679 | dependencies: 680 | any-promise: 1.3.0 681 | dev: true 682 | 683 | /to-regex-range@5.0.1: 684 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 685 | engines: {node: '>=8.0'} 686 | dependencies: 687 | is-number: 7.0.0 688 | dev: true 689 | 690 | /ts-interface-checker@0.1.13: 691 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 692 | dev: true 693 | 694 | /util-deprecate@1.0.2: 695 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 696 | dev: true 697 | 698 | /which@2.0.2: 699 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 700 | engines: {node: '>= 8'} 701 | hasBin: true 702 | dependencies: 703 | isexe: 2.0.0 704 | dev: true 705 | 706 | /wrap-ansi@7.0.0: 707 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 708 | engines: {node: '>=10'} 709 | dependencies: 710 | ansi-styles: 4.3.0 711 | string-width: 4.2.3 712 | strip-ansi: 6.0.1 713 | dev: true 714 | 715 | /wrap-ansi@8.1.0: 716 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 717 | engines: {node: '>=12'} 718 | dependencies: 719 | ansi-styles: 6.2.1 720 | string-width: 5.1.2 721 | strip-ansi: 7.1.0 722 | dev: true 723 | 724 | /yaml@2.3.4: 725 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 726 | engines: {node: '>= 14'} 727 | dev: true 728 | --------------------------------------------------------------------------------