diff --git a/.cursor/rules/02-typescript-testing.mdc b/.cursor/rules/02-typescript-testing.mdc index 2dc6402fd9..0e0f20c2b9 100644 --- a/.cursor/rules/02-typescript-testing.mdc +++ b/.cursor/rules/02-typescript-testing.mdc @@ -17,13 +17,15 @@ alwaysApply: false - Implement proper generic constraints. # Testing Standards -- Write **Vitest** unit tests for utilities and hooks. +- Write **Vitest** unit tests for utilities and hooks and components. - Create **Storybook stories** for visual testing. - Include **accessibility tests** using axe-playwright. - Test component variants and edge cases. - Avoid excessive mocking; test behavior, not internals. - Always run tests to confirm changes. - Do not import `@testing-library/jest-dom` +- Import vitest methods like: describe, it, expect, etc. explicitily +- name test files with `.test.tsx` or `.test.ts`, never with `.specs.ts` ## Example with Icon component diff --git a/packages/react/src/components/Utilities/Await/Await.tsx b/packages/react/src/components/Utilities/Await/Await.tsx new file mode 100644 index 0000000000..f0d259c0d0 --- /dev/null +++ b/packages/react/src/components/Utilities/Await/Await.tsx @@ -0,0 +1,50 @@ +import { ReactNode, useEffect, useState } from "react" + +type AwaitProps = { + resolve: Promise | T + fallback: ReactNode + error?: ReactNode + className?: string + children: (value: T) => ReactNode +} + +export const Await = ({ + resolve, + fallback, + error: errorFallback, + children, +}: AwaitProps): ReactNode => { + const [resolvedValue, setResolvedValue] = useState(null) + const [error, setError] = useState(null) + const [isPending, setIsPending] = useState(false) + + useEffect(() => { + if (resolve instanceof Promise) { + setIsPending(true) + resolve + .then((value) => { + setResolvedValue(value) + }) + .catch((error) => { + setError(error) + }) + .finally(() => { + setIsPending(false) + }) + } else { + setResolvedValue(resolve) + setIsPending(false) + } + }, [resolve]) + + if (isPending) { + return fallback + } + if (error) { + return errorFallback ?? null + } + if (resolvedValue) { + return children(resolvedValue) + } + return null +} diff --git a/packages/react/src/components/Utilities/Await/__stories__/Await.stories.tsx b/packages/react/src/components/Utilities/Await/__stories__/Await.stories.tsx new file mode 100644 index 0000000000..f6a124e568 --- /dev/null +++ b/packages/react/src/components/Utilities/Await/__stories__/Await.stories.tsx @@ -0,0 +1,89 @@ +import type { Meta, StoryObj } from "@storybook/react" + +import { Button } from "@/components/Actions/Button" +import { Skeleton } from "@/ui/skeleton" +import { ComponentProps, useCallback, useEffect, useState } from "react" +import { Await } from "../index" + +const ExampleComponent = (args: Story["args"]) => { + const [count, setCount] = useState(0) + const [value, setValue] = useState | null>(null) + + const triggerPromise = useCallback(() => { + setValue( + new Promise((resolve) => + setTimeout(() => resolve(`${args.resolve as string} - ${count}`), 1000) + ) + ) + setCount(count + 1) + }, [args.resolve, count]) + + useEffect(() => { + triggerPromise() + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + return ( + <> +
+
+ + {args.children} + + + ) +} + +const meta = { + title: "Await", + component: Await, + argTypes: { + fallback: { + description: + "Fallback to display when the promise is pending. It can be a ReactNode", + }, + resolve: { + description: + "Value to await for, it can be a promise or a primitive value", + }, + error: { + description: "Error to display when the promise is rejected", + }, + children: { + description: + "Children to display when the promise is resolved. It's a function that gets the resolved value as an argument", + }, + }, + parameters: { + layout: "centered", + docs: { + description: { + component: + "This is an utility component. The `Await` component is used to display a fallback component when a promise is resolved, but it accepts a promise or a primitive value as a prop, you don't need to take care. ", + }, + }, + }, + tags: ["autodocs", "stable"], +} satisfies Meta> + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: (args) => , + args: { + resolve: "Hello", + fallback: "Loading...", + children: (value) => `${value}`, + }, +} + +export const WithSkeleton: Story = { + render: (args) => , + args: { + resolve: "Hello", + fallback: , + children: (value) => `${value}`, + }, +} diff --git a/packages/react/src/components/Utilities/Await/index.tsx b/packages/react/src/components/Utilities/Await/index.tsx new file mode 100644 index 0000000000..5e86667708 --- /dev/null +++ b/packages/react/src/components/Utilities/Await/index.tsx @@ -0,0 +1 @@ +export * from "./Await" diff --git a/packages/react/src/experimental/Forms/Fields/Checkbox/index.tsx b/packages/react/src/experimental/Forms/Fields/Checkbox/index.tsx index 12acf643db..32e22bd5e3 100644 --- a/packages/react/src/experimental/Forms/Fields/Checkbox/index.tsx +++ b/packages/react/src/experimental/Forms/Fields/Checkbox/index.tsx @@ -50,6 +50,12 @@ interface CheckboxProps extends DataAttributes { * @default false */ presentational?: boolean + + /** + * Whether the checkbox should stop event propagation + * @default false + */ + stopPropagation?: boolean } export function Checkbox({ @@ -62,6 +68,7 @@ export function Checkbox({ value, hideLabel = false, presentational = false, + stopPropagation = false, ...rest }: CheckboxProps) { return ( @@ -75,6 +82,7 @@ export function Checkbox({ value={value} hideLabel={hideLabel} tabIndex={presentational ? -1 : undefined} + onClick={(e) => stopPropagation && e.stopPropagation()} {...rest} /> ) diff --git a/packages/react/src/experimental/OneCard/OneCard.tsx b/packages/react/src/experimental/OneCard/OneCard.tsx index cc5a412e3d..f6f8eb9f2a 100644 --- a/packages/react/src/experimental/OneCard/OneCard.tsx +++ b/packages/react/src/experimental/OneCard/OneCard.tsx @@ -135,7 +135,10 @@ export function OneCard({ {link && ( )} diff --git a/packages/react/src/experimental/OneDataCollection/ItemActions/Dropdown.test.tsx b/packages/react/src/experimental/OneDataCollection/ItemActions/Dropdown.test.tsx deleted file mode 100644 index e53430ee6a..0000000000 --- a/packages/react/src/experimental/OneDataCollection/ItemActions/Dropdown.test.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { Ai, Pencil } from "@/icons/app" -import { render, screen } from "@testing-library/react" -import { describe, expect, it, vi } from "vitest" -import { ItemActionsDefinition } from "../item-actions" -import { ActionsDropdown } from "./Dropdown" - -// Mock the imported components -vi.mock("@/components/Actions/Button", () => ({ - Button: ({ label, icon: Icon, ...props }) => ( - - ), -})) - -vi.mock("@/experimental/Navigation/Dropdown", () => ({ - Dropdown: ({ children, items }) => ( -
- {children} -
- ), -})) - -vi.mock("@/icons/app", () => ({ - Ellipsis: () =>
...
, - Ai: () =>
AI Icon
, - Pencil: () =>
Pencil Icon
, -})) - -describe("ActionsDropdown", () => { - type TestRecord = { - id: string - name: string - canEdit: boolean - } - - const mockItem: TestRecord = { - id: "test-1", - name: "Test Item", - canEdit: true, - } - - const mockActions: ItemActionsDefinition = (item) => [ - { - label: "View Details", - icon: Ai, - onClick: () => console.log(`Viewing ${item.name}`), - }, - { - label: "Edit Item", - icon: Pencil, - onClick: () => console.log(`Editing ${item.name}`), - enabled: item.canEdit, - }, - ] - - it("renders dropdown with actions when actions are available", () => { - render() - - expect(screen.getByTestId("dropdown")).toBeInTheDocument() - expect(screen.getByRole("button")).toBeInTheDocument() - expect(screen.getByTestId("ellipsis-icon")).toBeInTheDocument() - - // Verify items are passed to dropdown - const dropdownElement = screen.getByTestId("dropdown") - const passedItems = JSON.parse( - dropdownElement.getAttribute("data-items") || "[]" - ) - expect(passedItems).toHaveLength(2) - expect(passedItems[0].label).toBe("View Details") - expect(passedItems[1].label).toBe("Edit Item") - }) - - it("doesn't render when actions array is empty", () => { - const emptyActions: ItemActionsDefinition = () => [] - const { container } = render( - - ) - - expect(container).toBeEmptyDOMElement() - }) - - it("doesn't render when actions is undefined", () => { - const undefinedActions: ItemActionsDefinition = () => undefined - const { container } = render( - - ) - - expect(container).toBeEmptyDOMElement() - }) - - it("filters actions based on enabled property", () => { - const mockItemWithoutEdit = { ...mockItem, canEdit: false } - const actionsWithDisabled: ItemActionsDefinition = (item) => [ - { - label: "View Details", - icon: Ai, - onClick: () => console.log(`Viewing ${item.name}`), - }, - { - label: "Edit Item", - icon: Pencil, - onClick: () => console.log(`Editing ${item.name}`), - enabled: item.canEdit, // This will be false - }, - ] - - render( - - ) - - const dropdownElement = screen.getByTestId("dropdown") - const passedItems = JSON.parse( - dropdownElement.getAttribute("data-items") || "[]" - ) - - // Only one action should be enabled - expect(passedItems).toHaveLength(1) - expect(passedItems[0].label).toBe("View Details") - }) -}) diff --git a/packages/react/src/experimental/OneDataCollection/ItemActions/ItemActionsDropdown.test.tsx b/packages/react/src/experimental/OneDataCollection/ItemActions/ItemActionsDropdown.test.tsx new file mode 100644 index 0000000000..9112e38a68 --- /dev/null +++ b/packages/react/src/experimental/OneDataCollection/ItemActions/ItemActionsDropdown.test.tsx @@ -0,0 +1,82 @@ +import { render, screen } from "@testing-library/react" +import { describe, expect, it, vi } from "vitest" +import { DropdownItem } from "../../Navigation/Dropdown" +import { ItemActionsDropdown } from "./ItemActionsDropdown" + +// Mock the imported components +vi.mock("@/components/Utilities/Icon", () => ({ + Icon: ({ icon: Icon }) => , +})) + +vi.mock("@/lib/utils", () => ({ + cn: (...classes: string[]) => classes.join(" "), + focusRing: (className: string) => className, +})) + +vi.mock("../../../icons/app", () => ({ + Ellipsis: () =>
...
, +})) + +vi.mock("../../Navigation/Dropdown", () => ({ + Dropdown: ({ children, items, open, onOpenChange }) => ( +
+ {children} + +
+ ), + DropdownItem: ({ children }) =>
{children}
, +})) + +describe("ItemActionsDropdown", () => { + const mockItems: DropdownItem[] = [ + { + label: "View Details", + onClick: () => {}, + }, + { + type: "separator", + }, + { + label: "Edit Item", + onClick: () => {}, + }, + ] + + it("renders dropdown with actions when items are available", () => { + render() + + expect(screen.getByTestId("dropdown")).toBeInTheDocument() + expect(screen.getByTestId("ellipsis-icon")).toBeInTheDocument() + + // Verify items are passed to dropdown + const dropdownElement = screen.getByTestId("dropdown") + const passedItems = JSON.parse( + dropdownElement.getAttribute("data-items") || "[]" + ) + expect(passedItems).toHaveLength(3) + expect(passedItems[0].label).toBe("View Details") + expect(passedItems[1].type).toBe("separator") + expect(passedItems[2].label).toBe("Edit Item") + }) + + it("doesn't render when items array is empty", () => { + const { container } = render() + expect(container).toBeEmptyDOMElement() + }) + + it("handles open state changes", () => { + const onOpenChange = vi.fn() + render( + + ) + + const toggleButton = screen.getByText("Toggle") + toggleButton.click() + + expect(onOpenChange).toHaveBeenCalledWith(true) + }) +}) diff --git a/packages/react/src/experimental/OneDataCollection/ItemActions/Dropdown.tsx b/packages/react/src/experimental/OneDataCollection/ItemActions/ItemActionsDropdown.tsx similarity index 62% rename from packages/react/src/experimental/OneDataCollection/ItemActions/Dropdown.tsx rename to packages/react/src/experimental/OneDataCollection/ItemActions/ItemActionsDropdown.tsx index bace253e8e..3993d44211 100644 --- a/packages/react/src/experimental/OneDataCollection/ItemActions/Dropdown.tsx +++ b/packages/react/src/experimental/OneDataCollection/ItemActions/ItemActionsDropdown.tsx @@ -2,32 +2,28 @@ import { cn, focusRing } from "@/lib/utils" import { useState } from "react" import { Icon } from "../../../components/Utilities/Icon" import { Ellipsis } from "../../../icons/app" -import { Dropdown } from "../../Navigation/Dropdown" -import { ItemActionsDefinition, filterItemActions } from "../item-actions" -import { RecordType } from "../types" +import { Dropdown, DropdownItem } from "../../Navigation/Dropdown" -export const ActionsDropdown = < - Record extends RecordType, - ItemActions extends ItemActionsDefinition, ->({ - item, - actions, -}: { - item: Record - actions: ItemActions -}) => { - const [open, setOpen] = useState(false) - - if (!actions || actions.length === 0) return null +export type ItemActionsDropdownProps = { + items: DropdownItem[] + onOpenChange?: (open: boolean) => void + align?: "start" | "end" +} - const items = filterItemActions(actions, item) +export const ItemActionsDropdown = ({ + items, + onOpenChange, + align = "end", +}: ItemActionsDropdownProps) => { + const [open, setOpen] = useState(false) - if (items.length === 0) { + if (!items || items.length === 0) { return null } return ( { if (item.type === "separator") { return item @@ -38,8 +34,10 @@ export const ActionsDropdown = < } })} open={open} - onOpenChange={setOpen} - align="end" + onOpenChange={(open) => { + setOpen(open) + onOpenChange?.(open) + }} > + + ) + }, +} + +export const WithCustomSize: Story = { + args: { + open: false, + className: "h-6 w-6", + }, +} diff --git a/packages/react/src/ui/ChevronToggle/index.tsx b/packages/react/src/ui/ChevronToggle/index.tsx new file mode 100644 index 0000000000..aeab7a01ef --- /dev/null +++ b/packages/react/src/ui/ChevronToggle/index.tsx @@ -0,0 +1 @@ +export * from "./ChevronToggle" diff --git a/packages/react/src/ui/skeleton.tsx b/packages/react/src/ui/skeleton.tsx index a0abcd6194..a71e0c7f0f 100644 --- a/packages/react/src/ui/skeleton.tsx +++ b/packages/react/src/ui/skeleton.tsx @@ -6,6 +6,7 @@ function Skeleton({ }: React.HTMLAttributes) { return (
=21.1.0} - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + '@eslint/config-helpers@0.2.1': + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.14.0': @@ -2273,8 +2273,8 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': @@ -4504,9 +4504,6 @@ packages: '@types/node@22.13.9': resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} - '@types/node@22.15.18': - resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} - '@types/node@22.15.21': resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} @@ -5267,8 +5264,8 @@ packages: caniuse-lite@1.0.30001707: resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} - caniuse-lite@1.0.30001718: - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} + caniuse-lite@1.0.30001717: + resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==} canvas-confetti@1.9.3: resolution: {integrity: sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==} @@ -5752,15 +5749,6 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -5948,8 +5936,8 @@ packages: electron-to-chromium@1.5.123: resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} - electron-to-chromium@1.5.155: - resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} + electron-to-chromium@1.5.150: + resolution: {integrity: sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==} embla-carousel-autoplay@8.5.2: resolution: {integrity: sha512-27emJ0px3q/c0kCHCjwRrEbYcyYUPfGO3g5IBWF1i7714TTzE6L9P81V6PHLoSMAKJ1aHoT2e7YFOsuFKCbyag==} @@ -9341,11 +9329,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -9785,11 +9768,6 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.39.2: - resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} - engines: {node: '>=10'} - hasBin: true - test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -10546,8 +10524,8 @@ packages: zen-observable@0.8.15: resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} - zod@3.24.4: - resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} zustand@4.5.6: resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==} @@ -10651,7 +10629,7 @@ snapshots: '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -10735,7 +10713,7 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -11673,7 +11651,7 @@ snapshots: '@babel/parser': 7.27.2 '@babel/template': 7.27.2 '@babel/types': 7.27.1 - debug: 4.4.1 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11685,7 +11663,7 @@ snapshots: '@babel/parser': 7.27.2 '@babel/template': 7.27.2 '@babel/types': 7.27.1 - debug: 4.4.1 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11770,7 +11748,7 @@ snapshots: '@commitlint/is-ignored@19.8.0': dependencies: '@commitlint/types': 19.8.0 - semver: 7.7.2 + semver: 7.7.1 '@commitlint/lint@19.8.0': dependencies: @@ -12055,12 +12033,12 @@ snapshots: '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.2': {} + '@eslint/config-helpers@0.2.1': {} '@eslint/core@0.14.0': dependencies: @@ -12126,7 +12104,7 @@ snapshots: ci-info: 3.9.0 compression: 1.8.0 connect: 3.7.0 - debug: 4.4.1 + debug: 4.4.0 env-editor: 0.4.2 fast-glob: 3.3.3 form-data: 3.0.3 @@ -12153,7 +12131,7 @@ snapshots: resolve: 1.22.10 resolve-from: 5.0.0 resolve.exports: 2.0.3 - semver: 7.7.2 + semver: 7.7.1 send: 0.19.0 slugify: 1.6.6 source-map-support: 0.5.21 @@ -12186,11 +12164,11 @@ snapshots: '@expo/plist': 0.2.2 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.0 getenv: 1.0.0 glob: 10.4.5 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.1 slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 @@ -12212,7 +12190,7 @@ snapshots: require-from-string: 2.0.2 resolve-from: 5.0.0 resolve-workspace-root: 2.0.0 - semver: 7.7.2 + semver: 7.7.1 slugify: 1.6.6 sucrase: 3.35.0 transitivePeerDependencies: @@ -12238,7 +12216,7 @@ snapshots: '@expo/env@0.4.2': dependencies: chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.0 dotenv: 16.4.7 dotenv-expand: 11.0.7 getenv: 1.0.0 @@ -12250,13 +12228,13 @@ snapshots: '@expo/spawn-async': 1.7.2 arg: 5.0.2 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.0 find-up: 5.0.0 getenv: 1.0.0 minimatch: 3.1.2 p-limit: 3.1.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -12269,7 +12247,7 @@ snapshots: jimp-compact: 0.16.1 parse-png: 2.1.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.1 temp-dir: 2.0.0 unique-string: 2.0.0 @@ -12290,7 +12268,7 @@ snapshots: '@expo/json-file': 9.0.2 '@expo/spawn-async': 1.7.2 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.0 fs-extra: 9.1.0 getenv: 1.0.0 glob: 10.4.5 @@ -12340,10 +12318,10 @@ snapshots: '@expo/image-utils': 0.6.5 '@expo/json-file': 9.0.2 '@react-native/normalize-colors': 0.76.9 - debug: 4.4.1 + debug: 4.4.0 fs-extra: 9.1.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.1 xml2js: 0.6.0 transitivePeerDependencies: - supports-color @@ -12365,7 +12343,7 @@ snapshots: '@expo/server@0.5.3': dependencies: abort-controller: 3.0.0 - debug: 4.4.1 + debug: 4.4.0 source-map-support: 0.5.21 undici: 6.21.2 transitivePeerDependencies: @@ -12451,7 +12429,7 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': {} + '@humanwhocodes/retry@0.4.2': {} '@isaacs/cliui@8.0.2': dependencies: @@ -12490,14 +12468,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.18 + '@types/node': 22.15.21 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.15.18) + jest-config: 29.7.0(@types/node@22.15.21) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -12566,7 +12544,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.15.18 + '@types/node': 22.15.21 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -12649,12 +12627,12 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 10.4.5 magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.7.3) - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.7.3 @@ -12763,7 +12741,7 @@ snapshots: '@npmcli/fs@3.1.1': dependencies: - semver: 7.7.2 + semver: 7.7.1 '@number-flow/react@0.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -13498,7 +13476,7 @@ snapshots: node-fetch: 2.7.0 open: 6.4.0 ora: 5.4.1 - semver: 7.7.2 + semver: 7.7.1 shell-quote: 1.8.2 sudo-prompt: 9.2.1 transitivePeerDependencies: @@ -13637,7 +13615,7 @@ snapshots: '@react-native/codegen@0.76.6(@babel/preset-env@7.26.9(@babel/core@7.26.10))': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@babel/preset-env': 7.26.9(@babel/core@7.26.10) glob: 7.2.3 hermes-parser: 0.23.1 @@ -13698,7 +13676,7 @@ snapshots: metro-core: 0.81.3 node-fetch: 2.7.0 readline: 1.3.0 - semver: 7.7.2 + semver: 7.7.1 transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -13793,16 +13771,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 - '@react-native/virtualized-lists@0.76.6(@types/react@18.3.18)(react-native@0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 18.3.1 - react-native: 0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - optional: true - '@react-native/virtualized-lists@0.76.9(@types/react@18.3.18)(react-native@0.76.9(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 @@ -14362,13 +14330,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.5.2))(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0))': + '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.5.2))(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.2)) browser-assert: 1.2.1 storybook: 8.6.14(prettier@3.5.2) ts-dedent: 2.2.0 - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) '@storybook/components@8.6.14(storybook@8.6.14(prettier@2.8.8))': dependencies: @@ -14396,7 +14364,7 @@ snapshots: jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.11 - semver: 7.7.2 + semver: 7.7.1 util: 0.12.5 ws: 8.18.1 optionalDependencies: @@ -14417,7 +14385,7 @@ snapshots: jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.11 - semver: 7.7.2 + semver: 7.7.1 util: 0.12.5 ws: 8.18.1 optionalDependencies: @@ -14438,7 +14406,7 @@ snapshots: jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.11 - semver: 7.7.2 + semver: 7.7.1 util: 0.12.5 ws: 8.18.1 optionalDependencies: @@ -14578,11 +14546,11 @@ snapshots: - typescript - utf-8-validate - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.14(prettier@3.5.2))(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0))': + '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.14(prettier@3.5.2))(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.5.2))(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0)) + '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.5.2))(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0)) '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.5.2))(typescript@5.7.3) find-up: 5.0.0 magic-string: 0.30.17 @@ -14592,7 +14560,7 @@ snapshots: resolve: 1.22.10 storybook: 8.6.14(prettier@3.5.2) tsconfig-paths: 4.2.0 - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.2)) transitivePeerDependencies: @@ -14903,7 +14871,7 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react-native@12.9.0(jest@29.7.0(@types/node@22.15.18))(react-native@0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9)(@types/react@18.3.18)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react-native@12.9.0(jest@29.7.0(@types/node@22.15.21))(react-native@0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9)(@types/react@18.3.18)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: jest-matcher-utils: 29.7.0 pretty-format: 29.7.0 @@ -14912,7 +14880,7 @@ snapshots: react-test-renderer: 18.3.1(react@18.3.1) redent: 3.0.0 optionalDependencies: - jest: 29.7.0(@types/node@22.15.18) + jest: 29.7.0(@types/node@22.15.21) '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -15274,10 +15242,6 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/node@22.15.18': - dependencies: - undici-types: 6.21.0 - '@types/node@22.15.21': dependencies: undici-types: 6.21.0 @@ -15288,34 +15252,19 @@ snapshots: dependencies: '@types/react': 18.3.18 - '@types/react-native@0.73.0(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9)(@types/react@18.3.18)(react@18.3.1)': - dependencies: - react-native: 0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9)(@types/react@18.3.18)(react@18.3.1) - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - '@react-native-community/cli-server-api' - - '@types/react' - - bufferutil - - encoding - - react - - supports-color - - utf-8-validate - '@types/react-native@0.73.0(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1)': dependencies: - react-native: 0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1) transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' - - '@react-native-community/cli-server-api' + - '@react-native-community/cli' - '@types/react' - bufferutil - encoding - react - supports-color - utf-8-validate - optional: true '@types/react@18.3.18': dependencies: @@ -15374,7 +15323,7 @@ snapshots: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 + debug: 4.4.0 eslint: 9.27.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: @@ -15394,7 +15343,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.7.3) '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.1 + debug: 4.4.0 eslint: 9.27.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 @@ -15409,11 +15358,11 @@ snapshots: dependencies: '@typescript-eslint/types': 8.28.0 '@typescript-eslint/visitor-keys': 8.28.0 - debug: 4.4.1 + debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.1 ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -15423,11 +15372,11 @@ snapshots: dependencies: '@typescript-eslint/types': 8.28.0 '@typescript-eslint/visitor-keys': 8.28.0 - debug: 4.4.1 + debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.1 ts-api-utils: 2.1.0(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: @@ -15437,11 +15386,11 @@ snapshots: dependencies: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 + debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.1 ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -15502,14 +15451,14 @@ snapshots: '@urql/core': 5.1.1 wonka: 6.3.5 - '@vitejs/plugin-react@4.3.4(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -15527,13 +15476,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.7(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0))': + '@vitest/mocker@3.0.7(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.7 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) '@vitest/pretty-format@2.0.5': dependencies: @@ -15599,7 +15548,7 @@ snapshots: '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.27.2 + '@babel/parser': 7.27.0 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -16015,8 +15964,8 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.27.1 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.7 @@ -16168,8 +16117,8 @@ snapshots: browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001718 - electron-to-chromium: 1.5.155 + caniuse-lite: 1.0.30001717 + electron-to-chromium: 1.5.150 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.5) @@ -16263,7 +16212,7 @@ snapshots: caniuse-lite@1.0.30001707: {} - caniuse-lite@1.0.30001718: {} + caniuse-lite@1.0.30001717: {} canvas-confetti@1.9.3: {} @@ -16585,13 +16534,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.15.18): + create-jest@29.7.0(@types/node@22.15.21): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.15.18) + jest-config: 29.7.0(@types/node@22.15.21) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -16770,10 +16719,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1: - dependencies: - ms: 2.1.3 - decamelize@1.2.0: {} decimal.js-light@2.5.1: {} @@ -16947,7 +16892,7 @@ snapshots: electron-to-chromium@1.5.123: {} - electron-to-chromium@1.5.155: {} + electron-to-chromium@1.5.150: {} embla-carousel-autoplay@8.5.2(embla-carousel@8.6.0): dependencies: @@ -17127,7 +17072,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.25.4): dependencies: - debug: 4.4.1 + debug: 4.4.0 esbuild: 0.25.4 transitivePeerDependencies: - supports-color @@ -17267,20 +17212,20 @@ snapshots: '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 + '@eslint/config-helpers': 0.2.1 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.27.0 '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 + '@humanwhocodes/retry': 0.4.2 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -18033,7 +17978,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -18067,7 +18012,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -18366,7 +18311,7 @@ snapshots: '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -18387,7 +18332,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -18464,16 +18409,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.15.18): + jest-cli@29.7.0(@types/node@22.15.21): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.15.18) + create-jest: 29.7.0(@types/node@22.15.21) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.15.18) + jest-config: 29.7.0(@types/node@22.15.21) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -18513,7 +18458,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.15.18): + jest-config@29.7.0(@types/node@22.15.21): dependencies: '@babel/core': 7.26.10 '@jest/test-sequencer': 29.7.0 @@ -18538,7 +18483,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.15.18 + '@types/node': 22.15.21 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -18761,7 +18706,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.2 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -18830,12 +18775,12 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.15.18): + jest@29.7.0(@types/node@22.15.21): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.15.18) + jest-cli: 29.7.0(@types/node@22.15.21) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -19285,7 +19230,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.1 makeerror@1.0.12: dependencies: @@ -19709,7 +19654,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.7.2 + semver: 7.7.1 validate-npm-package-name: 5.0.1 npm-run-all@4.1.5: @@ -20469,7 +20414,7 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 - debug: 4.4.1 + debug: 4.4.0 lightningcss: 1.29.2 react: 18.3.1 react-native: 0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9)(@types/react@18.3.18)(react@18.3.1) @@ -20486,7 +20431,7 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 - debug: 4.4.1 + debug: 4.4.0 lightningcss: 1.29.2 react: 18.3.1 react-native: 0.76.9(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1) @@ -20684,59 +20629,6 @@ snapshots: - supports-color - utf-8-validate - react-native@0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.76.6 - '@react-native/codegen': 0.76.6(@babel/preset-env@7.26.9(@babel/core@7.26.10)) - '@react-native/community-cli-plugin': 0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@react-native-community/cli-server-api@13.6.9) - '@react-native/gradle-plugin': 0.76.6 - '@react-native/js-polyfills': 0.76.6 - '@react-native/normalize-colors': 0.76.6 - '@react-native/virtualized-lists': 0.76.6(@types/react@18.3.18)(react-native@0.76.6(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.26.10) - babel-plugin-syntax-hermes-parser: 0.23.1 - base64-js: 1.5.1 - chalk: 4.1.2 - commander: 12.1.0 - event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.6 - glob: 7.2.3 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 - memoize-one: 5.2.1 - metro-runtime: 0.81.3 - metro-source-map: 0.81.3 - mkdirp: 0.5.6 - nullthrows: 1.1.1 - pretty-format: 29.7.0 - promise: 8.3.0 - react: 18.3.1 - react-devtools-core: 5.3.2 - react-refresh: 0.14.2 - regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: 7.7.1 - stacktrace-parser: 0.1.11 - whatwg-fetch: 3.6.20 - ws: 6.2.3 - yargs: 17.7.2 - optionalDependencies: - '@types/react': 18.3.18 - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - '@react-native-community/cli-server-api' - - bufferutil - - encoding - - supports-color - - utf-8-validate - optional: true - react-native@0.76.9(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.18)(react@18.3.1): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -21195,8 +21087,6 @@ snapshots: semver@7.7.1: {} - semver@7.7.2: {} - send@0.19.0: dependencies: debug: 2.6.9 @@ -21737,7 +21627,7 @@ snapshots: jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.39.2 + terser: 5.39.0 webpack: 5.99.5(esbuild@0.25.4) optionalDependencies: esbuild: 0.25.4 @@ -21749,13 +21639,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - terser@5.39.2: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 - commander: 2.20.3 - source-map-support: 0.5.21 - test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -22149,13 +22032,13 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-node@3.0.7(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0): + vite-node@3.0.7(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -22170,7 +22053,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.3.0(@types/node@22.13.9)(rollup@4.40.2)(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0)): + vite-plugin-dts@4.3.0(@types/node@22.13.9)(rollup@4.40.2)(typescript@5.7.3)(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0)): dependencies: '@microsoft/api-extractor': 7.52.2(@types/node@22.13.9) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) @@ -22183,20 +22066,20 @@ snapshots: magic-string: 0.30.17 typescript: 5.7.3 optionalDependencies: - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-lib-inject-css@2.2.1(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0)): + vite-plugin-lib-inject-css@2.2.1(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0)): dependencies: '@ast-grep/napi': 0.32.3 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) - vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0): + vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) @@ -22209,13 +22092,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.2 - terser: 5.39.2 + terser: 5.39.0 yaml: 2.7.0 - vitest@3.0.7(@types/node@22.13.9)(jiti@2.4.2)(jsdom@26.0.0)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0): + vitest@3.0.7(@types/node@22.13.9)(jiti@2.4.2)(jsdom@26.0.0)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0)) + '@vitest/mocker': 3.0.7(vite@6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.7 '@vitest/runner': 3.0.7 '@vitest/snapshot': 3.0.7 @@ -22231,8 +22114,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) - vite-node: 3.0.7(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@22.13.9)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.13.9 @@ -22275,7 +22158,7 @@ snapshots: dependencies: chalk: 2.4.2 commander: 3.0.2 - debug: 4.4.1 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -22556,7 +22439,7 @@ snapshots: zen-observable@0.8.15: {} - zod@3.24.4: {} + zod@3.24.1: {} zustand@4.5.6(@types/react@18.3.18)(react@18.3.1): dependencies: