diff --git a/packages/cli/package.json b/packages/cli/package.json index 545021b8..13146095 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -8,6 +8,8 @@ }, "keywords": [ "design tokens", + "dtfm", + "dtcg", "cli", "w3c design tokens", "design system", diff --git a/packages/plugin-css/.npmignore b/packages/plugin-css/.npmignore index 15231cfe..1a74c3d9 100644 --- a/packages/plugin-css/.npmignore +++ b/packages/plugin-css/.npmignore @@ -1 +1,2 @@ +test tsconfig.json diff --git a/packages/plugin-css/README.md b/packages/plugin-css/README.md index 930f57b5..d25e113f 100644 --- a/packages/plugin-css/README.md +++ b/packages/plugin-css/README.md @@ -9,10 +9,14 @@ Generate CSS from your design tokens using [Cobalt](https://cobalt-ui.pages.dev) ## Setup +Install the plugin from npm: + ```bash npm i -D @cobalt-ui/plugin-css ``` +Then add to your `tokens.config.mjs` file: + ```js // tokens.config.mjs import pluginCSS from '@cobalt-ui/plugin-css'; diff --git a/packages/plugin-css/package.json b/packages/plugin-css/package.json index 9224adc4..0d84d7f9 100644 --- a/packages/plugin-css/package.json +++ b/packages/plugin-css/package.json @@ -8,7 +8,11 @@ }, "keywords": [ "cobalt", - "design tokens" + "design tokens", + "design system", + "dtfm", + "w3c", + "css" ], "repository": { "type": "git", diff --git a/packages/plugin-js/.npmignore b/packages/plugin-js/.npmignore index 15231cfe..1a74c3d9 100644 --- a/packages/plugin-js/.npmignore +++ b/packages/plugin-js/.npmignore @@ -1 +1,2 @@ +test tsconfig.json diff --git a/packages/plugin-js/README.md b/packages/plugin-js/README.md index 76ab5b7e..9517d9d5 100644 --- a/packages/plugin-js/README.md +++ b/packages/plugin-js/README.md @@ -4,16 +4,21 @@ Generate JSON and JS (with TypeScript types) from your design tokens using [Coba **Features** +- ✅ Universal JSON format makes it easy to consume tokens in any platform (including native/compiled code) - ✅ Access all your design tokens safely and programatically in any frontend or backend setup - ✅ Full support for token modes (e.g. light/dark mode) - ✅ Automatic TypeScript types for strong typechecking (never have a broken style) ## Setup +Install the plugin from npm: + ```bash npm i -D @cobalt-ui/plugin-js ``` +Then add to your `tokens.config.mjs` file: + ```js // tokens.config.mjs import pluginJS from '@cobalt-ui/plugin-js'; diff --git a/packages/plugin-js/package.json b/packages/plugin-js/package.json index 50e065c7..9265eb6a 100644 --- a/packages/plugin-js/package.json +++ b/packages/plugin-js/package.json @@ -8,7 +8,11 @@ }, "keywords": [ "cobalt", - "design tokens" + "design tokens", + "design system", + "dtfm", + "dtcg", + "w3c" ], "repository": { "type": "git", diff --git a/packages/plugin-sass/.npmignore b/packages/plugin-sass/.npmignore index 15231cfe..1a74c3d9 100644 --- a/packages/plugin-sass/.npmignore +++ b/packages/plugin-sass/.npmignore @@ -1 +1,2 @@ +test tsconfig.json diff --git a/packages/plugin-sass/README.md b/packages/plugin-sass/README.md index d07ea182..b6d37886 100644 --- a/packages/plugin-sass/README.md +++ b/packages/plugin-sass/README.md @@ -9,10 +9,14 @@ Generate `.scss` and `.sass` output from your design tokens using [Cobalt](https ## Setup +Install the plugin (and its dependency) from npm: + ```bash npm i -D @cobalt-ui/plugin-sass @cobalt-ui/plugin-css ``` +Then add to your `tokens.config.mjs` file: + ```js // tokens.config.mjs import pluginSass from '@cobalt-ui/plugin-sass'; diff --git a/packages/plugin-sass/package.json b/packages/plugin-sass/package.json index 156882ba..c75259ef 100644 --- a/packages/plugin-sass/package.json +++ b/packages/plugin-sass/package.json @@ -8,7 +8,13 @@ }, "keywords": [ "cobalt", - "design tokens" + "design tokens", + "design system", + "dtfm", + "dtcg", + "w3c", + "css", + "sass" ], "repository": { "type": "git", diff --git a/packages/plugin-tailwind/.npmignore b/packages/plugin-tailwind/.npmignore new file mode 100644 index 00000000..1a74c3d9 --- /dev/null +++ b/packages/plugin-tailwind/.npmignore @@ -0,0 +1,2 @@ +test +tsconfig.json diff --git a/packages/plugin-tailwind/README.md b/packages/plugin-tailwind/README.md new file mode 100644 index 00000000..e6190d86 --- /dev/null +++ b/packages/plugin-tailwind/README.md @@ -0,0 +1,77 @@ +# @cobalt-ui/plugin-tailwind + +Generate a [Tailwind CSS](https://tailwindcss.com/) preset from your design tokens. + +## Setup + +Install the plugin from npm: + +```bash +npm i -D @cobalt-ui/plugin-tailwind +``` + +Then add to your `tokens.config.mjs` file, configuring [theme](https://tailwindcss.com/docs/configuration#theme) as you would normally, except replacing the values with token IDs: + +```js +// tokens.config.mjs +import pluginTailwind from '@cobalt-ui/plugin-tailwind'; + +/** @type import('@cobalt-ui/core').Config */ +export default { + tokens: './tokens.json', + outDir: './tokens/', + plugins: [ + pluginTailwind({ + /** (optional) the path to the Tailwind preset */ + output?: './tailwind-tokens.js', + /** (optional) module format to use (to match your Tailwind config) */ + outputFormat?: 'esm' | 'cjs', + tailwind: { + theme: { + /** @see https://tailwindcss.com/docs/configuration#theme */ + colors: { + blue: { + 100: 'color.blue.100', + 200: 'color.blue.200', + // … + }, + }, + fontFamily: { + sans: 'typography.family.base', + // … + }, + extend: { + spacing: { + m: 'token.size.m.space', + // … + }, + borderRadius: { + m: 'token.size.m.borderRadius', + // … + }, + }, + }, + }, + }), + ], +}; +``` + +Then, when you run `co build` in your project, it will generate a `./tokens/tailwind-tokens.js` file. Now add it to your Tailwind config under `presets` ([docs](https://tailwindcss.com/docs/configuration#presets)): + +```diff ++ import tailwindTokens from './tokens/tailwind-tokens.js'; + + /** @type {import('tailwindcss').Config} */ + export default { ++ presets: [ ++ tailwindTokens, ++ ], + }; +``` + +_Note: if using CommonJS, use the `outputFormat: 'cjs'` plugin option._ + +And you’re up and running! You’ll now have all your design tokens available in Tailwind. + +_✨ **Tip**: be sure to rerun `co build` to rebuild your Tailwind preset, or run `co build --watch` to rebuild your tokens every time they change!_ diff --git a/packages/plugin-tailwind/package.json b/packages/plugin-tailwind/package.json new file mode 100644 index 00000000..4514d33e --- /dev/null +++ b/packages/plugin-tailwind/package.json @@ -0,0 +1,48 @@ +{ + "name": "@cobalt-ui/plugin-tailwind", + "version": "0.0.0", + "author": { + "name": "Drew Powers", + "email": "drew@pow.rs" + }, + "keywords": [ + "cobalt", + "design tokens", + "design system", + "dtfm", + "dtcg", + "w3c", + "tailwind", + "css" + ], + "repository": { + "type": "git", + "url": "https://github.com/drwpow/cobalt-ui.git", + "directory": "packages/plugin-tailwind" + }, + "license": "MIT", + "type": "module", + "main": "./dist/index.js", + "scripts": { + "build": "run-s -s build:*", + "build:clean": "del dist", + "build:ts": "tsc", + "build:license": "node ../../scripts/inject-license.js @cobalt-ui/plugin-tailwind dist/index.js", + "dev": "tsc -w", + "test": "run-p -s test:*", + "test:js": "vitest run", + "test:ts": "tsc --noEmit" + }, + "peerDependencies": { + "@cobalt-ui/cli": "*", + "tailwindcss": "*" + }, + "devDependencies": { + "@cobalt-ui/cli": "^1.6.0", + "@cobalt-ui/core": "^1.6.0", + "@types/node": "^20.5.7", + "npm-run-all": "^4.1.5", + "tailwindcss": "^3.3.3", + "vitest": "^0.34.3" + } +} diff --git a/packages/plugin-tailwind/src/index.ts b/packages/plugin-tailwind/src/index.ts new file mode 100644 index 00000000..a150fc82 --- /dev/null +++ b/packages/plugin-tailwind/src/index.ts @@ -0,0 +1,22 @@ +import type {Plugin} from '@cobalt-ui/core'; +import type {} from 'tailwindcss'; +import {ThemeConfig} from 'tailwindcss/types/config'; + +export interface Options { + /** The output path for the Tailwind preset (default: `./tailwind-tokens.js`) */ + output?: string; + /** (optional) module format to use (to match your Tailwind config) */ + outputFormat?: 'esm' | 'cjs'; + tailwind: { + theme: ThemeConfig; + }; +} + +export default function pluginSass(options?: Options): Plugin { + return { + name: '@cobalt-ui/plugin-tailwind', + build(tokens) { + return [{filename: options?.output ?? './tailwind-tokens.js', src: ''}]; + }, + }; +} diff --git a/packages/plugin-tailwind/test/index.test.ts b/packages/plugin-tailwind/test/index.test.ts new file mode 100644 index 00000000..993b4b44 --- /dev/null +++ b/packages/plugin-tailwind/test/index.test.ts @@ -0,0 +1 @@ +describe('@cobalt-ui/plugin-tailwind', () => {}); diff --git a/packages/plugin-tailwind/tsconfig.json b/packages/plugin-tailwind/tsconfig.json new file mode 100644 index 00000000..2eecc7f4 --- /dev/null +++ b/packages/plugin-tailwind/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/" + }, + "include": ["src"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 751417af..d9b55675 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -363,6 +363,27 @@ importers: specifier: ^0.34.3 version: 0.34.3 + packages/plugin-tailwind: + devDependencies: + '@cobalt-ui/cli': + specifier: ^1.6.0 + version: link:../cli + '@cobalt-ui/core': + specifier: ^1.6.0 + version: link:../core + '@types/node': + specifier: ^20.5.7 + version: 20.5.7 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + vitest: + specifier: ^0.34.3 + version: 0.34.4 + packages/utils: devDependencies: '@types/node': @@ -382,6 +403,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -2160,6 +2186,10 @@ packages: engines: {node: '>=12'} dev: true + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -2167,6 +2197,10 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -2456,6 +2490,11 @@ packages: engines: {node: '>=6'} dev: true + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -2690,6 +2729,11 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: true + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -2771,6 +2815,12 @@ packages: engines: {node: '>= 6'} dev: false + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -2980,6 +3030,10 @@ packages: dequal: 2.0.3 dev: true + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3728,6 +3782,17 @@ packages: is-glob: 4.0.3 dev: true + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -4374,6 +4439,11 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -4463,6 +4533,11 @@ packages: type-check: 0.4.0 dev: true + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -5172,6 +5247,14 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5334,6 +5417,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true @@ -5591,6 +5679,11 @@ packages: hasBin: true dev: true + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + /pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} @@ -5601,6 +5694,11 @@ packages: engines: {node: '>=6'} dev: true + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + /piscina@3.2.0: resolution: {integrity: sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==} dependencies: @@ -5626,6 +5724,67 @@ packages: pathe: 1.1.1 dev: true + /postcss-import@15.1.0(postcss@8.4.31): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.31 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 2.3.3 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.31): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + /postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -5789,6 +5948,12 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -6506,6 +6671,20 @@ packages: acorn: 8.10.0 dev: true + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -6546,6 +6725,37 @@ packages: tslib: 2.6.2 dev: true + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.20.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) + postcss-selector-parser: 6.0.13 + resolve: 1.22.8 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: true + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} requiresBuild: true @@ -6599,6 +6809,19 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + /tinybench@2.5.0: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} dev: true @@ -6667,6 +6890,10 @@ packages: typescript: 5.2.2 dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + /tsconfck@3.0.0-next.9(typescript@5.2.2): resolution: {integrity: sha512-bgVlu3qcRUZpm9Au1IHiPDkb8XU+72bRkXrBaJsiAjIlixtkbKLe4q1odrrqG0rVHvh0Q4R3adT/nh1FwzftXA==} engines: {node: ^18 || >=20} @@ -7504,6 +7731,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@2.3.3: + resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} + engines: {node: '>= 14'} + dev: true + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'}