diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index e67a49a..b0ec3e0 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -91,6 +91,45 @@ jobs:
       - name: Build ⚙️
         run: pnpm build
         working-directory: packages/node-cli
+  style-tailwind:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          persist-credentials: false
+      - uses: actions/setup-node@v4
+        with:
+          node-version: 20
+      - uses: pnpm/action-setup@v3
+        name: Install pnpm
+        with:
+          version: latest
+          run_install: false
+      - name: Get pnpm store directory
+        shell: bash
+        run: |
+          echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+      - uses: actions/cache@v4
+        name: Setup pnpm cache
+        with:
+          path: ${{ env.STORE_PATH }}
+          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+          restore-keys: |
+            ${{ runner.os }}-pnpm-store-
+      - name: Install 🔧
+        run: pnpm install
+      - name: Format 🔍
+        run: |
+          pnpm format
+          pnpm lint
+        working-directory: packages/style-tailwind
+      - name: Test ✅
+        run: pnpm test
+        working-directory: packages/style-tailwind
+      - name: Build ⚙️
+        run: pnpm build
+        working-directory: packages/style-tailwind
   global:
     runs-on: ubuntu-latest
     steps:
diff --git a/README.md b/README.md
index 7778027..7dd8904 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,9 @@ The project is composed of multiple packages:
 - [documentation-portal](./packages/documentation-portal/README.md): the website that will host the design systems [STARTED]
 - a figma integration to extract the component from figma [DONE]
 - a figma plugin that will help check the code from Figma (see development status, etc) [NOT STARTED]
-- a cli [dshub](./packages//node-cli/README.md) to extract the components from the code [STARTED]
+- a cli [dshub](./packages/node-cli/README.md) to extract the components from the code [STARTED]
+- a [tailwind plugin](./packages/style-tailwind/README.md) to set the theme from design tokens [STARTED]
+- a cli to extract the components from the code [STARTED]
 - a VS Code plugin to help the developer to use the design system [NOT STARTED]
 - a eslint plugin to check the code against the design system [NOT STARTED]
 
diff --git a/packages/style-tailwind/.gitignore b/packages/style-tailwind/.gitignore
new file mode 100644
index 0000000..53c37a1
--- /dev/null
+++ b/packages/style-tailwind/.gitignore
@@ -0,0 +1 @@
+dist
\ No newline at end of file
diff --git a/packages/style-tailwind/.npmignore b/packages/style-tailwind/.npmignore
new file mode 100644
index 0000000..7d7ccab
--- /dev/null
+++ b/packages/style-tailwind/.npmignore
@@ -0,0 +1,6 @@
+src
+.prettierignore
+.prettierrc
+eslint.config.mjs
+jest.config.ts 
+tsconfig.json
\ No newline at end of file
diff --git a/packages/style-tailwind/.prettierignore b/packages/style-tailwind/.prettierignore
new file mode 100644
index 0000000..89064b6
--- /dev/null
+++ b/packages/style-tailwind/.prettierignore
@@ -0,0 +1,10 @@
+build
+old
+CHANGELOG.md
+public/icons/*.json
+.cache
+coverage
+playwright-report
+pnpm-lock.yaml
+dist
+templates
\ No newline at end of file
diff --git a/packages/style-tailwind/.prettierrc b/packages/style-tailwind/.prettierrc
new file mode 100644
index 0000000..ed58ece
--- /dev/null
+++ b/packages/style-tailwind/.prettierrc
@@ -0,0 +1,7 @@
+{
+  "trailingComma": "all",
+  "tabWidth": 2,
+  "semi": false,
+  "singleQuote": true,
+  "arrowParens": "avoid"
+}
diff --git a/packages/style-tailwind/README.md b/packages/style-tailwind/README.md
new file mode 100644
index 0000000..2e4fc76
--- /dev/null
+++ b/packages/style-tailwind/README.md
@@ -0,0 +1,32 @@
+# @design-system-hub/tailwind
+
+## Installation
+
+```bash
+npm install @design-system-hub/tailwind
+# or
+yarn add @design-system-hub/tailwind
+# or
+pnpm add @design-system-hub/tailwind
+```
+
+## Usage
+
+This package is designed to work with the [dshub](../node-cli/README.md) CLI tool.
+
+Once you have run `dshub pull` and have the file `src/tailwind.css` in your project, you can set up tailwind to use CSS variables automatically.
+
+```ts
+// tailwind.config.js
+
+import { generateTailwindConfig } from '@design-system-hub/tailwind'
+
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+  content: ['./src/**/*.{html,js,ts,jsx,tsx}'],
+  theme: {
+    extends: generateTailwindConfig(),
+  },
+  plugins: [],
+}
+```
diff --git a/packages/style-tailwind/eslint.config.mjs b/packages/style-tailwind/eslint.config.mjs
new file mode 100644
index 0000000..84bd57d
--- /dev/null
+++ b/packages/style-tailwind/eslint.config.mjs
@@ -0,0 +1,34 @@
+import typescriptParser from '@typescript-eslint/parser'
+import js from '@eslint/js'
+import jest from 'eslint-plugin-jest'
+import tseslint from 'typescript-eslint'
+import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
+
+// Following this article: https://www.raulmelo.me/en/blog/migration-eslint-to-flat-config
+
+export default tseslint.config(
+  {
+    ignores: ['dist/**', 'node_modules/**'],
+  },
+  js.configs.recommended,
+  {
+    files: ['**/*.js', '**/*.ts', '**/*.tsx'],
+    languageOptions: {
+      ecmaVersion: 'latest',
+      sourceType: 'module',
+      parser: typescriptParser,
+      globals: {
+        document: 'readonly',
+      },
+    },
+    rules: {
+      'no-console': ['error', { allow: ['warn', 'error'] }],
+    },
+  },
+  {
+    files: ['**/*.{test,spec}.tsx?'],
+    ...jest.configs['flat/recommended'],
+  },
+  ...tseslint.configs.recommended,
+  eslintPluginPrettierRecommended,
+)
diff --git a/packages/style-tailwind/jest.config.ts b/packages/style-tailwind/jest.config.ts
new file mode 100644
index 0000000..ae07aa3
--- /dev/null
+++ b/packages/style-tailwind/jest.config.ts
@@ -0,0 +1,12 @@
+import type { Config } from 'jest'
+
+const config: Config = {
+  testMatch: ['<rootDir>/src/**/*.test.{tsx,ts}'],
+  preset: 'ts-jest',
+  moduleNameMapper: {
+    '~/(.*)$': '<rootDir>/$1',
+  },
+  verbose: true,
+}
+
+export default config
diff --git a/packages/style-tailwind/package.json b/packages/style-tailwind/package.json
new file mode 100644
index 0000000..a6e8889
--- /dev/null
+++ b/packages/style-tailwind/package.json
@@ -0,0 +1,48 @@
+{
+  "name": "@design-systems-hub/tailwind",
+  "description": "A library to override tailwind theme using design tokens",
+  "keywords": [
+    "tailwind",
+    "design system",
+    "design system hub"
+  ],
+  "main": "dist/lib.js",
+  "version": "0.1.0",
+  "scripts": {
+    "lib": "tsx ./src/lib.ts",
+    "build": "ncc build ./src/lib.ts -o dist",
+    "test": "jest",
+    "lint": "eslint .",
+    "format": "prettier --check ."
+  },
+  "dependencies": {
+    "tailwindcss": "^3.4.1",
+    "typescript": "^5.4.5"
+  },
+  "devDependencies": {
+    "@eslint/js": "^8.57.0",
+    "@semantic-release/changelog": "^6.0.3",
+    "@semantic-release/commit-analyzer": "^11.1.0",
+    "@semantic-release/git": "^10.0.1",
+    "@semantic-release/github": "^9.2.6",
+    "@semantic-release/npm": "^11.0.3",
+    "@semantic-release/release-notes-generator": "^12.1.0",
+    "@tsconfig/node20": "^20.1.2",
+    "@tsconfig/strictest": "^2.0.3",
+    "@types/configstore": "^6.0.2",
+    "@types/jest": "^29.5.12",
+    "@types/node": "^20.12.12",
+    "@typescript-eslint/parser": "^7.1.1",
+    "@vercel/ncc": "^0.38.1",
+    "eslint-config-prettier": "^9.1.0",
+    "eslint-plugin-jest": "^27.9.0",
+    "eslint-plugin-prettier": "^5.1.3",
+    "jest": "^29.7.0",
+    "prettier": "^3.2.5",
+    "semantic-release": "^23.0.2",
+    "ts-jest": "^29.1.2",
+    "ts-node": "^10.9.2",
+    "tsx": "^4.7.1",
+    "typescript-eslint": "^7.1.1"
+  }
+}
diff --git a/packages/style-tailwind/src/actions/__fixtures__/empty/.gitignore b/packages/style-tailwind/src/actions/__fixtures__/empty/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/packages/style-tailwind/src/actions/__fixtures__/with-tokens/colors.json b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/colors.json
new file mode 100644
index 0000000..1c697f8
--- /dev/null
+++ b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/colors.json
@@ -0,0 +1,25 @@
+{
+  "$type": "color",
+  "slate": {
+    "500": {
+      "$value": "rgba(55, 65, 81, 1)"
+    },
+    "900": {
+      "$value": "rgba(29, 0, 7, 1)"
+    }
+  },
+  "white": {
+    "$value": "rgba(255, 255, 255, 1)"
+  },
+  "primary": {
+    "500": {
+      "$value": "rgba(231, 30, 77, 1)"
+    },
+    "600": {
+      "$value": "rgba(226, 26, 95, 1)"
+    },
+    "700": {
+      "$value": "rgba(215, 4, 102, 1)"
+    }
+  }
+}
diff --git a/packages/style-tailwind/src/actions/__fixtures__/with-tokens/dimensions.json b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/dimensions.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/dimensions.json
@@ -0,0 +1 @@
+{}
diff --git a/packages/style-tailwind/src/actions/__fixtures__/with-tokens/object-values.json b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/object-values.json
new file mode 100644
index 0000000..a070196
--- /dev/null
+++ b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/object-values.json
@@ -0,0 +1,21 @@
+{
+  "shadows": {
+    "$type": "shadow",
+    "raised": {
+      "$value": {
+        "color": "rgba(0, 0, 0, 0.25)",
+        "offsetX": 0,
+        "offsetY": 4,
+        "blur": 4
+      }
+    },
+    "overlay": {
+      "$value": {
+        "color": "rgba(0, 0, 0, 0.25)",
+        "offsetX": 0,
+        "offsetY": 15,
+        "blur": 11
+      }
+    }
+  }
+}
diff --git a/packages/style-tailwind/src/actions/__fixtures__/with-tokens/text.json b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/text.json
new file mode 100644
index 0000000..7197a98
--- /dev/null
+++ b/packages/style-tailwind/src/actions/__fixtures__/with-tokens/text.json
@@ -0,0 +1,21 @@
+{
+  "typography": {
+    "$type": "typography",
+    "h2": {
+      "$value": {
+        "fontFamily": "Geist",
+        "fontSize": 30,
+        "fontWeight": 600,
+        "lineHeight": 1
+      }
+    },
+    "h1": {
+      "$value": {
+        "fontFamily": "Geist",
+        "fontSize": 39,
+        "fontWeight": 700,
+        "lineHeight": 1
+      }
+    }
+  }
+}
diff --git a/packages/style-tailwind/src/actions/__tests__/find-design-tokens.test.ts b/packages/style-tailwind/src/actions/__tests__/find-design-tokens.test.ts
new file mode 100644
index 0000000..f0cfd7f
--- /dev/null
+++ b/packages/style-tailwind/src/actions/__tests__/find-design-tokens.test.ts
@@ -0,0 +1,46 @@
+import path from 'node:path'
+import { findDesignTokens } from '../find-design-tokens'
+
+describe('findDesignTokens', () => {
+  it('should return empty object', async () => {
+    const tokenPath = path.join(__dirname, '../__fixtures__/empty')
+
+    const result = await findDesignTokens(tokenPath)
+
+    expect(result).toEqual({})
+  })
+
+  it('should return tokens', async () => {
+    const tokenPath = path.join(__dirname, '../__fixtures__/with-tokens')
+
+    const result = await findDesignTokens(tokenPath)
+
+    expect(result).toEqual({
+      colors: {
+        $type: 'color',
+        primary: {
+          '500': {
+            $value: 'rgba(231, 30, 77, 1)',
+          },
+          '600': {
+            $value: 'rgba(226, 26, 95, 1)',
+          },
+          '700': {
+            $value: 'rgba(215, 4, 102, 1)',
+          },
+        },
+        slate: {
+          '500': {
+            $value: 'rgba(55, 65, 81, 1)',
+          },
+          '900': {
+            $value: 'rgba(29, 0, 7, 1)',
+          },
+        },
+        white: {
+          $value: 'rgba(255, 255, 255, 1)',
+        },
+      },
+    })
+  })
+})
diff --git a/packages/style-tailwind/src/actions/__tests__/generate-tailwind-theme.test.ts b/packages/style-tailwind/src/actions/__tests__/generate-tailwind-theme.test.ts
new file mode 100644
index 0000000..cf0897a
--- /dev/null
+++ b/packages/style-tailwind/src/actions/__tests__/generate-tailwind-theme.test.ts
@@ -0,0 +1,44 @@
+import { generateTailwindTheme } from '../generate-tailwind-theme'
+
+describe('generateTailwindTheme', () => {
+  it('should return empty config', () => {
+    const tokens = {}
+
+    const result = generateTailwindTheme(tokens)
+
+    expect(result).toEqual({
+      colors: {},
+    })
+  })
+
+  it('should return config with primary', () => {
+    const tokens = {
+      colors: {
+        $type: 'color',
+        slate: {
+          '500': {
+            $value: 'rgba(55, 65, 81, 1)',
+          },
+          '900': {
+            $value: 'rgba(29, 0, 7, 1)',
+          },
+        },
+        white: {
+          $value: 'rgba(255, 255, 255, 1)',
+        },
+      },
+    }
+
+    const result = generateTailwindTheme(tokens)
+
+    expect(result).toEqual({
+      colors: {
+        slate: {
+          500: 'var(--slate-500)',
+          900: 'var(--slate-900)',
+        },
+        white: 'var(--white)',
+      },
+    })
+  })
+})
diff --git a/packages/style-tailwind/src/actions/find-design-tokens.ts b/packages/style-tailwind/src/actions/find-design-tokens.ts
new file mode 100644
index 0000000..1744889
--- /dev/null
+++ b/packages/style-tailwind/src/actions/find-design-tokens.ts
@@ -0,0 +1,28 @@
+import fs from 'node:fs/promises'
+import { AllDesignTokens } from '../entities/design-token'
+import path from 'node:path'
+
+export async function findDesignTokens(
+  tokenPath: string,
+): Promise<AllDesignTokens> {
+  const files = await fs.readdir(tokenPath)
+
+  const promises = files
+    .filter(f => f.startsWith('colors'))
+    .filter(f => f.endsWith('.json'))
+    .map(async file => ({
+      name: file.replace('.json', ''),
+      content: JSON.parse(
+        await fs.readFile(path.join(tokenPath, file), 'utf-8'),
+      ),
+    }))
+
+  const contents = await Promise.all(promises)
+
+  return contents.reduce((acc, { name, content }) => {
+    return {
+      ...acc,
+      [name]: content,
+    }
+  }, {})
+}
diff --git a/packages/style-tailwind/src/actions/generate-tailwind-theme.ts b/packages/style-tailwind/src/actions/generate-tailwind-theme.ts
new file mode 100644
index 0000000..93e3e0b
--- /dev/null
+++ b/packages/style-tailwind/src/actions/generate-tailwind-theme.ts
@@ -0,0 +1,42 @@
+import type { Config } from 'tailwindcss'
+import { AllDesignTokens, DesignToken } from '../entities/design-token'
+
+function recursiveGenerateTailwindTheme(
+  tokens: DesignToken,
+  path: string = '',
+) {
+  return Object.entries(tokens)
+    .filter(([key]) => key !== '$type')
+    .reduce((acc, [key, value]) => {
+      if (typeof value === 'string') {
+        return ''
+      }
+
+      if ('$value' in value) {
+        return {
+          ...acc,
+          [key]: `var(--${path ? `${path}-` : ''}${key})`,
+        }
+      }
+
+      return {
+        ...acc,
+        [key]: recursiveGenerateTailwindTheme(
+          value,
+          `${path}${path ? '-' : ''}${key}`,
+        ),
+      }
+    }, {})
+}
+
+export function generateTailwindTheme(
+  tokens: AllDesignTokens,
+): Config['theme'] {
+  const tokensColors = tokens.colors ?? {}
+
+  const colors = recursiveGenerateTailwindTheme(tokensColors)
+
+  return {
+    colors,
+  }
+}
diff --git a/packages/style-tailwind/src/entities/design-token.ts b/packages/style-tailwind/src/entities/design-token.ts
new file mode 100644
index 0000000..88c1413
--- /dev/null
+++ b/packages/style-tailwind/src/entities/design-token.ts
@@ -0,0 +1,7 @@
+export interface DesignToken {
+  [key: string]: DesignToken | string | { $value: string }
+}
+
+export interface AllDesignTokens {
+  [key: string]: DesignToken & { $type: string }
+}
diff --git a/packages/style-tailwind/src/lib.ts b/packages/style-tailwind/src/lib.ts
new file mode 100644
index 0000000..3d3aaaa
--- /dev/null
+++ b/packages/style-tailwind/src/lib.ts
@@ -0,0 +1,9 @@
+import path from 'node:path'
+import { generateTailwindTheme } from './actions/generate-tailwind-theme'
+import { findDesignTokens } from './actions/find-design-tokens'
+
+export function generateTailwindConfig(folderName: string = '.tokens') {
+  const tokenPath = path.join(process.cwd(), folderName)
+
+  return findDesignTokens(tokenPath).then(generateTailwindTheme)
+}
diff --git a/packages/style-tailwind/tsconfig.json b/packages/style-tailwind/tsconfig.json
new file mode 100644
index 0000000..a94fd5c
--- /dev/null
+++ b/packages/style-tailwind/tsconfig.json
@@ -0,0 +1,22 @@
+{
+  "$schema": "http://json.schemastore.org/tsconfig",
+  "include": ["./src/**/*"],
+  "exclude": ["node_modules"],
+  "compilerOptions": {
+    "skipLibCheck": true,
+    "module": "ESNext",
+    "moduleResolution": "bundler",
+    "target": "ESNext",
+    "isolatedModules": true,
+    "esModuleInterop": true,
+    "noEmit": true,
+    "outDir": "dist",
+    "lib": ["esnext"],
+    "resolveJsonModule": true
+  },
+  "ts-node": {
+    "esm": true,
+    "experimentalSpecifierResolution": "node",
+    "files": true
+  }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a579cc3..ecd8e69 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -173,7 +173,7 @@ importers:
         version: 2.3.0
       tailwindcss-animate:
         specifier: ^1.0.7
-        version: 1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))
+        version: 1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))
       vaul:
         specifier: ^0.9.1
         version: 0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -183,7 +183,7 @@ importers:
     devDependencies:
       '@testing-library/jest-dom':
         specifier: ^6.1.3
-        version: 6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))
+        version: 6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))
       '@testing-library/react':
         specifier: ^14.0.0
         version: 14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -213,7 +213,7 @@ importers:
         version: 14.2.3(eslint@8.57.0)(typescript@5.4.5)
       jest:
         specifier: ^29.7.0
-        version: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+        version: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
       jest-environment-jsdom:
         specifier: ^29.7.0
         version: 29.7.0
@@ -228,10 +228,10 @@ importers:
         version: 5.14.0
       tailwindcss:
         specifier: ^3.4.1
-        version: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+        version: 3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
       ts-jest:
         specifier: ^29.1.2
-        version: 29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5)
+        version: 29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5)
 
   packages/node-cli:
     dependencies:
@@ -313,7 +313,7 @@ importers:
         version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5)
       jest:
         specifier: ^29.7.0
-        version: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+        version: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
       prettier:
         specifier: ^3.2.5
         version: 3.2.5
@@ -322,7 +322,7 @@ importers:
         version: 23.1.1(typescript@5.4.5)
       ts-jest:
         specifier: ^29.1.2
-        version: 29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5)
+        version: 29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5)
       ts-node:
         specifier: ^10.9.2
         version: 10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)
@@ -333,6 +333,88 @@ importers:
         specifier: ^7.1.1
         version: 7.11.0(eslint@8.57.0)(typescript@5.4.5)
 
+  packages/style-tailwind:
+    dependencies:
+      tailwindcss:
+        specifier: ^3.4.1
+        version: 3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
+      typescript:
+        specifier: ^5.4.5
+        version: 5.4.5
+    devDependencies:
+      '@eslint/js':
+        specifier: ^8.57.0
+        version: 8.57.0
+      '@semantic-release/changelog':
+        specifier: ^6.0.3
+        version: 6.0.3(semantic-release@23.1.1(typescript@5.4.5))
+      '@semantic-release/commit-analyzer':
+        specifier: ^11.1.0
+        version: 11.1.0(semantic-release@23.1.1(typescript@5.4.5))
+      '@semantic-release/git':
+        specifier: ^10.0.1
+        version: 10.0.1(semantic-release@23.1.1(typescript@5.4.5))
+      '@semantic-release/github':
+        specifier: ^9.2.6
+        version: 9.2.6(semantic-release@23.1.1(typescript@5.4.5))
+      '@semantic-release/npm':
+        specifier: ^11.0.3
+        version: 11.0.3(semantic-release@23.1.1(typescript@5.4.5))
+      '@semantic-release/release-notes-generator':
+        specifier: ^12.1.0
+        version: 12.1.0(semantic-release@23.1.1(typescript@5.4.5))
+      '@tsconfig/node20':
+        specifier: ^20.1.2
+        version: 20.1.4
+      '@tsconfig/strictest':
+        specifier: ^2.0.3
+        version: 2.0.5
+      '@types/configstore':
+        specifier: ^6.0.2
+        version: 6.0.2
+      '@types/jest':
+        specifier: ^29.5.12
+        version: 29.5.12
+      '@types/node':
+        specifier: ^20.12.12
+        version: 20.13.0
+      '@typescript-eslint/parser':
+        specifier: ^7.1.1
+        version: 7.11.0(eslint@8.57.0)(typescript@5.4.5)
+      '@vercel/ncc':
+        specifier: ^0.38.1
+        version: 0.38.1
+      eslint-config-prettier:
+        specifier: ^9.1.0
+        version: 9.1.0(eslint@8.57.0)
+      eslint-plugin-jest:
+        specifier: ^27.9.0
+        version: 27.9.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5)
+      eslint-plugin-prettier:
+        specifier: ^5.1.3
+        version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5)
+      jest:
+        specifier: ^29.7.0
+        version: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+      prettier:
+        specifier: ^3.2.5
+        version: 3.2.5
+      semantic-release:
+        specifier: ^23.0.2
+        version: 23.1.1(typescript@5.4.5)
+      ts-jest:
+        specifier: ^29.1.2
+        version: 29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5)
+      ts-node:
+        specifier: ^10.9.2
+        version: 10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)
+      tsx:
+        specifier: ^4.7.1
+        version: 4.11.0
+      typescript-eslint:
+        specifier: ^7.1.1
+        version: 7.11.0(eslint@8.57.0)(typescript@5.4.5)
+
 packages:
 
   '@adobe/css-tools@4.3.3':
@@ -4506,11 +4588,6 @@ packages:
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
 
-  glob@10.4.1:
-    resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
-    engines: {node: '>=16 || 14 >=14.18'}
-    hasBin: true
-
   glob@10.4.5:
     resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
     hasBin: true
@@ -8454,21 +8531,56 @@ snapshots:
       jest-util: 29.7.0
       slash: 3.0.0
 
-  '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))':
+  '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))':
     dependencies:
       '@jest/console': 29.7.0
       '@jest/reporters': 29.7.0
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       ci-info: 3.9.0
       exit: 0.1.2
       graceful-fs: 4.2.11
       jest-changed-files: 29.7.0
-      jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      jest-haste-map: 29.7.0
+      jest-message-util: 29.7.0
+      jest-regex-util: 29.6.3
+      jest-resolve: 29.7.0
+      jest-resolve-dependencies: 29.7.0
+      jest-runner: 29.7.0
+      jest-runtime: 29.7.0
+      jest-snapshot: 29.7.0
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      jest-watcher: 29.7.0
+      micromatch: 4.0.7
+      pretty-format: 29.7.0
+      slash: 3.0.0
+      strip-ansi: 6.0.1
+    transitivePeerDependencies:
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))':
+    dependencies:
+      '@jest/console': 29.7.0
+      '@jest/reporters': 29.7.0
+      '@jest/test-result': 29.7.0
+      '@jest/transform': 29.7.0
+      '@jest/types': 29.6.3
+      '@types/node': 20.13.0
+      ansi-escapes: 4.3.2
+      chalk: 4.1.2
+      ci-info: 3.9.0
+      exit: 0.1.2
+      graceful-fs: 4.2.11
+      jest-changed-files: 29.7.0
+      jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
       jest-haste-map: 29.7.0
       jest-message-util: 29.7.0
       jest-regex-util: 29.6.3
@@ -8493,7 +8605,7 @@ snapshots:
     dependencies:
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       jest-mock: 29.7.0
 
   '@jest/expect-utils@29.7.0':
@@ -8511,7 +8623,7 @@ snapshots:
     dependencies:
       '@jest/types': 29.6.3
       '@sinonjs/fake-timers': 10.3.0
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       jest-message-util: 29.7.0
       jest-mock: 29.7.0
       jest-util: 29.7.0
@@ -8603,7 +8715,7 @@ snapshots:
       '@jest/schemas': 29.6.3
       '@types/istanbul-lib-coverage': 2.0.6
       '@types/istanbul-reports': 3.0.4
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       '@types/yargs': 17.0.32
       chalk: 4.1.2
 
@@ -10828,7 +10940,7 @@ snapshots:
       lz-string: 1.5.0
       pretty-format: 27.5.1
 
-  '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))':
+  '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))':
     dependencies:
       '@adobe/css-tools': 4.3.3
       '@babel/runtime': 7.24.5
@@ -10841,7 +10953,7 @@ snapshots:
     optionalDependencies:
       '@jest/globals': 29.7.0
       '@types/jest': 29.5.12
-      jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
 
   '@testing-library/react@14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
@@ -10902,7 +11014,7 @@ snapshots:
 
   '@types/conventional-commits-parser@5.0.0':
     dependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
 
   '@types/debug@4.1.12':
     dependencies:
@@ -10939,7 +11051,7 @@ snapshots:
 
   '@types/jsdom@20.0.1':
     dependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       '@types/tough-cookie': 4.0.5
       parse5: 7.1.2
 
@@ -11776,13 +11888,28 @@ snapshots:
     optionalDependencies:
       typescript: 5.4.5
 
-  create-jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
+  create-jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)):
+    dependencies:
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      exit: 0.1.2
+      graceful-fs: 4.2.11
+      jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      jest-util: 29.7.0
+      prompts: 2.4.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  create-jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)):
     dependencies:
       '@jest/types': 29.6.3
       chalk: 4.1.2
       exit: 0.1.2
       graceful-fs: 4.2.11
-      jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
       jest-util: 29.7.0
       prompts: 2.4.2
     transitivePeerDependencies:
@@ -12293,13 +12420,24 @@ snapshots:
       - eslint-import-resolver-webpack
       - supports-color
 
+  eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5):
+    dependencies:
+      '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5)
+      eslint: 8.57.0
+    optionalDependencies:
+      '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+      jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
   eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5):
     dependencies:
       '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
     optionalDependencies:
       '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
-      jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -12733,14 +12871,6 @@ snapshots:
       minipass: 7.1.2
       path-scurry: 1.11.1
 
-  glob@10.4.1:
-    dependencies:
-      foreground-child: 3.1.1
-      jackspeak: 3.1.2
-      minimatch: 9.0.4
-      minipass: 7.1.2
-      path-scurry: 1.11.1
-
   glob@10.4.5:
     dependencies:
       foreground-child: 3.1.1
@@ -13265,16 +13395,54 @@ snapshots:
       - babel-plugin-macros
       - supports-color
 
-  jest-cli@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
+  jest-cli@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)):
+    dependencies:
+      '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      '@jest/test-result': 29.7.0
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      create-jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      exit: 0.1.2
+      import-local: 3.1.0
+      jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      yargs: 17.7.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest-cli@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)):
+    dependencies:
+      '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+      '@jest/test-result': 29.7.0
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      create-jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+      exit: 0.1.2
+      import-local: 3.1.0
+      jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      yargs: 17.7.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest-cli@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)):
     dependencies:
-      '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
       chalk: 4.1.2
-      create-jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      create-jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
       exit: 0.1.2
       import-local: 3.1.0
-      jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
       jest-util: 29.7.0
       jest-validate: 29.7.0
       yargs: 17.7.2
@@ -13284,7 +13452,7 @@ snapshots:
       - supports-color
       - ts-node
 
-  jest-config@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
+  jest-config@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)):
     dependencies:
       '@babel/core': 7.24.5
       '@jest/test-sequencer': 29.7.0
@@ -13315,6 +13483,68 @@ snapshots:
       - babel-plugin-macros
       - supports-color
 
+  jest-config@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)):
+    dependencies:
+      '@babel/core': 7.24.5
+      '@jest/test-sequencer': 29.7.0
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.24.5)
+      chalk: 4.1.2
+      ci-info: 3.9.0
+      deepmerge: 4.3.1
+      glob: 7.2.3
+      graceful-fs: 4.2.11
+      jest-circus: 29.7.0
+      jest-environment-node: 29.7.0
+      jest-get-type: 29.6.3
+      jest-regex-util: 29.6.3
+      jest-resolve: 29.7.0
+      jest-runner: 29.7.0
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      micromatch: 4.0.7
+      parse-json: 5.2.0
+      pretty-format: 29.7.0
+      slash: 3.0.0
+      strip-json-comments: 3.1.1
+    optionalDependencies:
+      '@types/node': 20.13.0
+      ts-node: 10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)
+    transitivePeerDependencies:
+      - babel-plugin-macros
+      - supports-color
+
+  jest-config@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)):
+    dependencies:
+      '@babel/core': 7.24.5
+      '@jest/test-sequencer': 29.7.0
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.24.5)
+      chalk: 4.1.2
+      ci-info: 3.9.0
+      deepmerge: 4.3.1
+      glob: 7.2.3
+      graceful-fs: 4.2.11
+      jest-circus: 29.7.0
+      jest-environment-node: 29.7.0
+      jest-get-type: 29.6.3
+      jest-regex-util: 29.6.3
+      jest-resolve: 29.7.0
+      jest-runner: 29.7.0
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      micromatch: 4.0.7
+      parse-json: 5.2.0
+      pretty-format: 29.7.0
+      slash: 3.0.0
+      strip-json-comments: 3.1.1
+    optionalDependencies:
+      '@types/node': 20.13.0
+      ts-node: 10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)
+    transitivePeerDependencies:
+      - babel-plugin-macros
+      - supports-color
+
   jest-diff@29.7.0:
     dependencies:
       chalk: 4.1.2
@@ -13340,7 +13570,7 @@ snapshots:
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
       '@types/jsdom': 20.0.1
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       jest-mock: 29.7.0
       jest-util: 29.7.0
       jsdom: 20.0.3
@@ -13403,7 +13633,7 @@ snapshots:
   jest-mock@29.7.0:
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       jest-util: 29.7.0
 
   jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@@ -13512,7 +13742,7 @@ snapshots:
   jest-util@29.7.0:
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 20.12.12
+      '@types/node': 20.13.0
       chalk: 4.1.2
       ci-info: 3.9.0
       graceful-fs: 4.2.11
@@ -13545,12 +13775,36 @@ snapshots:
       merge-stream: 2.0.0
       supports-color: 8.1.1
 
-  jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
+  jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)):
+    dependencies:
+      '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      '@jest/types': 29.6.3
+      import-local: 3.1.0
+      jest-cli: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)):
+    dependencies:
+      '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+      '@jest/types': 29.6.3
+      import-local: 3.1.0
+      jest-cli: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)):
     dependencies:
-      '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
       '@jest/types': 29.6.3
       import-local: 3.1.0
-      jest-cli: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest-cli: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
     transitivePeerDependencies:
       - '@types/node'
       - babel-plugin-macros
@@ -14562,13 +14816,13 @@ snapshots:
       camelcase-css: 2.0.1
       postcss: 8.4.38
 
-  postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
+  postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)):
     dependencies:
       lilconfig: 3.1.1
       yaml: 2.4.2
     optionalDependencies:
       postcss: 8.4.38
-      ts-node: 10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)
+      ts-node: 10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)
 
   postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(typescript@5.4.5)):
     dependencies:
@@ -15263,7 +15517,7 @@ snapshots:
     dependencies:
       '@jridgewell/gen-mapping': 0.3.5
       commander: 4.1.1
-      glob: 10.4.1
+      glob: 10.4.5
       lines-and-columns: 1.2.4
       mz: 2.7.0
       pirates: 4.0.6
@@ -15320,11 +15574,11 @@ snapshots:
     dependencies:
       '@babel/runtime': 7.24.5
 
-  tailwindcss-animate@1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))):
+  tailwindcss-animate@1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))):
     dependencies:
-      tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
 
-  tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
+  tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)):
     dependencies:
       '@alloc/quick-lru': 5.2.0
       arg: 5.0.2
@@ -15343,7 +15597,7 @@ snapshots:
       postcss: 8.4.38
       postcss-import: 15.1.0(postcss@8.4.38)
       postcss-js: 4.0.1(postcss@8.4.38)
-      postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
       postcss-nested: 6.0.1(postcss@8.4.38)
       postcss-selector-parser: 6.1.0
       resolve: 1.22.8
@@ -15484,11 +15738,47 @@ snapshots:
 
   ts-interface-checker@0.1.13: {}
 
-  ts-jest@29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5):
+  ts-jest@29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5):
     dependencies:
       bs-logger: 0.2.6
       fast-json-stable-stringify: 2.1.0
-      jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
+      jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.12.12)(typescript@5.4.5))
+      jest-util: 29.7.0
+      json5: 2.2.3
+      lodash.memoize: 4.1.2
+      make-error: 1.3.6
+      semver: 7.6.2
+      typescript: 5.4.5
+      yargs-parser: 21.1.1
+    optionalDependencies:
+      '@babel/core': 7.24.5
+      '@jest/transform': 29.7.0
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.24.5)
+
+  ts-jest@29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5):
+    dependencies:
+      bs-logger: 0.2.6
+      fast-json-stable-stringify: 2.1.0
+      jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5))
+      jest-util: 29.7.0
+      json5: 2.2.3
+      lodash.memoize: 4.1.2
+      make-error: 1.3.6
+      semver: 7.6.2
+      typescript: 5.4.5
+      yargs-parser: 21.1.1
+    optionalDependencies:
+      '@babel/core': 7.24.5
+      '@jest/transform': 29.7.0
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.24.5)
+
+  ts-jest@29.1.4(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5):
+    dependencies:
+      bs-logger: 0.2.6
+      fast-json-stable-stringify: 2.1.0
+      jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
       jest-util: 29.7.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
@@ -15522,6 +15812,26 @@ snapshots:
     optionalDependencies:
       '@swc/core': 1.7.6
 
+  ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.13.0)(typescript@5.4.5):
+    dependencies:
+      '@cspotcode/source-map-support': 0.8.1
+      '@tsconfig/node10': 1.0.11
+      '@tsconfig/node12': 1.0.11
+      '@tsconfig/node14': 1.0.3
+      '@tsconfig/node16': 1.0.4
+      '@types/node': 20.13.0
+      acorn: 8.11.3
+      acorn-walk: 8.3.2
+      arg: 4.1.3
+      create-require: 1.1.1
+      diff: 4.0.2
+      make-error: 1.3.6
+      typescript: 5.4.5
+      v8-compile-cache-lib: 3.0.1
+      yn: 3.1.1
+    optionalDependencies:
+      '@swc/core': 1.7.6
+
   ts-node@10.9.2(typescript@5.4.5):
     dependencies:
       '@cspotcode/source-map-support': 0.8.1