diff --git a/.gitignore b/.gitignore
index a547bf3..bfddbdf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,7 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+
+*storybook.log
+storybook-static
+.storybook-cache
diff --git a/.storybook/main.ts b/.storybook/main.ts
new file mode 100644
index 0000000..a8db726
--- /dev/null
+++ b/.storybook/main.ts
@@ -0,0 +1,17 @@
+import type { StorybookConfig } from '@storybook/react-vite';
+
+const config: StorybookConfig = {
+ "stories": [
+ "../src/**/*.mdx",
+ "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"
+ ],
+ "addons": [
+ "@storybook/addon-docs",
+ "@storybook/addon-onboarding"
+ ],
+ "framework": {
+ "name": "@storybook/react-vite",
+ "options": {}
+ }
+};
+export default config;
\ No newline at end of file
diff --git a/.storybook/preview.ts b/.storybook/preview.ts
new file mode 100644
index 0000000..8fc6250
--- /dev/null
+++ b/.storybook/preview.ts
@@ -0,0 +1,36 @@
+import type { Preview } from '@storybook/react-vite';
+import '../src/index.css'; // Import component library styles
+
+const preview: Preview = {
+ parameters: {
+ // AcadXP Theme
+ backgrounds: {
+ default: 'acadxp-dark',
+ values: [
+ {
+ name: 'acadxp-dark',
+ value: 'linear-gradient(135deg, #1e1b4b 0%, #1e3a5f 50%, #0f172a 100%)',
+ },
+ {
+ name: 'dark',
+ value: '#1e1b4b',
+ },
+ {
+ name: 'light',
+ value: '#ffffff',
+ },
+ ],
+ },
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ docs: {
+ toc: true,
+ },
+ },
+};
+
+export default preview;
\ No newline at end of file
diff --git a/.vercelignore b/.vercelignore
new file mode 100644
index 0000000..4dd4f1e
--- /dev/null
+++ b/.vercelignore
@@ -0,0 +1,6 @@
+node_modules
+dist
+.storybook-cache
+*.log
+.env
+.DS_Store
diff --git a/README.md b/README.md
index 73bf599..c498dca 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,29 @@
-# 🎮 xpui
+
+
> The Playful React UI Library with pixel-art aesthetics
-[](https://www.npmjs.com/package/@acadxp/xpui)
+[](https://www.npmjs.com/package/@acadxp/xpui)
[](https://opensource.org/licenses/MIT)
+[](https://www.typescriptlang.org/)
+[](https://tailwindcss.com/)
+
+[Documentation](https://github.com/acadxp/xpui) • [NPM Package](https://www.npmjs.com/package/@acadxp/xpui) • [Report Bug](https://github.com/acadxp/xpui/issues)
+
+
+
+---
+
+## 🌟 Why xpui?
+
+**xpui** is a React UI library designed for developers who want to add a unique, game-inspired aesthetic to their applications. Perfect for:
+
+- 🎮 **Gaming platforms** and educational apps
+- 🎯 **AcadXP ecosystem** projects
+- 🎨 **Creative projects** that need a distinct retro look
+- 🚀 **Modern apps** with a nostalgic twist
+
+Built with modern web technologies and best practices, xpui combines the charm of pixel-art design with the power of React, TypeScript, and Tailwind CSS.
## ✨ Features
@@ -17,11 +37,11 @@
## 📦 Installation
```bash
-npm install xpui
+npm install @acadxp/xpui
# or
-pnpm add xpui
+pnpm add @acadxp/xpui
# or
-yarn add xpui
+yarn add @acadxp/xpui
```
### Peer Dependencies
@@ -35,13 +55,13 @@ npm install react react-dom tailwindcss @tailwindcss/vite
### 1. Import styles in your app
```tsx
-import "xpui/styles";
+import "@acadxp/xpui/styles";
```
### 2. Use components
```tsx
-import { Button } from "xpui";
+import { Button } from "@acadxp/xpui";
function App() {
return (
@@ -59,7 +79,7 @@ function App() {
A pixel-art styled button component with multiple variants and sizes.
```tsx
-import { Button } from 'xpui';
+import { Button } from "@acadxp/xpui";
// Variants
Primary
@@ -104,7 +124,7 @@ import { Button } from 'xpui';
Merge and conditionally apply CSS classes.
```tsx
-import { cn } from "xpui";
+import { cn } from "@acadxp/xpui";
Button
@@ -127,18 +147,58 @@ All components support className overrides for full customization:
- 🎪 Card
- 🎨 Badge
- 📦 Modal
+- 🎭 Tooltip
+- 🎪 Dropdown
- And more...
+## 🛠️ Development
+
+Want to contribute or run locally?
+
+```bash
+# Clone the repository
+git clone https://github.com/acadxp/xpui.git
+cd xpui
+
+# Install dependencies
+pnpm install
+
+# Start Storybook for development
+pnpm dev
+
+# Build the library
+pnpm build
+
+# Run tests
+pnpm test
+```
+
## 🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
+1. Fork the repository
+2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
+3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
+4. Push to the branch (`git push origin feature/AmazingFeature`)
+5. Open a Pull Request
+
## 📄 License
MIT © [DripCode-Studio](https://github.com/DripCode-Studio)
+---
+
## 🔗 Links
- [NPM Package](https://www.npmjs.com/package/@acadxp/xpui)
- [GitHub Repository](https://github.com/acadxp/xpui)
- [Report Issues](https://github.com/acadxp/xpui/issues)
+- [AcadXP Platform](https://github.com/acadxp)
+
+---
+
+
+
Made with ❤️ by the AcadXP Team
+
⭐ Star us on GitHub if you find this project helpful!
+
diff --git a/RELEASE.md b/RELEASE.md
deleted file mode 100644
index aa46a5f..0000000
--- a/RELEASE.md
+++ /dev/null
@@ -1,189 +0,0 @@
-# Release Workflow Guide
-
-This repository uses GitHub Actions for automated publishing to NPM.
-
-## 🔧 Setup Instructions
-
-### 1. Get NPM Token
-
-1. Go to [npmjs.com](https://www.npmjs.com)
-2. Login to your account
-3. Click your profile → **Access Tokens**
-4. Click **Generate New Token** → **Automation**
-5. Copy the token (you'll only see it once!)
-
-### 2. Add Token to GitHub
-
-1. Go to your repository on GitHub
-2. Click **Settings** → **Secrets and variables** → **Actions**
-3. Click **New repository secret**
-4. Name: `NPM_TOKEN`
-5. Value: Paste your NPM token
-6. Click **Add secret**
-
-## 🚀 How to Publish
-
-### Method 1: Create Release via GitHub UI (Recommended)
-
-1. Go to your repository → **Releases** → **Create a new release**
-2. Click **Choose a tag** → Type new version (e.g., `v0.1.0-beta.1`)
-3. Click **Create new tag on publish**
-4. Fill in:
- - **Release title**: `v0.1.0-beta.1`
- - **Description**: What's new in this release
-5. Check **Set as a pre-release** (for beta versions)
-6. Click **Publish release**
-7. GitHub Actions will automatically:
- - Run tests
- - Build package
- - Publish to NPM
-
-### Method 2: Command Line
-
-```bash
-# Make sure you're logged into NPM
-npm login
-
-# For beta releases
-pnpm release:beta
-
-# For stable releases
-pnpm release:patch # 0.1.0 → 0.1.1
-pnpm release:minor # 0.1.0 → 0.2.0
-pnpm release:major # 0.1.0 → 1.0.0
-```
-
-### Method 3: Manual Tag (Triggers Automation)
-
-```bash
-# Create and push a tag
-git tag v0.1.0-beta.2
-git push origin v0.1.0-beta.2
-
-# Then create release from tag on GitHub
-```
-
-## 📋 Version Guidelines
-
-### Beta Versions
-
-- Format: `0.1.0-beta.1`, `0.1.0-beta.2`, etc.
-- Use for testing and gathering feedback
-- Install with: `npm install xpui@beta`
-
-### Stable Versions
-
-- **Patch** (0.1.0 → 0.1.1): Bug fixes
-- **Minor** (0.1.0 → 0.2.0): New features (backward compatible)
-- **Major** (0.1.0 → 1.0.0): Breaking changes
-
-## 🔄 Workflow Details
-
-### CI Workflow (`.github/workflows/ci.yml`)
-
-**Triggers:** Every push to `main` and all pull requests
-
-**Steps:**
-
-1. ✅ Checkout code
-2. ✅ Install dependencies
-3. ✅ Run linter
-4. ✅ Run tests
-5. ✅ Build package
-
-### Publish Workflow (`.github/workflows/publish.yml`)
-
-**Triggers:** When you publish a GitHub release
-
-**Steps:**
-
-1. ✅ Checkout code
-2. ✅ Install dependencies
-3. ✅ Run linter
-4. ✅ Run tests
-5. ✅ Build package
-6. ✅ Publish to NPM
-7. ✅ Create summary
-
-## 📦 What Gets Published
-
-Based on your `package.json`:
-
-- `dist/` folder (built files)
-- `README.md`
-- `LICENSE`
-
-## 🛡️ Protection
-
-The workflow includes:
-
-- ✅ Automated testing before publish
-- ✅ Build verification
-- ✅ NPM provenance (security)
-- ✅ Only runs on official releases
-
-## 🔍 Monitoring
-
-After publishing:
-
-1. Check workflow status: **Actions** tab
-2. Verify on NPM: `https://www.npmjs.com/package/xpui`
-3. Test installation: `npm info xpui`
-
-## ❓ Troubleshooting
-
-**Workflow fails with "npm ERR! need auth"**
-
-- Check that `NPM_TOKEN` secret is set correctly
-
-**Workflow fails at build step**
-
-- Tests might be failing
-- Check the Actions logs for details
-
-**Version already exists**
-
-- Bump version in `package.json` first
-- Or use the release scripts
-
-## 📝 Pre-Release Checklist
-
-Before creating a release:
-
-- [ ] All tests passing locally (`pnpm test:run`)
-- [ ] Build succeeds (`pnpm build`)
-- [ ] README is updated
-- [ ] Version bumped (or use release scripts)
-- [ ] Changes committed to `main`
-
-## 🎯 Example Workflow
-
-```bash
-# 1. Make changes and test
-pnpm test:run
-pnpm build
-
-# 2. Commit changes
-git add .
-git commit -m "Add new feature"
-git push origin main
-
-# 3. Create release on GitHub
-# Go to GitHub → Releases → New Release
-# Tag: v0.1.0-beta.2
-# Title: v0.1.0-beta.2
-# Description: Added Button component with tests
-# ✅ Publish release
-
-# 4. Wait for automation
-# Check Actions tab to see progress
-
-# 5. Verify
-npm info xpui
-```
-
-## 🔗 Useful Links
-
-- [NPM Package](https://www.npmjs.com/package/xpui)
-- [GitHub Releases](https://github.com/acadxp/xpui/releases)
-- [GitHub Actions](https://github.com/acadxp/xpui/actions)
diff --git a/eslint.config.js b/eslint.config.js
index b19330b..69f9d84 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -1,3 +1,6 @@
+// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format
+import storybook from "eslint-plugin-storybook";
+
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
diff --git a/index.html b/index.html
index 7e54de6..ae4f012 100644
--- a/index.html
+++ b/index.html
@@ -1,13 +1,89 @@
-
+
-
+
+
+
+
- xpui
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xpui | Game-Inspired React Component Library for AcadXP
-
-
+
+
+
+
+ xp ui
+
+
+ Game-Inspired React Component Library
+
+
+ 🚀 Run pnpm storybook to view components
+
+
+
+
diff --git a/package.json b/package.json
index 41c7aec..f7ad4e4 100644
--- a/package.json
+++ b/package.json
@@ -44,10 +44,10 @@
"./styles": "./dist/xpui.css"
},
"scripts": {
- "dev": "vite",
+ "dev": "storybook dev -p 6006",
"build": "tsc -b && vite build",
"lint": "eslint .",
- "preview": "vite preview",
+ "preview": "storybook dev -p 6006",
"test": "vitest",
"test:ui": "vitest --ui",
"test:run": "vitest run",
@@ -56,7 +56,10 @@
"release:patch": "npm version patch && npm publish && git push --follow-tags",
"release:minor": "npm version minor && npm publish && git push --follow-tags",
"release:major": "npm version major && npm publish && git push --follow-tags",
- "publish": "npm publish --access public"
+ "publish": "npm publish --access public",
+ "storybook": "storybook dev -p 6006",
+ "build-storybook": "storybook build -o storybook-static",
+ "preview-storybook": "npx serve storybook-static"
},
"peerDependencies": {
"@tailwindcss/vite": "^4.1.17",
@@ -71,6 +74,10 @@
},
"devDependencies": {
"@eslint/js": "^9.36.0",
+ "@storybook/addon-docs": "10.0.6",
+ "@storybook/addon-onboarding": "10.0.6",
+ "@storybook/react": "^10.0.6",
+ "@storybook/react-vite": "10.0.6",
"@tailwindcss/vite": "^4.1.17",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0",
@@ -83,10 +90,12 @@
"eslint": "^9.36.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.22",
+ "eslint-plugin-storybook": "10.0.6",
"globals": "^16.4.0",
"jsdom": "^27.1.0",
"react": "^19.1.1",
"react-dom": "^19.1.1",
+ "storybook": "10.0.6",
"tailwindcss": "^4.1.17",
"typescript": "~5.9.3",
"typescript-eslint": "^8.45.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2f4c691..7b53fd8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -21,6 +21,18 @@ importers:
'@eslint/js':
specifier: ^9.36.0
version: 9.39.1
+ '@storybook/addon-docs':
+ specifier: 10.0.6
+ version: 10.0.6(@types/react@19.2.2)(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@storybook/addon-onboarding':
+ specifier: 10.0.6
+ version: 10.0.6(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))
+ '@storybook/react':
+ specifier: ^10.0.6
+ version: 10.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3)
+ '@storybook/react-vite':
+ specifier: 10.0.6
+ version: 10.0.6(esbuild@0.25.12)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
'@tailwindcss/vite':
specifier: ^4.1.17
version: 4.1.17(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
@@ -57,6 +69,9 @@ importers:
eslint-plugin-react-refresh:
specifier: ^0.4.22
version: 0.4.24(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-storybook:
+ specifier: 10.0.6
+ version: 10.0.6(eslint@9.39.1(jiti@2.6.1))(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3)
globals:
specifier: ^16.4.0
version: 16.5.0
@@ -69,6 +84,9 @@ importers:
react-dom:
specifier: ^19.1.1
version: 19.2.0(react@19.2.0)
+ storybook:
+ specifier: 10.0.6
+ version: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
tailwindcss:
specifier: ^4.1.17
version: 4.1.17
@@ -442,6 +460,19 @@ packages:
resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
engines: {node: 20 || >=22}
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1':
+ resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -458,6 +489,12 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
'@microsoft/api-extractor-model@7.31.3':
resolution: {integrity: sha512-dv4quQI46p0U03TCEpasUf6JrJL3qjMN7JUAobsPElxBv4xayYYvWW9aPpfYV+Jx6hqUcVaLVOeV7+5hxsyoFQ==}
@@ -483,6 +520,10 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
@@ -641,6 +682,76 @@ packages:
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
+ '@storybook/addon-docs@10.0.6':
+ resolution: {integrity: sha512-MrMeZyON4V08T59zOFg2Wprw/V+mMiOKsyrCf5Zb5oO9BfUb6+VqbDIETsIHdhQxOZ9H5Oi27eU3akGMgCPDMw==}
+ peerDependencies:
+ storybook: ^10.0.6
+
+ '@storybook/addon-onboarding@10.0.6':
+ resolution: {integrity: sha512-/qJnr4jn5oKKdXf/+7shJNxJwS5zBpyEgqfqQXqHvuVSn/onqLH71XNv8yGUK7/lIOANRkvc/6Ju6W3qpKlKQg==}
+ peerDependencies:
+ storybook: ^10.0.6
+
+ '@storybook/builder-vite@10.0.6':
+ resolution: {integrity: sha512-WD5BfYezOQC0B4ItY9HJg9zb4MbNjsZcfXipAQi7+i9dYNWegdAhg7Aq6arsRZ2YMMOiSpVEJhzmK08XRx+szA==}
+ peerDependencies:
+ storybook: ^10.0.6
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@storybook/csf-plugin@10.0.6':
+ resolution: {integrity: sha512-etPIKPoLAhG8wTRZrmvOiDi70CstkE8Y5fYuYhffThCP8tc2RwHEuwLrsK/6Mf9PAkTmIk/CjYG+Rp2qLqNNtg==}
+ peerDependencies:
+ esbuild: '*'
+ rollup: '*'
+ storybook: ^10.0.6
+ vite: '*'
+ webpack: '*'
+ peerDependenciesMeta:
+ esbuild:
+ optional: true
+ rollup:
+ optional: true
+ vite:
+ optional: true
+ webpack:
+ optional: true
+
+ '@storybook/global@5.0.0':
+ resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+
+ '@storybook/icons@1.6.0':
+ resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+
+ '@storybook/react-dom-shim@10.0.6':
+ resolution: {integrity: sha512-UdPSWwgo7WQg8vWIxT379pwrC2uFZX9u12Enap8//zVCJNZYHmjTLbV2P+pQ4zD0UFcqcBljptJEbu7FUMYx+A==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.6
+
+ '@storybook/react-vite@10.0.6':
+ resolution: {integrity: sha512-zDnOk89LDOpN0yhTCYRb8bkm6LdchGMfcCxKLQhEnSmkMmPwXsj/CADUc1Oipqih7D0JR/gxuadx+3y41znmSg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.6
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@storybook/react@10.0.6':
+ resolution: {integrity: sha512-17SMthmwPDzX6Ex5MNnXhDS8DirGyo2I9g8VV/VtnXFWIl2r/+ZSAHjAM4NG0Tv3qia7l/jQxwL1YKk9qVRZxw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ storybook: ^10.0.6
+ typescript: '>= 4.9.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@tailwindcss/node@4.1.17':
resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
@@ -784,12 +895,18 @@ packages:
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+ '@types/doctrine@0.0.9':
+ resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
'@types/node@24.10.0':
resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==}
@@ -801,6 +918,9 @@ packages:
'@types/react@19.2.2':
resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
+ '@types/resolve@1.20.6':
+ resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
'@typescript-eslint/eslint-plugin@8.46.3':
resolution: {integrity: sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -866,9 +986,23 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+
'@vitest/expect@4.0.8':
resolution: {integrity: sha512-Rv0eabdP/xjAHQGr8cjBm+NnLHNoL268lMDK85w2aAGLFoVKLd8QGnVon5lLtkXQCoYaNL0wg04EGnyKkkKhPA==}
+ '@vitest/mocker@3.2.4':
+ resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/mocker@4.0.8':
resolution: {integrity: sha512-9FRM3MZCedXH3+pIh+ME5Up2NBBHDq0wqwhOKkN4VnvCiKbVxddqH9mSGPZeawjd12pCOGnl+lo/ZGHt0/dQSg==}
peerDependencies:
@@ -880,6 +1014,9 @@ packages:
vite:
optional: true
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+
'@vitest/pretty-format@4.0.8':
resolution: {integrity: sha512-qRrjdRkINi9DaZHAimV+8ia9Gq6LeGz2CgIEmMLz3sBDYV53EsnLZbJMR1q84z1HZCMsf7s0orDgZn7ScXsZKg==}
@@ -889,6 +1026,9 @@ packages:
'@vitest/snapshot@4.0.8':
resolution: {integrity: sha512-Nar9OTU03KGiubrIOFhcfHg8FYaRaNT+bh5VUlNz8stFhCZPNrJvmZkhsr1jtaYvuefYFwK2Hwrq026u4uPWCw==}
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+
'@vitest/spy@4.0.8':
resolution: {integrity: sha512-nvGVqUunyCgZH7kmo+Ord4WgZ7lN0sOULYXUOYuHr55dvg9YvMz3izfB189Pgp28w0vWFbEEfNc/c3VTrqrXeA==}
@@ -897,6 +1037,9 @@ packages:
peerDependencies:
vitest: 4.0.8
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+
'@vitest/utils@4.0.8':
resolution: {integrity: sha512-pdk2phO5NDvEFfUTxcTP8RFYjVj/kfLSPIN5ebP2Mu9kcIMeAQTbknqcFEyBcC4z2pJlJI9aS5UQjcYfhmKAow==}
@@ -975,6 +1118,10 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -983,6 +1130,10 @@ packages:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -1000,6 +1151,10 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1032,6 +1187,10 @@ packages:
caniuse-lite@1.0.30001754:
resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==}
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
chai@6.2.0:
resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==}
engines: {node: '>=18'}
@@ -1040,6 +1199,10 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
+
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
@@ -1103,6 +1266,10 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1118,15 +1285,32 @@ packages:
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
engines: {node: '>=0.3.1'}
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
dom-accessibility-api@0.6.3:
resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
electron-to-chromium@1.5.248:
resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==}
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ empathic@2.0.0:
+ resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
+ engines: {node: '>=14'}
+
enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
@@ -1166,6 +1350,12 @@ packages:
peerDependencies:
eslint: '>=8.40'
+ eslint-plugin-storybook@10.0.6:
+ resolution: {integrity: sha512-llPShAqO86PgjswUDXwkxq1hGBjM7NiZE+nScbTjM3NVx0XwqbSZ+FRV2p5nv6vrZeREfhhY/KJF2WuSaYkXiQ==}
+ peerDependencies:
+ eslint: '>=8'
+ storybook: ^10.0.6
+
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1192,6 +1382,11 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -1268,6 +1463,10 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
fs-extra@11.3.2:
resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'}
@@ -1292,6 +1491,10 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -1366,6 +1569,10 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -1380,6 +1587,9 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
jiti@2.6.1:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
@@ -1522,6 +1732,12 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
lru-cache@11.2.2:
resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
engines: {node: 20 || >=22}
@@ -1566,6 +1782,13 @@ packages:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
@@ -1602,6 +1825,9 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@@ -1623,9 +1849,17 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1665,6 +1899,15 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ react-docgen-typescript@2.4.0:
+ resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+
+ react-docgen@8.0.2:
+ resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==}
+ engines: {node: ^20.9.0 || >=22}
+
react-dom@19.2.0:
resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
peerDependencies:
@@ -1681,6 +1924,10 @@ packages:
resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
engines: {node: '>=0.10.0'}
+ recast@0.23.11:
+ resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
+ engines: {node: '>= 4'}
+
redent@3.0.0:
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
engines: {node: '>=8'}
@@ -1745,6 +1992,10 @@ packages:
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
sirv@3.0.2:
resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
engines: {node: '>=18'}
@@ -1766,14 +2017,47 @@ packages:
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ storybook@10.0.6:
+ resolution: {integrity: sha512-s3qY17stuSxU9TFdSHWF2VWJiDKrhZsdlM9M9/APBLT+3kbTlfCPuaNONE0UETgz5tiZLIrC9K4RYjJ8c6PHPA==}
+ hasBin: true
+ peerDependencies:
+ prettier: ^2 || ^3
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
+ engines: {node: '>=12'}
+
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -1813,6 +2097,9 @@ packages:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
@@ -1823,10 +2110,18 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
tinyrainbow@3.0.3:
resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
engines: {node: '>=14.0.0'}
+ tinyspy@4.0.4:
+ resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
+ engines: {node: '>=14.0.0'}
+
tldts-core@7.0.17:
resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==}
@@ -1856,6 +2151,17 @@ packages:
peerDependencies:
typescript: '>=4.8.4'
+ ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
+
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -1887,6 +2193,10 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ unplugin@2.3.10:
+ resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==}
+ engines: {node: '>=18.12.0'}
+
update-browserslist-db@1.1.4:
resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
hasBin: true
@@ -1990,6 +2300,9 @@ packages:
resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==}
engines: {node: '>=20'}
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
@@ -2016,6 +2329,14 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -2346,6 +2667,24 @@ snapshots:
dependencies:
'@isaacs/balanced-match': 4.0.1
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.2
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ glob: 10.4.5
+ magic-string: 0.30.21
+ react-docgen-typescript: 2.4.0(typescript@5.9.3)
+ vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)
+ optionalDependencies:
+ typescript: 5.9.3
+
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -2365,6 +2704,12 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.2
+ react: 19.2.0
+
'@microsoft/api-extractor-model@7.31.3(@types/node@24.10.0)':
dependencies:
'@microsoft/tsdoc': 0.15.1
@@ -2413,6 +2758,9 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
'@polka/url@1.0.0-next.29': {}
'@rolldown/pluginutils@1.0.0-beta.43': {}
@@ -2532,6 +2880,92 @@ snapshots:
'@standard-schema/spec@1.0.0': {}
+ '@storybook/addon-docs@10.0.6(@types/react@19.2.2)(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@storybook/csf-plugin': 10.0.6(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@storybook/react-dom-shim': 10.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - '@types/react'
+ - esbuild
+ - rollup
+ - vite
+ - webpack
+
+ '@storybook/addon-onboarding@10.0.6(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))':
+ dependencies:
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+
+ '@storybook/builder-vite@10.0.6(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ '@storybook/csf-plugin': 10.0.6(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ ts-dedent: 2.2.0
+ vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)
+ transitivePeerDependencies:
+ - esbuild
+ - rollup
+ - webpack
+
+ '@storybook/csf-plugin@10.0.6(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ unplugin: 2.3.10
+ optionalDependencies:
+ esbuild: 0.25.12
+ rollup: 4.52.5
+ vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)
+
+ '@storybook/global@5.0.0': {}
+
+ '@storybook/icons@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
+ '@storybook/react-dom-shim@10.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))':
+ dependencies:
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+
+ '@storybook/react-vite@10.0.6(esbuild@0.25.12)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
+ '@storybook/builder-vite': 10.0.6(esbuild@0.25.12)(rollup@4.52.5)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@storybook/react': 10.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3)
+ empathic: 2.0.0
+ magic-string: 0.30.21
+ react: 19.2.0
+ react-docgen: 8.0.2
+ react-dom: 19.2.0(react@19.2.0)
+ resolve: 1.22.11
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ tsconfig-paths: 4.2.0
+ vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)
+ transitivePeerDependencies:
+ - esbuild
+ - rollup
+ - supports-color
+ - typescript
+ - webpack
+
+ '@storybook/react@10.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3)':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/react-dom-shim': 10.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ optionalDependencies:
+ typescript: 5.9.3
+
'@tailwindcss/node@4.1.17':
dependencies:
'@jridgewell/remapping': 2.3.5
@@ -2666,10 +3100,14 @@ snapshots:
'@types/deep-eql@4.0.2': {}
+ '@types/doctrine@0.0.9': {}
+
'@types/estree@1.0.8': {}
'@types/json-schema@7.0.15': {}
+ '@types/mdx@2.0.13': {}
+
'@types/node@24.10.0':
dependencies:
undici-types: 7.16.0
@@ -2682,6 +3120,8 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@types/resolve@1.20.6': {}
+
'@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -2787,6 +3227,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@vitest/expect@3.2.4':
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
+
'@vitest/expect@4.0.8':
dependencies:
'@standard-schema/spec': 1.0.0
@@ -2796,6 +3244,14 @@ snapshots:
chai: 6.2.0
tinyrainbow: 3.0.3
+ '@vitest/mocker@3.2.4(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)
+
'@vitest/mocker@4.0.8(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))':
dependencies:
'@vitest/spy': 4.0.8
@@ -2804,6 +3260,10 @@ snapshots:
optionalDependencies:
vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)
+ '@vitest/pretty-format@3.2.4':
+ dependencies:
+ tinyrainbow: 2.0.0
+
'@vitest/pretty-format@4.0.8':
dependencies:
tinyrainbow: 3.0.3
@@ -2819,6 +3279,10 @@ snapshots:
magic-string: 0.30.21
pathe: 2.0.3
+ '@vitest/spy@3.2.4':
+ dependencies:
+ tinyspy: 4.0.4
+
'@vitest/spy@4.0.8': {}
'@vitest/ui@4.0.8(vitest@4.0.8)':
@@ -2832,6 +3296,12 @@ snapshots:
tinyrainbow: 3.0.3
vitest: 4.0.8(@types/node@24.10.0)(@vitest/ui@4.0.8)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)
+ '@vitest/utils@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
'@vitest/utils@4.0.8':
dependencies:
'@vitest/pretty-format': 4.0.8
@@ -2923,12 +3393,16 @@ snapshots:
ansi-regex@5.0.1: {}
+ ansi-regex@6.2.2: {}
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-styles@5.2.0: {}
+ ansi-styles@6.2.3: {}
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -2943,6 +3417,10 @@ snapshots:
assertion-error@2.0.1: {}
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.8.1
+
balanced-match@1.0.2: {}
baseline-browser-mapping@2.8.25: {}
@@ -2976,6 +3454,14 @@ snapshots:
caniuse-lite@1.0.30001754: {}
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
chai@6.2.0: {}
chalk@4.1.2:
@@ -2983,6 +3469,8 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
+ check-error@2.1.1: {}
+
clsx@2.1.1: {}
color-convert@2.0.1:
@@ -3035,6 +3523,8 @@ snapshots:
decimal.js@10.6.0: {}
+ deep-eql@5.0.2: {}
+
deep-is@0.1.4: {}
dequal@2.0.3: {}
@@ -3043,12 +3533,24 @@ snapshots:
diff@8.0.2: {}
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
dom-accessibility-api@0.5.16: {}
dom-accessibility-api@0.6.3: {}
+ eastasianwidth@0.2.0: {}
+
electron-to-chromium@1.5.248: {}
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ empathic@2.0.0: {}
+
enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
@@ -3101,6 +3603,15 @@ snapshots:
dependencies:
eslint: 9.39.1(jiti@2.6.1)
+ eslint-plugin-storybook@10.0.6(eslint@9.39.1(jiti@2.6.1))(storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)))(typescript@5.9.3):
+ dependencies:
+ '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.1(jiti@2.6.1)
+ storybook: 10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
@@ -3157,6 +3668,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -3223,6 +3736,11 @@ snapshots:
flatted@3.3.3: {}
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
fs-extra@11.3.2:
dependencies:
graceful-fs: 4.2.11
@@ -3244,6 +3762,15 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
globals@14.0.0: {}
globals@16.5.0: {}
@@ -3303,6 +3830,8 @@ snapshots:
is-extglob@2.1.1: {}
+ is-fullwidth-code-point@3.0.0: {}
+
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -3313,6 +3842,12 @@ snapshots:
isexe@2.0.0: {}
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
jiti@2.6.1: {}
jju@1.4.0: {}
@@ -3442,6 +3977,10 @@ snapshots:
lodash@4.17.21: {}
+ loupe@3.2.1: {}
+
+ lru-cache@10.4.3: {}
+
lru-cache@11.2.2: {}
lru-cache@5.1.1:
@@ -3481,6 +4020,10 @@ snapshots:
dependencies:
brace-expansion: 2.0.2
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
mlly@1.8.0:
dependencies:
acorn: 8.15.0
@@ -3517,6 +4060,8 @@ snapshots:
dependencies:
p-limit: 3.1.0
+ package-json-from-dist@1.0.1: {}
+
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
@@ -3533,8 +4078,15 @@ snapshots:
path-parse@1.0.7: {}
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
pathe@2.0.3: {}
+ pathval@2.0.1: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -3573,6 +4125,25 @@ snapshots:
queue-microtask@1.2.3: {}
+ react-docgen-typescript@2.4.0(typescript@5.9.3):
+ dependencies:
+ typescript: 5.9.3
+
+ react-docgen@8.0.2:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.28.0
+ '@types/doctrine': 0.0.9
+ '@types/resolve': 1.20.6
+ doctrine: 3.0.0
+ resolve: 1.22.11
+ strip-indent: 4.1.1
+ transitivePeerDependencies:
+ - supports-color
+
react-dom@19.2.0(react@19.2.0):
dependencies:
react: 19.2.0
@@ -3584,6 +4155,14 @@ snapshots:
react@19.2.0: {}
+ recast@0.23.11:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.8.1
+
redent@3.0.0:
dependencies:
indent-string: 4.0.0
@@ -3657,6 +4236,8 @@ snapshots:
siginfo@2.0.0: {}
+ signal-exit@4.1.0: {}
+
sirv@3.0.2:
dependencies:
'@polka/url': 1.0.0-next.29
@@ -3673,12 +4254,58 @@ snapshots:
std-env@3.10.0: {}
+ storybook@10.0.6(@testing-library/dom@10.4.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)):
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@testing-library/jest-dom': 6.9.1
+ '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@vitest/spy': 3.2.4
+ esbuild: 0.25.12
+ recast: 0.23.11
+ semver: 7.7.3
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - '@testing-library/dom'
+ - bufferutil
+ - msw
+ - react
+ - react-dom
+ - utf-8-validate
+ - vite
+
string-argv@0.3.2: {}
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.2
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strip-bom@3.0.0: {}
+
strip-indent@3.0.0:
dependencies:
min-indent: 1.0.1
+ strip-indent@4.1.1: {}
+
strip-json-comments@3.1.1: {}
supports-color@7.2.0:
@@ -3705,6 +4332,8 @@ snapshots:
tapable@2.3.0: {}
+ tiny-invariant@1.3.3: {}
+
tinybench@2.9.0: {}
tinyexec@0.3.2: {}
@@ -3714,8 +4343,12 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ tinyrainbow@2.0.0: {}
+
tinyrainbow@3.0.3: {}
+ tinyspy@4.0.4: {}
+
tldts-core@7.0.17: {}
tldts@7.0.17:
@@ -3740,6 +4373,16 @@ snapshots:
dependencies:
typescript: 5.9.3
+ ts-dedent@2.2.0: {}
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@2.8.1: {}
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
@@ -3765,6 +4408,13 @@ snapshots:
universalify@2.0.1: {}
+ unplugin@2.3.10:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.15.0
+ picomatch: 4.0.3
+ webpack-virtual-modules: 0.6.2
+
update-browserslist-db@1.1.4(browserslist@4.27.0):
dependencies:
browserslist: 4.27.0
@@ -3856,6 +4506,8 @@ snapshots:
webidl-conversions@8.0.0: {}
+ webpack-virtual-modules@0.6.2: {}
+
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
@@ -3878,6 +4530,18 @@ snapshots:
word-wrap@1.2.5: {}
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.1.2
+
ws@8.18.3: {}
xml-name-validator@5.0.0: {}
diff --git a/public/assets/favicon_io/android-chrome-192x192.png b/public/assets/favicon_io/android-chrome-192x192.png
new file mode 100644
index 0000000..0a3e155
Binary files /dev/null and b/public/assets/favicon_io/android-chrome-192x192.png differ
diff --git a/public/assets/favicon_io/android-chrome-512x512.png b/public/assets/favicon_io/android-chrome-512x512.png
new file mode 100644
index 0000000..d79cee0
Binary files /dev/null and b/public/assets/favicon_io/android-chrome-512x512.png differ
diff --git a/public/assets/favicon_io/apple-touch-icon.png b/public/assets/favicon_io/apple-touch-icon.png
new file mode 100644
index 0000000..d5b9c0c
Binary files /dev/null and b/public/assets/favicon_io/apple-touch-icon.png differ
diff --git a/public/assets/favicon_io/favicon-16x16.png b/public/assets/favicon_io/favicon-16x16.png
new file mode 100644
index 0000000..ba96938
Binary files /dev/null and b/public/assets/favicon_io/favicon-16x16.png differ
diff --git a/public/assets/favicon_io/favicon-32x32.png b/public/assets/favicon_io/favicon-32x32.png
new file mode 100644
index 0000000..0cd8438
Binary files /dev/null and b/public/assets/favicon_io/favicon-32x32.png differ
diff --git a/public/assets/favicon_io/favicon.ico b/public/assets/favicon_io/favicon.ico
new file mode 100644
index 0000000..1f6c326
Binary files /dev/null and b/public/assets/favicon_io/favicon.ico differ
diff --git a/public/assets/favicon_io/site.webmanifest b/public/assets/favicon_io/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/public/assets/favicon_io/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/public/assets/xpui-og-image.png b/public/assets/xpui-og-image.png
new file mode 100644
index 0000000..43d2af3
Binary files /dev/null and b/public/assets/xpui-og-image.png differ
diff --git a/public/vite.svg b/public/vite.svg
deleted file mode 100644
index e7b8dfb..0000000
--- a/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/stories/Button.stories.tsx b/src/stories/Button.stories.tsx
new file mode 100644
index 0000000..f202426
--- /dev/null
+++ b/src/stories/Button.stories.tsx
@@ -0,0 +1,203 @@
+import type { Meta, StoryObj } from '@storybook/react';
+import { Button } from '../Components/Button';
+
+const meta = {
+ title: 'Components/Button',
+ component: Button,
+ parameters: {
+ layout: 'centered',
+ docs: {
+ description: {
+ component: 'Game-inspired button component with retro pixel-perfect styling. Supports multiple variants, sizes, and states for gamified UI experiences.',
+ },
+ },
+ },
+ tags: ['autodocs'],
+ argTypes: {
+ variant: {
+ control: 'select',
+ options: ['primary', 'secondary', 'success', 'danger', 'outline'],
+ description: 'Visual style variant',
+ table: {
+ defaultValue: { summary: 'primary' },
+ },
+ },
+ size: {
+ control: 'select',
+ options: ['sm', 'md', 'lg'],
+ description: 'Button size',
+ table: {
+ defaultValue: { summary: 'md' },
+ },
+ },
+ pixelated: {
+ control: 'boolean',
+ description: 'Enable retro pixel font style',
+ table: {
+ defaultValue: { summary: 'true' },
+ },
+ },
+ disabled: {
+ control: 'boolean',
+ description: 'Disable button interaction',
+ },
+ children: {
+ control: 'text',
+ description: 'Button content',
+ },
+ },
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+// Primary Stories
+export const Primary: Story = {
+ args: {
+ variant: 'primary',
+ children: 'Primary Button',
+ },
+};
+
+export const Secondary: Story = {
+ args: {
+ variant: 'secondary',
+ children: 'Secondary Button',
+ },
+};
+
+export const Success: Story = {
+ args: {
+ variant: 'success',
+ children: '✓ Success',
+ },
+};
+
+export const Danger: Story = {
+ args: {
+ variant: 'danger',
+ children: '✗ Danger',
+ },
+};
+
+export const Outline: Story = {
+ args: {
+ variant: 'outline',
+ children: 'Outline Button',
+ },
+};
+
+// Size Variations
+export const Small: Story = {
+ args: {
+ size: 'sm',
+ children: 'Small Button',
+ },
+};
+
+export const Medium: Story = {
+ args: {
+ size: 'md',
+ children: 'Medium Button',
+ },
+};
+
+export const Large: Story = {
+ args: {
+ size: 'lg',
+ children: 'Large Button',
+ },
+};
+
+// States
+export const Disabled: Story = {
+ args: {
+ disabled: true,
+ children: 'Disabled Button',
+ },
+};
+
+export const DisabledDanger: Story = {
+ args: {
+ variant: 'danger',
+ disabled: true,
+ children: 'Disabled Danger',
+ },
+};
+
+// Font Styles
+export const PixelatedFont: Story = {
+ args: {
+ pixelated: true,
+ children: 'Retro Pixel Font',
+ },
+};
+
+export const NonPixelatedFont: Story = {
+ args: {
+ pixelated: false,
+ children: 'Modern Sans Font',
+ },
+};
+
+// Interactive Examples
+export const WithEmoji: Story = {
+ args: {
+ variant: 'success',
+ size: 'lg',
+ children: '🎮 Level Up!',
+ },
+};
+
+export const XPButton: Story = {
+ args: {
+ variant: 'primary',
+ size: 'lg',
+ children: '+10 XP',
+ },
+};
+
+export const AchievementUnlocked: Story = {
+ args: {
+ variant: 'success',
+ size: 'lg',
+ children: '🏆 Achievement Unlocked!',
+ },
+};
+
+// All Variants Showcase
+export const AllVariants: Story = {
+ render: () => (
+
+ Primary
+ Secondary
+ Success
+ Danger
+ Outline
+
+ ),
+};
+
+// All Sizes Showcase
+export const AllSizes: Story = {
+ render: () => (
+
+ Small
+ Medium
+ Large
+
+ ),
+};
+
+// Gaming UI Examples
+export const GamingUIExamples: Story = {
+ render: () => (
+
+ ▶ Start Game
+ ⚙️ Settings
+ 💾 Save Progress
+ 🚪 Quit
+ 📊 Leaderboard
+
+ ),
+};
diff --git a/tsconfig.app.json b/tsconfig.app.json
index 2d8e38f..ad89696 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -38,6 +38,7 @@
"**/*.spec.ts",
"**/*.test.ts",
"**/*.spec.tsx",
- "**/*.test.tsx"
+ "**/*.test.tsx",
+ "**/*.mdx"
]
}
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 0000000..43d8768
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,13 @@
+{
+ "$schema": "https://openapi.vercel.sh/vercel.json",
+ "buildCommand": "pnpm build-storybook",
+ "outputDirectory": "storybook-static",
+ "installCommand": "pnpm install",
+ "framework": null,
+ "rewrites": [
+ {
+ "source": "/(.*)",
+ "destination": "/index.html"
+ }
+ ]
+}