diff --git a/apps/docs/src/remix-hook-form/password-field.stories.tsx b/apps/docs/src/remix-hook-form/password-field.stories.tsx new file mode 100644 index 00000000..8024e6e2 --- /dev/null +++ b/apps/docs/src/remix-hook-form/password-field.stories.tsx @@ -0,0 +1,231 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { PasswordField } from '@lambdacurry/forms/remix-hook-form/password-field'; +import { Button } from '@lambdacurry/forms/ui/button'; +import type { Meta, StoryContext, StoryObj } from '@storybook/react-vite'; +import { expect, userEvent } from '@storybook/test'; +import { useRef } from 'react'; +import { type ActionFunctionArgs, useFetcher } from 'react-router'; +import { RemixFormProvider, getValidatedFormData, useRemixForm } from 'remix-hook-form'; +import { z } from 'zod'; +import { withReactRouterStubDecorator } from '../lib/storybook/react-router-stub'; + +const formSchema = z + .object({ + password: z.string().min(8, 'Password must be at least 8 characters'), + confirmPassword: z.string().min(1, 'Please confirm your password'), + }) + .refine((data) => data.password === data.confirmPassword, { + message: "Passwords don't match", + path: ['confirmPassword'], + }); + +type FormData = z.infer; + +const INITIAL_PASSWORD = 'test123456'; +const WEAK_PASSWORD = '123'; +const WEAK_PASSWORD_ERROR = 'Password must be at least 8 characters'; +const MISMATCH_PASSWORD_ERROR = "Passwords don't match"; + +const CreateAccountForm = () => { + const fetcher = useFetcher<{ message: string; success: boolean }>(); + const methods = useRemixForm({ + resolver: zodResolver(formSchema), + defaultValues: { + password: INITIAL_PASSWORD, + confirmPassword: INITIAL_PASSWORD, + }, + fetcher, + submitConfig: { + action: '/', + method: 'post', + }, + }); + + const ref = useRef(null); + + return ( + + +
+
+

Create Account

+

Enter your password details to get started

+
+ + + + + +
+ + +
+ + + + {fetcher.data?.message && ( +

+ {fetcher.data.message} +

+ )} +
+
+
+ ); +}; + +const handleFormSubmission = async (request: Request) => { + const { data, errors } = await getValidatedFormData(request, zodResolver(formSchema)); + + if (errors) { + return { errors }; + } + + // Simulate account creation - data is validated at this point + console.log('Creating account with password length:', data.password.length); + return { + message: 'Account created successfully! Welcome aboard!', + success: true, + }; +}; + +const meta: Meta = { + title: 'RemixHookForm/PasswordField', + component: PasswordField, + parameters: { layout: 'centered' }, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj; + +// Test scenarios +const testDefaultValues = ({ canvas }: StoryContext) => { + const passwordInput = canvas.getByLabelText('Password'); + const confirmInput = canvas.getByLabelText('Confirm Password'); + expect(passwordInput).toHaveValue(INITIAL_PASSWORD); + expect(confirmInput).toHaveValue(INITIAL_PASSWORD); +}; + +const testPasswordVisibilityToggle = async ({ canvas }: StoryContext) => { + const passwordInput = canvas.getByLabelText('Password'); + + // Find the toggle button within the same form item as the password input + const formItem = + passwordInput.closest('[class*="FormItem"], .form-item, [data-testid="form-item"]') || + passwordInput.parentElement?.parentElement; + const toggleButton = formItem?.querySelector('button[aria-label="Show password"]') as HTMLElement; + + // Initially password should be hidden (type="password") + expect(passwordInput).toHaveAttribute('type', 'password'); + + // Click toggle to show password + await userEvent.click(toggleButton); + expect(passwordInput).toHaveAttribute('type', 'text'); + + // Find the hide button for the same field + const hideButton = formItem?.querySelector('button[aria-label="Hide password"]') as HTMLElement; + expect(hideButton).toBeInTheDocument(); + + // Click toggle to hide password again + await userEvent.click(hideButton); + expect(passwordInput).toHaveAttribute('type', 'password'); + + // Verify show button is back + const showButtonAgain = formItem?.querySelector('button[aria-label="Show password"]') as HTMLElement; + expect(showButtonAgain).toBeInTheDocument(); +}; + +const testWeakPasswordValidation = async ({ canvas }: StoryContext) => { + const passwordInput = canvas.getByLabelText('Password'); + const submitButton = canvas.getByRole('button', { name: 'Create Account' }); + + await userEvent.click(passwordInput); + await userEvent.clear(passwordInput); + await userEvent.type(passwordInput, WEAK_PASSWORD); + await userEvent.click(submitButton); + + await expect(await canvas.findByText(WEAK_PASSWORD_ERROR)).toBeInTheDocument(); +}; + +const testPasswordMismatchValidation = async ({ canvas }: StoryContext) => { + const passwordInput = canvas.getByLabelText('Password'); + const confirmInput = canvas.getByLabelText('Confirm Password'); + const submitButton = canvas.getByRole('button', { name: 'Create Account' }); + + await userEvent.click(passwordInput); + await userEvent.clear(passwordInput); + await userEvent.type(passwordInput, 'validpassword123'); + + await userEvent.click(confirmInput); + await userEvent.clear(confirmInput); + await userEvent.type(confirmInput, 'differentpassword123'); + + await userEvent.click(submitButton); + + await expect(await canvas.findByText(MISMATCH_PASSWORD_ERROR)).toBeInTheDocument(); +}; + +const testValidSubmission = async ({ canvas }: StoryContext) => { + const passwordInput = canvas.getByLabelText('Password'); + const confirmInput = canvas.getByLabelText('Confirm Password'); + const submitButton = canvas.getByRole('button', { name: 'Create Account' }); + + await userEvent.click(passwordInput); + await userEvent.clear(passwordInput); + await userEvent.type(passwordInput, 'validpassword123'); + + await userEvent.click(confirmInput); + await userEvent.clear(confirmInput); + await userEvent.type(confirmInput, 'validpassword123'); + + await userEvent.click(submitButton); + + const successMessage = await canvas.findByText('Account created successfully! Welcome aboard!'); + expect(successMessage).toBeInTheDocument(); +}; + +const testRefFunctionality = async ({ canvas }: StoryContext) => { + const refInput = canvas.getByLabelText('Ref Example'); + const focusButton = canvas.getByRole('button', { name: 'Focus' }); + + await userEvent.click(focusButton); + expect(refInput).toHaveFocus(); +}; + +// Single story that contains all variants and tests +export const CreateAccountExample: Story = { + play: async (storyContext) => { + testDefaultValues(storyContext); + await testPasswordVisibilityToggle(storyContext); + await testWeakPasswordValidation(storyContext); + await testPasswordMismatchValidation(storyContext); + await testValidSubmission(storyContext); + await testRefFunctionality(storyContext); + }, + decorators: [ + withReactRouterStubDecorator({ + routes: [ + { + path: '/', + Component: CreateAccountForm, + action: async ({ request }: ActionFunctionArgs) => handleFormSubmission(request), + }, + ], + }), + ], +}; diff --git a/package.json b/package.json index 16f2631c..1a9afef4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,10 @@ "name": "forms", "version": "0.2.0", "private": true, - "workspaces": ["apps/*", "packages/*"], + "workspaces": [ + "apps/*", + "packages/*" + ], "scripts": { "start": "yarn dev", "dev": "turbo run dev", diff --git a/packages/components/package.json b/packages/components/package.json index afc4cb8e..d57cc76d 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@lambdacurry/forms", - "version": "0.18.1", + "version": "0.19.0", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/components/src/remix-hook-form/index.ts b/packages/components/src/remix-hook-form/index.ts index fc225664..adf298c5 100644 --- a/packages/components/src/remix-hook-form/index.ts +++ b/packages/components/src/remix-hook-form/index.ts @@ -4,6 +4,7 @@ export * from './form-error'; export * from './date-picker'; export * from './dropdown-menu-select'; export * from './text-field'; +export * from './password-field'; export * from './radio-group'; export * from './radio-group-item'; export * from './switch'; diff --git a/packages/components/src/remix-hook-form/password-field.tsx b/packages/components/src/remix-hook-form/password-field.tsx new file mode 100644 index 00000000..58b926a2 --- /dev/null +++ b/packages/components/src/remix-hook-form/password-field.tsx @@ -0,0 +1,33 @@ +import type * as React from 'react'; +import { + PasswordField as BasePasswordField, + type PasswordInputProps as BasePasswordFieldProps, +} from '../ui/password-field'; +import { FormControl, FormDescription, FormLabel, FormMessage } from './form'; + +import { useRemixFormContext } from 'remix-hook-form'; + +export type PasswordFieldProps = Omit; + +export const PasswordField = function RemixPasswordField( + props: PasswordFieldProps & { ref?: React.Ref }, +) { + const { control } = useRemixFormContext(); + + // Merge the provided components with the default form components + const defaultComponents = { + FormControl, + FormLabel, + FormDescription, + FormMessage, + }; + + const components = { + ...defaultComponents, + ...props.components, + }; + + return ; +}; + +PasswordField.displayName = 'PasswordField'; diff --git a/packages/components/src/ui/index.ts b/packages/components/src/ui/index.ts index e7a37d02..bf3462dc 100644 --- a/packages/components/src/ui/index.ts +++ b/packages/components/src/ui/index.ts @@ -17,6 +17,7 @@ export * from './switch'; export * from './switch-field'; export * from './text-field'; export * from './text-input'; +export * from './password-field'; export * from './textarea-field'; export * from './textarea'; export * from './utils'; diff --git a/packages/components/src/ui/password-field.tsx b/packages/components/src/ui/password-field.tsx new file mode 100644 index 00000000..650e8c37 --- /dev/null +++ b/packages/components/src/ui/password-field.tsx @@ -0,0 +1,123 @@ +import { Eye, EyeOff } from 'lucide-react'; +import type * as React from 'react'; +import { useState } from 'react'; +import type { Control, FieldPath, FieldValues } from 'react-hook-form'; +import { + type FieldComponents, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from './form'; +import { type InputProps, TextInput } from './text-input'; +import { cn } from './utils'; + +export interface PasswordToggleButtonProps { + isVisible: boolean; + onToggle: () => void; + className?: string; +} + +export const PasswordToggleButton = ({ isVisible, onToggle, className }: PasswordToggleButtonProps) => { + return ( + + ); +}; + +// Create a specific interface for the password input props +export interface PasswordInputProps extends Omit { + control?: Control; + name: FieldPath; + label?: string | React.ReactNode; + description?: string; + components?: Partial & { + Input?: React.ComponentType>; + }; + prefix?: React.ReactNode; + className?: string; +} + +export const PasswordField = function PasswordField({ + control, + name, + label, + description, + className, + components, + prefix, + ref, + ...props +}: PasswordInputProps & { ref?: React.Ref }) { + const [isVisible, setIsVisible] = useState(false); + + // Use the custom Input component if provided, otherwise use the default TextInput + const InputComponent = components?.Input || TextInput; + + const toggleVisibility = () => { + setIsVisible(!isVisible); + }; + + return ( + { + return ( + + {label && {label}} +
+ {prefix && ( +
+ {prefix} +
+ )} +
+ + + +
+ +
+
+
+ {description && {description}} + {fieldState.error && ( + {fieldState.error.message} + )} +
+ ); + }} + /> + ); +}; + +PasswordField.displayName = 'PasswordField'; diff --git a/yarn.lock b/yarn.lock index 3b098463..959eeb26 100644 --- a/yarn.lock +++ b/yarn.lock @@ -870,9 +870,9 @@ __metadata: linkType: hard "@date-fns/tz@npm:^1.2.0": - version: 1.2.0 - resolution: "@date-fns/tz@npm:1.2.0" - checksum: 10c0/411e9d4303b10951f6fd0189d18fb845f0d934a575df2176bc10daf664282c765fb6b057a977e446bbb1229151d89e7788978600a019f1fc24b5c75276d496bd + version: 1.3.1 + resolution: "@date-fns/tz@npm:1.3.1" + checksum: 10c0/f0d8822a4aa17b271481d85b2bdae8bdd25b38caaf2a52513310fa1d6e7fbf071e66dbc93766d5eb5473ffd14b0d674e4e8b6d297de507b1bacc78f4387154ad languageName: node linkType: hard @@ -1104,34 +1104,34 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^1.7.2": - version: 1.7.2 - resolution: "@floating-ui/core@npm:1.7.2" +"@floating-ui/core@npm:^1.7.3": + version: 1.7.3 + resolution: "@floating-ui/core@npm:1.7.3" dependencies: "@floating-ui/utils": "npm:^0.2.10" - checksum: 10c0/ea5909ae1bfad6d8dd60ab893c7751fd974d96b25481d13805935a089b39881b4d69425a0a84cc74c82269d8b64ca0117c472fc83e425143bee1bb21b247de9c + checksum: 10c0/edfc23800122d81df0df0fb780b7328ae6c5f00efbb55bd48ea340f4af8c5b3b121ceb4bb81220966ab0f87b443204d37105abdd93d94846468be3243984144c languageName: node linkType: hard -"@floating-ui/dom@npm:^1.7.2": - version: 1.7.2 - resolution: "@floating-ui/dom@npm:1.7.2" +"@floating-ui/dom@npm:^1.7.3": + version: 1.7.3 + resolution: "@floating-ui/dom@npm:1.7.3" dependencies: - "@floating-ui/core": "npm:^1.7.2" + "@floating-ui/core": "npm:^1.7.3" "@floating-ui/utils": "npm:^0.2.10" - checksum: 10c0/1b2ad76dc7fe245a1bb406cd5b64a1316f2ec642aebaa4d1928b56ced6fe71046f089e3fef9340bab234645b6333546211e363a630a9e7cfca6bf5031c39e0cb + checksum: 10c0/cba30e9af1a52fb7cb443ae516d7aec032b33da2fa50914dcb18fc834dc31c71922f5c7653431e70d493f347018b2ce6435c98b3f154d92082345689b4458e59 languageName: node linkType: hard "@floating-ui/react-dom@npm:^2.0.0": - version: 2.1.4 - resolution: "@floating-ui/react-dom@npm:2.1.4" + version: 2.1.5 + resolution: "@floating-ui/react-dom@npm:2.1.5" dependencies: - "@floating-ui/dom": "npm:^1.7.2" + "@floating-ui/dom": "npm:^1.7.3" peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 10c0/2dade6b8e18de09c90b876249756155ab31f49b5a81d246a3dc568d0355bc9e4bc26485dfd27b9e3bf86585700f4d241e8f53e8321249ec9b012a266a86b9366 + checksum: 10c0/2dc9571845138e5f39952900fa4d1ad077968c97c1fd1eae30e624db42a29f6fc897c11f926b5e63c468d541eff78b41c2aa1ec45eed2f3a1cc8aa95898f3260 languageName: node linkType: hard @@ -1707,8 +1707,8 @@ __metadata: linkType: hard "@microsoft/api-extractor@npm:^7.50.1": - version: 7.52.9 - resolution: "@microsoft/api-extractor@npm:7.52.9" + version: 7.52.10 + resolution: "@microsoft/api-extractor@npm:7.52.10" dependencies: "@microsoft/api-extractor-model": "npm:7.30.7" "@microsoft/tsdoc": "npm:~0.15.1" @@ -1718,14 +1718,14 @@ __metadata: "@rushstack/terminal": "npm:0.15.4" "@rushstack/ts-command-line": "npm:5.0.2" lodash: "npm:~4.17.15" - minimatch: "npm:~3.0.3" + minimatch: "npm:10.0.3" resolve: "npm:~1.22.1" semver: "npm:~7.5.4" source-map: "npm:~0.6.1" typescript: "npm:5.8.2" bin: api-extractor: bin/api-extractor - checksum: 10c0/055c5febcf650aa3ce4e0a0f7acbaf9561027633484aef52fa7cd717e472b68d413d9ac2dd983704d3a1297c0c664f4eb6d0e371650f423186b611d2d70c9227 + checksum: 10c0/4bf45d24b672d36b9035d6ac025bdbe11979de36756b8871986166f7dac108dd70f57356e8746a882d55622ac5ae2a4ea8ac66cda1eefb37cab088ee660eec4a languageName: node linkType: hard @@ -2812,142 +2812,142 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.46.0" +"@rollup/rollup-android-arm-eabi@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.46.2" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-android-arm64@npm:4.46.0" +"@rollup/rollup-android-arm64@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-android-arm64@npm:4.46.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.46.0" +"@rollup/rollup-darwin-arm64@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.46.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.46.0" +"@rollup/rollup-darwin-x64@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.46.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.46.0" +"@rollup/rollup-freebsd-arm64@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.46.2" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.46.0" +"@rollup/rollup-freebsd-x64@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-freebsd-x64@npm:4.46.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.46.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.46.2" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.46.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.46.2" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.46.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.46.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.46.0" +"@rollup/rollup-linux-arm64-musl@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.46.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.46.0" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.46.2" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-gnu@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.46.0" +"@rollup/rollup-linux-ppc64-gnu@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.46.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.46.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.46.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.46.0" +"@rollup/rollup-linux-riscv64-musl@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.46.2" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.46.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.46.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.46.0" +"@rollup/rollup-linux-x64-gnu@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.46.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.46.0" +"@rollup/rollup-linux-x64-musl@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.46.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.46.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.46.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.46.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.46.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.46.0": - version: 4.46.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.46.0" +"@rollup/rollup-win32-x64-msvc@npm:4.46.2": + version: 4.46.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.46.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3066,58 +3066,58 @@ __metadata: linkType: hard "@storybook/addon-docs@npm:^9.0.6": - version: 9.0.18 - resolution: "@storybook/addon-docs@npm:9.0.18" + version: 9.1.0 + resolution: "@storybook/addon-docs@npm:9.1.0" dependencies: "@mdx-js/react": "npm:^3.0.0" - "@storybook/csf-plugin": "npm:9.0.18" - "@storybook/icons": "npm:^1.2.12" - "@storybook/react-dom-shim": "npm:9.0.18" + "@storybook/csf-plugin": "npm:9.1.0" + "@storybook/icons": "npm:^1.4.0" + "@storybook/react-dom-shim": "npm:9.1.0" react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^9.0.18 - checksum: 10c0/12533921baeec0995b138884e47df64b48ce3fa2a8cbf17802f18c61265436e761199e77c2b0a5015af201332fb3e563216791026cdd2e4a87cf21a45c0b839c + storybook: ^9.1.0 + checksum: 10c0/c9f7024d6993cd8d9a344aa370c39922bcca88cf728bd19a4330493321333fe69fd7aedfcf6e8debb99e245a31cceaae28e0e4b00d45e9119a737467285b5364 languageName: node linkType: hard "@storybook/addon-links@npm:^9.0.6": - version: 9.0.18 - resolution: "@storybook/addon-links@npm:9.0.18" + version: 9.1.0 + resolution: "@storybook/addon-links@npm:9.1.0" dependencies: "@storybook/global": "npm:^5.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.18 + storybook: ^9.1.0 peerDependenciesMeta: react: optional: true - checksum: 10c0/15302c5207126efe234a4dfc33681ae7304104c9cf9e5acc866121fd7f9232bce64e7a2166b39fb1c9748773da0d8a9536ea488fbc28c26885951e3a929d5d97 + checksum: 10c0/128b220b5340318de38020060c33a7c443b072fb215f2dc61d36647fd882db470ebc12d267c58920f0cf9a9438df541d62cecca853d10ec25e9415451082c30a languageName: node linkType: hard -"@storybook/builder-vite@npm:9.0.18": - version: 9.0.18 - resolution: "@storybook/builder-vite@npm:9.0.18" +"@storybook/builder-vite@npm:9.1.0": + version: 9.1.0 + resolution: "@storybook/builder-vite@npm:9.1.0" dependencies: - "@storybook/csf-plugin": "npm:9.0.18" + "@storybook/csf-plugin": "npm:9.1.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^9.0.18 + storybook: ^9.1.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - checksum: 10c0/9e69ff0b0ddfcba3dd2968d8cda1707c2f89ba76bdc9806068c767330d68d68974422c124a8a55c493b5896787a112f504cf68c6aa18b92ef1daa638d24f415e + checksum: 10c0/5ba8a8378168091669ba20b2f267aa1e1856329f8d5231a3b84f4afee53fcfe160ba93dbe670265ed2c5b07070491e7e57166d64092e725ff01a8e464c2b1e6f languageName: node linkType: hard -"@storybook/csf-plugin@npm:9.0.18": - version: 9.0.18 - resolution: "@storybook/csf-plugin@npm:9.0.18" +"@storybook/csf-plugin@npm:9.1.0": + version: 9.1.0 + resolution: "@storybook/csf-plugin@npm:9.1.0" dependencies: unplugin: "npm:^1.3.1" peerDependencies: - storybook: ^9.0.18 - checksum: 10c0/e5c1e32618a763e36b948ec0fe1fbb94c110d9799e48c229b83f22043ab27cd2eb89d7a0a50a8783253f6ef208827f39d7d37efabd556100ede6c0eefd951785 + storybook: ^9.1.0 + checksum: 10c0/e22df7afb1f2a1722ad71f90492a2b040ee22c1e521a1827f4c6bda6c2eb584b34ea05b010256b0ed95e3891e52e55b5b1acbf1d098d348ebb271cc63afd3735 languageName: node linkType: hard @@ -3137,7 +3137,7 @@ __metadata: languageName: node linkType: hard -"@storybook/icons@npm:^1.2.12": +"@storybook/icons@npm:^1.4.0": version: 1.4.0 resolution: "@storybook/icons@npm:1.4.0" peerDependencies: @@ -3159,25 +3159,25 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:9.0.18": - version: 9.0.18 - resolution: "@storybook/react-dom-shim@npm:9.0.18" +"@storybook/react-dom-shim@npm:9.1.0": + version: 9.1.0 + resolution: "@storybook/react-dom-shim@npm:9.1.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.18 - checksum: 10c0/d2382f892aedc38c45a1c574fc0f80933d07518ded315e7765d024e1dd96cfe1be53e5c4438c2ed7f78e2d8128e96d0bb551b664a42c24dbc2337064a7207239 + storybook: ^9.1.0 + checksum: 10c0/8dd8ee7c3835862ee78619b97fc6f2c458f818238fe58d6ab415cb2be8b267f862c04b89762a611263c0c32066df7636226c045c954b9825a66340d22ce68254 languageName: node linkType: hard "@storybook/react-vite@npm:^9.0.6": - version: 9.0.18 - resolution: "@storybook/react-vite@npm:9.0.18" + version: 9.1.0 + resolution: "@storybook/react-vite@npm:9.1.0" dependencies: "@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.6.1" "@rollup/pluginutils": "npm:^5.0.2" - "@storybook/builder-vite": "npm:9.0.18" - "@storybook/react": "npm:9.0.18" + "@storybook/builder-vite": "npm:9.1.0" + "@storybook/react": "npm:9.1.0" find-up: "npm:^7.0.0" magic-string: "npm:^0.30.0" react-docgen: "npm:^8.0.0" @@ -3186,27 +3186,27 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.18 + storybook: ^9.1.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - checksum: 10c0/25b325da98620d5c2fac6570cd5927b894f002ae1da7fb0e6e4348eb14a87688a08bf0d276f8bde51bdde8ab06a2a5c0b849bff43b183f19e1ed7be85ae22aa2 + checksum: 10c0/a56b006cfe26d5969259a39af63cac2f8a1d811993d21d9cb0a008b2511b65f64a90524527153ec48d2d57409c1538a4f4429b53605962d65509d91ab8074f4f languageName: node linkType: hard -"@storybook/react@npm:9.0.18": - version: 9.0.18 - resolution: "@storybook/react@npm:9.0.18" +"@storybook/react@npm:9.1.0": + version: 9.1.0 + resolution: "@storybook/react@npm:9.1.0" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/react-dom-shim": "npm:9.0.18" + "@storybook/react-dom-shim": "npm:9.1.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.18 + storybook: ^9.1.0 typescript: ">= 4.9.x" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/b18aa5e0b6f099ea129017cad166ed5a4f28a07f48a2efda0c1fb13d1c9433df6a5de3d663275e92c8ef8353b6d5c92e1febe603992dc25603c8e31fd3620255 + checksum: 10c0/302f0f6a80bfd867e3c33ae2e7d5be9d58fa79e4dc59b4ca5bd929397d7dd6fc28ace5b1fc7474a77e0a7287d5a946445fa1b25ca81004c4f20d900a48731af3 languageName: node linkType: hard @@ -3269,90 +3269,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-darwin-arm64@npm:1.13.2" +"@swc/core-darwin-arm64@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-darwin-arm64@npm:1.13.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-darwin-x64@npm:1.13.2" +"@swc/core-darwin-x64@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-darwin-x64@npm:1.13.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.13.2" +"@swc/core-linux-arm-gnueabihf@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.13.3" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-linux-arm64-gnu@npm:1.13.2" +"@swc/core-linux-arm64-gnu@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-linux-arm64-gnu@npm:1.13.3" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-linux-arm64-musl@npm:1.13.2" +"@swc/core-linux-arm64-musl@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-linux-arm64-musl@npm:1.13.3" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-linux-x64-gnu@npm:1.13.2" +"@swc/core-linux-x64-gnu@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-linux-x64-gnu@npm:1.13.3" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-linux-x64-musl@npm:1.13.2" +"@swc/core-linux-x64-musl@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-linux-x64-musl@npm:1.13.3" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-win32-arm64-msvc@npm:1.13.2" +"@swc/core-win32-arm64-msvc@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-win32-arm64-msvc@npm:1.13.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-win32-ia32-msvc@npm:1.13.2" +"@swc/core-win32-ia32-msvc@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-win32-ia32-msvc@npm:1.13.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.13.2": - version: 1.13.2 - resolution: "@swc/core-win32-x64-msvc@npm:1.13.2" +"@swc/core-win32-x64-msvc@npm:1.13.3": + version: 1.13.3 + resolution: "@swc/core-win32-x64-msvc@npm:1.13.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.5.22": - version: 1.13.2 - resolution: "@swc/core@npm:1.13.2" - dependencies: - "@swc/core-darwin-arm64": "npm:1.13.2" - "@swc/core-darwin-x64": "npm:1.13.2" - "@swc/core-linux-arm-gnueabihf": "npm:1.13.2" - "@swc/core-linux-arm64-gnu": "npm:1.13.2" - "@swc/core-linux-arm64-musl": "npm:1.13.2" - "@swc/core-linux-x64-gnu": "npm:1.13.2" - "@swc/core-linux-x64-musl": "npm:1.13.2" - "@swc/core-win32-arm64-msvc": "npm:1.13.2" - "@swc/core-win32-ia32-msvc": "npm:1.13.2" - "@swc/core-win32-x64-msvc": "npm:1.13.2" + version: 1.13.3 + resolution: "@swc/core@npm:1.13.3" + dependencies: + "@swc/core-darwin-arm64": "npm:1.13.3" + "@swc/core-darwin-x64": "npm:1.13.3" + "@swc/core-linux-arm-gnueabihf": "npm:1.13.3" + "@swc/core-linux-arm64-gnu": "npm:1.13.3" + "@swc/core-linux-arm64-musl": "npm:1.13.3" + "@swc/core-linux-x64-gnu": "npm:1.13.3" + "@swc/core-linux-x64-musl": "npm:1.13.3" + "@swc/core-win32-arm64-msvc": "npm:1.13.3" + "@swc/core-win32-ia32-msvc": "npm:1.13.3" + "@swc/core-win32-x64-msvc": "npm:1.13.3" "@swc/counter": "npm:^0.1.3" "@swc/types": "npm:^0.1.23" peerDependencies: @@ -3381,7 +3381,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 10c0/aa961c45fc4bb7b427bdf3b061eb009da577b4347864c56e22526e9dd27c83b1dfa21b931ce3a2d130b47d8067bf01743a13fa9851eaff32475caf50f97a6388 + checksum: 10c0/88a04c319082f8ae5e53b7d7a874014600296087cad3e07d0e927088a19ba2e8355cbced7da02476b5f89cc653e26d1e1c44d9f43ef07fb7b74ec4b5f9e95ef6 languageName: node linkType: hard @@ -3757,11 +3757,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.18.0": - version: 7.20.7 - resolution: "@types/babel__traverse@npm:7.20.7" + version: 7.28.0 + resolution: "@types/babel__traverse@npm:7.28.0" dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10c0/5386f0af44f8746b063b87418f06129a814e16bb2686965a575e9d7376b360b088b89177778d8c426012abc43dd1a2d8ec3218bfc382280c898682746ce2ffbd + "@babel/types": "npm:^7.28.2" + checksum: 10c0/b52d7d4e8fc6a9018fe7361c4062c1c190f5778cf2466817cb9ed19d69fbbb54f9a85ffedeb748ed8062d2cf7d4cc088ee739848f47c57740de1c48cbf0d0994 languageName: node linkType: hard @@ -3877,11 +3877,11 @@ __metadata: linkType: hard "@types/react@npm:^19.0.0": - version: 19.1.8 - resolution: "@types/react@npm:19.1.8" + version: 19.1.9 + resolution: "@types/react@npm:19.1.9" dependencies: csstype: "npm:^3.0.2" - checksum: 10c0/4908772be6dc941df276931efeb0e781777fa76e4d5d12ff9f75eb2dcc2db3065e0100efde16fde562c5bafa310cc8f50c1ee40a22640459e066e72cd342143e + checksum: 10c0/b418da4aaf18fbc6df4f1b7096dda7ee152d697cac00d729ffd855b2b44a3a9cfb2ecb017ed20979ea3a7d98a5ce5fcf01ac1a3614d4a3e4d7069a0c45e49b0f languageName: node linkType: hard @@ -4095,6 +4095,25 @@ __metadata: languageName: node linkType: hard +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": "npm:3.2.4" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd + languageName: node + linkType: hard + "@vitest/pretty-format@npm:2.0.5": version: 2.0.5 resolution: "@vitest/pretty-format@npm:2.0.5" @@ -4649,8 +4668,8 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.1.0 - resolution: "babel-preset-current-node-syntax@npm:1.1.0" + version: 1.2.0 + resolution: "babel-preset-current-node-syntax@npm:1.2.0" dependencies: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-bigint": "npm:^7.8.3" @@ -4668,8 +4687,8 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/0b838d4412e3322cb4436f246e24e9c00bebcedfd8f00a2f51489db683bd35406bbd55a700759c28d26959c6e03f84dd6a1426f576f440267c1d7a73c5717281 + "@babel/core": ^7.0.0 || ^8.0.0-0 + checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 languageName: node linkType: hard @@ -4877,9 +4896,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001727 - resolution: "caniuse-lite@npm:1.0.30001727" - checksum: 10c0/f0a441c05d8925d728c2d02ce23b001935f52183a3bf669556f302568fe258d1657940c7ac0b998f92bc41383e185b390279a7d779e6d96a2b47881f56400221 + version: 1.0.30001731 + resolution: "caniuse-lite@npm:1.0.30001731" + checksum: 10c0/d8cddf817d5bec8e7c2106affdbf1bfc3923463ca16697c992b2efeb043e6a5d9dcb70cda913bc6acf9112fd66f9e80279316c08e7800359116925066a63fdfa languageName: node linkType: hard @@ -5532,9 +5551,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.173": - version: 1.5.191 - resolution: "electron-to-chromium@npm:1.5.191" - checksum: 10c0/26b22ec2ae2a152da09f062d8582e54384a15ddc2a27149cdc2747a0c3f46154370a37b9e687de2d6d71ea1ebc1319f8394283ffb1581f1d4495cdefffd7a2a6 + version: 1.5.194 + resolution: "electron-to-chromium@npm:1.5.194" + checksum: 10c0/7d72617857055d54552380b34be411933966fa1156dc8653e321d14e82e2af84114bac607e9e2926f885d560b2697a324981e4204d3da4e0f9604d4a468eeba1 languageName: node linkType: hard @@ -6111,12 +6130,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" peerDependenciesMeta: debug: optional: true - checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 languageName: node linkType: hard @@ -7052,9 +7071,9 @@ __metadata: linkType: hard "isbot@npm:^5.1.11": - version: 5.1.28 - resolution: "isbot@npm:5.1.28" - checksum: 10c0/1e9417986613e4b493e57e20b813d7e0130c845657ff14a11d39e4bf326056065850bf52773767f2681c0b7b146ba833d4686db16017dfbadd85a206c8396d90 + version: 5.1.29 + resolution: "isbot@npm:5.1.29" + checksum: 10c0/a230429cf6de4b551c129aee8a52b65a6f298a440301537072ddfe94e1eeb481d55bbab1a743084d079c23c71e72ebd89a421d6f7e897f9807493a2f4900319d languageName: node linkType: hard @@ -8248,6 +8267,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:10.0.3, minimatch@npm:^10.0.3": + version: 10.0.3 + resolution: "minimatch@npm:10.0.3" + dependencies: + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10c0/e43e4a905c5d70ac4cec8530ceaeccb9c544b1ba8ac45238e2a78121a01c17ff0c373346472d221872563204eabe929ad02669bb575cb1f0cc30facab369f70f + languageName: node + linkType: hard + "minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -8257,15 +8285,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^10.0.3": - version: 10.0.3 - resolution: "minimatch@npm:10.0.3" - dependencies: - "@isaacs/brace-expansion": "npm:^5.0.0" - checksum: 10c0/e43e4a905c5d70ac4cec8530ceaeccb9c544b1ba8ac45238e2a78121a01c17ff0c373346472d221872563204eabe929ad02669bb575cb1f0cc30facab369f70f - languageName: node - linkType: hard - "minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -8284,15 +8303,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:~3.0.3": - version: 3.0.8 - resolution: "minimatch@npm:3.0.8" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/72b226f452dcfb5075255f53534cb83fc25565b909e79b9be4fad463d735cb1084827f7013ff41d050e77ee6e474408c6073473edd2fb72c2fd630cfb0acc6ad - languageName: node - linkType: hard - "minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -8461,8 +8471,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 11.2.0 - resolution: "node-gyp@npm:11.2.0" + version: 11.3.0 + resolution: "node-gyp@npm:11.3.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -8476,7 +8486,7 @@ __metadata: which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 languageName: node linkType: hard @@ -9019,27 +9029,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.54.1, playwright-core@npm:>=1.2.0": - version: 1.54.1 - resolution: "playwright-core@npm:1.54.1" +"playwright-core@npm:1.54.2, playwright-core@npm:>=1.2.0": + version: 1.54.2 + resolution: "playwright-core@npm:1.54.2" bin: playwright-core: cli.js - checksum: 10c0/b821262b024d7753b1bfa71eb2bc99f2dda12a869d175b2e1bc6ac2764bd661baf36d9d42f45caf622854ad7e4a6077b9b57014c74bb5a78fe339c9edf1c9019 + checksum: 10c0/44850e20bf35237c8c3dedf1096c655f8af939dde53c5469f72cae3dd744966858a302419b909a73d7a2093323123e7ebcc0fdd55151b4193afb7812c1fd2c88 languageName: node linkType: hard "playwright@npm:^1.14.0": - version: 1.54.1 - resolution: "playwright@npm:1.54.1" + version: 1.54.2 + resolution: "playwright@npm:1.54.2" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.54.1" + playwright-core: "npm:1.54.2" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10c0/c5fedae31a03a1f4c4846569aef3ffb98da23000a4d255abfc8c2ede15b43cc7cd87b80f6fa078666c030373de8103787cf77ef7653ae9458aabbbd4320c2599 + checksum: 10c0/6f642fa70179eee5d5bf8a90df2a6147c9638ff926f4f3ad0a0517396b8a3fe00ccebf13377e032a75b3f0b2610ec1562293e0cfc3bde234181c7a50af8af80a languageName: node linkType: hard @@ -9264,22 +9274,22 @@ __metadata: linkType: hard "react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": - version: 19.1.0 - resolution: "react-dom@npm:19.1.0" + version: 19.1.1 + resolution: "react-dom@npm:19.1.1" dependencies: scheduler: "npm:^0.26.0" peerDependencies: - react: ^19.1.0 - checksum: 10c0/3e26e89bb6c67c9a6aa86cb888c7a7f8258f2e347a6d2a15299c17eb16e04c19194e3452bc3255bd34000a61e45e2cb51e46292392340432f133e5a5d2dfb5fc + react: ^19.1.1 + checksum: 10c0/8c91198510521299c56e4e8d5e3a4508b2734fb5e52f29eeac33811de64e76fe586ad32c32182e2e84e070d98df67125da346c3360013357228172dbcd20bcdd languageName: node linkType: hard "react-hook-form@npm:^7.51.0, react-hook-form@npm:^7.53.1": - version: 7.61.1 - resolution: "react-hook-form@npm:7.61.1" + version: 7.62.0 + resolution: "react-hook-form@npm:7.62.0" peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - checksum: 10c0/c241bca80f6d5f9f8b4f24b668670a3ee7249f9cf99537219c4ac1072431493d3768a910b6f2aaff20689a727d0e2797aeacb1ab9285b3e59309de3dd1bead41 + checksum: 10c0/451a25a2ddf07be14f690d2ad3f2f970e0b933fd059ef141c6da9e19d0566d739e9d5cc9c482e3533f3fd01d97e658b896a01ce45a1259ad7b0d4638ba0112c6 languageName: node linkType: hard @@ -9391,9 +9401,9 @@ __metadata: linkType: hard "react@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0, react@npm:^19.0.0": - version: 19.1.0 - resolution: "react@npm:19.1.0" - checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698 + version: 19.1.1 + resolution: "react@npm:19.1.1" + checksum: 10c0/8c9769a2dfd02e603af6445058325e6c8a24b47b185d0e461f66a6454765ddcaecb3f0a90184836c68bb509f3c38248359edbc42f0d07c23eb500a5c30c87b4e languageName: node linkType: hard @@ -9598,29 +9608,29 @@ __metadata: linkType: hard "rollup@npm:^4.34.9, rollup@npm:^4.40.0": - version: 4.46.0 - resolution: "rollup@npm:4.46.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.46.0" - "@rollup/rollup-android-arm64": "npm:4.46.0" - "@rollup/rollup-darwin-arm64": "npm:4.46.0" - "@rollup/rollup-darwin-x64": "npm:4.46.0" - "@rollup/rollup-freebsd-arm64": "npm:4.46.0" - "@rollup/rollup-freebsd-x64": "npm:4.46.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.46.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.46.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.46.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.46.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.46.0" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.46.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.46.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.46.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.46.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.46.0" - "@rollup/rollup-linux-x64-musl": "npm:4.46.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.46.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.46.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.46.0" + version: 4.46.2 + resolution: "rollup@npm:4.46.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.46.2" + "@rollup/rollup-android-arm64": "npm:4.46.2" + "@rollup/rollup-darwin-arm64": "npm:4.46.2" + "@rollup/rollup-darwin-x64": "npm:4.46.2" + "@rollup/rollup-freebsd-arm64": "npm:4.46.2" + "@rollup/rollup-freebsd-x64": "npm:4.46.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.46.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.46.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.46.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.46.2" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.46.2" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.46.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.46.2" + "@rollup/rollup-linux-riscv64-musl": "npm:4.46.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.46.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.46.2" + "@rollup/rollup-linux-x64-musl": "npm:4.46.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.46.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.46.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.46.2" "@types/estree": "npm:1.0.8" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -9668,7 +9678,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/0e85ffd629de5ac8b714ce71ecf354cd3ef3357b430edb4103a3cae3fbff380a2680083dd6428d196584a6b287b4fa05d27563f85ac66400fb26d0dc5a6bb731 + checksum: 10c0/f428497fe119fe7c4e34f1020d45ba13e99b94c9aa36958d88823d932b155c9df3d84f53166f3ee913ff68ea6c7599a9ab34861d88562ad9d8420f64ca5dad4c languageName: node linkType: hard @@ -10108,13 +10118,14 @@ __metadata: linkType: hard "storybook@npm:^9.0.6": - version: 9.0.18 - resolution: "storybook@npm:9.0.18" + version: 9.1.0 + resolution: "storybook@npm:9.1.0" dependencies: "@storybook/global": "npm:^5.0.0" "@testing-library/jest-dom": "npm:^6.6.3" "@testing-library/user-event": "npm:^14.6.1" "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" "@vitest/spy": "npm:3.2.4" better-opn: "npm:^3.0.2" esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0" @@ -10129,7 +10140,7 @@ __metadata: optional: true bin: storybook: ./bin/index.cjs - checksum: 10c0/6db67e2c51a445d5aeee900cf553214f7b33834d395b1c12d40b28d6d35d6271826dcaa6e84d11aceadd0f69b38e447f82a4b215d1a92faeadca559d81df5e9a + checksum: 10c0/6360491360303042fd0e3fb1d6420eea78099e52c1ae49515ed1a4acaf8934df533e30d2c048f7db161daf0e7550c459353304f5ac58c6b74168f37524420c74 languageName: node linkType: hard @@ -10613,12 +10624,12 @@ __metadata: linkType: hard "typescript@npm:^5.7.2": - version: 5.8.3 - resolution: "typescript@npm:5.8.3" + version: 5.9.2 + resolution: "typescript@npm:5.9.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 + checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 languageName: node linkType: hard @@ -10633,12 +10644,12 @@ __metadata: linkType: hard "typescript@patch:typescript@npm%3A^5.7.2#optional!builtin": - version: 5.8.3 - resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" + version: 5.9.2 + resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb + checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e languageName: node linkType: hard