diff --git a/.gitignore b/.gitignore index b6d7c5d172..33d2b2733e 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,6 @@ app-playground-data/* # labrinth demo fixtures apps/labrinth/fixtures/demo + +*storybook.log +storybook-static diff --git a/package.json b/package.json index 2983f038a9..1c19c0eb5d 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "prepr:frontend:lib": "turbo run prepr --filter=@modrinth/ui --filter=@modrinth/moderation --filter=@modrinth/assets --filter=@modrinth/blog --filter=@modrinth/api-client --filter=@modrinth/utils --filter=@modrinth/tooling-config", "prepr:frontend:web": "turbo run prepr --filter=@modrinth/frontend", "prepr:frontend:app": "turbo run prepr --filter=@modrinth/app-frontend", + "storybook": "pnpm --filter @modrinth/ui storybook", "icons:add": "pnpm --filter @modrinth/assets icons:add", "scripts": "node scripts/run.mjs" }, diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts new file mode 100644 index 0000000000..e8785224b6 --- /dev/null +++ b/packages/ui/.storybook/main.ts @@ -0,0 +1,17 @@ +import type { StorybookConfig } from '@storybook/vue3-vite' + +const config: StorybookConfig = { + framework: '@storybook/vue3-vite', + core: { + builder: '@storybook/builder-vite', + }, + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-themes', + '@storybook/addon-vitest', + '@storybook/addon-a11y', + '@storybook/addon-docs', + '@storybook/addon-onboarding', + ], +} +export default config diff --git a/packages/ui/.storybook/preview.ts b/packages/ui/.storybook/preview.ts new file mode 100644 index 0000000000..40323653fa --- /dev/null +++ b/packages/ui/.storybook/preview.ts @@ -0,0 +1,80 @@ +import '@modrinth/assets/omorphia.scss' +import 'floating-vue/dist/style.css' +import '../src/styles/tailwind.css' + +import { withThemeByClassName } from '@storybook/addon-themes' +import type { Preview } from '@storybook/vue3-vite' +import { setup } from '@storybook/vue3-vite' +import FloatingVue from 'floating-vue' +import { createI18n } from 'vue-i18n' + +import { + buildLocaleMessages, + createMessageCompiler, + type CrowdinMessages, +} from '../src/composables/i18n' + +// Load locale messages from the UI package's locales +// @ts-ignore +const localeModules = import.meta.glob('../src/locales/*/index.json', { + eager: true, +}) as Record + +// Set up vue-i18n for Storybook - provides useVIntl() context for components +const i18n = createI18n({ + legacy: false, + locale: 'en-US', + fallbackLocale: 'en-US', + messageCompiler: createMessageCompiler(), + missingWarn: false, + fallbackWarn: false, + messages: buildLocaleMessages(localeModules), +}) + +setup((app) => { + app.use(i18n) + app.use(FloatingVue, { + themes: { + 'ribbit-popout': { + $extend: 'dropdown', + placement: 'bottom-end', + instantMove: true, + distance: 8, + }, + 'dismissable-prompt': { + $extend: 'dropdown', + placement: 'bottom-start', + }, + }, + }) + + // Create teleport target for components that use + if (typeof document !== 'undefined' && !document.getElementById('teleports')) { + const teleportTarget = document.createElement('div') + teleportTarget.id = 'teleports' + document.body.appendChild(teleportTarget) + } +}) + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, + decorators: [ + withThemeByClassName({ + themes: { + light: 'light-mode', + dark: 'dark-mode', + oled: 'oled-mode', + }, + defaultTheme: 'dark', + }), + ], +} + +export default preview diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs index 3d6da7fb54..d73fb190f4 100644 --- a/packages/ui/eslint.config.mjs +++ b/packages/ui/eslint.config.mjs @@ -1,2 +1,15 @@ -import config from '@modrinth/tooling-config/eslint/nuxt.mjs' -export default config +import baseConfig from '@modrinth/tooling-config/eslint/nuxt.mjs' +import storybook from 'eslint-plugin-storybook' + +export default baseConfig.append([ + { + name: 'storybook', + files: ['**/*.stories.@(js|jsx|ts|tsx)', '**/.storybook/**/*.@(js|ts)'], + plugins: { + storybook, + }, + rules: { + ...storybook.configs.recommended.rules, + }, + }, +]) diff --git a/packages/ui/package.json b/packages/ui/package.json index 48bf5362d2..cc7ee17c0a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,7 @@ { "name": "@modrinth/ui", "version": "0.0.0", + "type": "module", "private": true, "main": "./index.ts", "types": "./index.ts", @@ -18,14 +19,34 @@ "scripts": { "lint": "eslint . && prettier --check .", "fix": "eslint . --fix && prettier --write .", - "intl:extract": "formatjs extract \"src/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore \"src/**/*.d.ts\" --out-file src/locales/en-US/index.json --preserve-whitespace" + "intl:extract": "formatjs extract \"src/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore \"src/**/*.d.ts\" --out-file src/locales/en-US/index.json --preserve-whitespace", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" }, "devDependencies": { "@formatjs/cli": "^6.2.12", "@modrinth/tooling-config": "workspace:*", + "@storybook/addon-a11y": "^10.1.10", + "@storybook/addon-docs": "^10.1.10", + "@storybook/addon-onboarding": "^10.1.10", + "@storybook/addon-themes": "^10.1.10", + "@storybook/addon-vitest": "^10.1.10", + "@storybook/builder-vite": "^10.1.10", + "@storybook/vue3-vite": "^10.1.10", "@stripe/stripe-js": "^7.3.1", + "@tailwindcss/vite": "^4.1.18", + "@vitejs/plugin-vue": "^5.2.1", + "@vitest/browser-playwright": "^4.0.16", + "@vitest/coverage-v8": "^4.0.16", + "eslint-plugin-storybook": "^10.1.10", + "playwright": "^1.57.0", + "storybook": "^10.1.10", "stripe": "^18.1.1", + "tailwindcss": "^3.4.4", "typescript": "^5.4.5", + "vite": "^5.4.6", + "vite-svg-loader": "^5.1.0", + "vitest": "^4.0.16", "vue": "^3.5.13", "vue-component-type-helpers": "^3.1.8", "vue-router": "^4.6.0" @@ -47,6 +68,7 @@ "@tresjs/post-processing": "^2.4.0", "@types/markdown-it": "^14.1.1", "@types/three": "^0.172.0", + "@vintl/how-ago": "^3.0.1", "@vueuse/core": "^11.1.0", "apexcharts": "^4.0.0", "dayjs": "^1.11.10", diff --git a/packages/ui/postcss.config.js b/packages/ui/postcss.config.js new file mode 100644 index 0000000000..1a5262473e --- /dev/null +++ b/packages/ui/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/ui/src/stories/add-stories.md b/packages/ui/src/stories/add-stories.md new file mode 100644 index 0000000000..04b775ea5a --- /dev/null +++ b/packages/ui/src/stories/add-stories.md @@ -0,0 +1,292 @@ +# Storybook Story Creation Guide + +This document provides instructions for AI assistants when creating Storybook stories for Vue components in the `@modrinth/ui` package. + +## File Location + +Stories should be placed in a `stories` subdirectory next to the component's directory: + +- Component: `src/components/base/MyComponent.vue` +- Story: `src/stories/base/MyComponent.stories.ts` + +Example with modal components: + +- Component: `src/components/modal/MyModal.vue` +- Story: `src/stories/modal/MyModal.stories.ts` + +## Basic Story Structure + +```typescript +import type { Meta, StoryObj } from '@storybook/vue3-vite' +import MyComponent from '../../components/base/MyComponent.vue' + +const meta = { + title: 'Base/MyComponent', // Category/ComponentName + component: MyComponent, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + // Default prop values + }, +} +``` + +## Key Principles + +### 1. Let Storybook Auto-Infer Props + +**DO NOT** manually define `argTypes`. + +```typescript +// ❌ BAD - Don't include prop types +const meta = { + argTypes: { + size: { control: 'select', options: ['small', 'medium', 'large'] }, + }, +} + +// ✅ GOOD - Let Storybook infer from component +const meta = { + component: MyComponent, +} +``` + +### 2. Use Render Functions for Slot Content + +When a component uses slots, provide a render function: + +```typescript +const meta = { + component: Accordion, + render: (args) => ({ + components: { Accordion }, + setup() { + return { args } + }, + template: /* html */ ` + + +

Accordion content here.

+
+ `, + }), +} satisfies Meta +``` + +### 3. Keep Stories Concise + +Instead of creating individual stories for every prop variant, use showcase stories: + +Make sure to type it as `StoryObj` when using render functions. + +```typescript +// ❌ BAD - Too many individual stories +export const Small: Story = { args: { size: 'small' } } +export const Medium: Story = { args: { size: 'medium' } } +export const Large: Story = { args: { size: 'large' } } + +// ✅ GOOD - One showcase story +export const AllSizes: StoryObj = { + render: () => ({ + components: { MyComponent }, + template: /* html */ ` +
+ Small + Medium + Large +
+ `, + }), +} +``` + +### 4. Required Stories + +Each component should have: + +- `Default` - Basic usage with controls +- `All[Variants]` - Showcase stories for major prop variations (e.g., `AllColors`, `AllSizes`, `AllTypes`) + +### 5. Handling Generic Vue Components + +For components with generics like `MyComponent`, add // @ts-ignore + +```typescript +const meta = { + title: 'Base/Combobox', + // @ts-ignore + component: Combobox, +} satisfies Meta +``` + +## Common Patterns + +### Components with Icons + +Import icons from `@modrinth/assets`: + +```typescript +import { SearchIcon, ChevronDownIcon } from '@modrinth/assets' + +export const WithIcon: Story = { + render: () => ({ + components: { MyComponent, SearchIcon }, + template: /* html */ ` + + + Search + + `, + }), + args: {}, +} +``` + +### Interactive Components (Modals, Dropdowns) + +For components that need user interaction to show: + +```typescript +export const Default: Story = { + render: () => ({ + components: { Modal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + return { modalRef } + }, + template: /* html */ ` +
+ + + + +

Modal content

+
+
+ `, + }), + args: {}, +} +``` + +### Components with v-model + +```typescript +export const Default: Story = { + render: () => ({ + components: { Toggle }, + setup() { + const value = ref(false) + return { value } + }, + template: /* html */ ` + + `, + }), + args: {}, +} +``` + +## Things to Avoid + +### 1. Don't Import from `@modrinth/ui` in Components + +Components should use relative imports, not the package alias: + +```typescript +// ❌ BAD - Causes circular dependency in Storybook +import { ButtonStyled } from '@modrinth/ui' + +// ✅ GOOD - Use relative imports +import ButtonStyled from '../base/ButtonStyled.vue' +``` + +### 2. Object/Array Prop Defaults Must Be Factory Functions + +This is a Vue requirement that `vue-docgen-plugin` enforces: + +```typescript +// ❌ BAD - Will cause Storybook build error +defineProps<{ icon: Component }>() +withDefaults(defineProps<{ icon: Component }>(), { + icon: TrashIcon, +}) + +// ✅ GOOD - Use factory function +withDefaults(defineProps<{ icon: Component }>(), { + icon: () => TrashIcon, +}) +``` + +## Dependencies Available in Storybook + +The following are configured in `.storybook/preview.ts`: + +- **VIntl**: `useVIntl()` and `formatMessage()` work automatically +- **Teleports**: `` has a target element +- **Tailwind CSS**: All Tailwind classes are available +- **Dark Mode**: Use `@storybook/addon-themes` for theme switching + +## Example: Complete Story File + +```typescript +import type { Meta, StoryObj } from '@storybook/vue3-vite' +import { ref } from 'vue' +import Badge from '../../components/base/Badge.vue' + +const meta = { + title: 'Base/Badge', + component: Badge, + render: (args) => ({ + components: { Badge }, + setup() { + return { args } + }, + template: /* html */ ` + Badge Text + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + color: 'green', + }, +} + +export const AllColors: StoryObj = { + render: () => ({ + components: { Badge }, + template: /* html */ ` +
+ Green + Red + Orange + Blue + Purple + Gray +
+ `, + }), +} + +export const AllTypes: StoryObj = { + render: () => ({ + components: { Badge }, + template: /* html */ ` +
+ Default + Outlined + Highlight +
+ `, + }), +} +``` diff --git a/packages/ui/src/stories/base/Accordion.stories.ts b/packages/ui/src/stories/base/Accordion.stories.ts new file mode 100644 index 0000000000..3e14a1ba84 --- /dev/null +++ b/packages/ui/src/stories/base/Accordion.stories.ts @@ -0,0 +1,188 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Accordion from '../../components/base/Accordion.vue' + +const meta = { + title: 'Base/Accordion', + component: Accordion, + render: (args) => ({ + components: { Accordion }, + setup() { + return { args } + }, + template: /*html*/ ` + + +

This is the accordion content that shows when expanded.

+
+ `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const OpenByDefault: Story = { + args: { + openByDefault: true, + }, +} + +export const ForceOpen: Story = { + args: { + forceOpen: true, + }, +} + +export const WithCustomButtonClass: StoryObj = { + render: () => ({ + components: { Accordion }, + template: /*html*/ ` + + +
+ server-001 + server-002 + server-003 +
+
+ `, + }), +} + +export const WithSummarySlot: StoryObj = { + render: () => ({ + components: { Accordion }, + template: /*html*/ ` + + + +
+ + +
+
+ `, + }), +} + +export const WithContentClass: StoryObj = { + render: () => ({ + components: { Accordion }, + template: /*html*/ ` + + +

This content has custom padding and background styling applied via contentClass.

+
+ `, + }), +} + +export const MultipleAccordions: StoryObj = { + render: () => ({ + components: { Accordion }, + template: /*html*/ ` +
+ + +
+

Welcome! This section covers the basics of getting started with the application.

+
+
+ + +
+

Learn how to configure your settings and customize the experience.

+
+
+ + +
+

Frequently asked questions and their answers.

+
+
+
+ `, + }), +} + +export const NestedContent: StoryObj = { + render: () => ({ + components: { Accordion }, + template: /*html*/ ` + + +
+
+ vue + ^3.5.0 +
+
+ typescript + ^5.0.0 +
+
+ vite + ^6.0.0 +
+
+
+ `, + }), +} + +export const AllStates: StoryObj = { + render: () => ({ + components: { Accordion }, + template: /*html*/ ` +
+
+

Default (collapsed)

+ + +

Hidden content revealed on click.

+
+
+
+

Open by default

+ + +

This content is visible by default.

+
+
+
+

Force open (no toggle)

+ + +

This accordion is always open and cannot be toggled.

+
+
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Admonition.stories.ts b/packages/ui/src/stories/base/Admonition.stories.ts new file mode 100644 index 0000000000..c3d5f73113 --- /dev/null +++ b/packages/ui/src/stories/base/Admonition.stories.ts @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Admonition from '../../components/base/Admonition.vue' + +const meta = { + title: 'Base/Admonition', + component: Admonition, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + body: 'This is an informational message.', + }, +} + +export const AllTypes: Story = { + render: () => ({ + components: { Admonition }, + template: /*html*/ ` +
+ + + +
+ `, + }), +} + +export const WithHeader: Story = { + args: { + type: 'warning', + header: 'Important Notice', + body: 'Please read this carefully before proceeding.', + }, +} diff --git a/packages/ui/src/stories/base/AppearingProgressBar.stories.ts b/packages/ui/src/stories/base/AppearingProgressBar.stories.ts new file mode 100644 index 0000000000..fefc34b584 --- /dev/null +++ b/packages/ui/src/stories/base/AppearingProgressBar.stories.ts @@ -0,0 +1,57 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import AppearingProgressBar from '../../components/base/AppearingProgressBar.vue' + +const meta = { + title: 'Base/AppearingProgressBar', + component: AppearingProgressBar, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + maxValue: 100, + currentValue: 45, + }, +} + +export const AllProgress: Story = { + ...Default, + render: () => ({ + components: { AppearingProgressBar }, + template: ` +
+
+

0%

+ +
+
+

25%

+ +
+
+

50%

+ +
+
+

75%

+ +
+
+

100%

+ +
+
+ `, + }), +} + +export const CustomTips: Story = { + args: { + maxValue: 1000000, + currentValue: 450000, + tips: ['Loading assets...', 'Processing data...', 'Almost there...'], + }, +} diff --git a/packages/ui/src/stories/base/AutoBrandIcon.stories.ts b/packages/ui/src/stories/base/AutoBrandIcon.stories.ts new file mode 100644 index 0000000000..d2990e8d1b --- /dev/null +++ b/packages/ui/src/stories/base/AutoBrandIcon.stories.ts @@ -0,0 +1,52 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import AutoBrandIcon from '../../components/base/AutoBrandIcon.vue' + +const meta = { + title: 'Base/AutoBrandIcon', + component: AutoBrandIcon, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + keyword: 'discord', + }, +} + +export const AllBrands: StoryObj = { + render: () => ({ + components: { AutoBrandIcon }, + template: ` +
+
+ + {{ brand }} +
+
+ `, + setup() { + const brands = [ + 'discord', + 'github', + 'twitter', + 'youtube', + 'twitch', + 'reddit', + 'mastodon', + 'bluesky', + 'patreon', + 'kofi', + 'paypal', + 'curseforge', + 'modrinth', + 'instagram', + 'facebook', + 'tiktok', + ] + return { brands } + }, + }), +} diff --git a/packages/ui/src/stories/base/AutoLink.stories.ts b/packages/ui/src/stories/base/AutoLink.stories.ts new file mode 100644 index 0000000000..1bb1fd26c8 --- /dev/null +++ b/packages/ui/src/stories/base/AutoLink.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import AutoLink from '../../components/base/AutoLink.vue' + +const meta = { + title: 'Base/AutoLink', + component: AutoLink, + render: (args) => ({ + components: { AutoLink }, + setup() { + return { args } + }, + template: /*html*/ ` + Link Text + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const ExternalLink: Story = { + args: { + to: 'https://modrinth.com', + }, +} + +export const InternalPath: Story = { + args: { + to: '/projects', + }, +} diff --git a/packages/ui/src/stories/base/Avatar.stories.ts b/packages/ui/src/stories/base/Avatar.stories.ts new file mode 100644 index 0000000000..451ad737af --- /dev/null +++ b/packages/ui/src/stories/base/Avatar.stories.ts @@ -0,0 +1,47 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Avatar from '../../components/base/Avatar.vue' + +const meta = { + title: 'Base/Avatar', + component: Avatar, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const WithImage: Story = { + args: { + src: 'https://cdn.modrinth.com/data/AANobbMI/icon.png', + alt: 'Project icon', + }, +} + +export const Circle: Story = { + args: { + src: 'https://cdn.modrinth.com/data/AANobbMI/icon.png', + circle: true, + }, +} + +export const AllSizes: Story = { + render: () => ({ + components: { Avatar }, + template: /*html*/ ` +
+ + + + +
+ `, + }), +} + +export const Placeholder: Story = { + args: { + size: '3rem', + }, +} diff --git a/packages/ui/src/stories/base/Badge.stories.ts b/packages/ui/src/stories/base/Badge.stories.ts new file mode 100644 index 0000000000..41138aa07c --- /dev/null +++ b/packages/ui/src/stories/base/Badge.stories.ts @@ -0,0 +1,54 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Badge from '../../components/base/Badge.vue' + +const meta = { + title: 'Base/Badge', + component: Badge, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + type: 'approved', + }, +} + +export const ProjectStatuses: StoryObj = { + render: () => ({ + components: { Badge }, + template: /*html*/ ` +
+ + + + + + + +
+ `, + }), +} + +export const UserRoles: StoryObj = { + render: () => ({ + components: { Badge }, + template: /*html*/ ` +
+ + + +
+ `, + }), +} + +export const WithColor: Story = { + args: { + type: 'release', + color: 'green', + }, +} diff --git a/packages/ui/src/stories/base/BulletDivider.stories.ts b/packages/ui/src/stories/base/BulletDivider.stories.ts new file mode 100644 index 0000000000..0dd69a9426 --- /dev/null +++ b/packages/ui/src/stories/base/BulletDivider.stories.ts @@ -0,0 +1,28 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import BulletDivider from '../../components/base/BulletDivider.vue' + +const meta = { + title: 'Base/BulletDivider', + component: BulletDivider, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const InContext: Story = { + render: () => ({ + components: { BulletDivider }, + template: /*html*/ ` +
+ Item 1 + + Item 2 + + Item 3 +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Button.stories.ts b/packages/ui/src/stories/base/Button.stories.ts new file mode 100644 index 0000000000..8c58271e03 --- /dev/null +++ b/packages/ui/src/stories/base/Button.stories.ts @@ -0,0 +1,83 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Button from '../../components/base/Button.vue' + +const meta = { + title: 'Base/Button', + component: Button, + render: (args) => ({ + components: { Button }, + setup() { + return { args } + }, + template: /*html*/ ` + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const Primary: Story = { + args: { + color: 'primary', + }, +} + +export const Danger: Story = { + args: { + color: 'danger', + }, +} + +export const AllColors: Story = { + render: () => ({ + components: { Button }, + template: /*html*/ ` +
+ + + + + + + + +
+ `, + }), +} + +export const Large: Story = { + args: { + large: true, + }, +} + +export const Outline: Story = { + args: { + outline: true, + }, +} + +export const Transparent: Story = { + args: { + transparent: true, + }, +} + +export const Disabled: Story = { + args: { + disabled: true, + }, +} + +export const AsLink: Story = { + args: { + link: 'https://modrinth.com', + external: true, + }, +} diff --git a/packages/ui/src/stories/base/ButtonStyled.stories.ts b/packages/ui/src/stories/base/ButtonStyled.stories.ts new file mode 100644 index 0000000000..52a83c170d --- /dev/null +++ b/packages/ui/src/stories/base/ButtonStyled.stories.ts @@ -0,0 +1,74 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ButtonStyled from '../../components/base/ButtonStyled.vue' + +const meta = { + title: 'Base/ButtonStyled', + component: ButtonStyled, + render: (args) => ({ + components: { ButtonStyled }, + setup() { + return { args } + }, + template: /*html*/ ` + + + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +// All colors showcase +export const AllColors: Story = { + render: () => ({ + components: { ButtonStyled }, + template: /*html*/ ` +
+ + + + + + + +
+ `, + }), +} + +// All sizes showcase +export const AllSizes: Story = { + render: () => ({ + components: { ButtonStyled }, + template: /*html*/ ` +
+ + + +
+ `, + }), +} + +// All types showcase +export const AllTypes: Story = { + render: () => ({ + components: { ButtonStyled }, + template: /*html*/ ` +
+ + + + + + + +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Card.stories.ts b/packages/ui/src/stories/base/Card.stories.ts new file mode 100644 index 0000000000..2d3e119aa9 --- /dev/null +++ b/packages/ui/src/stories/base/Card.stories.ts @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Card from '../../components/base/Card.vue' + +const meta = { + title: 'Base/Card', + component: Card, + render: (args) => ({ + components: { Card }, + setup() { + return { args } + }, + template: /*html*/ ` + + +

This is the card content.

+
+ `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const Collapsible: Story = { + args: { + collapsible: true, + }, +} + +export const CollapsedByDefault: Story = { + args: { + collapsible: true, + defaultCollapsed: true, + }, +} diff --git a/packages/ui/src/stories/base/Checkbox.stories.ts b/packages/ui/src/stories/base/Checkbox.stories.ts new file mode 100644 index 0000000000..a8e7f8b187 --- /dev/null +++ b/packages/ui/src/stories/base/Checkbox.stories.ts @@ -0,0 +1,56 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Checkbox from '../../components/base/Checkbox.vue' + +const meta = { + title: 'Base/Checkbox', + component: Checkbox, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + label: 'Accept terms and conditions', + modelValue: false, + }, +} + +export const Checked: Story = { + args: { + label: 'Accept terms and conditions', + modelValue: true, + }, +} + +export const Disabled: Story = { + args: { + label: 'Disabled checkbox', + modelValue: false, + disabled: true, + }, +} + +export const Indeterminate: Story = { + args: { + label: 'Indeterminate state', + modelValue: false, + indeterminate: true, + }, +} + +export const AllStates: StoryObj = { + render: () => ({ + components: { Checkbox }, + template: /*html*/ ` +
+ + + + + +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Chips.stories.ts b/packages/ui/src/stories/base/Chips.stories.ts new file mode 100644 index 0000000000..0aea5a53ea --- /dev/null +++ b/packages/ui/src/stories/base/Chips.stories.ts @@ -0,0 +1,45 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Chips from '../../components/base/Chips.vue' + +const meta = { + title: 'Base/Chips', + // @ts-ignore - error comes from generically typed component + component: Chips, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + items: ['Option 1', 'Option 2', 'Option 3'], + }, +} + +export const Small: Story = { + args: { + items: ['Option 1', 'Option 2', 'Option 3'], + size: 'small', + }, +} + +export const AllowEmpty: Story = { + args: { + items: ['Option 1', 'Option 2', 'Option 3'], + neverEmpty: false, + }, +} + +export const NoCapitalize: Story = { + args: { + items: ['Option 1', 'Option 2', 'Option 3'], + capitalize: false, + }, +} + +export const ManyItems: Story = { + args: { + items: ['Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta'], + }, +} diff --git a/packages/ui/src/stories/base/Collapsible.stories.ts b/packages/ui/src/stories/base/Collapsible.stories.ts new file mode 100644 index 0000000000..b26fcaeca0 --- /dev/null +++ b/packages/ui/src/stories/base/Collapsible.stories.ts @@ -0,0 +1,34 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Collapsible from '../../components/base/Collapsible.vue' + +const meta = { + title: 'Base/Collapsible', + component: Collapsible, + render: (args) => ({ + components: { Collapsible }, + setup() { + return { args } + }, + template: /*html*/ ` + +

This content can be collapsed or expanded.

+
+ `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + collapsed: false, + }, +} + +export const Collapsed: Story = { + args: { + collapsed: true, + }, +} diff --git a/packages/ui/src/stories/base/CollapsibleRegion.stories.ts b/packages/ui/src/stories/base/CollapsibleRegion.stories.ts new file mode 100644 index 0000000000..cfec08f2d9 --- /dev/null +++ b/packages/ui/src/stories/base/CollapsibleRegion.stories.ts @@ -0,0 +1,46 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import CollapsibleRegion from '../../components/base/CollapsibleRegion.vue' + +const meta = { + title: 'Base/CollapsibleRegion', + component: CollapsibleRegion, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => ({ + components: { CollapsibleRegion }, + template: ` + +
+

This is some content that can be collapsed or expanded.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+

Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+

Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.

+

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.

+

Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia.

+
+
+ `, + }), +} + +export const CustomLabels: Story = { + render: () => ({ + components: { CollapsibleRegion }, + template: ` + +
+

Custom expand and collapse labels.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+

Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+

Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.

+

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.

+
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Combobox.stories.ts b/packages/ui/src/stories/base/Combobox.stories.ts new file mode 100644 index 0000000000..14d072b4d0 --- /dev/null +++ b/packages/ui/src/stories/base/Combobox.stories.ts @@ -0,0 +1,46 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Combobox from '../../components/base/Combobox.vue' + +const meta = { + title: 'Base/Combobox', + // @ts-ignore - generic component + component: Combobox, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + options: [ + { value: '1', label: 'Option 1' }, + { value: '2', label: 'Option 2' }, + { value: '3', label: 'Option 3' }, + ], + triggerText: 'Select an option', + }, +} + +export const Searchable: Story = { + args: { + options: [ + { value: '1', label: 'Minecraft' }, + { value: '2', label: 'Fabric' }, + { value: '3', label: 'Forge' }, + { value: '4', label: 'NeoForge' }, + { value: '5', label: 'Quilt' }, + ], + triggerText: 'Select a loader', + searchable: true, + searchPlaceholder: 'Search loaders...', + }, +} + +export const Disabled: Story = { + args: { + options: [{ value: '1', label: 'Option 1' }], + triggerText: 'Disabled', + disabled: true, + }, +} diff --git a/packages/ui/src/stories/base/ContentPageHeader.stories.ts b/packages/ui/src/stories/base/ContentPageHeader.stories.ts new file mode 100644 index 0000000000..0eb2f5c523 --- /dev/null +++ b/packages/ui/src/stories/base/ContentPageHeader.stories.ts @@ -0,0 +1,63 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Avatar from '../../components/base/Avatar.vue' +import ButtonStyled from '../../components/base/ButtonStyled.vue' +import ContentPageHeader from '../../components/base/ContentPageHeader.vue' + +const meta = { + title: 'Base/ContentPageHeader', + component: ContentPageHeader, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => ({ + components: { ContentPageHeader, Avatar, ButtonStyled }, + template: ` + + + + + + + + `, + }), +} + +export const WithTitleSuffix: Story = { + render: () => ({ + components: { ContentPageHeader, Avatar, ButtonStyled }, + template: ` + + + + + + + + `, + }), +} diff --git a/packages/ui/src/stories/base/CopyCode.stories.ts b/packages/ui/src/stories/base/CopyCode.stories.ts new file mode 100644 index 0000000000..25b13d3964 --- /dev/null +++ b/packages/ui/src/stories/base/CopyCode.stories.ts @@ -0,0 +1,23 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import CopyCode from '../../components/base/CopyCode.vue' + +const meta = { + title: 'Base/CopyCode', + component: CopyCode, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + text: 'npm install @modrinth/ui', + }, +} + +export const LongText: Story = { + args: { + text: 'curl -X GET "https://api.modrinth.com/v2/project/sodium" -H "Accept: application/json"', + }, +} diff --git a/packages/ui/src/stories/base/DoubleIcon.stories.ts b/packages/ui/src/stories/base/DoubleIcon.stories.ts new file mode 100644 index 0000000000..752b655359 --- /dev/null +++ b/packages/ui/src/stories/base/DoubleIcon.stories.ts @@ -0,0 +1,26 @@ +import { DownloadIcon, HeartIcon } from '@modrinth/assets' +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import DoubleIcon from '../../components/base/DoubleIcon.vue' + +const meta = { + title: 'Base/DoubleIcon', + component: DoubleIcon, + render: (args) => ({ + components: { DoubleIcon, DownloadIcon, HeartIcon }, + setup() { + return { args } + }, + template: /*html*/ ` + + + + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} diff --git a/packages/ui/src/stories/base/DropArea.stories.ts b/packages/ui/src/stories/base/DropArea.stories.ts new file mode 100644 index 0000000000..863852ac72 --- /dev/null +++ b/packages/ui/src/stories/base/DropArea.stories.ts @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import DropArea from '../../components/base/DropArea.vue' + +const meta = { + title: 'Base/DropArea', + component: DropArea, +} satisfies Meta + +export default meta + +export const Default: StoryObj = { + render: () => ({ + components: { DropArea }, + template: ` + +
+

Drag and drop files anywhere on the page

+

The drop overlay will appear when you drag files over

+
+
+ `, + }), +} + +export const ImagesOnly: StoryObj = { + render: () => ({ + components: { DropArea }, + template: ` + +
+

Drop images here

+

Only accepts image files

+
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/DropdownSelect.stories.ts b/packages/ui/src/stories/base/DropdownSelect.stories.ts new file mode 100644 index 0000000000..b4361839e7 --- /dev/null +++ b/packages/ui/src/stories/base/DropdownSelect.stories.ts @@ -0,0 +1,36 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import DropdownSelect from '../../components/base/DropdownSelect.vue' + +const meta = { + title: 'Base/DropdownSelect', + component: DropdownSelect, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + name: 'dropdown', + options: ['Option 1', 'Option 2', 'Option 3'], + modelValue: 'Option 1', + }, +} + +export const ManyOptions: Story = { + args: { + name: 'sort', + options: ['Relevance', 'Downloads', 'Follows', 'Newest', 'Updated'], + modelValue: 'Relevance', + }, +} + +export const Disabled: Story = { + args: { + name: 'disabled', + options: ['Option 1', 'Option 2', 'Option 3'], + modelValue: 'Option 1', + disabled: true, + }, +} diff --git a/packages/ui/src/stories/base/DropzoneFileInput.stories.ts b/packages/ui/src/stories/base/DropzoneFileInput.stories.ts new file mode 100644 index 0000000000..2c3e123dcb --- /dev/null +++ b/packages/ui/src/stories/base/DropzoneFileInput.stories.ts @@ -0,0 +1,41 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import DropzoneFileInput from '../../components/base/DropzoneFileInput.vue' + +const meta = { + title: 'Base/DropzoneFileInput', + component: DropzoneFileInput, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const Small: Story = { + args: { + size: 'small', + }, +} + +export const MultipleFiles: Story = { + args: { + multiple: true, + primaryPrompt: 'Drag and drop multiple files', + secondaryPrompt: 'Select multiple files at once', + }, +} + +export const Disabled: Story = { + args: { + disabled: true, + }, +} + +export const CustomPrompts: Story = { + args: { + primaryPrompt: 'Drop your mod files here', + secondaryPrompt: 'Supports .jar and .zip files up to 25MB', + accept: '.jar,.zip', + }, +} diff --git a/packages/ui/src/stories/base/EnvironmentIndicator.stories.ts b/packages/ui/src/stories/base/EnvironmentIndicator.stories.ts new file mode 100644 index 0000000000..6253a4a502 --- /dev/null +++ b/packages/ui/src/stories/base/EnvironmentIndicator.stories.ts @@ -0,0 +1,53 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import EnvironmentIndicator from '../../components/base/EnvironmentIndicator.vue' + +const meta = { + title: 'Base/EnvironmentIndicator', + component: EnvironmentIndicator, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + type: 'mod', + clientSide: 'required', + serverSide: 'optional', + }, +} + +export const AllEnvironments: StoryObj = { + render: () => ({ + components: { EnvironmentIndicator }, + template: ` +
+
+ + Client (required client, optional server) +
+
+ + Server (optional client, required server) +
+
+ + Client and server (both required) +
+
+ + Client or server (both optional) +
+
+ + Unsupported +
+
+ + Type only +
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/ErrorInformationCard.stories.ts b/packages/ui/src/stories/base/ErrorInformationCard.stories.ts new file mode 100644 index 0000000000..05e813e272 --- /dev/null +++ b/packages/ui/src/stories/base/ErrorInformationCard.stories.ts @@ -0,0 +1,56 @@ +import { IssuesIcon } from '@modrinth/assets' +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ErrorInformationCard from '../../components/base/ErrorInformationCard.vue' + +const meta = { + title: 'Base/ErrorInformationCard', + component: ErrorInformationCard, + decorators: [ + (story) => ({ + components: { story }, + template: '
', + }), + ], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + title: 'Something went wrong', + description: 'An unexpected error occurred while processing your request.', + icon: IssuesIcon, + }, +} + +export const WithErrorDetails: Story = { + args: { + title: 'Connection Failed', + description: 'Unable to connect to the server.', + icon: IssuesIcon, + errorDetails: [ + { label: 'Error Code', value: 'ERR_CONNECTION_REFUSED', type: 'inline' }, + { label: 'Timestamp', value: '2024-01-15T10:30:00Z', type: 'inline' }, + { + label: 'Stack Trace', + value: 'Error: Connection refused\n at Socket.connect\n at Client.connect', + type: 'block', + }, + ], + }, +} + +export const WithAction: Story = { + args: { + title: 'Download Failed', + description: 'The file could not be downloaded. Please try again.', + icon: IssuesIcon, + action: { + label: 'Retry Download', + onClick: () => console.log('Retry clicked'), + color: 'brand', + }, + }, +} diff --git a/packages/ui/src/stories/base/FileInput.stories.ts b/packages/ui/src/stories/base/FileInput.stories.ts new file mode 100644 index 0000000000..57896a93b0 --- /dev/null +++ b/packages/ui/src/stories/base/FileInput.stories.ts @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import FileInput from '../../components/base/FileInput.vue' + +const meta = { + title: 'Base/FileInput', + component: FileInput, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + prompt: 'Select file', + }, +} + +export const Multiple: Story = { + args: { + prompt: 'Select files', + multiple: true, + }, +} + +export const ImagesOnly: Story = { + args: { + prompt: 'Select image', + accept: 'image/*', + }, +} + +export const Disabled: Story = { + args: { + prompt: 'Select file', + disabled: true, + }, +} diff --git a/packages/ui/src/stories/base/FilterBar.stories.ts b/packages/ui/src/stories/base/FilterBar.stories.ts new file mode 100644 index 0000000000..0afc9a5797 --- /dev/null +++ b/packages/ui/src/stories/base/FilterBar.stories.ts @@ -0,0 +1,51 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' +import { ref } from 'vue' + +import FilterBar from '../../components/base/FilterBar.vue' + +const meta = { + title: 'Base/FilterBar', + component: FilterBar, +} satisfies Meta + +export default meta + +export const Default: StoryObj = { + render: () => ({ + components: { FilterBar }, + setup() { + const selected = ref([]) + const options = [ + { id: 'active', message: { id: 'filter.active', defaultMessage: 'Active' } }, + { id: 'archived', message: { id: 'filter.archived', defaultMessage: 'Archived' } }, + { id: 'draft', message: { id: 'filter.draft', defaultMessage: 'Draft' } }, + ] + return { selected, options } + }, + template: ` + + `, + }), +} + +export const WithSelection: StoryObj = { + render: () => ({ + components: { FilterBar }, + setup() { + const selected = ref(['mods', 'plugins']) + const options = [ + { id: 'mods', message: { id: 'filter.mods', defaultMessage: 'Mods' } }, + { id: 'plugins', message: { id: 'filter.plugins', defaultMessage: 'Plugins' } }, + { + id: 'resourcepacks', + message: { id: 'filter.resourcepacks', defaultMessage: 'Resource Packs' }, + }, + { id: 'modpacks', message: { id: 'filter.modpacks', defaultMessage: 'Modpacks' } }, + ] + return { selected, options } + }, + template: ` + + `, + }), +} diff --git a/packages/ui/src/stories/base/HeadingLink.stories.ts b/packages/ui/src/stories/base/HeadingLink.stories.ts new file mode 100644 index 0000000000..fc1567a9d5 --- /dev/null +++ b/packages/ui/src/stories/base/HeadingLink.stories.ts @@ -0,0 +1,26 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import HeadingLink from '../../components/base/HeadingLink.vue' + +const meta = { + title: 'Base/HeadingLink', + component: HeadingLink, + render: (args) => ({ + components: { HeadingLink }, + setup() { + return { args } + }, + template: /*html*/ ` + View All Projects + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + to: '/projects', + }, +} diff --git a/packages/ui/src/stories/base/HorizontalRule.stories.ts b/packages/ui/src/stories/base/HorizontalRule.stories.ts new file mode 100644 index 0000000000..42220a0d71 --- /dev/null +++ b/packages/ui/src/stories/base/HorizontalRule.stories.ts @@ -0,0 +1,13 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import HorizontalRule from '../../components/base/HorizontalRule.vue' + +const meta = { + title: 'Base/HorizontalRule', + component: HorizontalRule, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} diff --git a/packages/ui/src/stories/base/LargeRadioButton.stories.ts b/packages/ui/src/stories/base/LargeRadioButton.stories.ts new file mode 100644 index 0000000000..60d15cf42a --- /dev/null +++ b/packages/ui/src/stories/base/LargeRadioButton.stories.ts @@ -0,0 +1,44 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import LargeRadioButton from '../../components/base/LargeRadioButton.vue' + +const meta = { + title: 'Base/LargeRadioButton', + // @ts-ignore + component: LargeRadioButton, +} satisfies Meta + +export default meta + +export const Default: StoryObj = { + render: () => ({ + components: { LargeRadioButton }, + template: ` + + Unselected option + + `, + }), +} + +export const AllStates: StoryObj = { + render: () => ({ + components: { LargeRadioButton }, + template: ` +
+ + Unselected option + + + Selected option + + + Disabled unselected + + + Disabled selected + +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/LoadingIndicator.stories.ts b/packages/ui/src/stories/base/LoadingIndicator.stories.ts new file mode 100644 index 0000000000..15ee2b4bd4 --- /dev/null +++ b/packages/ui/src/stories/base/LoadingIndicator.stories.ts @@ -0,0 +1,13 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import LoadingIndicator from '../../components/base/LoadingIndicator.vue' + +const meta = { + title: 'Base/LoadingIndicator', + component: LoadingIndicator, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} diff --git a/packages/ui/src/stories/base/MarkdownEditor.stories.ts b/packages/ui/src/stories/base/MarkdownEditor.stories.ts new file mode 100644 index 0000000000..0f8f07ebf4 --- /dev/null +++ b/packages/ui/src/stories/base/MarkdownEditor.stories.ts @@ -0,0 +1,41 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' +import { ref } from 'vue' + +import MarkdownEditor from '../../components/base/MarkdownEditor.vue' + +const meta = { + title: 'Base/MarkdownEditor', + component: MarkdownEditor, +} satisfies Meta + +export default meta + +export const Default: StoryObj = { + render: () => ({ + components: { MarkdownEditor }, + setup() { + const content = ref('# Hello World\n\nThis is some **markdown** content.') + return { content } + }, + template: ` +
+ +
+ `, + }), +} + +export const WithPlaceholder: StoryObj = { + render: () => ({ + components: { MarkdownEditor }, + setup() { + const content = ref('') + return { content } + }, + template: ` +
+ +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/OptionGroup.stories.ts b/packages/ui/src/stories/base/OptionGroup.stories.ts new file mode 100644 index 0000000000..b2633193c4 --- /dev/null +++ b/packages/ui/src/stories/base/OptionGroup.stories.ts @@ -0,0 +1,37 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import OptionGroup from '../../components/base/OptionGroup.vue' + +const meta = { + title: 'Base/OptionGroup', + // @ts-ignore - error comes from generically typed component + component: OptionGroup, + render: (args) => ({ + components: { OptionGroup }, + setup() { + return { args } + }, + template: /*html*/ ` + + + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + options: ['Option 1', 'Option 2', 'Option 3'], + modelValue: 'Option 1', + }, +} + +export const ManyOptions: Story = { + args: { + options: ['All', 'Mods', 'Plugins', 'Resource Packs', 'Modpacks', 'Shaders'], + modelValue: 'All', + }, +} diff --git a/packages/ui/src/stories/base/OverflowMenu.stories.ts b/packages/ui/src/stories/base/OverflowMenu.stories.ts new file mode 100644 index 0000000000..0adec75cf2 --- /dev/null +++ b/packages/ui/src/stories/base/OverflowMenu.stories.ts @@ -0,0 +1,81 @@ +import { MoreHorizontalIcon } from '@modrinth/assets' +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ButtonStyled from '../../components/base/ButtonStyled.vue' +import OverflowMenu from '../../components/base/OverflowMenu.vue' + +const meta = { + title: 'Base/OverflowMenu', + component: OverflowMenu, + render: (args) => ({ + components: { OverflowMenu, MoreHorizontalIcon, ButtonStyled }, + setup() { + return { args } + }, + template: /*html*/ ` + + + + + + + + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + options: [ + { id: 'edit', action: () => console.log('Edit clicked') }, + { id: 'share', action: () => console.log('Share clicked') }, + { divider: true }, + { id: 'delete', action: () => console.log('Delete clicked'), color: 'danger' }, + ], + }, +} + +export const WithDifferentPlacements: StoryObj = { + render: () => ({ + components: { OverflowMenu, MoreHorizontalIcon, ButtonStyled }, + template: /*html*/ ` +
+
+ bottom-end (default) + + + + + + + +
+
+ bottom-start + + + + + + + +
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Page.stories.ts b/packages/ui/src/stories/base/Page.stories.ts new file mode 100644 index 0000000000..83b87651b5 --- /dev/null +++ b/packages/ui/src/stories/base/Page.stories.ts @@ -0,0 +1,78 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Page from '../../components/base/Page.vue' + +const meta = { + title: 'Base/Page', + component: Page, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => ({ + components: { Page }, + template: ` + +
+

Page Content

+

This is the main content area of the page.

+
+
+ `, + }), +} + +export const WithSidebar: Story = { + render: () => ({ + components: { Page }, + template: ` + + +
+

Page Content

+

This is the main content area with a sidebar.

+
+
+ `, + }), +} + +export const WithHeaderAndFooter: Story = { + render: () => ({ + components: { Page }, + template: ` + + + +
+

Main Content

+

Content with header, sidebar, and footer.

+
+ +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Pagination.stories.ts b/packages/ui/src/stories/base/Pagination.stories.ts new file mode 100644 index 0000000000..2920c848ad --- /dev/null +++ b/packages/ui/src/stories/base/Pagination.stories.ts @@ -0,0 +1,46 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Pagination from '../../components/base/Pagination.vue' + +const meta = { + title: 'Base/Pagination', + component: Pagination, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + page: 1, + count: 10, + }, +} + +export const MiddlePage: Story = { + args: { + page: 5, + count: 10, + }, +} + +export const LastPage: Story = { + args: { + page: 10, + count: 10, + }, +} + +export const FewPages: Story = { + args: { + page: 1, + count: 3, + }, +} + +export const ManyPages: Story = { + args: { + page: 50, + count: 100, + }, +} diff --git a/packages/ui/src/stories/base/PopoutMenu.stories.ts b/packages/ui/src/stories/base/PopoutMenu.stories.ts new file mode 100644 index 0000000000..7e3d02a512 --- /dev/null +++ b/packages/ui/src/stories/base/PopoutMenu.stories.ts @@ -0,0 +1,94 @@ +import { SettingsIcon } from '@modrinth/assets' +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Button from '../../components/base/Button.vue' +import ButtonStyled from '../../components/base/ButtonStyled.vue' +import PopoutMenu from '../../components/base/PopoutMenu.vue' + +const meta = { + title: 'Base/PopoutMenu', + component: PopoutMenu, + render: (args) => ({ + components: { PopoutMenu, Button, ButtonStyled, SettingsIcon }, + setup() { + return { args } + }, + template: /*html*/ ` + + + + + + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const WithTooltip: Story = { + args: { + tooltip: 'Click for more options', + }, +} + +export const DifferentPlacements: StoryObj = { + render: () => ({ + components: { PopoutMenu, Button, ButtonStyled, SettingsIcon }, + template: /*html*/ ` +
+
+ bottom-end (default) + + + + + + +
+
+ bottom-start + + + + + + +
+
+ top-end + + + + + + +
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/PreviewSelectButton.stories.ts b/packages/ui/src/stories/base/PreviewSelectButton.stories.ts new file mode 100644 index 0000000000..170ff1b104 --- /dev/null +++ b/packages/ui/src/stories/base/PreviewSelectButton.stories.ts @@ -0,0 +1,133 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' +import { ref } from 'vue' + +import PreviewSelectButton from '../../components/base/PreviewSelectButton.vue' + +const meta = { + title: 'Base/PreviewSelectButton', + component: PreviewSelectButton, +} satisfies Meta + +export default meta + +export const Default: StoryObj = { + render: () => ({ + components: { PreviewSelectButton }, + template: ` + + + Option Label + + `, + }), +} + +export const AllStates: StoryObj = { + render: () => ({ + components: { PreviewSelectButton }, + template: ` +
+ + + Unchecked + + + + Checked + +
+ `, + }), +} + +export const InteractiveSelection: StoryObj = { + render: () => ({ + components: { PreviewSelectButton }, + setup() { + const selected = ref('dark') + return { selected } + }, + template: ` +
+

Selected: {{ selected }}

+
+ + + Light + + + + Dark + + + + OLED + +
+
+ `, + }), +} + +export const ColorSelection: StoryObj = { + render: () => ({ + components: { PreviewSelectButton }, + setup() { + const selected = ref('brand') + return { selected } + }, + template: ` +
+

Accent color: {{ selected }}

+
+ + + {{ color.charAt(0).toUpperCase() + color.slice(1) }} + +
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/ProgressBar.stories.ts b/packages/ui/src/stories/base/ProgressBar.stories.ts new file mode 100644 index 0000000000..56a1a75122 --- /dev/null +++ b/packages/ui/src/stories/base/ProgressBar.stories.ts @@ -0,0 +1,73 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ProgressBar from '../../components/base/ProgressBar.vue' + +const meta = { + title: 'Base/ProgressBar', + component: ProgressBar, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + progress: 0.5, + }, +} + +export const WithLabel: Story = { + args: { + progress: 0.75, + label: 'Uploading...', + showProgress: true, + }, +} + +export const AllColors: StoryObj = { + render: () => ({ + components: { ProgressBar }, + template: /*html*/ ` +
+ + + + + + + +
+ `, + }), +} + +export const Striped: Story = { + args: { + progress: 0.5, + striped: true, + }, +} + +export const AllStripedColors: StoryObj = { + render: () => ({ + components: { ProgressBar }, + template: /*html*/ ` +
+ + + + + + + +
+ `, + }), +} + +export const FullWidth: Story = { + args: { + progress: 0.5, + fullWidth: true, + }, +} diff --git a/packages/ui/src/stories/base/ProgressSpinner.stories.ts b/packages/ui/src/stories/base/ProgressSpinner.stories.ts new file mode 100644 index 0000000000..178ad6069a --- /dev/null +++ b/packages/ui/src/stories/base/ProgressSpinner.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ProgressSpinner from '../../components/base/ProgressSpinner.vue' + +const meta = { + title: 'Base/ProgressSpinner', + component: ProgressSpinner, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + progress: 0.5, + }, +} + +export const AllProgress: StoryObj = { + render: () => ({ + components: { ProgressSpinner }, + template: /*html*/ ` +
+ + + + + +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/ProjectCard.stories.ts b/packages/ui/src/stories/base/ProjectCard.stories.ts new file mode 100644 index 0000000000..46cfafc2fd --- /dev/null +++ b/packages/ui/src/stories/base/ProjectCard.stories.ts @@ -0,0 +1,213 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ProjectCard from '../../components/base/ProjectCard.vue' + +const meta = { + title: 'Base/ProjectCard', + component: ProjectCard, + decorators: [ + (story) => ({ + components: { story }, + template: '
', + }), + ], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + id: 'example-mod', + type: 'mod', + name: 'Example Mod', + author: 'ModAuthor', + description: + 'An example mod that demonstrates the ProjectCard component with a detailed description.', + iconUrl: 'https://cdn.modrinth.com/data/AANobbMI/icon.png', + downloads: '1234567', + follows: '12345', + createdAt: '2023-01-15T00:00:00Z', + updatedAt: '2024-01-15T00:00:00Z', + categories: ['adventure', 'decoration'], + projectTypeDisplay: 'Mod', + projectTypeUrl: 'mod', + clientSide: 'required', + serverSide: 'optional', + }, +} + +export const AllTypes: Story = { + render: () => ({ + components: { ProjectCard }, + template: ` +
+ + + + +
+ `, + }), +} + +export const WithStatus: Story = { + render: () => ({ + components: { ProjectCard }, + template: ` +
+ + +
+ `, + }), +} + +export const DisplayModes: StoryObj = { + decorators: [], // Remove default decorator for this story + render: () => ({ + components: { ProjectCard }, + template: ` +
+
+

Grid Mode

+
+ +
+
+
+

List Mode

+
+ +
+
+
+

Gallery Mode

+ +
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/RadialHeader.stories.ts b/packages/ui/src/stories/base/RadialHeader.stories.ts new file mode 100644 index 0000000000..7e174c13d9 --- /dev/null +++ b/packages/ui/src/stories/base/RadialHeader.stories.ts @@ -0,0 +1,53 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import RadialHeader from '../../components/base/RadialHeader.vue' + +const meta = { + title: 'Base/RadialHeader', + component: RadialHeader, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => ({ + components: { RadialHeader }, + template: ` + +

Radial Header Content

+
+ `, + }), +} + +export const AllColors: Story = { + render: () => ({ + components: { RadialHeader }, + template: ` +
+ +

Brand

+
+ +

Red

+
+ +

Orange

+
+ +

Green

+
+ +

Blue

+
+ +

Purple

+
+ +

Gray

+
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/RadioButtons.stories.ts b/packages/ui/src/stories/base/RadioButtons.stories.ts new file mode 100644 index 0000000000..32b85ea86e --- /dev/null +++ b/packages/ui/src/stories/base/RadioButtons.stories.ts @@ -0,0 +1,37 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import RadioButtons from '../../components/base/RadioButtons.vue' + +const meta = { + title: 'Base/RadioButtons', + // @ts-ignore - error comes from generically typed component + component: RadioButtons, + render: (args) => ({ + components: { RadioButtons }, + setup() { + return { args } + }, + template: /*html*/ ` + + + + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + items: ['Option 1', 'Option 2', 'Option 3'], + modelValue: 'Option 1', + }, +} + +export const ManyOptions: Story = { + args: { + items: ['Daily', 'Weekly', 'Monthly', 'Yearly'], + modelValue: 'Weekly', + }, +} diff --git a/packages/ui/src/stories/base/ScrollablePanel.stories.ts b/packages/ui/src/stories/base/ScrollablePanel.stories.ts new file mode 100644 index 0000000000..70ee3fc36d --- /dev/null +++ b/packages/ui/src/stories/base/ScrollablePanel.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ScrollablePanel from '../../components/base/ScrollablePanel.vue' + +const meta = { + title: 'Base/ScrollablePanel', + component: ScrollablePanel, + render: (args) => ({ + components: { ScrollablePanel }, + setup() { + return { args } + }, + template: /*html*/ ` + +
+

Item {{ i }}

+
+
+ `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const DisabledScrolling: Story = { + args: { + disableScrolling: true, + }, +} diff --git a/packages/ui/src/stories/base/ServerNotice.stories.ts b/packages/ui/src/stories/base/ServerNotice.stories.ts new file mode 100644 index 0000000000..92a92fed0e --- /dev/null +++ b/packages/ui/src/stories/base/ServerNotice.stories.ts @@ -0,0 +1,64 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ServerNotice from '../../components/base/ServerNotice.vue' + +const meta = { + title: 'Base/ServerNotice', + component: ServerNotice, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + level: 'info', + message: 'This is an informational server notice.', + dismissable: true, + }, +} + +export const AllLevels: StoryObj = { + render: () => ({ + components: { ServerNotice }, + template: ` +
+ + + +
+ `, + }), +} + +export const WithTitle: Story = { + args: { + level: 'warn', + message: 'Server maintenance is scheduled for tonight at midnight.', + dismissable: true, + title: 'Scheduled Maintenance', + }, +} + +export const NonDismissable: Story = { + args: { + level: 'critical', + message: 'Your account requires verification before you can upload projects.', + dismissable: false, + }, +} diff --git a/packages/ui/src/stories/base/SettingsLabel.stories.ts b/packages/ui/src/stories/base/SettingsLabel.stories.ts new file mode 100644 index 0000000000..3a5b105dcc --- /dev/null +++ b/packages/ui/src/stories/base/SettingsLabel.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import SettingsLabel from '../../components/base/SettingsLabel.vue' + +const meta = { + title: 'Base/SettingsLabel', + component: SettingsLabel, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + title: 'Setting Name', + }, +} + +export const WithDescription: Story = { + args: { + title: 'Enable Notifications', + description: 'Receive email notifications when someone follows your project.', + }, +} + +export const WithId: Story = { + args: { + id: 'setting-input', + title: 'Username', + description: 'Your unique username on the platform.', + }, +} diff --git a/packages/ui/src/stories/base/SimpleBadge.stories.ts b/packages/ui/src/stories/base/SimpleBadge.stories.ts new file mode 100644 index 0000000000..ecb68d613e --- /dev/null +++ b/packages/ui/src/stories/base/SimpleBadge.stories.ts @@ -0,0 +1,17 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import SimpleBadge from '../../components/base/SimpleBadge.vue' + +const meta = { + title: 'Base/SimpleBadge', + component: SimpleBadge, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + formattedName: 'Badge Text', + }, +} diff --git a/packages/ui/src/stories/base/Slider.stories.ts b/packages/ui/src/stories/base/Slider.stories.ts new file mode 100644 index 0000000000..4be91681ce --- /dev/null +++ b/packages/ui/src/stories/base/Slider.stories.ts @@ -0,0 +1,47 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Slider from '../../components/base/Slider.vue' + +const meta = { + title: 'Base/Slider', + component: Slider, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + modelValue: 50, + min: 0, + max: 100, + }, +} + +export const WithUnit: Story = { + args: { + modelValue: 50, + min: 0, + max: 100, + unit: '%', + }, +} + +export const WithSnapPoints: Story = { + args: { + modelValue: 25, + min: 0, + max: 100, + step: 25, + snapPoints: [0, 25, 50, 75, 100], + }, +} + +export const Disabled: Story = { + args: { + modelValue: 50, + min: 0, + max: 100, + disabled: true, + }, +} diff --git a/packages/ui/src/stories/base/SmartClickable.stories.ts b/packages/ui/src/stories/base/SmartClickable.stories.ts new file mode 100644 index 0000000000..b497ce9253 --- /dev/null +++ b/packages/ui/src/stories/base/SmartClickable.stories.ts @@ -0,0 +1,30 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import SmartClickable from '../../components/base/SmartClickable.vue' + +const meta = { + title: 'Base/SmartClickable', + component: SmartClickable, + render: (args) => ({ + components: { SmartClickable }, + setup() { + return { args } + }, + template: /*html*/ ` + + +
+

Clickable Card

+

The entire card is clickable

+
+
+ `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} diff --git a/packages/ui/src/stories/base/TagItem.stories.ts b/packages/ui/src/stories/base/TagItem.stories.ts new file mode 100644 index 0000000000..d3c8b6bb39 --- /dev/null +++ b/packages/ui/src/stories/base/TagItem.stories.ts @@ -0,0 +1,42 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import TagItem from '../../components/base/TagItem.vue' + +const meta = { + title: 'Base/TagItem', + component: TagItem, + render: (args) => ({ + components: { TagItem }, + setup() { + return { args } + }, + template: /*html*/ ` + Tag Name + `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const WithAction: Story = { + args: { + action: () => alert('Tag clicked!'), + }, +} + +export const MultipleTags: Story = { + render: () => ({ + components: { TagItem }, + template: /*html*/ ` +
+ Minecraft + Fabric + Adventure + Technology +
+ `, + }), +} diff --git a/packages/ui/src/stories/base/Timeline.stories.ts b/packages/ui/src/stories/base/Timeline.stories.ts new file mode 100644 index 0000000000..8a20767dde --- /dev/null +++ b/packages/ui/src/stories/base/Timeline.stories.ts @@ -0,0 +1,47 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Timeline from '../../components/base/Timeline.vue' + +const meta = { + title: 'Base/Timeline', + component: Timeline, + render: (args) => ({ + components: { Timeline }, + setup() { + return { args } + }, + template: /*html*/ ` + +
+
+ Event 1 +
+
+
+ Event 2 +
+
+
+ Event 3 +
+
+ `, + }), +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const FadeOutStart: Story = { + args: { + fadeOutStart: true, + }, +} + +export const FadeOutEnd: Story = { + args: { + fadeOutEnd: true, + }, +} diff --git a/packages/ui/src/stories/base/Toggle.stories.ts b/packages/ui/src/stories/base/Toggle.stories.ts new file mode 100644 index 0000000000..8ed45b3695 --- /dev/null +++ b/packages/ui/src/stories/base/Toggle.stories.ts @@ -0,0 +1,49 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import Toggle from '../../components/base/Toggle.vue' + +const meta = { + title: 'Base/Toggle', + component: Toggle, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + modelValue: false, + }, +} + +export const Checked: Story = { + args: { + modelValue: true, + }, +} + +export const Disabled: Story = { + args: { + modelValue: false, + disabled: true, + }, +} + +export const AllStates: Story = { + render: () => ({ + components: { Toggle }, + template: /*html*/ ` +
+
+ Off +
+
+ On +
+
+ Disabled +
+
+ `, + }), +} diff --git a/packages/ui/src/stories/base/UnsavedChangesPopup.stories.ts b/packages/ui/src/stories/base/UnsavedChangesPopup.stories.ts new file mode 100644 index 0000000000..5025671cd3 --- /dev/null +++ b/packages/ui/src/stories/base/UnsavedChangesPopup.stories.ts @@ -0,0 +1,77 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import UnsavedChangesPopup from '../../components/base/UnsavedChangesPopup.vue' + +const meta = { + title: 'Base/UnsavedChangesPopup', + // @ts-ignore + component: UnsavedChangesPopup, +} satisfies Meta + +export default meta + +export const Default: StoryObj = { + render: () => ({ + components: { UnsavedChangesPopup }, + template: ` +
+ +
+ `, + }), +} + +export const Saving: StoryObj = { + render: () => ({ + components: { UnsavedChangesPopup }, + template: ` +
+ +
+ `, + }), +} + +export const NoResetButton: StoryObj = { + render: () => ({ + components: { UnsavedChangesPopup }, + template: ` +
+ +
+ `, + }), +} + +export const Hidden: StoryObj = { + render: () => ({ + components: { UnsavedChangesPopup }, + template: ` +
+

No changes detected - popup is hidden

+ +
+ `, + }), +} diff --git a/packages/ui/src/stories/modal/NewModal.stories.ts b/packages/ui/src/stories/modal/NewModal.stories.ts new file mode 100644 index 0000000000..00691d122c --- /dev/null +++ b/packages/ui/src/stories/modal/NewModal.stories.ts @@ -0,0 +1,213 @@ +import type { StoryObj } from '@storybook/vue3-vite' +import { ref } from 'vue' + +import ButtonStyled from '../../components/base/ButtonStyled.vue' +import NewModal from '../../components/modal/NewModal.vue' + +const meta = { + title: 'Modal/NewModal', + component: NewModal, +} + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +

This is the modal content.

+

You can put any content here.

+
+
+ `, + }), +} + +export const WithActions: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +

Are you sure you want to proceed with this action?

+ +
+
+ `, + }), +} + +export const DangerFade: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +

Are you sure you want to delete this item? This action cannot be undone.

+ +
+
+ `, + }), +} + +export const WarningFade: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +

This action may have unintended consequences. Please review before proceeding.

+ +
+
+ `, + }), +} + +export const Scrollable: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +
+

+ This is paragraph {{ i }} of scrollable content. The modal will show fade indicators when scrolled. +

+
+ +
+
+ `, + }), +} + +export const MergedHeader: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +
+

Custom Header Area

+

This modal has the header merged with content and only shows a close button.

+
+
+
+ `, + }), +} + +export const NotClosable: Story = { + render: () => ({ + components: { NewModal, ButtonStyled }, + setup() { + const modalRef = ref | null>(null) + const openModal = () => modalRef.value?.show() + return { modalRef, openModal } + }, + template: ` +
+ + + + +

This modal cannot be closed by clicking outside or pressing escape.

+

Only the action button can close it.

+ +
+
+ `, + }), +} diff --git a/packages/ui/src/styles/tailwind.css b/packages/ui/src/styles/tailwind.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/packages/ui/src/styles/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/packages/ui/tailwind.config.ts b/packages/ui/tailwind.config.ts index 5ee87de44d..9c65061546 100644 --- a/packages/ui/tailwind.config.ts +++ b/packages/ui/tailwind.config.ts @@ -2,7 +2,12 @@ import preset from '@modrinth/tooling-config/tailwind/tailwind-preset.ts' import type { Config } from 'tailwindcss' const config: Config = { - content: ['./src/components/**/*.{js,vue,ts}', './src/pages/**/*.{js,vue,ts}'], + content: [ + './src/components/**/*.{js,vue,ts}', + './src/pages/**/*.{js,vue,ts}', + './src/stories/**/*.{js,vue,ts,mdx}', + './.storybook/**/*.{ts,js}', + ], presets: [preset], } diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts new file mode 100644 index 0000000000..f2e7932c4d --- /dev/null +++ b/packages/ui/vite.config.ts @@ -0,0 +1,44 @@ +import path from 'node:path' + +import vue from '@vitejs/plugin-vue' +import { defineConfig } from 'vite' +import svgLoader from 'vite-svg-loader' + +export default defineConfig({ + plugins: [ + vue(), + svgLoader({ + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + removeViewBox: false, + }, + }, + }, + ], + }, + }), + ], + cacheDir: '.vite', + + resolve: { + alias: { + '@': path.resolve(__dirname, 'src'), + }, + }, + + build: { + lib: { + entry: path.resolve(__dirname, 'index.ts'), + name: 'ModrinthUI', + formats: ['es'], + fileName: 'index', + }, + rollupOptions: { + external: ['vue'], + }, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a67d836bb3..cde5a1f37a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,7 +164,7 @@ importers: version: 1.0.7(vue@3.5.26(typescript@5.9.3)) '@vitejs/plugin-vue': specifier: ^6.0.3 - version: 6.0.3(vite@6.4.1(@types/node@20.19.27)(jiti@1.21.7)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + version: 6.0.3(vite@6.4.1(@types/node@20.19.27)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) autoprefixer: specifier: ^10.4.19 version: 10.4.23(postcss@8.5.6) @@ -191,7 +191,7 @@ importers: version: 5.9.3 vite: specifier: ^6.0.0 - version: 6.4.1(@types/node@20.19.27)(jiti@1.21.7)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + version: 6.4.1(@types/node@20.19.27)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vue-component-type-helpers: specifier: ^3.1.8 version: 3.2.1 @@ -214,19 +214,19 @@ importers: version: 0.9.6(prettier@3.7.4)(typescript@5.9.3) '@astrojs/starlight': specifier: ^0.32.2 - version: 0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) + version: 0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) '@modrinth/assets': specifier: workspace:* version: link:../../packages/assets astro: specifier: ^5.4.1 - version: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + version: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) sharp: specifier: ^0.33.5 version: 0.33.5 starlight-openapi: specifier: ^0.14.0 - version: 0.14.4(@astrojs/markdown-remark@6.3.10)(@astrojs/starlight@0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(openapi-types@12.1.3) + version: 0.14.4(@astrojs/markdown-remark@6.3.10)(@astrojs/starlight@0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(openapi-types@12.1.3) typescript: specifier: ^5.8.2 version: 5.9.3 @@ -271,7 +271,7 @@ importers: version: 0.172.0 '@vitejs/plugin-vue': specifier: ^6.0.3 - version: 6.0.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + version: 6.0.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@vue-email/components': specifier: ^0.0.21 version: 0.0.21(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) @@ -383,7 +383,7 @@ importers: version: 10.5.0 nuxt: specifier: ^3.20.2 - version: 3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2) + version: 3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2) postcss: specifier: ^8.4.39 version: 8.5.6 @@ -594,7 +594,7 @@ importers: version: 5.92.5(vue@3.5.26(typescript@5.9.3)) '@tresjs/cientos': specifier: ^4.3.0 - version: 4.3.1(@tresjs/core@4.3.6(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)))(@types/three@0.172.0)(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) + version: 4.3.1(@tresjs/core@4.3.6(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)))(@types/three@0.172.0)(react@19.2.3)(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) '@tresjs/core': specifier: ^4.3.4 version: 4.3.6(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) @@ -607,6 +607,9 @@ importers: '@types/three': specifier: ^0.172.0 version: 0.172.0 + '@vintl/how-ago': + specifier: ^3.0.1 + version: 3.0.1(@formatjs/intl@2.10.15(typescript@5.9.3)) '@vueuse/core': specifier: ^11.1.0 version: 11.3.0(vue@3.5.26(typescript@5.9.3)) @@ -665,15 +668,69 @@ importers: '@modrinth/tooling-config': specifier: workspace:* version: link:../tooling-config + '@storybook/addon-a11y': + specifier: ^10.1.10 + version: 10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/addon-docs': + specifier: ^10.1.10 + version: 10.1.11(@types/react@19.2.7)(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@storybook/addon-onboarding': + specifier: ^10.1.10 + version: 10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/addon-themes': + specifier: ^10.1.10 + version: 10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/addon-vitest': + specifier: ^10.1.10 + version: 10.1.11(@vitest/browser-playwright@4.0.16)(@vitest/browser@4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16))(@vitest/runner@4.0.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vitest@4.0.16) + '@storybook/builder-vite': + specifier: ^10.1.10 + version: 10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@storybook/vue3-vite': + specifier: ^10.1.10 + version: 10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3)) '@stripe/stripe-js': specifier: ^7.3.1 version: 7.9.0 + '@tailwindcss/vite': + specifier: ^4.1.18 + version: 4.1.18(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@vitejs/plugin-vue': + specifier: ^5.2.1 + version: 5.2.4(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3)) + '@vitest/browser-playwright': + specifier: ^4.0.16 + version: 4.0.16(playwright@1.57.0)(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16) + '@vitest/coverage-v8': + specifier: ^4.0.16 + version: 4.0.16(@vitest/browser@4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16))(vitest@4.0.16) + eslint-plugin-storybook: + specifier: ^10.1.10 + version: 10.1.11(eslint@9.39.2(jiti@2.6.1))(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + playwright: + specifier: ^1.57.0 + version: 1.57.0 + storybook: + specifier: ^10.1.10 + version: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) stripe: specifier: ^18.1.1 version: 18.5.0(@types/node@20.19.27) + tailwindcss: + specifier: ^3.4.4 + version: 3.4.19(yaml@2.8.2) typescript: specifier: ^5.4.5 version: 5.9.3 + vite: + specifier: ^5.4.6 + version: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + vite-svg-loader: + specifier: ^5.1.0 + version: 5.1.0(vue@3.5.26(typescript@5.9.3)) + vitest: + specifier: ^4.0.16 + version: 4.0.16(@types/node@20.19.27)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vue: specifier: ^3.5.13 version: 3.5.26(typescript@5.9.3) @@ -735,6 +792,9 @@ importers: packages: + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -918,6 +978,10 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + '@bomb.sh/tab@0.0.10': resolution: {integrity: sha512-6ALS2rh/4LKn0Yxwm35V6LcgQuSiECHbqQo7+9g4rkgGyXZ0siOc8K+IuWIq/4u0Zkv2mevP9QSqgKhGIvLJMw==} hasBin: true @@ -1021,6 +1085,12 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -1033,6 +1103,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.12': resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} @@ -1045,6 +1121,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.12': resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} @@ -1057,6 +1139,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.12': resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} @@ -1069,6 +1157,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.12': resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} @@ -1081,6 +1175,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.12': resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} @@ -1093,6 +1193,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} @@ -1105,6 +1211,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} @@ -1117,6 +1229,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.12': resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} @@ -1129,6 +1247,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.12': resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} @@ -1141,6 +1265,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.12': resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} @@ -1153,6 +1283,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.12': resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} @@ -1165,6 +1301,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.12': resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} @@ -1177,6 +1319,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.12': resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} @@ -1189,6 +1337,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.12': resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} @@ -1201,6 +1355,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.12': resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} @@ -1213,6 +1373,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.12': resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} @@ -1237,6 +1403,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} @@ -1261,6 +1433,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} @@ -1285,6 +1463,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.12': resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} @@ -1297,6 +1481,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.12': resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} @@ -1309,6 +1499,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.12': resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} @@ -1321,6 +1517,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.12': resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} @@ -1432,24 +1634,53 @@ packages: vue: optional: true + '@formatjs/ecma402-abstract@2.2.4': + resolution: {integrity: sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==} + '@formatjs/ecma402-abstract@2.3.6': resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} + '@formatjs/fast-memoize@2.2.3': + resolution: {integrity: sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==} + '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} '@formatjs/icu-messageformat-parser@2.11.4': resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} + '@formatjs/icu-messageformat-parser@2.9.4': + resolution: {integrity: sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==} + '@formatjs/icu-skeleton-parser@1.8.16': resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} + '@formatjs/icu-skeleton-parser@1.8.8': + resolution: {integrity: sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==} + + '@formatjs/intl-displaynames@6.8.5': + resolution: {integrity: sha512-85b+GdAKCsleS6cqVxf/Aw/uBd+20EM0wDpgaxzHo3RIR3bxF4xCJqH/Grbzx8CXurTgDDZHPdPdwJC+May41w==} + + '@formatjs/intl-listformat@7.7.5': + resolution: {integrity: sha512-Wzes10SMNeYgnxYiKsda4rnHP3Q3II4XT2tZyOgnH5fWuHDtIkceuWlRQNsvrI3uiwP4hLqp2XdQTCsfkhXulg==} + '@formatjs/intl-localematcher@0.5.10': resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==} + '@formatjs/intl-localematcher@0.5.8': + resolution: {integrity: sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==} + '@formatjs/intl-localematcher@0.6.2': resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + '@formatjs/intl@2.10.15': + resolution: {integrity: sha512-i6+xVqT+6KCz7nBfk4ybMXmbKO36tKvbMKtgFz9KV+8idYFyFbfwKooYk8kGjyA5+T5f1kEPQM5IDLXucTAQ9g==} + peerDependencies: + typescript: ^4.7 || 5 + peerDependenciesMeta: + typescript: + optional: true + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1872,6 +2103,12 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + '@miyaneee/rollup-plugin-json5@1.2.0': resolution: {integrity: sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==} peerDependencies: @@ -2800,6 +3037,99 @@ packages: '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@storybook/addon-a11y@10.1.11': + resolution: {integrity: sha512-3sr6HmcDgW1+TQAV9QtWBE3HlGyfFXVZY3RECTNLNH6fRC+rYQCItisvQIVxQpyftLSQ8EAMN9JQzs495MjWNg==} + peerDependencies: + storybook: ^10.1.11 + + '@storybook/addon-docs@10.1.11': + resolution: {integrity: sha512-Jwm291Fhim2eVcZIVlkG1B2skb0ZI9oru6nqMbJxceQZlvZmcIa4oxvS1oaMTKw2DJnCv97gLm57P/YvRZ8eUg==} + peerDependencies: + storybook: ^10.1.11 + + '@storybook/addon-onboarding@10.1.11': + resolution: {integrity: sha512-DNJv0IDl5XBrY+PPgwnMXLyp3omPkMOS6xe8ejG3csT71B6+3VueL6m7Qivh6739SnAV0QBU5SQlpMA0gQUcSA==} + peerDependencies: + storybook: ^10.1.11 + + '@storybook/addon-themes@10.1.11': + resolution: {integrity: sha512-tUX5C1ms+W4GFK8UBWd3Fq4irkLc3h092BqW90tZghcoOmGY/sfKR+PlcLhoaTs/kkHQSSHPrz8HSFR1AXVbHA==} + peerDependencies: + storybook: ^10.1.11 + + '@storybook/addon-vitest@10.1.11': + resolution: {integrity: sha512-YbZzeKO3v+Xr97/malT4DZIATkVZT5EHNYx3xzEfPVuk19dDETAVYXO+tzcqCQHsgdKQHkmd56vv8nN3J3/kvw==} + peerDependencies: + '@vitest/browser': ^3.0.0 || ^4.0.0 + '@vitest/browser-playwright': ^4.0.0 + '@vitest/runner': ^3.0.0 || ^4.0.0 + storybook: ^10.1.11 + vitest: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/runner': + optional: true + vitest: + optional: true + + '@storybook/builder-vite@10.1.11': + resolution: {integrity: sha512-MMD09Ap7FyzDfWG961pkIMv/w684XXe1bBEi+wCEpHxvrgAd3j3A9w/Rqp9Am2uRDPCEdi1QgSzS3SGW3aGThQ==} + peerDependencies: + storybook: ^10.1.11 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@storybook/csf-plugin@10.1.11': + resolution: {integrity: sha512-Ant0NhgqHKzQsseeVTSetZCuDHHs0W2HRkHt51Kg/sUl0T/sDtfVA+fWZT8nGzGZqYSFkxqYPWjauPmIhPtaRw==} + peerDependencies: + esbuild: '*' + rollup: '*' + storybook: ^10.1.11 + 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@2.0.1': + resolution: {integrity: sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==} + 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/react-dom-shim@10.1.11': + resolution: {integrity: sha512-o8WPhRlZbORUWG9lAgDgJP0pi905VHJUFJr1Kp8980gHqtlemtnzjPxKy5vFwj6glNhAlK8SS8OOYzWP7hloTQ==} + 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.1.11 + + '@storybook/vue3-vite@10.1.11': + resolution: {integrity: sha512-Kq5co2xdBhShYRzDfLlt1xoYiHo8RHOjX7wtsFQTtSwTKIPsm34j45pmGov4xEUMhfSf1PIor//spTzd1HDR9Q==} + peerDependencies: + storybook: ^10.1.11 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@storybook/vue3@10.1.11': + resolution: {integrity: sha512-1QnVCZUN9fZspK1933xL7xUqi1TZEMY58zxfIpgQnkVhkGmbK82e6kYzB+XhHrnuYt33E1Pc5QFV9/5CvYK0Xg==} + peerDependencies: + storybook: ^10.1.11 + vue: ^3.0.0 + '@stripe/stripe-js@7.9.0': resolution: {integrity: sha512-ggs5k+/0FUJcIgNY08aZTqpBTtbExkJMYMLSMwyucrhtWexVOEY1KJmhBsxf+E/Q15f5rbwBpj+t0t2AW2oCsQ==} engines: {node: '>=12.16'} @@ -2843,6 +3173,96 @@ packages: peerDependencies: vue: ^3.0.0 + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} + engines: {node: '>= 10'} + + '@tailwindcss/vite@4.1.18': + resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + '@tanstack/match-sorter-utils@8.19.4': resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} @@ -2957,6 +3377,20 @@ packages: '@tauri-apps/plugin-window-state@2.4.1': resolution: {integrity: sha512-OuvdrzyY8Q5Dbzpj+GcrnV1iCeoZbcFdzMjanZMMcAEUNy/6PH5pxZPXpaZLOR7whlzXiuzx0L9EKZbH7zpdRw==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tresjs/cientos@4.3.1': resolution: {integrity: sha512-3qp6lEtMrFdhxDuASP1Sz/hEi8+xcEpM6Vd6uDJysCh4uRAzyJLlBSbPoR7gVjN12wrhwJIF1AfYEFz/Vhz5ZQ==} peerDependencies: @@ -2987,9 +3421,18 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/dompurify@3.2.0': resolution: {integrity: sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg==} deprecated: This is a stub types definition. dompurify provides its own type definitions, so you do not need this installed. @@ -3062,6 +3505,9 @@ packages: resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -3268,6 +3714,11 @@ packages: engines: {node: '>=18'} hasBin: true + '@vintl/how-ago@3.0.1': + resolution: {integrity: sha512-np9L5xGtlV2Qtop15IRTeD8yFLCwHZ2tJx9iJnZSWCs8IlWnV7QjXZji0f7IKsK7a+M2LvmXRVIoYUOIhgh23w==} + peerDependencies: + '@formatjs/intl': ^2.7.1 + '@vitejs/plugin-vue-jsx@5.1.3': resolution: {integrity: sha512-I6Zr8cYVr5WHMW5gNOP09DNqW9rgO8RX73Wa6Czgq/0ndpTfJM4vfDChfOT1+3KtdrNqilNBtNlFwVeB02ZzGw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3275,6 +3726,13 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.0.0 + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + '@vitejs/plugin-vue@6.0.3': resolution: {integrity: sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3282,6 +3740,78 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.2.25 + '@vitest/browser-playwright@4.0.16': + resolution: {integrity: sha512-I2Fy/ANdphi1yI46d15o0M1M4M0UJrUiVKkH5oKeRZZCdPg0fw/cfTKZzv9Ge9eobtJYp4BGblMzXdXH0vcl5g==} + peerDependencies: + playwright: '*' + vitest: 4.0.16 + + '@vitest/browser@4.0.16': + resolution: {integrity: sha512-t4toy8X/YTnjYEPoY0pbDBg3EvDPg1elCDrfc+VupPHwoN/5/FNQ8Z+xBYIaEnOE2vVEyKwqYBzZ9h9rJtZVcg==} + peerDependencies: + vitest: 4.0.16 + + '@vitest/coverage-v8@4.0.16': + resolution: {integrity: sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==} + peerDependencies: + '@vitest/browser': 4.0.16 + vitest: 4.0.16 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/expect@4.0.16': + resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} + + '@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.16': + resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/pretty-format@4.0.16': + resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} + + '@vitest/runner@4.0.16': + resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} + + '@vitest/snapshot@4.0.16': + resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/spy@4.0.16': + resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@vitest/utils@4.0.16': + resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} + '@volar/kit@2.4.27': resolution: {integrity: sha512-ilZoQDMLzqmSsImJRWx4YiZ4FcvvPrPnFVmL6hSsIWB6Bn3qc7k88J9yP32dagrs5Y8EXIlvvD/mAFaiuEOACQ==} peerDependencies: @@ -3599,6 +4129,11 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -3643,6 +4178,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -3687,6 +4226,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -3694,6 +4236,16 @@ packages: array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + assert-never@1.4.0: + resolution: {integrity: sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-kit@1.4.3: resolution: {integrity: sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg==} engines: {node: '>=16.14.0'} @@ -3702,6 +4254,13 @@ packages: resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} engines: {node: '>=20.19.0'} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + ast-v8-to-istanbul@0.3.10: + resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} + ast-walker-scope@0.6.2: resolution: {integrity: sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==} engines: {node: '>=16.14.0'} @@ -3737,6 +4296,10 @@ packages: peerDependencies: postcss: ^8.1.0 + axe-core@4.11.0: + resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} + engines: {node: '>=4'} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -3749,6 +4312,10 @@ packages: react-native-b4a: optional: true + babel-walk@3.0.0-canary-5: + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} + engines: {node: '>= 10.0.0'} + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -3884,6 +4451,14 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3901,9 +4476,16 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + character-parser@2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chevrotain@7.1.1: resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} @@ -4040,6 +4622,9 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + constantinople@4.0.1: + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -4124,6 +4709,9 @@ packages: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -4204,6 +4792,10 @@ packages: decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + 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==} @@ -4285,6 +4877,15 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + doctypes@1.1.0: + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -4423,6 +5024,11 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -4524,6 +5130,12 @@ packages: peerDependencies: eslint: '>=5.0.0' + eslint-plugin-storybook@10.1.11: + resolution: {integrity: sha512-mbq2r2kK5+AcLl0XDJ3to91JOgzCbHOqj+J3n+FRw6drk+M1boRqMShSoMMm0HdzXPLmlr7iur+qJ5ZuhH6ayQ==} + peerDependencies: + eslint: '>=8' + storybook: ^10.1.11 + eslint-plugin-turbo@2.7.2: resolution: {integrity: sha512-rZs+l0vQcFo/37OiCWDcTIcksrVfvSBwS6/CI41wc3hA/hWxGOAbT1Diy9/+PBrh2VJts0SzBXb80SqGgVFFPQ==} peerDependencies: @@ -4582,6 +5194,9 @@ packages: jiti: optional: true + esm-resolve@1.0.11: + resolution: {integrity: sha512-LxF0wfUQm3ldUDHkkV2MIbvvY0TgzIpJ420jHSV1Dm+IlplBEWiJTKWM61GtxUfvjV6iD4OtTYFGAGM2uuIUWg==} + espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4661,6 +5276,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + expressive-code@0.40.2: resolution: {integrity: sha512-1zIda2rB0qiDZACawzw2rbdBQiWHBT56uBctS+ezFe5XMAaFaHLnnSYND/Kd+dVzO9HfCXRDpzH3d+3fvOWRcw==} @@ -4783,6 +5402,11 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4917,6 +5541,13 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -4999,6 +5630,9 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-escaper@3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} @@ -5108,6 +5742,9 @@ packages: intl-messageformat@10.7.18: resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} + intl-messageformat@10.7.7: + resolution: {integrity: sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==} + ioredis@5.8.2: resolution: {integrity: sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==} engines: {node: '>=12.22.0'} @@ -5156,6 +5793,9 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-expression@4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -5199,9 +5839,16 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + is-ssh@1.4.1: resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} @@ -5249,6 +5896,22 @@ packages: iso-3166-2@1.0.0: resolution: {integrity: sha512-xLAazfKZzwlsg/Zz/GQGQk3jJez5/2ORrjD3TjSuqz/arMht/xTK49c0GOE3afO/gEd9tHtBVVlfBla01unUng==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -5269,6 +5932,9 @@ packages: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} + js-stringify@1.0.2: + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5334,6 +6000,9 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jstransformer@1.0.0: + resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} + jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} @@ -5380,6 +6049,76 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -5434,6 +6173,9 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -5443,9 +6185,17 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + lucide-static@0.562.0: resolution: {integrity: sha512-TM2vNVOEsO3+ijmno7n/VmxUo0Shr9OXC/UqZc5n4xEVyXX4E4NVvXoRPAZiSsIsdvlQ7alGOcIC/QGtR+OgUQ==} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-regexp@0.10.0: resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} @@ -5463,6 +6213,10 @@ packages: magicast@0.5.1: resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -6099,6 +6853,10 @@ packages: 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'} + peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -6153,16 +6911,34 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} + hasBin: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.57.0: + resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.57.0: + resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} + engines: {node: '>=18'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + postcss-calc@10.1.1: resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} engines: {node: ^18.12 || ^20.9 || >=22.0} @@ -6477,6 +7253,10 @@ packages: resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} engines: {node: '>=20'} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -6488,6 +7268,9 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -6501,6 +7284,42 @@ packages: protocols@2.0.2: resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} + pug-attrs@3.0.0: + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} + + pug-code-gen@3.0.3: + resolution: {integrity: sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==} + + pug-error@2.1.0: + resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==} + + pug-filters@4.0.0: + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} + + pug-lexer@5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + + pug-linker@4.0.0: + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} + + pug-load@3.0.0: + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + + pug-parser@6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + + pug-runtime@3.0.1: + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} + + pug-strip-comments@2.0.0: + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + + pug-walk@2.0.0: + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} + + pug@3.0.3: + resolution: {integrity: sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==} + pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} @@ -6540,6 +7359,18 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + peerDependencies: + react: ^19.2.3 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -6576,6 +7407,10 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -6590,6 +7425,10 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -6782,6 +7621,9 @@ packages: sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + scslre@0.3.0: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} @@ -6883,6 +7725,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -6971,6 +7816,9 @@ packages: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} @@ -6998,6 +7846,15 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + storybook@10.1.11: + resolution: {integrity: sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} @@ -7134,6 +7991,9 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -7189,6 +8049,9 @@ packages: 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==} + tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} @@ -7197,6 +8060,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'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7205,6 +8080,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + token-stream@1.0.0: + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + tosource@2.0.0-alpha.3: resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==} engines: {node: '>=10'} @@ -7228,9 +8106,16 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-map@1.0.3: + resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==} + tsconfck@3.1.6: resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} @@ -7294,6 +8179,10 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -7525,6 +8414,11 @@ packages: resolution: {integrity: sha512-4oszoaEKE/mQOtAmdMWqIRHmkxWkUZMnXFnjQ5i01CuRSK3uluxcH1MRVVVWmhlnzT1SCDfKxxficm2G37qzCA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -7613,6 +8507,37 @@ packages: peerDependencies: vue: '>=3.2.13' + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vite@6.4.1: resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -7701,6 +8626,44 @@ packages: vite: optional: true + vitest@4.0.16: + resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.16 + '@vitest/browser-preview': 4.0.16 + '@vitest/browser-webdriverio': 4.0.16 + '@vitest/ui': 4.0.16 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + volar-service-css@0.0.67: resolution: {integrity: sha512-zV7C6enn9T9tuvQ6iSUyYEs34iPXR69Pf9YYWpbFYPWzVs22w96BtE8p04XYXbmjU6unt5oFt+iLL77bMB5fhA==} peerDependencies: @@ -7796,6 +8759,17 @@ packages: vue-bundle-renderer@2.2.0: resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==} + vue-component-meta@2.2.12: + resolution: {integrity: sha512-dQU6/obNSNbennJ1xd+rhDid4g3vQro+9qUBBIg8HMZH2Zs1jTpkFNxuQ3z77bOlU+ew08Qck9sbYkdSePr0Pw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vue-component-type-helpers@2.2.12: + resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} + vue-component-type-helpers@3.2.1: resolution: {integrity: sha512-gKV7XOkQl4urSuLHNY1tnVQf7wVgtb/mKbRyxSLWGZUY9RK7aDPhBenTjm+i8ZFe0zC2PZeHMPtOZXZfyaFOzQ==} @@ -7819,6 +8793,11 @@ packages: vue-devtools-stub@0.1.0: resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==} + vue-docgen-api@4.79.2: + resolution: {integrity: sha512-n9ENAcs+40awPZMsas7STqjkZiVlIjxIKgiJr5rSohDP0/JCrD9VtlzNojafsA1MChm/hz2h3PDtUedx3lbgfA==} + peerDependencies: + vue: '>=2' + vue-eslint-parser@10.2.0: resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7838,6 +8817,11 @@ packages: peerDependencies: vue: ^3.0.0 + vue-inbrowser-compiler-independent-utils@4.71.1: + resolution: {integrity: sha512-K3wt3iVmNGaFEOUR4JIThQRWfqokxLfnPslD41FDZB2ajXp789+wCqJyGYlIFsvEQ2P61PInw6/ph5iiqg51gg==} + peerDependencies: + vue: '>=2' + vue-multiselect@3.0.0: resolution: {integrity: sha512-uupKdINgz7j83lQToCL7KkgQQxvG43el++hsR39YT9pCe1DwzUGmKzPxjVP6rqskXed5P6DtUASYAlCliW740Q==} engines: {node: '>= 14.18.1', npm: '>= 6.14.15'} @@ -7938,10 +8922,19 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@5.0.0: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} + with@7.0.2: + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} + engines: {node: '>= 10.0.0'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -8086,6 +9079,8 @@ packages: snapshots: + '@adobe/css-tools@4.4.4': {} + '@alloc/quick-lru@5.2.0': {} '@alvarosabu/utils@3.2.0': {} @@ -8158,12 +9153,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))': + '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.10 '@mdx-js/mdx': 3.1.1 acorn: 8.15.0 - astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -8187,16 +9182,16 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight@0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))': + '@astrojs/starlight@0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))': dependencies: - '@astrojs/mdx': 4.3.13(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/mdx': 4.3.13(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) '@astrojs/sitemap': 3.6.0 '@pagefind/default-ui': 1.4.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) - astro-expressive-code: 0.40.2(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) + astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + astro-expressive-code: 0.40.2(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -8403,6 +9398,8 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@1.0.2': {} + '@bomb.sh/tab@0.0.10(cac@6.7.14)(citty@0.1.6)': optionalDependencies: cac: 6.7.14 @@ -8568,102 +9565,153 @@ snapshots: esquery: 1.7.0 jsdoc-type-pratt-parser: 4.1.0 + '@esbuild/aix-ppc64@0.21.5': + optional: true + '@esbuild/aix-ppc64@0.25.12': optional: true '@esbuild/aix-ppc64@0.27.2': optional: true + '@esbuild/android-arm64@0.21.5': + optional: true + '@esbuild/android-arm64@0.25.12': optional: true '@esbuild/android-arm64@0.27.2': optional: true + '@esbuild/android-arm@0.21.5': + optional: true + '@esbuild/android-arm@0.25.12': optional: true '@esbuild/android-arm@0.27.2': optional: true + '@esbuild/android-x64@0.21.5': + optional: true + '@esbuild/android-x64@0.25.12': optional: true '@esbuild/android-x64@0.27.2': optional: true + '@esbuild/darwin-arm64@0.21.5': + optional: true + '@esbuild/darwin-arm64@0.25.12': optional: true '@esbuild/darwin-arm64@0.27.2': optional: true + '@esbuild/darwin-x64@0.21.5': + optional: true + '@esbuild/darwin-x64@0.25.12': optional: true '@esbuild/darwin-x64@0.27.2': optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true + '@esbuild/freebsd-arm64@0.25.12': optional: true '@esbuild/freebsd-arm64@0.27.2': optional: true + '@esbuild/freebsd-x64@0.21.5': + optional: true + '@esbuild/freebsd-x64@0.25.12': optional: true '@esbuild/freebsd-x64@0.27.2': optional: true + '@esbuild/linux-arm64@0.21.5': + optional: true + '@esbuild/linux-arm64@0.25.12': optional: true '@esbuild/linux-arm64@0.27.2': optional: true + '@esbuild/linux-arm@0.21.5': + optional: true + '@esbuild/linux-arm@0.25.12': optional: true '@esbuild/linux-arm@0.27.2': optional: true + '@esbuild/linux-ia32@0.21.5': + optional: true + '@esbuild/linux-ia32@0.25.12': optional: true '@esbuild/linux-ia32@0.27.2': optional: true + '@esbuild/linux-loong64@0.21.5': + optional: true + '@esbuild/linux-loong64@0.25.12': optional: true '@esbuild/linux-loong64@0.27.2': optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + '@esbuild/linux-mips64el@0.25.12': optional: true '@esbuild/linux-mips64el@0.27.2': optional: true + '@esbuild/linux-ppc64@0.21.5': + optional: true + '@esbuild/linux-ppc64@0.25.12': optional: true '@esbuild/linux-ppc64@0.27.2': optional: true + '@esbuild/linux-riscv64@0.21.5': + optional: true + '@esbuild/linux-riscv64@0.25.12': optional: true '@esbuild/linux-riscv64@0.27.2': optional: true + '@esbuild/linux-s390x@0.21.5': + optional: true + '@esbuild/linux-s390x@0.25.12': optional: true '@esbuild/linux-s390x@0.27.2': optional: true + '@esbuild/linux-x64@0.21.5': + optional: true + '@esbuild/linux-x64@0.25.12': optional: true @@ -8676,6 +9724,9 @@ snapshots: '@esbuild/netbsd-arm64@0.27.2': optional: true + '@esbuild/netbsd-x64@0.21.5': + optional: true + '@esbuild/netbsd-x64@0.25.12': optional: true @@ -8688,6 +9739,9 @@ snapshots: '@esbuild/openbsd-arm64@0.27.2': optional: true + '@esbuild/openbsd-x64@0.21.5': + optional: true + '@esbuild/openbsd-x64@0.25.12': optional: true @@ -8700,24 +9754,36 @@ snapshots: '@esbuild/openharmony-arm64@0.27.2': optional: true + '@esbuild/sunos-x64@0.21.5': + optional: true + '@esbuild/sunos-x64@0.25.12': optional: true '@esbuild/sunos-x64@0.27.2': optional: true + '@esbuild/win32-arm64@0.21.5': + optional: true + '@esbuild/win32-arm64@0.25.12': optional: true '@esbuild/win32-arm64@0.27.2': optional: true + '@esbuild/win32-ia32@0.21.5': + optional: true + '@esbuild/win32-ia32@0.25.12': optional: true '@esbuild/win32-ia32@0.27.2': optional: true + '@esbuild/win32-x64@0.21.5': + optional: true + '@esbuild/win32-x64@0.25.12': optional: true @@ -8821,6 +9887,12 @@ snapshots: '@vue/compiler-core': 3.5.26 vue: 3.5.26(typescript@5.9.3) + '@formatjs/ecma402-abstract@2.2.4': + dependencies: + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/intl-localematcher': 0.5.8 + tslib: 2.8.1 + '@formatjs/ecma402-abstract@2.3.6': dependencies: '@formatjs/fast-memoize': 2.2.7 @@ -8828,6 +9900,10 @@ snapshots: decimal.js: 10.6.0 tslib: 2.8.1 + '@formatjs/fast-memoize@2.2.3': + dependencies: + tslib: 2.8.1 + '@formatjs/fast-memoize@2.2.7': dependencies: tslib: 2.8.1 @@ -8838,19 +9914,58 @@ snapshots: '@formatjs/icu-skeleton-parser': 1.8.16 tslib: 2.8.1 + '@formatjs/icu-messageformat-parser@2.9.4': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/icu-skeleton-parser': 1.8.8 + tslib: 2.8.1 + '@formatjs/icu-skeleton-parser@1.8.16': dependencies: '@formatjs/ecma402-abstract': 2.3.6 tslib: 2.8.1 + '@formatjs/icu-skeleton-parser@1.8.8': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + tslib: 2.8.1 + + '@formatjs/intl-displaynames@6.8.5': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/intl-localematcher': 0.5.8 + tslib: 2.8.1 + + '@formatjs/intl-listformat@7.7.5': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/intl-localematcher': 0.5.8 + tslib: 2.8.1 + '@formatjs/intl-localematcher@0.5.10': dependencies: tslib: 2.8.1 + '@formatjs/intl-localematcher@0.5.8': + dependencies: + tslib: 2.8.1 + '@formatjs/intl-localematcher@0.6.2': dependencies: tslib: 2.8.1 + '@formatjs/intl@2.10.15(typescript@5.9.3)': + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/icu-messageformat-parser': 2.9.4 + '@formatjs/intl-displaynames': 6.8.5 + '@formatjs/intl-listformat': 7.7.5 + intl-messageformat: 10.7.7 + tslib: 2.8.1 + optionalDependencies: + typescript: 5.9.3 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -9254,6 +10369,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.3)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.2.7 + react: 19.2.3 + '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.54.0)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.54.0) @@ -9323,11 +10444,11 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': + '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@nuxt/kit': 4.2.2(magicast@0.5.1) execa: 8.0.1 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) transitivePeerDependencies: - magicast @@ -9342,12 +10463,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - '@nuxt/devtools@3.1.1(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@nuxt/devtools@3.1.1(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) '@nuxt/devtools-wizard': 3.1.1 '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@vue/devtools-core': 8.0.5(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@vue/devtools-core': 8.0.5(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 birpc: 2.9.0 consola: 3.4.2 @@ -9372,9 +10493,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) - vite-plugin-vue-tracer: 1.2.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vite-plugin-vue-tracer: 1.2.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) which: 5.0.0 ws: 8.18.3 transitivePeerDependencies: @@ -9468,7 +10589,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@3.20.2(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(typescript@5.9.3)(xml2js@0.6.2)': + '@nuxt/nitro-server@3.20.2(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(typescript@5.9.3)(xml2js@0.6.2)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 3.20.2(magicast@0.5.1) @@ -9486,7 +10607,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.12.9(xml2js@0.6.2) - nuxt: 3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2) + nuxt: 3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 radix3: 1.1.2 @@ -9557,12 +10678,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/vite-builder@3.20.2(@types/node@20.19.27)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@3.20.2(@types/node@20.19.27)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2)': dependencies: '@nuxt/kit': 3.20.2(magicast@0.5.1) '@rollup/plugin-replace': 6.0.3(rollup@4.54.0) - '@vitejs/plugin-vue': 6.0.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) autoprefixer: 10.4.23(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -9578,7 +10699,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2) + nuxt: 3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2) ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.0.0 @@ -9589,9 +10710,9 @@ snapshots: std-env: 3.10.0 ufo: 1.6.1 unenv: 2.0.0-rc.24 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-node: 5.2.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3)) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite-node: 5.2.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3)) vue: 3.5.26(typescript@5.9.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: @@ -10261,6 +11382,114 @@ snapshots: '@speed-highlight/core@1.2.14': {} + '@standard-schema/spec@1.1.0': {} + + '@storybook/addon-a11y@10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + dependencies: + '@storybook/global': 5.0.0 + axe-core: 4.11.0 + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + + '@storybook/addon-docs@10.1.11(@types/react@19.2.7)(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.3) + '@storybook/csf-plugin': 10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/react-dom-shim': 10.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - esbuild + - rollup + - vite + - webpack + + '@storybook/addon-onboarding@10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + dependencies: + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + + '@storybook/addon-themes@10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + dependencies: + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + ts-dedent: 2.2.0 + + '@storybook/addon-vitest@10.1.11(@vitest/browser-playwright@4.0.16)(@vitest/browser@4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16))(@vitest/runner@4.0.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vitest@4.0.16)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + optionalDependencies: + '@vitest/browser': 4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16) + '@vitest/browser-playwright': 4.0.16(playwright@1.57.0)(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16) + '@vitest/runner': 4.0.16 + vitest: 4.0.16(@types/node@20.19.27)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + transitivePeerDependencies: + - react + - react-dom + + '@storybook/builder-vite@10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))': + dependencies: + '@storybook/csf-plugin': 10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + ts-dedent: 2.2.0 + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + transitivePeerDependencies: + - esbuild + - msw + - rollup + - webpack + + '@storybook/csf-plugin@10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))': + dependencies: + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.27.2 + rollup: 4.54.0 + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + + '@storybook/global@5.0.0': {} + + '@storybook/icons@2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@storybook/react-dom-shim@10.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + + '@storybook/vue3-vite@10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))': + dependencies: + '@storybook/builder-vite': 10.1.11(esbuild@0.27.2)(rollup@4.54.0)(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@storybook/vue3': 10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vue@3.5.26(typescript@5.9.3)) + magic-string: 0.30.21 + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + typescript: 5.9.3 + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + vue-component-meta: 2.2.12(typescript@5.9.3) + vue-docgen-api: 4.79.2(vue@3.5.26(typescript@5.9.3)) + transitivePeerDependencies: + - esbuild + - msw + - rollup + - vue + - webpack + + '@storybook/vue3@10.1.11(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vue@3.5.26(typescript@5.9.3))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + type-fest: 2.19.0 + vue: 3.5.26(typescript@5.9.3) + vue-component-type-helpers: 3.2.1 + '@stripe/stripe-js@7.9.0': {} '@stylistic/eslint-plugin@2.13.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': @@ -10315,6 +11544,74 @@ snapshots: dependencies: vue: 3.5.26(typescript@5.9.3) + '@tailwindcss/node@4.1.18': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.4 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 + + '@tailwindcss/oxide-android-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide@4.1.18': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/vite@4.1.18(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))': + dependencies: + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + tailwindcss: 4.1.18 + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + '@tanstack/match-sorter-utils@8.19.4': dependencies: remove-accents: 0.5.0 @@ -10408,7 +11705,31 @@ snapshots: dependencies: '@tauri-apps/api': 2.9.1 - '@tresjs/cientos@4.3.1(@tresjs/core@4.3.6(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)))(@types/three@0.172.0)(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))': + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.28.4 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + + '@tresjs/cientos@4.3.1(@tresjs/core@4.3.6(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)))(@types/three@0.172.0)(react@19.2.3)(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))': dependencies: '@tresjs/core': 4.3.6(three@0.172.0)(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) '@vueuse/core': 12.8.2(typescript@5.9.3) @@ -10416,7 +11737,7 @@ snapshots: stats-gl: 2.4.2(@types/three@0.172.0)(three@0.172.0) stats.js: 0.17.0 three: 0.172.0 - three-custom-shader-material: 5.4.0(three@0.172.0) + three-custom-shader-material: 5.4.0(react@19.2.3)(three@0.172.0) three-stdlib: 2.36.1(three@0.172.0) vue: 3.5.26(typescript@5.9.3) transitivePeerDependencies: @@ -10454,10 +11775,19 @@ snapshots: tslib: 2.8.1 optional: true + '@types/aria-query@5.0.4': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + '@types/dompurify@3.2.0': dependencies: dompurify: 3.3.1 @@ -10525,6 +11855,10 @@ snapshots: dependencies: parse-path: 7.1.0 + '@types/react@19.2.7': + dependencies: + csstype: 3.2.3 + '@types/resolve@1.20.2': {} '@types/rss@0.0.32': {} @@ -10791,29 +12125,165 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vintl/how-ago@3.0.1(@formatjs/intl@2.10.15(typescript@5.9.3))': + dependencies: + '@formatjs/intl': 2.10.15(typescript@5.9.3) + intl-messageformat: 10.7.18 + + '@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.58 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.28.5) - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vue: 3.5.26(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))': + dependencies: + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + vue: 3.5.26(typescript@5.9.3) + + '@vitejs/plugin-vue@6.0.3(vite@6.4.1(@types/node@20.19.27)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.53 + vite: 6.4.1(@types/node@20.19.27)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vue: 3.5.26(typescript@5.9.3) + + '@vitejs/plugin-vue@6.0.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.53 + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vue: 3.5.26(typescript@5.9.3) + + '@vitest/browser-playwright@4.0.16(playwright@1.57.0)(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16)': + dependencies: + '@vitest/browser': 4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16) + '@vitest/mocker': 4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + playwright: 1.57.0 + tinyrainbow: 3.0.3 + vitest: 4.0.16(@types/node@20.19.27)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16)': + dependencies: + '@vitest/mocker': 4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)) + '@vitest/utils': 4.0.16 + magic-string: 0.30.21 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.0.16(@types/node@20.19.27)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/coverage-v8@4.0.16(@vitest/browser@4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16))(vitest@4.0.16)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.0.16 + ast-v8-to-istanbul: 0.3.10 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magicast: 0.5.1 + obug: 2.1.1 + std-env: 3.10.0 + tinyrainbow: 3.0.3 + vitest: 4.0.16(@types/node@20.19.27)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + optionalDependencies: + '@vitest/browser': 4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.3(vite@6.4.1(@types/node@20.19.27)(jiti@1.21.7)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@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.16': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 + chai: 6.2.2 + tinyrainbow: 3.0.3 + + '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + + '@vitest/mocker@4.0.16(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))': + dependencies: + '@vitest/spy': 4.0.16 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1) + + '@vitest/mocker@4.0.16(vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 4.0.16 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@4.0.16': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.16': + dependencies: + '@vitest/utils': 4.0.16 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.16': + dependencies: + '@vitest/pretty-format': 4.0.16 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 6.4.1(@types/node@20.19.27)(jiti@1.21.7)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vue: 3.5.26(typescript@5.9.3) + tinyspy: 4.0.4 + + '@vitest/spy@4.0.16': {} - '@vitejs/plugin-vue@6.0.3(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vitest/utils@3.2.4': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vue: 3.5.26(typescript@5.9.3) + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@vitest/utils@4.0.16': + dependencies: + '@vitest/pretty-format': 4.0.16 + tinyrainbow: 3.0.3 '@volar/kit@2.4.27(typescript@5.9.3)': dependencies: @@ -11085,14 +12555,14 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@8.0.5(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vite-hot-client: 2.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) vue: 3.5.26(typescript@5.9.3) transitivePeerDependencies: - vite @@ -11258,6 +12728,8 @@ snapshots: dependencies: acorn: 8.15.0 + acorn@7.4.1: {} + acorn@8.15.0: {} agent-base@7.1.4: {} @@ -11296,6 +12768,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} ansi-to-html@0.7.2: @@ -11353,10 +12827,20 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + aria-query@5.3.2: {} array-iterate@2.0.1: {} + asap@2.0.6: {} + + assert-never@1.4.0: {} + + assertion-error@2.0.1: {} + ast-kit@1.4.3: dependencies: '@babel/parser': 7.28.5 @@ -11367,6 +12851,16 @@ snapshots: '@babel/parser': 7.28.5 pathe: 2.0.3 + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + ast-v8-to-istanbul@0.3.10: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + ast-walker-scope@0.6.2: dependencies: '@babel/parser': 7.28.5 @@ -11379,12 +12873,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.40.2(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)): + astro-expressive-code@0.40.2(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)): dependencies: - astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) rehype-expressive-code: 0.40.2 - astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2): + astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.5 @@ -11441,8 +12935,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.3(db0@0.3.4)(ioredis@5.8.2) vfile: 6.0.3 - vite: 6.4.1(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vitefu: 1.1.1(vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vite: 6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -11499,10 +12993,16 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 + axe-core@4.11.0: {} + axobject-query@4.1.0: {} b4a@1.7.3: {} + babel-walk@3.0.0-canary-5: + dependencies: + '@babel/types': 7.28.5 + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -11641,6 +13141,16 @@ snapshots: ccount@2.0.1: {} + 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.2: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11654,8 +13164,14 @@ snapshots: character-entities@2.0.2: {} + character-parser@2.2.0: + dependencies: + is-regex: 1.2.1 + character-reference-invalid@2.0.1: {} + check-error@2.1.1: {} + chevrotain@7.1.1: dependencies: regexp-to-ast: 0.5.0 @@ -11779,6 +13295,11 @@ snapshots: consola@3.4.2: {} + constantinople@4.0.1: + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + convert-source-map@2.0.0: {} cookie-es@1.2.2: {} @@ -11863,6 +13384,8 @@ snapshots: css-what@6.2.2: {} + css.escape@1.5.1: {} + cssesc@3.0.0: {} cssfilter@0.0.10: {} @@ -11935,6 +13458,8 @@ snapshots: dependencies: character-entities: 2.0.2 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -11986,6 +13511,12 @@ snapshots: dlv@1.1.3: {} + doctypes@1.1.0: {} + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -12114,6 +13645,32 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -12268,6 +13825,15 @@ snapshots: dependencies: eslint: 9.39.2(jiti@2.6.1) + eslint-plugin-storybook@10.1.11(eslint@9.39.2(jiti@2.6.1))(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): + dependencies: + '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + storybook: 10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-turbo@2.7.2(eslint@9.39.2(jiti@1.21.7))(turbo@2.7.2): dependencies: dotenv: 16.0.3 @@ -12418,6 +13984,8 @@ snapshots: transitivePeerDependencies: - supports-color + esm-resolve@1.0.11: {} + espree@10.4.0: dependencies: acorn: 8.15.0 @@ -12515,6 +14083,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + expect-type@1.3.0: {} + expressive-code@0.40.2: dependencies: '@expressive-code/core': 0.40.2 @@ -12638,6 +14208,9 @@ snapshots: fresh@2.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -12782,6 +14355,12 @@ snapshots: has-symbols@1.1.0: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash-sum@2.0.0: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -12985,6 +14564,8 @@ snapshots: hosted-git-info@2.8.9: {} + html-escaper@2.0.2: {} + html-escaper@3.0.3: {} html-minifier-terser@7.2.0: @@ -13098,6 +14679,13 @@ snapshots: '@formatjs/icu-messageformat-parser': 2.11.4 tslib: 2.8.1 + intl-messageformat@10.7.7: + dependencies: + '@formatjs/ecma402-abstract': 2.2.4 + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/icu-messageformat-parser': 2.9.4 + tslib: 2.8.1 + ioredis@5.8.2: dependencies: '@ioredis/commands': 1.4.0 @@ -13147,6 +14735,11 @@ snapshots: is-docker@3.0.0: {} + is-expression@4.0.0: + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -13176,10 +14769,19 @@ snapshots: is-plain-obj@4.1.0: {} + is-promise@2.2.2: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.8 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + is-ssh@1.4.1: dependencies: protocols: 2.0.2 @@ -13214,6 +14816,27 @@ snapshots: iso-3166-2@1.0.0: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -13234,6 +14857,8 @@ snapshots: js-cookie@3.0.5: {} + js-stringify@1.0.2: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -13280,6 +14905,11 @@ snapshots: jsonpointer@5.0.1: {} + jstransformer@1.0.0: + dependencies: + is-promise: 2.2.2 + promise: 7.3.1 + jszip@3.10.1: dependencies: lie: 3.3.0 @@ -13323,6 +14953,55 @@ snapshots: dependencies: immediate: 3.0.6 + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -13389,6 +15068,8 @@ snapshots: longest-streak@3.1.0: {} + loupe@3.2.1: {} + lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -13399,8 +15080,12 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@8.0.5: {} + lucide-static@0.562.0: {} + lz-string@1.5.0: {} + magic-regexp@0.10.0: dependencies: estree-walker: 3.0.3 @@ -13429,6 +15114,10 @@ snapshots: '@babel/types': 7.28.5 source-map-js: 1.2.1 + make-dir@4.0.0: + dependencies: + semver: 7.7.3 + markdown-extensions@2.0.0: {} markdown-it@13.0.2: @@ -14180,16 +15869,16 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2): + nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.2.2(magicast@0.5.1) '@nuxt/cli': 3.31.3(cac@6.7.14)(magicast@0.5.1) - '@nuxt/devtools': 3.1.1(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@nuxt/devtools': 3.1.1(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@nuxt/kit': 3.20.2(magicast@0.5.1) - '@nuxt/nitro-server': 3.20.2(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(typescript@5.9.3)(xml2js@0.6.2) + '@nuxt/nitro-server': 3.20.2(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(typescript@5.9.3)(xml2js@0.6.2) '@nuxt/schema': 3.20.2 '@nuxt/telemetry': 2.6.6(magicast@0.5.1) - '@nuxt/vite-builder': 3.20.2(@types/node@20.19.27)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2) + '@nuxt/vite-builder': 3.20.2(@types/node@20.19.27)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@3.20.2(@parcel/watcher@2.5.1)(@types/node@20.19.27)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2) '@unhead/vue': 2.1.1(vue@3.5.26(typescript@5.9.3)) '@vue/shared': 3.5.26 c12: 3.3.3(magicast@0.5.1) @@ -14596,6 +16285,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + peberminta@0.9.0: {} perfect-debounce@1.0.0: {} @@ -14629,6 +16320,10 @@ snapshots: pirates@4.0.7: {} + pixelmatch@7.1.0: + dependencies: + pngjs: 7.0.0 + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -14641,8 +16336,18 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + playwright-core@1.57.0: {} + + playwright@1.57.0: + dependencies: + playwright-core: 1.57.0 + optionalDependencies: + fsevents: 2.3.2 + pluralize@8.0.0: {} + pngjs@7.0.0: {} + postcss-calc@10.1.1(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -14875,12 +16580,22 @@ snapshots: pretty-bytes@7.1.0: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + prismjs@1.30.0: {} process-nextick-args@2.0.1: {} process@0.11.10: {} + promise@7.3.1: + dependencies: + asap: 2.0.6 + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -14892,6 +16607,73 @@ snapshots: protocols@2.0.2: {} + pug-attrs@3.0.0: + dependencies: + constantinople: 4.0.1 + js-stringify: 1.0.2 + pug-runtime: 3.0.1 + + pug-code-gen@3.0.3: + dependencies: + constantinople: 4.0.1 + doctypes: 1.1.0 + js-stringify: 1.0.2 + pug-attrs: 3.0.0 + pug-error: 2.1.0 + pug-runtime: 3.0.1 + void-elements: 3.1.0 + with: 7.0.2 + + pug-error@2.1.0: {} + + pug-filters@4.0.0: + dependencies: + constantinople: 4.0.1 + jstransformer: 1.0.0 + pug-error: 2.1.0 + pug-walk: 2.0.0 + resolve: 1.22.11 + + pug-lexer@5.0.1: + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.1.0 + + pug-linker@4.0.0: + dependencies: + pug-error: 2.1.0 + pug-walk: 2.0.0 + + pug-load@3.0.0: + dependencies: + object-assign: 4.1.1 + pug-walk: 2.0.0 + + pug-parser@6.0.0: + dependencies: + pug-error: 2.1.0 + token-stream: 1.0.0 + + pug-runtime@3.0.1: {} + + pug-strip-comments@2.0.0: + dependencies: + pug-error: 2.1.0 + + pug-walk@2.0.0: {} + + pug@3.0.3: + dependencies: + pug-code-gen: 3.0.3 + pug-filters: 4.0.0 + pug-lexer: 5.0.1 + pug-linker: 4.0.0 + pug-load: 3.0.0 + pug-parser: 6.0.0 + pug-runtime: 3.0.1 + pug-strip-comments: 2.0.0 + pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -14926,6 +16708,15 @@ snapshots: defu: 6.1.4 destr: 2.0.5 + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 + + react-is@17.0.2: {} + + react@19.2.3: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -14980,6 +16771,14 @@ snapshots: readdirp@5.0.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 + recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -15009,6 +16808,11 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + redis-errors@1.2.0: {} redis-parser@3.0.0: @@ -15271,6 +17075,8 @@ snapshots: sax@1.4.3: {} + scheduler@0.27.0: {} + scslre@0.3.0: dependencies: '@eslint-community/regexpp': 4.12.2 @@ -15455,6 +17261,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -15534,14 +17342,16 @@ snapshots: stable-hash-x@0.2.0: {} + stackback@0.0.2: {} + standard-as-callback@2.1.0: {} - starlight-openapi@0.14.4(@astrojs/markdown-remark@6.3.10)(@astrojs/starlight@0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(openapi-types@12.1.3): + starlight-openapi@0.14.4(@astrojs/markdown-remark@6.3.10)(@astrojs/starlight@0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(openapi-types@12.1.3): dependencies: '@astrojs/markdown-remark': 6.3.10 - '@astrojs/starlight': 0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/starlight': 0.32.6(astro@5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) '@readme/openapi-parser': 2.7.0(openapi-types@12.1.3) - astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + astro: 5.16.6(@types/node@20.19.27)(db0@0.3.4)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.54.0)(sass@1.97.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) github-slugger: 2.0.0 url-template: 3.1.1 transitivePeerDependencies: @@ -15558,6 +17368,29 @@ snapshots: std-env@3.10.0: {} + storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@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/spy': 3.2.4 + esbuild: 0.27.2 + open: 10.2.0 + recast: 0.23.11 + semver: 7.7.3 + use-sync-external-store: 1.6.0(react@19.2.3) + ws: 8.18.3 + optionalDependencies: + prettier: 3.7.4 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - react + - react-dom + - utf-8-validate + stream-replace-string@2.0.0: {} streamx@2.23.0: @@ -15728,6 +17561,8 @@ snapshots: - tsx - yaml + tailwindcss@4.1.18: {} + tapable@2.3.0: {} tar-stream@3.1.7: @@ -15768,13 +17603,15 @@ snapshots: dependencies: any-promise: 1.3.0 - three-custom-shader-material@5.4.0(three@0.172.0): + three-custom-shader-material@5.4.0(react@19.2.3)(three@0.172.0): dependencies: glsl-token-functions: 1.0.1 glsl-token-string: 1.0.1 glsl-tokenizer: 2.1.5 object-hash: 3.0.0 three: 0.172.0 + optionalDependencies: + react: 19.2.3 three-stdlib@2.36.1(three@0.172.0): dependencies: @@ -15797,6 +17634,8 @@ snapshots: tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} + tinyexec@1.0.2: {} tinyglobby@0.2.15: @@ -15804,12 +17643,20 @@ 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: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 toidentifier@1.0.1: {} + token-stream@1.0.0: {} + tosource@2.0.0-alpha.3: {} totalist@3.0.1: {} @@ -15824,8 +17671,12 @@ snapshots: dependencies: typescript: 5.9.3 + ts-dedent@2.2.0: {} + ts-interface-checker@0.1.13: {} + ts-map@1.0.3: {} + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 @@ -15869,6 +17720,8 @@ snapshots: type-fest@0.8.1: {} + type-fest@2.19.0: {} + type-fest@4.41.0: {} type-fest@5.3.1: @@ -16158,6 +18011,10 @@ snapshots: url-template@3.1.1: {} + use-sync-external-store@1.6.0(react@19.2.3): + dependencies: + react: 19.2.3 + util-deprecate@1.0.2: {} validate-npm-package-license@3.0.4: @@ -16180,23 +18037,23 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-dev-rpc@1.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): + vite-dev-rpc@1.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: birpc: 2.9.0 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-hot-client: 2.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite-hot-client: 2.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) - vite-hot-client@2.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): + vite-hot-client@2.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-node@5.2.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): + vite-node@5.2.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): dependencies: cac: 6.7.14 es-module-lexer: 1.7.0 obug: 2.1.1 pathe: 2.0.3 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -16210,7 +18067,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3)): + vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@2.2.12(typescript@5.9.3)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -16219,7 +18076,7 @@ snapshots: picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.39.2(jiti@2.6.1) @@ -16227,7 +18084,7 @@ snapshots: typescript: 5.9.3 vue-tsc: 2.2.12(typescript@5.9.3) - vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -16237,21 +18094,21 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-dev-rpc: 1.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite-dev-rpc: 1.1.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) optionalDependencies: '@nuxt/kit': 4.2.2(magicast@0.5.1) transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.2.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)): + vite-plugin-vue-tracer@1.2.0(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vue: 3.5.26(typescript@5.9.3) vite-svg-loader@5.1.0(vue@3.5.26(typescript@5.9.3)): @@ -16259,7 +18116,19 @@ snapshots: svgo: 3.3.2 vue: 3.5.26(typescript@5.9.3) - vite@6.4.1(@types/node@20.19.27)(jiti@1.21.7)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): + vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.54.0 + optionalDependencies: + '@types/node': 20.19.27 + fsevents: 2.3.3 + lightningcss: 1.30.2 + sass: 1.97.1 + terser: 5.44.1 + + vite@6.4.1(@types/node@20.19.27)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -16271,11 +18140,12 @@ snapshots: '@types/node': 20.19.27 fsevents: 2.3.3 jiti: 1.21.7 + lightningcss: 1.30.2 sass: 1.97.1 terser: 5.44.1 yaml: 2.8.2 - vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): + vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -16287,11 +18157,12 @@ snapshots: '@types/node': 20.19.27 fsevents: 2.3.3 jiti: 2.6.1 + lightningcss: 1.30.2 sass: 1.97.1 terser: 5.44.1 yaml: 2.8.2 - vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): + vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -16303,13 +18174,54 @@ snapshots: '@types/node': 20.19.27 fsevents: 2.3.3 jiti: 2.6.1 + lightningcss: 1.30.2 sass: 1.97.1 terser: 5.44.1 yaml: 2.8.2 - vitefu@1.1.1(vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): + vitefu@1.1.1(vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): optionalDependencies: - vite: 6.4.1(@types/node@20.19.27)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite: 6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + + vitest@4.0.16(@types/node@20.19.27)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): + dependencies: + '@vitest/expect': 4.0.16 + '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + '@vitest/pretty-format': 4.0.16 + '@vitest/runner': 4.0.16 + '@vitest/snapshot': 4.0.16 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 6.4.1(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.19.27 + '@vitest/browser-playwright': 4.0.16(playwright@1.57.0)(vite@5.4.21(@types/node@20.19.27)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1))(vitest@4.0.16) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + + void-elements@3.1.0: {} volar-service-css@0.0.67(@volar/language-service@2.4.27): dependencies: @@ -16412,6 +18324,17 @@ snapshots: dependencies: ufo: 1.6.1 + vue-component-meta@2.2.12(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.15 + '@vue/language-core': 2.2.12(typescript@5.9.3) + path-browserify: 1.0.1 + vue-component-type-helpers: 2.2.12 + optionalDependencies: + typescript: 5.9.3 + + vue-component-type-helpers@2.2.12: {} + vue-component-type-helpers@3.2.1: {} vue-confetti-explosion@1.0.2(vue@3.5.26(typescript@5.9.3)): @@ -16424,6 +18347,22 @@ snapshots: vue-devtools-stub@0.1.0: {} + vue-docgen-api@4.79.2(vue@3.5.26(typescript@5.9.3)): + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-sfc': 3.5.26 + ast-types: 0.16.1 + esm-resolve: 1.0.11 + hash-sum: 2.0.0 + lru-cache: 8.0.5 + pug: 3.0.3 + recast: 0.23.11 + ts-map: 1.0.3 + vue: 3.5.26(typescript@5.9.3) + vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.26(typescript@5.9.3)) + vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 4.4.3 @@ -16456,6 +18395,10 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.26(typescript@5.9.3) + vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.26(typescript@5.9.3)): + dependencies: + vue: 3.5.26(typescript@5.9.3) + vue-multiselect@3.0.0: {} vue-multiselect@3.0.0-alpha.2: {} @@ -16548,10 +18491,22 @@ snapshots: dependencies: isexe: 3.1.1 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@5.0.0: dependencies: string-width: 7.2.0 + with@7.0.2: + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + assert-never: 1.4.0 + babel-walk: 3.0.0-canary-5 + word-wrap@1.2.5: {} wrap-ansi@7.0.0: