From ab86c3470b599f08acff9a26c62c1b6a4f606b44 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Tue, 11 Feb 2025 18:33:47 +0100 Subject: [PATCH] Add new documentation folder --- packages/document/.gitignore | 26 + .../.storybook/addon-gh-repository/Tool.tsx | 17 + .../addon-gh-repository/constants.ts | 5 + .../addon-gh-repository/manager.tsx | 13 + .../.storybook/commercelayer.theme.ts | 11 + packages/document/.storybook/main.ts | 78 + .../document/.storybook/manager-head.html | 3 + .../document/.storybook/preview-head.html | 13 + packages/document/.storybook/preview.tsx | 143 + packages/document/README.md | 50 + packages/document/eslint.config.js | 28 + packages/document/index.html | 13 + packages/document/mocks/browser.js | 6 + packages/document/mocks/data/adjustments.js | 39 + packages/document/mocks/data/bundles.js | 388 ++ packages/document/mocks/data/line_items.js | 82 + packages/document/mocks/data/markets.js | 447 ++ packages/document/mocks/data/orders.js | 3713 +++++++++++++++++ packages/document/mocks/data/tags.js | 42 + packages/document/mocks/handlers.js | 15 + packages/document/package.json | 53 + packages/document/public/app-logo.png | Bin 0 -> 28732 bytes packages/document/public/mockServiceWorker.js | 303 ++ .../document/public/storybook-preview.css | 38 + packages/document/public/welcome-hero.png | Bin 0 -> 103964 bytes packages/document/src/App.css | 42 + packages/document/src/App.tsx | 35 + packages/document/src/assets/react.svg | 1 + packages/document/src/index.css | 68 + packages/document/src/main.tsx | 10 + .../document/src/stories/_internals/Code.tsx | 3 + .../src/stories/_internals/CommerceLayer.tsx | 35 + .../src/stories/_internals/OrderStorage.tsx | 96 + .../src/stories/_internals/useGetToken.ts | 261 ++ .../getting-started/001.introduction.mdx | 55 + .../getting-started/002.authentication.mdx | 61 + .../getting-started/003.microfrontends.mdx | 17 + .../stories/getting-started/004.styling.mdx | 16 + .../getting-started/005.containers.mdx | 36 + packages/document/src/vite-env.d.ts | 1 + packages/document/tsconfig.app.json | 26 + packages/document/tsconfig.json | 7 + packages/document/tsconfig.node.json | 24 + packages/document/vite.config.ts | 7 + pnpm-lock.yaml | 2426 ++++++++++- 45 files changed, 8585 insertions(+), 168 deletions(-) create mode 100644 packages/document/.gitignore create mode 100644 packages/document/.storybook/addon-gh-repository/Tool.tsx create mode 100644 packages/document/.storybook/addon-gh-repository/constants.ts create mode 100644 packages/document/.storybook/addon-gh-repository/manager.tsx create mode 100644 packages/document/.storybook/commercelayer.theme.ts create mode 100644 packages/document/.storybook/main.ts create mode 100644 packages/document/.storybook/manager-head.html create mode 100644 packages/document/.storybook/preview-head.html create mode 100644 packages/document/.storybook/preview.tsx create mode 100644 packages/document/README.md create mode 100644 packages/document/eslint.config.js create mode 100644 packages/document/index.html create mode 100644 packages/document/mocks/browser.js create mode 100644 packages/document/mocks/data/adjustments.js create mode 100644 packages/document/mocks/data/bundles.js create mode 100644 packages/document/mocks/data/line_items.js create mode 100644 packages/document/mocks/data/markets.js create mode 100644 packages/document/mocks/data/orders.js create mode 100644 packages/document/mocks/data/tags.js create mode 100644 packages/document/mocks/handlers.js create mode 100644 packages/document/package.json create mode 100644 packages/document/public/app-logo.png create mode 100644 packages/document/public/mockServiceWorker.js create mode 100644 packages/document/public/storybook-preview.css create mode 100644 packages/document/public/welcome-hero.png create mode 100644 packages/document/src/App.css create mode 100644 packages/document/src/App.tsx create mode 100644 packages/document/src/assets/react.svg create mode 100644 packages/document/src/index.css create mode 100644 packages/document/src/main.tsx create mode 100644 packages/document/src/stories/_internals/Code.tsx create mode 100644 packages/document/src/stories/_internals/CommerceLayer.tsx create mode 100644 packages/document/src/stories/_internals/OrderStorage.tsx create mode 100644 packages/document/src/stories/_internals/useGetToken.ts create mode 100644 packages/document/src/stories/getting-started/001.introduction.mdx create mode 100644 packages/document/src/stories/getting-started/002.authentication.mdx create mode 100644 packages/document/src/stories/getting-started/003.microfrontends.mdx create mode 100644 packages/document/src/stories/getting-started/004.styling.mdx create mode 100644 packages/document/src/stories/getting-started/005.containers.mdx create mode 100644 packages/document/src/vite-env.d.ts create mode 100644 packages/document/tsconfig.app.json create mode 100644 packages/document/tsconfig.json create mode 100644 packages/document/tsconfig.node.json create mode 100644 packages/document/vite.config.ts diff --git a/packages/document/.gitignore b/packages/document/.gitignore new file mode 100644 index 00000000..f940a995 --- /dev/null +++ b/packages/document/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*storybook.log diff --git a/packages/document/.storybook/addon-gh-repository/Tool.tsx b/packages/document/.storybook/addon-gh-repository/Tool.tsx new file mode 100644 index 00000000..25f4aa10 --- /dev/null +++ b/packages/document/.storybook/addon-gh-repository/Tool.tsx @@ -0,0 +1,17 @@ +import { A, IconButton, Icons, Separator } from '@storybook/components' +import React from 'react' +import { ADDON_NAME, REPOSITORY_URL, TOOL_ID } from './constants' + +export const Tool = () => { + return ( + <> + + + + +   repository + + + + ) +} diff --git a/packages/document/.storybook/addon-gh-repository/constants.ts b/packages/document/.storybook/addon-gh-repository/constants.ts new file mode 100644 index 00000000..da0fb807 --- /dev/null +++ b/packages/document/.storybook/addon-gh-repository/constants.ts @@ -0,0 +1,5 @@ +export const ADDON_ID = 'addon-gh-repository' +export const ADDON_NAME = 'View repository' +export const TOOL_ID = `${ADDON_ID}/tool` +export const REPOSITORY_URL = + 'https://github.com/commercelayer/commercelayer-react-components' diff --git a/packages/document/.storybook/addon-gh-repository/manager.tsx b/packages/document/.storybook/addon-gh-repository/manager.tsx new file mode 100644 index 00000000..0963c403 --- /dev/null +++ b/packages/document/.storybook/addon-gh-repository/manager.tsx @@ -0,0 +1,13 @@ +import { addons, types } from "@storybook/manager-api" +import React from "react" +import { Tool } from "./Tool" +import { ADDON_ID, ADDON_NAME } from "./constants" + +addons.register(ADDON_ID, () => { + addons.add(ADDON_ID, { + title: ADDON_NAME, + type: types.TOOL, + match: ({ viewMode }) => !!viewMode?.match(/^(story|docs)$/), + render: () => , + }) +}) diff --git a/packages/document/.storybook/commercelayer.theme.ts b/packages/document/.storybook/commercelayer.theme.ts new file mode 100644 index 00000000..1b06740a --- /dev/null +++ b/packages/document/.storybook/commercelayer.theme.ts @@ -0,0 +1,11 @@ +import { create } from '@storybook/theming' + +export default create({ + base: 'light', + brandTitle: 'Commerce Layer', + // brandUrl: 'https://example.com', + brandImage: './app-logo.png', + brandTarget: '_self', + + textColor: '#101111' +}) diff --git a/packages/document/.storybook/main.ts b/packages/document/.storybook/main.ts new file mode 100644 index 00000000..451b989b --- /dev/null +++ b/packages/document/.storybook/main.ts @@ -0,0 +1,78 @@ +import { resolve } from "node:path" +import type { StorybookConfig } from "@storybook/react-vite" +import remarkGfm from "remark-gfm" +import { type UserConfig, mergeConfig } from "vite" +import tsconfigPaths from "vite-tsconfig-paths" + +const viteOverrides: UserConfig = { + base: process.env.VITE_BASE_URL, + plugins: [ + tsconfigPaths({ + projects: [ + resolve(import.meta.dirname, "../../react-components/tsconfig.json"), + resolve(import.meta.dirname, "../tsconfig.json"), + ], + }), + ], +} + +const storybookConfig: StorybookConfig = { + async viteFinal(config) { + return mergeConfig(config, viteOverrides) + }, + stories: ["../stories/**/*.mdx", "../stories/**/*.stories.@(js|jsx|ts|tsx)"], + addons: [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/addon-interactions", + { + name: "@storybook/addon-docs", + options: { + mdxPluginOptions: { + mdxCompileOptions: { + remarkPlugins: [remarkGfm], + }, + }, + }, + }, + ], + // @ts-expect-error This 'managerEntries' exists. + managerEntries: [ + resolve(import.meta.dirname, "./addon-gh-repository/manager.tsx"), + ], + framework: { + name: "@storybook/react-vite", + options: {}, + }, + core: { + disableTelemetry: true, + }, + features: { + storyStoreV7: true, + }, + docs: { + autodocs: true, + docsMode: true, + }, + typescript: { + check: false, + reactDocgen: "react-docgen-typescript", + reactDocgenTypescriptOptions: { + propFilter: (prop) => { + if (["children", "className"].includes(prop.name)) { + return true + } + + if (prop.parent != null) { + return ( + !prop.parent.fileName.includes("@types/react") && + !prop.parent.fileName.includes("@emotion") + ) + } + return true + }, + }, + }, +} + +export default storybookConfig diff --git a/packages/document/.storybook/manager-head.html b/packages/document/.storybook/manager-head.html new file mode 100644 index 00000000..ece446c3 --- /dev/null +++ b/packages/document/.storybook/manager-head.html @@ -0,0 +1,3 @@ + + + diff --git a/packages/document/.storybook/preview-head.html b/packages/document/.storybook/preview-head.html new file mode 100644 index 00000000..6448e887 --- /dev/null +++ b/packages/document/.storybook/preview-head.html @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/packages/document/.storybook/preview.tsx b/packages/document/.storybook/preview.tsx new file mode 100644 index 00000000..9632a948 --- /dev/null +++ b/packages/document/.storybook/preview.tsx @@ -0,0 +1,143 @@ +import { + Controls, + Description, + Primary, + Stories, + Subtitle, + Title, +} from "@storybook/blocks" +import type { Decorator, Parameters } from "@storybook/react" +import React from "react" +import { worker } from "../mocks/browser" + +export const parameters: Parameters = { + layout: "centered", + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + backgrounds: { + values: [ + { + name: "overlay", + value: "#F8F8F8", + }, + ], + }, + options: { + storySort: { + method: "alphabetical", + order: [ + "Getting Started", + // [ + // "Welcome", + // "Applications", + // "Custom apps", + // "Token provider", + // "Core SDK provider", + // ], + // "Atoms", + // "Forms", + // ["react-hook-form"], + // "Hooks", + // "Lists", + // "Composite", + // "Resources", + // "Examples", + ], + }, + }, + docs: { + page: () => ( + + + <Subtitle /> + <Description /> + <Primary /> + <Controls /> + <Stories includePrimary={false} /> + </React.Fragment> + ), + // source: { + // transform: (input: string) => + // prettier.format(input, { + // parser: 'babel', + // plugins: [prettierBabel] + // }), + // }, + }, +} + +// export const withContainer: Decorator = (Story, context) => { +// const { containerEnabled } = context.globals +// if (containerEnabled === true) { +// return ( +// <Container minHeight={false}> +// <Story /> +// </Container> +// ) +// } + +// return <Story /> +// } + +// export const withLocale: Decorator = (Story, context) => { +// const locale = "en-US" +// return ( +// <I18NProvider enforcedLocaleCode={locale}> +// <Story /> +// </I18NProvider> +// ) +// } + +// export const decorators: Decorator[] = [withLocale, withContainer] + +// export const globals = { +// [PARAM_KEY]: true, +// } + +// Storybook executes this module in both bootstap phase (Node) +// and a story's runtime (browser). However, we cannot call `setupWorker` +// in Node environment, so need to check if we're in a browser. +if (typeof global.process === "undefined") { + // Start the mocking when each story is loaded. + // Repetitive calls to the `.start()` method do not register a new worker, + // but check whether there's an existing once, reusing it, if so. + worker.start({ + serviceWorker: { + url: `${import.meta.env.BASE_URL}mockServiceWorker.js`, + }, + quiet: import.meta.env.PROD, + onUnhandledRequest: !import.meta.env.PROD + ? (req, reqPrint) => { + const url = new URL(req.url) + if (url.hostname === "mock.localhost") { + reqPrint.warning() + } + } + : () => {}, + }) +} + +const argTypesEnhancers: Preview["argTypesEnhancers"] = [ + (context) => { + // when the className prop comes from `JSX.IntrinsicElements['div' | 'span']` + // and is not documented, we add a default description + if ( + "className" in context.argTypes && + context.argTypes.className.description === "" + ) { + context.argTypes.className.description = + "CSS class name for the base component" + } + + return context.argTypes + }, +] + +export default { + parameters, + argTypesEnhancers, +} diff --git a/packages/document/README.md b/packages/document/README.md new file mode 100644 index 00000000..74872fd4 --- /dev/null +++ b/packages/document/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/packages/document/eslint.config.js b/packages/document/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/packages/document/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/packages/document/index.html b/packages/document/index.html new file mode 100644 index 00000000..e4b78eae --- /dev/null +++ b/packages/document/index.html @@ -0,0 +1,13 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vite + React + TS + + +
+ + + diff --git a/packages/document/mocks/browser.js b/packages/document/mocks/browser.js new file mode 100644 index 00000000..c578a6eb --- /dev/null +++ b/packages/document/mocks/browser.js @@ -0,0 +1,6 @@ +// src/mocks/browser.js +import { setupWorker } from 'msw/browser' +import { handlers } from './handlers' + +// This configures a Service Worker with the given request handlers. +export const worker = setupWorker(...handlers) diff --git a/packages/document/mocks/data/adjustments.js b/packages/document/mocks/data/adjustments.js new file mode 100644 index 00000000..72d4a6f1 --- /dev/null +++ b/packages/document/mocks/data/adjustments.js @@ -0,0 +1,39 @@ +import { http } from 'msw' + +const restPost = http.post( + `https://mock.localhost/api/adjustments`, + async (req, res, ctx) => { + return await new Promise((resolve) => { + setTimeout(() => { + resolve( + res( + ctx.status(200), + ctx.json({ + data: { + id: 'eqJGhgEeBb', + type: 'adjustments', + links: { + self: 'https://mock.localhost/api/adjustments/eqJGhgEeBb' + }, + attributes: { + name: 'Manual adjustment', + currency_code: 'EUR', + amount_cents: -100, + amount_float: -1.0, + formatted_amount: '-€1,00', + created_at: '2023-08-23T15:59:30.059Z', + updated_at: '2023-08-23T15:59:30.059Z', + reference: null, + reference_origin: null, + metadata: {} + } + } + }) + ) + ) + }, 1000) + }) + } +) + +export default [restPost] diff --git a/packages/document/mocks/data/bundles.js b/packages/document/mocks/data/bundles.js new file mode 100644 index 00000000..7053b89e --- /dev/null +++ b/packages/document/mocks/data/bundles.js @@ -0,0 +1,388 @@ +import { http } from 'msw' + +const bundles = http.get( + 'https://mock.localhost/api/bundles?include=sku_list.sku_list_items.sku&filter[q][code_in]=WELCOME_KIT_001', + (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + data: [ + { + id: 'PljQzimxgB', + type: 'bundles', + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB' + }, + attributes: { + code: 'SHIRTSETSINGLE', + name: 'Commerce Layer Shirt set single', + currency_code: 'EUR', + description: '', + image_url: '', + do_not_ship: false, + do_not_track: false, + price_amount_cents: 10500, + price_amount_float: 105.0, + formatted_price_amount: '€105,00', + compare_at_amount_cents: 10500, + compare_at_amount_float: 105.0, + formatted_compare_at_amount: '€105,00', + skus_count: 2, + created_at: '2022-03-11T10:20:48.680Z', + updated_at: '2022-03-11T10:20:48.680Z', + reference: '', + reference_origin: '', + metadata: {} + }, + relationships: { + market: { + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/market', + related: + 'https://mock.localhost/api/bundles/PljQzimxgB/market' + } + }, + sku_list: { + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/sku_list', + related: + 'https://mock.localhost/api/bundles/PljQzimxgB/sku_list' + }, + data: { type: 'sku_lists', id: 'myPrZIqano' } + }, + skus: { + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/skus', + related: 'https://mock.localhost/api/bundles/PljQzimxgB/skus' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/attachments', + related: + 'https://mock.localhost/api/bundles/PljQzimxgB/attachments' + } + }, + events: { + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/events', + related: + 'https://mock.localhost/api/bundles/PljQzimxgB/events' + } + }, + tags: { + links: { + self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/tags', + related: 'https://mock.localhost/api/bundles/PljQzimxgB/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + } + ], + included: [ + { + id: 'myPrZIqano', + type: 'sku_lists', + links: { + self: 'https://mock.localhost/api/sku_lists/myPrZIqano' + }, + attributes: { + name: 'CL SHIRTS (Single shipment)', + slug: 'cl-shirts-single-shipment', + description: '', + image_url: '', + manual: true, + sku_code_regex: null, + created_at: '2022-03-11T10:17:50.637Z', + updated_at: '2022-03-11T10:18:03.442Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + customer: { + links: { + self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/customer', + related: + 'https://mock.localhost/api/sku_lists/myPrZIqano/customer' + } + }, + skus: { + links: { + self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/skus', + related: + 'https://mock.localhost/api/sku_lists/myPrZIqano/skus' + } + }, + sku_list_items: { + links: { + self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/sku_list_items', + related: + 'https://mock.localhost/api/sku_lists/myPrZIqano/sku_list_items' + }, + data: [ + { type: 'sku_list_items', id: 'LWKOPINkWM' }, + { type: 'sku_list_items', id: 'vWbjGINmWn' } + ] + }, + bundles: { + links: { + self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/bundles', + related: + 'https://mock.localhost/api/sku_lists/myPrZIqano/bundles' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/attachments', + related: + 'https://mock.localhost/api/sku_lists/myPrZIqano/attachments' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'LWKOPINkWM', + type: 'sku_list_items', + links: { + self: 'https://mock.localhost/api/sku_list_items/LWKOPINkWM' + }, + attributes: { + position: 1, + sku_code: 'TSHIRTMS000000FFFFFFLXXX', + quantity: 1, + created_at: '2022-03-11T10:17:59.154Z', + updated_at: '2022-03-11T10:17:59.154Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + sku_list: { + links: { + self: 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/relationships/sku_list', + related: + 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/sku_list' + } + }, + sku: { + links: { + self: 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/relationships/sku', + related: + 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/sku' + }, + data: { type: 'skus', id: 'EWzPQSpRzn' } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'vWbjGINmWn', + type: 'sku_list_items', + links: { + self: 'https://mock.localhost/api/sku_list_items/vWbjGINmWn' + }, + attributes: { + position: 2, + sku_code: 'SWEETHMUB7B7B7000000MXXX', + quantity: 1, + created_at: '2022-03-11T10:18:03.437Z', + updated_at: '2022-03-11T10:18:03.437Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + sku_list: { + links: { + self: 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/relationships/sku_list', + related: + 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/sku_list' + } + }, + sku: { + links: { + self: 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/relationships/sku', + related: + 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/sku' + }, + data: { type: 'skus', id: 'MBrxeSaGpZ' } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'EWzPQSpRzn', + type: 'skus', + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn' + }, + attributes: { + code: 'TSHIRTMS000000FFFFFFLXXX', + name: 'Black Men T-Shirt with White Logo (L)', + description: + 'With a large front pouch pocket and drawstrings in a matching color, this hoodie is a sure crowd-favorite. It’s soft, stylish, and perfect for the cooler evenings.', + image_url: + 'https://data.commercelayer.app/seed/images/skus/TSHIRTMS000000FFFFFFLXXX_FLAT.png', + pieces_per_pack: null, + weight: null, + unit_of_weight: '', + hs_tariff_number: '', + do_not_ship: false, + do_not_track: false, + inventory: null, + created_at: '2022-03-11T09:42:47.300Z', + updated_at: '2022-03-11T10:17:22.143Z', + reference: 'sku_69', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + shipping_category: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/shipping_category', + related: + 'https://mock.localhost/api/skus/EWzPQSpRzn/shipping_category' + } + }, + prices: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/prices', + related: 'https://mock.localhost/api/skus/EWzPQSpRzn/prices' + } + }, + stock_items: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/stock_items', + related: + 'https://mock.localhost/api/skus/EWzPQSpRzn/stock_items' + } + }, + delivery_lead_times: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/delivery_lead_times', + related: + 'https://mock.localhost/api/skus/EWzPQSpRzn/delivery_lead_times' + } + }, + sku_options: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/sku_options', + related: + 'https://mock.localhost/api/skus/EWzPQSpRzn/sku_options' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/attachments', + related: + 'https://mock.localhost/api/skus/EWzPQSpRzn/attachments' + } + }, + events: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/events', + related: 'https://mock.localhost/api/skus/EWzPQSpRzn/events' + } + }, + tags: { + links: { + self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/tags', + related: 'https://mock.localhost/api/skus/EWzPQSpRzn/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'MBrxeSaGpZ', + type: 'skus', + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ' + }, + attributes: { + code: 'SWEETHMUB7B7B7000000MXXX', + name: 'Sport Grey Unisex Hoodie Sweatshirt with Black Logo (M)', + description: + 'With a large front pouch pocket and drawstrings in a matching color, this hoodie is a sure crowd-favorite. It’s soft, stylish, and perfect for the cooler evenings.', + image_url: + 'https://data.commercelayer.app/seed/images/skus/HOODIEMX7F7F7F000000MXXX_FLAT.png', + pieces_per_pack: null, + weight: null, + unit_of_weight: '', + hs_tariff_number: '', + do_not_ship: false, + do_not_track: false, + inventory: null, + created_at: '2022-03-11T09:42:48.985Z', + updated_at: '2022-03-11T10:17:41.219Z', + reference: 'sku_70', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + shipping_category: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/shipping_category', + related: + 'https://mock.localhost/api/skus/MBrxeSaGpZ/shipping_category' + } + }, + prices: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/prices', + related: 'https://mock.localhost/api/skus/MBrxeSaGpZ/prices' + } + }, + stock_items: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/stock_items', + related: + 'https://mock.localhost/api/skus/MBrxeSaGpZ/stock_items' + } + }, + delivery_lead_times: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/delivery_lead_times', + related: + 'https://mock.localhost/api/skus/MBrxeSaGpZ/delivery_lead_times' + } + }, + sku_options: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/sku_options', + related: + 'https://mock.localhost/api/skus/MBrxeSaGpZ/sku_options' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/attachments', + related: + 'https://mock.localhost/api/skus/MBrxeSaGpZ/attachments' + } + }, + events: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/events', + related: 'https://mock.localhost/api/skus/MBrxeSaGpZ/events' + } + }, + tags: { + links: { + self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/tags', + related: 'https://mock.localhost/api/skus/MBrxeSaGpZ/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + } + ] + }) + ) + } +) + +export default [bundles] diff --git a/packages/document/mocks/data/line_items.js b/packages/document/mocks/data/line_items.js new file mode 100644 index 00000000..95139b05 --- /dev/null +++ b/packages/document/mocks/data/line_items.js @@ -0,0 +1,82 @@ +import { http } from 'msw' + +const restPatch = http.patch( + `https://mock.localhost/api/line_items/:id`, + async (req, res, ctx) => { + return await new Promise((resolve) => { + setTimeout(() => { + resolve(res(ctx.status(200), ctx.body(`Update ${req.params.id}`))) + }, 1000) + }) + } +) + +const restDelete = http.delete( + `https://mock.localhost/api/line_items/:id`, + async (req, res, ctx) => { + return await new Promise((resolve) => { + setTimeout(() => { + resolve(res(ctx.status(200), ctx.body(`Removed ${req.params.id}`))) + }, 1000) + }) + } +) + +const restPost = http.post( + `https://mock.localhost/api/line_items`, + async (req, res, ctx) => { + return await new Promise((resolve) => { + setTimeout(() => { + resolve( + res( + ctx.status(200), + ctx.json({ + data: { + id: 'vrEAtOmRaz', + type: 'line_items', + links: { + self: 'https://mock.localhost/api/line_items/vrEAtOmRaz' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: -100, + unit_amount_float: -1.0, + formatted_unit_amount: '-€1,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: -100, + total_amount_float: -1.0, + formatted_total_amount: '-€1,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Manual adjustment', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'adjustments', + frequency: null, + created_at: '2023-08-23T15:59:30.205Z', + updated_at: '2023-08-23T15:59:30.205Z', + reference: null, + reference_origin: null, + metadata: {} + } + } + }) + ) + ) + }, 1000) + }) + } +) + +export default [restPatch, restDelete, restPost] diff --git a/packages/document/mocks/data/markets.js b/packages/document/mocks/data/markets.js new file mode 100644 index 00000000..b5db10ae --- /dev/null +++ b/packages/document/mocks/data/markets.js @@ -0,0 +1,447 @@ +import { http } from 'msw' + +// used in HookedInputResourceGroup +const someMarkets = http.get( + 'https://mock.localhost/api/markets?fields[markets]=id,name&sort=name&page[size]=3', + (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + data: [ + { + id: 'rlEPzheRgO', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO' + }, + attributes: { name: 'Adyen' }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'dlQbPhNNop', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop' + }, + attributes: { name: 'Europe' }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'AlRevhXQga', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga' + }, + attributes: { name: 'Milan' }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + } + ], + meta: { record_count: 5, page_count: 2 }, + links: { + first: + 'https://mock.localhost/api/markets?fields%5Bmarkets%5D=id%2Cname&page%5Bnumber%5D=1&page%5Bsize%5D=3&sort=name', + next: 'https://mock.localhost/api/markets?fields%5Bmarkets%5D=id%2Cname&page%5Bnumber%5D=2&page%5Bsize%5D=3&sort=name', + last: 'https://mock.localhost/api/markets?fields%5Bmarkets%5D=id%2Cname&page%5Bnumber%5D=2&page%5Bsize%5D=3&sort=name' + } + }) + ) + } +) + +// used in HookedInputResourceGroup +const allMarkets = http.get( + 'https://mock.localhost/api/markets?sort=name&page[number]=1&page[size]=25', + (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + data: [ + { + id: 'rlEPzheRgO', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO' + }, + attributes: { + number: 475, + name: 'Adyen', + facebook_pixel_id: null, + checkout_url: '', + external_prices_url: '', + external_order_validation_url: null, + shared_secret: '5a4c961792866897db26dd3aad9c435e', + private: false, + disabled_at: null, + created_at: '2022-08-23T09:59:25.940Z', + updated_at: '2022-08-23T09:59:25.940Z', + reference: '', + reference_origin: '', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/merchant', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/merchant' + } + }, + price_list: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/price_list', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/price_list' + } + }, + inventory_model: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/inventory_model', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/subscription_model', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/tax_calculator', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/customer_group', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/customer_group' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/attachments', + related: + 'https://mock.localhost/api/markets/rlEPzheRgO/attachments' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'dlQbPhNNop', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop' + }, + attributes: { + number: 350, + name: 'Europe', + facebook_pixel_id: null, + checkout_url: '', + external_prices_url: + 'https://pippo.malessani.commercelayer.dev/api/verify', + external_order_validation_url: '', + shared_secret: '4ea4390961025de791d5bb92e92744eb', + private: false, + disabled_at: null, + created_at: '2022-03-11T09:40:49.000Z', + updated_at: '2023-03-13T13:30:32.184Z', + reference: 'market_1', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/merchant', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/merchant' + } + }, + price_list: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/price_list', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/price_list' + } + }, + inventory_model: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/inventory_model', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/subscription_model', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/tax_calculator', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/customer_group', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/customer_group' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/attachments', + related: + 'https://mock.localhost/api/markets/dlQbPhNNop/attachments' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'AlRevhXQga', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga' + }, + attributes: { + number: 418, + name: 'Milan', + facebook_pixel_id: null, + checkout_url: '', + external_prices_url: '', + external_order_validation_url: null, + shared_secret: 'fc9954fc7ae851d9588d456656ba102f', + private: false, + disabled_at: null, + created_at: '2022-05-13T12:27:05.075Z', + updated_at: '2022-05-13T12:27:05.075Z', + reference: '', + reference_origin: '', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/merchant', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/merchant' + } + }, + price_list: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/price_list', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/price_list' + } + }, + inventory_model: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/inventory_model', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/subscription_model', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/tax_calculator', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/customer_group', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/customer_group' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/attachments', + related: + 'https://mock.localhost/api/markets/AlRevhXQga/attachments' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'AjRevhQOoa', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa' + }, + attributes: { + number: 351, + name: 'UK', + facebook_pixel_id: null, + checkout_url: null, + external_prices_url: null, + external_order_validation_url: null, + shared_secret: 'a028eb9f9812ee2949da28cd3f8f5268', + private: false, + disabled_at: null, + created_at: '2022-03-11T09:40:50.558Z', + updated_at: '2022-03-11T09:40:50.558Z', + reference: 'market_3', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/merchant', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/merchant' + } + }, + price_list: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/price_list', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/price_list' + } + }, + inventory_model: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/inventory_model', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/subscription_model', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/tax_calculator', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/customer_group', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/customer_group' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/attachments', + related: + 'https://mock.localhost/api/markets/AjRevhQOoa/attachments' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'EjDkXhNEoD', + type: 'markets', + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD' + }, + attributes: { + number: 349, + name: 'USA', + facebook_pixel_id: null, + checkout_url: '', + external_prices_url: '', + external_order_validation_url: null, + shared_secret: '60860b96e891725099e0b1a72dceb510', + private: false, + disabled_at: null, + created_at: '2022-02-24T14:08:20.092Z', + updated_at: '2022-03-21T09:37:44.202Z', + reference: 'market_2', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/merchant', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/merchant' + } + }, + price_list: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/price_list', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/price_list' + } + }, + inventory_model: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/inventory_model', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/subscription_model', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/tax_calculator', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/customer_group', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/customer_group' + } + }, + attachments: { + links: { + self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/attachments', + related: + 'https://mock.localhost/api/markets/EjDkXhNEoD/attachments' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + } + ], + meta: { record_count: 5, page_count: 1 }, + links: { + first: + 'https://mock.localhost/api/markets?page%5Bnumber%5D=1&page%5Bsize%5D=25&sort=name', + last: 'https://mock.localhost/api/markets?page%5Bnumber%5D=1&page%5Bsize%5D=25&sort=name' + } + }) + ) + } +) + +export default [allMarkets, someMarkets] diff --git a/packages/document/mocks/data/orders.js b/packages/document/mocks/data/orders.js new file mode 100644 index 00000000..49afe454 --- /dev/null +++ b/packages/document/mocks/data/orders.js @@ -0,0 +1,3713 @@ +import { http } from 'msw' + +const order = { + id: 'NMWYhbGorj', + type: 'orders', + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj' + }, + attributes: { + number: 2485862, + autorefresh: true, + status: 'approved', + payment_status: 'paid', + fulfillment_status: 'in_progress', + guest: true, + editable: false, + customer_email: 'customer@tk.com', + language_code: 'en', + currency_code: 'EUR', + tax_included: true, + tax_rate: null, + freight_taxable: null, + requires_billing_info: true, + country_code: 'IT', + shipping_country_code_lock: null, + coupon_code: null, + gift_card_code: '9951a05f-741a-4ab1-8405-2a7e57612792', + gift_card_or_coupon_code: '9951a05f-741a-4ab1-8405-2a7e57612792', + subtotal_amount_cents: 24400, + subtotal_amount_float: 244.0, + formatted_subtotal_amount: '€244,00', + shipping_amount_cents: 0, + shipping_amount_float: 0.0, + formatted_shipping_amount: '€0,00', + payment_method_amount_cents: 1000, + payment_method_amount_float: 10.0, + formatted_payment_method_amount: '€10,00', + discount_amount_cents: 0, + discount_amount_float: 0.0, + formatted_discount_amount: '€0,00', + adjustment_amount_cents: 0, + adjustment_amount_float: 0.0, + formatted_adjustment_amount: '€0,00', + gift_card_amount_cents: -10000, + gift_card_amount_float: -100.0, + formatted_gift_card_amount: '-€100,00', + total_tax_amount_cents: 0, + total_tax_amount_float: 0.0, + formatted_total_tax_amount: '€0,00', + subtotal_tax_amount_cents: 0, + subtotal_tax_amount_float: 0.0, + formatted_subtotal_tax_amount: '€0,00', + shipping_tax_amount_cents: 0, + shipping_tax_amount_float: 0.0, + formatted_shipping_tax_amount: '€0,00', + payment_method_tax_amount_cents: 0, + payment_method_tax_amount_float: 0.0, + formatted_payment_method_tax_amount: '€0,00', + adjustment_tax_amount_cents: 0, + adjustment_tax_amount_float: 0.0, + formatted_adjustment_tax_amount: '€0,00', + total_amount_cents: 25400, + total_amount_float: 254.0, + formatted_total_amount: '€254,00', + total_taxable_amount_cents: 25400, + total_taxable_amount_float: 254.0, + formatted_total_taxable_amount: '€254,00', + subtotal_taxable_amount_cents: 24400, + subtotal_taxable_amount_float: 244.0, + formatted_subtotal_taxable_amount: '€244,00', + shipping_taxable_amount_cents: 0, + shipping_taxable_amount_float: 0.0, + formatted_shipping_taxable_amount: '€0,00', + payment_method_taxable_amount_cents: 1000, + payment_method_taxable_amount_float: 10.0, + formatted_payment_method_taxable_amount: '€10,00', + adjustment_taxable_amount_cents: 0, + adjustment_taxable_amount_float: 0.0, + formatted_adjustment_taxable_amount: '€0,00', + total_amount_with_taxes_cents: 15400, + total_amount_with_taxes_float: 154.0, + formatted_total_amount_with_taxes: '€154,00', + fees_amount_cents: 0, + fees_amount_float: 0.0, + formatted_fees_amount: '€0,00', + duty_amount_cents: null, + duty_amount_float: null, + formatted_duty_amount: null, + skus_count: 6, + line_item_options_count: 0, + shipments_count: 2, + tax_calculations_count: 0, + validations_count: 0, + payment_source_details: { + type: 'stripe_payment', + payment_method_id: 'pm_1N8LhuK5j6INEBBIHXkK0FFF', + payment_method_type: 'card', + payment_method_details: { + brand: 'visa', + last4: '4242', + checks: { + cvc_check: 'pass', + address_line1_check: 'pass', + address_postal_code_check: 'pass' + }, + wallet: null, + country: 'US', + funding: 'credit', + exp_year: 2031, + networks: { available: ['visa'], preferred: null }, + exp_month: 2, + fingerprint: 'bVaeOEKRmYhi20Nj', + generated_from: null, + three_d_secure_usage: { supported: true } + } + }, + token: '7fe6285a3dfdabeb8cb9324980743396', + cart_url: null, + return_url: null, + terms_url: null, + privacy_url: null, + checkout_url: null, + placed_at: '2023-05-16T11:06:22.012Z', + approved_at: '2023-05-16T14:18:16.775Z', + cancelled_at: null, + payment_updated_at: '2023-05-16T14:18:35.404Z', + fulfillment_updated_at: '2023-05-16T14:18:35.411Z', + refreshed_at: '2023-05-16T11:06:04.613Z', + archived_at: null, + expires_at: null, + subscription_created_at: null, + created_at: '2023-05-16T11:06:02.074Z', + updated_at: '2023-05-16T14:18:35.572Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + market: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/market', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/market' + }, + data: { type: 'markets', id: 'dlQbPhNNop' } + }, + customer: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/customer', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/customer' + }, + data: { type: 'customers', id: 'JkAdBhNGjQ' } + }, + shipping_address: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/shipping_address', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/shipping_address' + }, + data: { type: 'addresses', id: 'dPoNukZmnB' } + }, + billing_address: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/billing_address', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/billing_address' + }, + data: { type: 'addresses', id: 'dQxruwZDnB' } + }, + available_payment_methods: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_payment_methods', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_payment_methods' + } + }, + available_customer_payment_sources: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_customer_payment_sources', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_customer_payment_sources' + } + }, + available_free_skus: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_free_skus', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_free_skus' + } + }, + available_free_bundles: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_free_bundles', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_free_bundles' + } + }, + payment_method: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/payment_method', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/payment_method' + }, + data: { type: 'payment_methods', id: 'wmBvQsARml' } + }, + payment_source: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/payment_source', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/payment_source' + }, + data: { type: 'stripe_payments', id: 'onXELSmbQy' } + }, + line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/line_items', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/line_items' + }, + data: [ + { type: 'line_items', id: 'vaoMtAZlXy' }, + { type: 'line_items', id: 'kmnptjPlBv' }, + { type: 'line_items', id: 'vWEZtMGVKy' }, + { type: 'line_items', id: 'NqYatGaKnN' }, + { type: 'line_items', id: 'NoEntBwEdk' }, + { type: 'line_items', id: 'NlQmtMAnGy' } + ] + }, + shipments: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/shipments', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/shipments' + }, + data: [ + { type: 'shipments', id: 'YpLwCnNQgY' }, + { type: 'shipments', id: 'PabvCpOxRy' } + ] + }, + transactions: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/transactions', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/transactions' + }, + data: [ + { type: 'authorizations', id: 'nKZkPUDBVj' }, + { type: 'captures', id: 'kyAnxUgegE' } + ] + }, + authorizations: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/authorizations', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/authorizations' + } + }, + captures: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/captures', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/captures' + } + }, + voids: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/voids', + related: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/voids' + } + }, + refunds: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/refunds', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/refunds' + } + }, + returns: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/returns', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/returns' + } + }, + order_subscriptions: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/order_subscriptions', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/order_subscriptions' + } + }, + order_factories: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/order_factories', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/order_factories' + } + }, + order_copies: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/order_copies', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/order_copies' + } + }, + recurring_order_copies: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/recurring_order_copies', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/recurring_order_copies' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/attachments' + }, + data: [{ type: 'attachments', id: 'EqGrksxWNW' }] + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/events', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/tags', + related: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/tags' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } +} + +const orderDetail = http.get( + 'https://mock.localhost/api/orders/NMWYhbGorj?include=shipments,transactions,payment_method,payment_source,attachments', + async (req, res, ctx) => { + return await new Promise((resolve) => { + setTimeout(() => { + resolve( + res( + ctx.status(200), + ctx.json({ + data: order, + included: [ + { + id: 'dlQbPhNNop', + type: 'markets', + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop' + }, + attributes: { + number: 350, + name: 'Europe', + facebook_pixel_id: null, + checkout_url: '', + external_prices_url: + 'https://pippo.malessani.commercelayer.dev/api/verify', + external_order_validation_url: '', + private: false, + disabled_at: null, + created_at: '2022-03-11T09:40:49.000Z', + updated_at: '2023-03-13T13:30:32.184Z', + reference: 'market_1', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/merchant', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/merchant' + } + }, + price_list: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/price_list', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/price_list' + } + }, + inventory_model: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/inventory_model', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/subscription_model', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/tax_calculator', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/customer_group', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/customer_group' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'JkAdBhNGjQ', + type: 'customers', + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ' + }, + attributes: { + email: 'customer@tk.com', + status: 'repeat', + has_password: false, + total_orders_count: 2753, + created_at: '2022-03-14T09:13:06.633Z', + updated_at: '2023-07-31T09:13:06.049Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + customer_group: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_group', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_group' + } + }, + customer_addresses: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_addresses', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_addresses' + } + }, + customer_payment_sources: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_payment_sources', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_payment_sources' + } + }, + customer_subscriptions: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_subscriptions', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_subscriptions' + } + }, + orders: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/orders', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/orders' + } + }, + order_subscriptions: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/order_subscriptions', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/order_subscriptions' + } + }, + returns: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/returns', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/returns' + } + }, + sku_lists: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/sku_lists', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/sku_lists' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/attachments' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/events', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'dPoNukZmnB', + type: 'addresses', + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB' + }, + attributes: { + business: false, + first_name: 'Darth', + last_name: 'Vader', + company: null, + full_name: 'Darth Vader', + line_1: 'Via Morte Nera, 13', + line_2: 'Ragnatela, 99', + city: 'Cogorno', + zip_code: '16030', + state_code: 'GE', + country_code: 'IT', + phone: '+39 055 1234567890', + full_address: + 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + email: null, + notes: null, + lat: null, + lng: null, + is_localized: false, + is_geocoded: false, + provider_name: null, + map_url: null, + static_map_url: null, + billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', + created_at: '2023-05-16T11:06:07.638Z', + updated_at: '2023-05-16T11:06:07.638Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + geocoder: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/geocoder', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/geocoder' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/events', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/tags' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'dQxruwZDnB', + type: 'addresses', + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB' + }, + attributes: { + business: false, + first_name: 'Darth', + last_name: 'Vader', + company: null, + full_name: 'Darth Vader', + line_1: 'Via Morte Nera, 13', + line_2: 'Ragnatela, 99', + city: 'Cogorno', + zip_code: '16030', + state_code: 'GE', + country_code: 'IT', + phone: '+39 055 1234567890', + full_address: + 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + email: null, + notes: null, + lat: null, + lng: null, + is_localized: false, + is_geocoded: false, + provider_name: null, + map_url: null, + static_map_url: null, + billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', + created_at: '2023-05-16T11:06:07.493Z', + updated_at: '2023-05-16T11:06:07.493Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + geocoder: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/geocoder', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/geocoder' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/events', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/tags' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'wmBvQsARml', + type: 'payment_methods', + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml' + }, + attributes: { + payment_source_type: 'stripe_payments', + name: 'Stripe Payment', + currency_code: 'EUR', + moto: false, + require_capture: true, + auto_capture: false, + disabled_at: null, + price_amount_cents: 1000, + price_amount_float: 10.0, + formatted_price_amount: '€10,00', + auto_capture_max_amount_cents: null, + auto_capture_max_amount_float: null, + formatted_auto_capture_max_amount: null, + created_at: '2022-03-11T14:18:08.420Z', + updated_at: '2022-03-11T14:18:08.420Z', + reference: '', + reference_origin: '', + metadata: {} + }, + relationships: { + market: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/market', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/market' + } + }, + payment_gateway: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/payment_gateway', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/payment_gateway' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'onXELSmbQy', + type: 'stripe_payments', + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy' + }, + attributes: { + client_secret: + 'pi_3N8LhsK5j6INEBBI0JicoLOo_secret_CKWfEPSnvyBHIQrEfRXkrJYd7', + publishable_key: + 'pk_test_51KH86yK5j6INEBBIdkXoh0UwOoOlAbFZc3b8j0vjRHKQHdaUfEJm24F0A9QkrQXVlgh1nXJCpWR6PG3epaUWzE2z00BdEe9fho', + options: { + id: 'pm_1N8LhuK5j6INEBBI71U1QOlu', + card: { + brand: 'visa', + last4: '4242', + checks: { + cvc_check: null, + address_line1_check: null, + address_postal_code_check: null + }, + wallet: null, + country: 'US', + funding: 'credit', + exp_year: 2031, + networks: { available: ['visa'], preferred: null }, + exp_month: 2, + generated_from: null, + three_d_secure_usage: { supported: true } + }, + type: 'card', + object: 'payment_method', + created: 1684235178, + customer: null, + livemode: false, + billing_details: { + name: 'Darth Vader', + email: 'customer@tk.com', + phone: '+39 055 1234567890', + address: { + city: 'Cogorno', + line1: 'Via Morte Nera, 13', + line2: null, + state: 'GE', + country: 'IT', + postal_code: '16030' + } + }, + setup_future_usage: 'off_session', + intent_amount_cents: 15400 + }, + payment_method: { + id: 'pm_1N8LhuK5j6INEBBIHXkK0FFF', + card: { + brand: 'visa', + last4: '4242', + checks: { + cvc_check: 'pass', + address_line1_check: 'pass', + address_postal_code_check: 'pass' + }, + wallet: null, + country: 'US', + funding: 'credit', + exp_year: 2031, + networks: { available: ['visa'], preferred: null }, + exp_month: 2, + fingerprint: 'bVaeOEKRmYhi20Nj', + generated_from: null, + three_d_secure_usage: { supported: true } + }, + type: 'card', + object: 'payment_method', + created: 1684235179, + customer: null, + livemode: false, + metadata: {}, + billing_details: { + name: 'Darth Vader', + email: 'customer@tk.com', + phone: '+39 055 1234567890', + address: { + city: 'Cogorno', + line1: 'Via Morte Nera, 13', + line2: null, + state: 'GE', + country: 'IT', + postal_code: '16030' + } + } + }, + mismatched_amounts: false, + intent_amount_cents: 15400, + intent_amount_float: 154.0, + formatted_intent_amount: '€154,00', + return_url: null, + payment_instrument: { + issuer_type: 'card', + card_type: 'visa', + card_last_digits: '4242', + card_expiry_month: '2', + card_expiry_year: '2031' + }, + created_at: '2023-05-16T11:06:16.338Z', + updated_at: '2023-05-16T11:06:21.948Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/order' + } + }, + payment_gateway: { + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/payment_gateway', + related: + 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/payment_gateway' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'vaoMtAZlXy', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: -10000, + unit_amount_float: -100.0, + formatted_unit_amount: '-€100,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: -10000, + total_amount_float: -100.0, + formatted_total_amount: '-€100,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Gift card: €100,00', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'gift_cards', + frequency: null, + created_at: '2023-05-16T11:06:14.674Z', + updated_at: '2023-05-16T11:06:14.674Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'kmnptjPlBv', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 1000, + unit_amount_float: 10.0, + formatted_unit_amount: '€10,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: 1000, + total_amount_float: 10.0, + formatted_total_amount: '€10,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Stripe Payment', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'payment_methods', + frequency: null, + created_at: '2023-05-16T11:06:14.629Z', + updated_at: '2023-05-16T11:06:14.629Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'vWEZtMGVKy', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 0, + unit_amount_float: 0.0, + formatted_unit_amount: '€0,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: 0, + total_amount_float: 0.0, + formatted_total_amount: '€0,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Shipment #2485862/S/001', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'shipments', + frequency: null, + created_at: '2023-05-16T11:06:09.728Z', + updated_at: '2023-05-16T11:06:09.728Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'NqYatGaKnN', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 0, + unit_amount_float: 0.0, + formatted_unit_amount: '€0,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: 0, + total_amount_float: 0.0, + formatted_total_amount: '€0,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Shipment #2485862/S/002', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'shipments', + frequency: null, + created_at: '2023-05-16T11:06:09.602Z', + updated_at: '2023-05-16T11:06:09.602Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'NoEntBwEdk', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk' + }, + attributes: { + sku_code: 'TSHIRTMMFFFFFF000000XLXX', + bundle_code: null, + quantity: 5, + currency_code: 'EUR', + unit_amount_cents: 2900, + unit_amount_float: 29.0, + formatted_unit_amount: '€29,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: -5943, + discount_float: -59.43, + formatted_discount: '-€59,43', + total_amount_cents: 14500, + total_amount_float: 145.0, + formatted_total_amount: '€145,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'White Men T-Shirt with Black Logo (XL)', + image_url: + 'https://data.commercelayer.app/seed/images/skus/TSHIRTMSFFFFFF000000XLXX_FLAT.png', + discount_breakdown: { + vaoMtAZlXy: { cents: -5943, weight: 0.5942622950819673 } + }, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'skus', + frequency: null, + created_at: '2023-05-16T11:06:02.458Z', + updated_at: '2023-05-16T11:06:02.458Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'NlQmtMAnGy', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy' + }, + attributes: { + sku_code: 'CANVASAU000000FFFFFF1824', + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 9900, + unit_amount_float: 99.0, + formatted_unit_amount: '€99,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: -4057, + discount_float: -40.57, + formatted_discount: '-€40,57', + total_amount_cents: 9900, + total_amount_float: 99.0, + formatted_total_amount: '€99,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Black Canvas with White Logo (18x24)', + image_url: + 'https://img.commercelayer.io/skus/CANVASAU000000FFFFFF.png?fm=jpg&q=90', + discount_breakdown: { + vaoMtAZlXy: { cents: -4057, weight: 0.4057377049180328 } + }, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'skus', + frequency: null, + created_at: '2023-05-16T11:06:02.444Z', + updated_at: '2023-05-16T11:06:02.444Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'YpLwCnNQgY', + type: 'shipments', + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY' + }, + attributes: { + number: '2485862/S/001', + status: 'on_hold', + currency_code: 'EUR', + cost_amount_cents: 0, + cost_amount_float: 0.0, + formatted_cost_amount: '$0.00', + skus_count: 5, + selected_rate_id: null, + rates: [], + purchase_error_code: null, + purchase_error_message: null, + get_rates_errors: [], + get_rates_started_at: null, + get_rates_completed_at: null, + purchase_started_at: null, + purchase_completed_at: null, + purchase_failed_at: null, + on_hold_at: '2023-07-21T14:12:13.287Z', + picking_at: '2023-07-21T14:12:08.574Z', + packing_at: '2023-07-21T14:10:54.107Z', + ready_to_ship_at: null, + shipped_at: null, + created_at: '2023-05-16T11:06:07.685Z', + updated_at: '2023-07-21T14:12:13.286Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/order', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/order' + } + }, + shipping_category: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_category', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_category' + } + }, + stock_location: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_location', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_location' + } + }, + origin_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/origin_address', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/origin_address' + } + }, + shipping_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_address', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_address' + } + }, + shipping_method: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_method', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_method' + } + }, + delivery_lead_time: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/delivery_lead_time', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/delivery_lead_time' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipment_line_items' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_transfers' + } + }, + available_shipping_methods: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/available_shipping_methods', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/available_shipping_methods' + } + }, + carrier_accounts: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/carrier_accounts', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/carrier_accounts' + } + }, + parcels: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/parcels', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/parcels' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/attachments' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/events', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/events' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'PabvCpOxRy', + type: 'shipments', + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy' + }, + attributes: { + number: '2485862/S/002', + status: 'shipped', + currency_code: 'EUR', + cost_amount_cents: 0, + cost_amount_float: 0.0, + formatted_cost_amount: '$0.00', + skus_count: 1, + selected_rate_id: null, + rates: [], + purchase_error_code: null, + purchase_error_message: null, + get_rates_errors: [], + get_rates_started_at: null, + get_rates_completed_at: null, + purchase_started_at: null, + purchase_completed_at: null, + purchase_failed_at: null, + on_hold_at: null, + picking_at: '2023-05-16T14:18:35.559Z', + packing_at: '2023-05-16T14:20:24.459Z', + ready_to_ship_at: '2023-05-16T14:21:43.665Z', + shipped_at: '2023-05-16T14:22:42.632Z', + created_at: '2023-05-16T11:06:07.711Z', + updated_at: '2023-05-16T14:22:42.633Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/order' + } + }, + shipping_category: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_category', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_category' + } + }, + stock_location: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_location', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_location' + } + }, + origin_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/origin_address', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/origin_address' + } + }, + shipping_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_address', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_address' + } + }, + shipping_method: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_method', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_method' + } + }, + delivery_lead_time: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/delivery_lead_time', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/delivery_lead_time' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipment_line_items' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_transfers' + } + }, + available_shipping_methods: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/available_shipping_methods', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/available_shipping_methods' + } + }, + carrier_accounts: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/carrier_accounts', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/carrier_accounts' + } + }, + parcels: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/parcels', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/parcels' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/attachments' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/events' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'nKZkPUDBVj', + type: 'authorizations', + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj' + }, + attributes: { + number: '2485862/T/001', + currency_code: 'EUR', + amount_cents: 15400, + amount_float: 154.0, + formatted_amount: '€154,00', + succeeded: true, + message: 'Success!', + error_code: null, + error_detail: null, + token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + created_at: '2023-05-16T11:06:21.964Z', + updated_at: '2023-05-16T11:06:21.964Z', + reference: null, + reference_origin: null, + metadata: {}, + cvv_code: null, + cvv_message: null, + avs_code: null, + avs_message: null, + fraud_review: null, + capture_amount_cents: 0, + capture_amount_float: 0.0, + formatted_capture_amount: '€0,00', + capture_balance_cents: 0, + capture_balance_float: 0.0, + formatted_capture_balance: '€0,00', + void_balance_cents: 15400, + void_balance_float: 154.0, + formatted_void_balance: '€154,00' + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/order', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/order' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/versions' + } + }, + captures: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/captures', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/captures' + } + }, + voids: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/voids', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/voids' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/events', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/events' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'kyAnxUgegE', + type: 'captures', + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE' + }, + attributes: { + number: '2485862/T/002', + currency_code: 'EUR', + amount_cents: 15400, + amount_float: 154.0, + formatted_amount: '€154,00', + succeeded: true, + message: 'Success!', + error_code: null, + error_detail: null, + token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + created_at: '2023-05-16T14:18:35.368Z', + updated_at: '2023-05-16T14:18:35.368Z', + reference: null, + reference_origin: null, + metadata: {}, + refund_amount_cents: 15400, + refund_amount_float: 154.0, + formatted_refund_amount: '€154,00', + refund_balance_cents: 15400, + refund_balance_float: 154.0, + formatted_refund_balance: '€154,00' + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/order', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/order' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/versions' + } + }, + reference_authorization: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/reference_authorization', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/reference_authorization' + } + }, + refunds: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/refunds', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/refunds' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/events', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/events' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'EqGrksxWNW', + type: 'attachments', + links: { + self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW' + }, + attributes: { + name: 'M. Montalbano', + description: 'Ehi there!', + url: null, + created_at: '2023-07-20T13:58:52.184Z', + updated_at: '2023-07-20T13:58:52.184Z', + reference: null, + reference_origin: 'app-orders--note', + metadata: {} + }, + relationships: { + attachable: { + links: { + self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/relationships/attachable', + related: + 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/attachable' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + } + ] + }) + ) + ) + }, 2000) + }) + } +) + +function getRandomFormattedPrice() { + return `€${Math.floor(Math.random() * 1000)}.00` +} + +function getRandomOrderStatus() { + const statues = [ + { + status: 'placed', + payment_status: 'authorized', + fulfillment_status: 'unfulfilled' + }, + { + status: 'approved', + payment_status: 'paid', + fulfillment_status: 'in_progress' + }, + { + status: 'approved', + payment_status: 'paid', + fulfillment_status: 'fulfilled' + } + ] + return statues[Math.floor(Math.random() * statues.length)] +} + +const orderList = http.get( + 'https://mock.localhost/api/orders', + async (req, res, ctx) => { + const currentPage = parseInt( + req.url.searchParams.get('page[number]') ?? '1' + ) + const itemPerPage = parseInt(req.url.searchParams.get('page[size]') ?? '5') + const pageCount = itemPerPage <= 5 ? 1 : 3 + + return res( + ctx.delay(2000), + ctx.status(200), + ctx.json({ + data: Array(itemPerPage) + .fill(order) + .map((order, idx) => ({ + ...order, + id: `mocked-${currentPage}-${idx}`, + attributes: { + ...order.attributes, + number: parseInt(`26372${currentPage}${idx}`, 10), + formatted_total_amount: getRandomFormattedPrice(), + ...getRandomOrderStatus() + } + })), + meta: { + record_count: itemPerPage * pageCount, + page_count: pageCount + }, + included: [ + { + id: 'dlQbPhNNop', + type: 'markets', + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop' + }, + attributes: { + number: 350, + name: 'Europe', + facebook_pixel_id: null, + checkout_url: '', + external_prices_url: + 'https://pippo.malessani.commercelayer.dev/api/verify', + external_order_validation_url: '', + private: false, + disabled_at: null, + created_at: '2022-03-11T09:40:49.000Z', + updated_at: '2023-03-13T13:30:32.184Z', + reference: 'market_1', + reference_origin: 'CLI', + metadata: {} + }, + relationships: { + merchant: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/merchant', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/merchant' + } + }, + price_list: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/price_list', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/price_list' + } + }, + inventory_model: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/inventory_model', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/inventory_model' + } + }, + subscription_model: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/subscription_model', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/subscription_model' + } + }, + tax_calculator: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/tax_calculator', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/tax_calculator' + } + }, + customer_group: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/customer_group', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/customer_group' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'JkAdBhNGjQ', + type: 'customers', + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ' + }, + attributes: { + email: 'customer@tk.com', + status: 'repeat', + has_password: false, + total_orders_count: 2753, + created_at: '2022-03-14T09:13:06.633Z', + updated_at: '2023-07-31T09:13:06.049Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + customer_group: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_group', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_group' + } + }, + customer_addresses: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_addresses', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_addresses' + } + }, + customer_payment_sources: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_payment_sources', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_payment_sources' + } + }, + customer_subscriptions: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_subscriptions', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_subscriptions' + } + }, + orders: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/orders', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/orders' + } + }, + order_subscriptions: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/order_subscriptions', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/order_subscriptions' + } + }, + returns: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/returns', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/returns' + } + }, + sku_lists: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/sku_lists', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/sku_lists' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/attachments' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/events', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'dPoNukZmnB', + type: 'addresses', + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB' + }, + attributes: { + business: false, + first_name: 'Darth', + last_name: 'Vader', + company: null, + full_name: 'Darth Vader', + line_1: 'Via Morte Nera, 13', + line_2: 'Ragnatela, 99', + city: 'Cogorno', + zip_code: '16030', + state_code: 'GE', + country_code: 'IT', + phone: '+39 055 1234567890', + full_address: + 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + email: null, + notes: null, + lat: null, + lng: null, + is_localized: false, + is_geocoded: false, + provider_name: null, + map_url: null, + static_map_url: null, + billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', + created_at: '2023-05-16T11:06:07.638Z', + updated_at: '2023-05-16T11:06:07.638Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + geocoder: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/geocoder', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/geocoder' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/events', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/tags' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'dQxruwZDnB', + type: 'addresses', + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB' + }, + attributes: { + business: false, + first_name: 'Darth', + last_name: 'Vader', + company: null, + full_name: 'Darth Vader', + line_1: 'Via Morte Nera, 13', + line_2: 'Ragnatela, 99', + city: 'Cogorno', + zip_code: '16030', + state_code: 'GE', + country_code: 'IT', + phone: '+39 055 1234567890', + full_address: + 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', + email: null, + notes: null, + lat: null, + lng: null, + is_localized: false, + is_geocoded: false, + provider_name: null, + map_url: null, + static_map_url: null, + billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', + created_at: '2023-05-16T11:06:07.493Z', + updated_at: '2023-05-16T11:06:07.493Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + geocoder: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/geocoder', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/geocoder' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/events', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/tags' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'wmBvQsARml', + type: 'payment_methods', + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml' + }, + attributes: { + payment_source_type: 'stripe_payments', + name: 'Stripe Payment', + currency_code: 'EUR', + moto: false, + require_capture: true, + auto_capture: false, + disabled_at: null, + price_amount_cents: 1000, + price_amount_float: 10.0, + formatted_price_amount: '€10,00', + auto_capture_max_amount_cents: null, + auto_capture_max_amount_float: null, + formatted_auto_capture_max_amount: null, + created_at: '2022-03-11T14:18:08.420Z', + updated_at: '2022-03-11T14:18:08.420Z', + reference: '', + reference_origin: '', + metadata: {} + }, + relationships: { + market: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/market', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/market' + } + }, + payment_gateway: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/payment_gateway', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/payment_gateway' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'onXELSmbQy', + type: 'stripe_payments', + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy' + }, + attributes: { + client_secret: + 'pi_3N8LhsK5j6INEBBI0JicoLOo_secret_CKWfEPSnvyBHIQrEfRXkrJYd7', + publishable_key: + 'pk_test_51KH86yK5j6INEBBIdkXoh0UwOoOlAbFZc3b8j0vjRHKQHdaUfEJm24F0A9QkrQXVlgh1nXJCpWR6PG3epaUWzE2z00BdEe9fho', + options: { + id: 'pm_1N8LhuK5j6INEBBI71U1QOlu', + card: { + brand: 'visa', + last4: '4242', + checks: { + cvc_check: null, + address_line1_check: null, + address_postal_code_check: null + }, + wallet: null, + country: 'US', + funding: 'credit', + exp_year: 2031, + networks: { available: ['visa'], preferred: null }, + exp_month: 2, + generated_from: null, + three_d_secure_usage: { supported: true } + }, + type: 'card', + object: 'payment_method', + created: 1684235178, + customer: null, + livemode: false, + billing_details: { + name: 'Darth Vader', + email: 'customer@tk.com', + phone: '+39 055 1234567890', + address: { + city: 'Cogorno', + line1: 'Via Morte Nera, 13', + line2: null, + state: 'GE', + country: 'IT', + postal_code: '16030' + } + }, + setup_future_usage: 'off_session', + intent_amount_cents: 15400 + }, + payment_method: { + id: 'pm_1N8LhuK5j6INEBBIHXkK0FFF', + card: { + brand: 'visa', + last4: '4242', + checks: { + cvc_check: 'pass', + address_line1_check: 'pass', + address_postal_code_check: 'pass' + }, + wallet: null, + country: 'US', + funding: 'credit', + exp_year: 2031, + networks: { available: ['visa'], preferred: null }, + exp_month: 2, + fingerprint: 'bVaeOEKRmYhi20Nj', + generated_from: null, + three_d_secure_usage: { supported: true } + }, + type: 'card', + object: 'payment_method', + created: 1684235179, + customer: null, + livemode: false, + metadata: {}, + billing_details: { + name: 'Darth Vader', + email: 'customer@tk.com', + phone: '+39 055 1234567890', + address: { + city: 'Cogorno', + line1: 'Via Morte Nera, 13', + line2: null, + state: 'GE', + country: 'IT', + postal_code: '16030' + } + } + }, + mismatched_amounts: false, + intent_amount_cents: 15400, + intent_amount_float: 154.0, + formatted_intent_amount: '€154,00', + return_url: null, + payment_instrument: { + issuer_type: 'card', + card_type: 'visa', + card_last_digits: '4242', + card_expiry_month: '2', + card_expiry_year: '2031' + }, + created_at: '2023-05-16T11:06:16.338Z', + updated_at: '2023-05-16T11:06:21.948Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/order' + } + }, + payment_gateway: { + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/payment_gateway', + related: + 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/payment_gateway' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'vaoMtAZlXy', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: -10000, + unit_amount_float: -100.0, + formatted_unit_amount: '-€100,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: -10000, + total_amount_float: -100.0, + formatted_total_amount: '-€100,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Gift card: €100,00', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'gift_cards', + frequency: null, + created_at: '2023-05-16T11:06:14.674Z', + updated_at: '2023-05-16T11:06:14.674Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'kmnptjPlBv', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 1000, + unit_amount_float: 10.0, + formatted_unit_amount: '€10,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: 1000, + total_amount_float: 10.0, + formatted_total_amount: '€10,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Stripe Payment', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'payment_methods', + frequency: null, + created_at: '2023-05-16T11:06:14.629Z', + updated_at: '2023-05-16T11:06:14.629Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'vWEZtMGVKy', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 0, + unit_amount_float: 0.0, + formatted_unit_amount: '€0,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: 0, + total_amount_float: 0.0, + formatted_total_amount: '€0,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Shipment #2485862/S/001', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'shipments', + frequency: null, + created_at: '2023-05-16T11:06:09.728Z', + updated_at: '2023-05-16T11:06:09.728Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'NqYatGaKnN', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN' + }, + attributes: { + sku_code: null, + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 0, + unit_amount_float: 0.0, + formatted_unit_amount: '€0,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: 0, + discount_float: 0.0, + formatted_discount: '€0,00', + total_amount_cents: 0, + total_amount_float: 0.0, + formatted_total_amount: '€0,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Shipment #2485862/S/002', + image_url: null, + discount_breakdown: {}, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'shipments', + frequency: null, + created_at: '2023-05-16T11:06:09.602Z', + updated_at: '2023-05-16T11:06:09.602Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'NoEntBwEdk', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk' + }, + attributes: { + sku_code: 'TSHIRTMMFFFFFF000000XLXX', + bundle_code: null, + quantity: 5, + currency_code: 'EUR', + unit_amount_cents: 2900, + unit_amount_float: 29.0, + formatted_unit_amount: '€29,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: -5943, + discount_float: -59.43, + formatted_discount: '-€59,43', + total_amount_cents: 14500, + total_amount_float: 145.0, + formatted_total_amount: '€145,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'White Men T-Shirt with Black Logo (XL)', + image_url: + 'https://data.commercelayer.app/seed/images/skus/TSHIRTMSFFFFFF000000XLXX_FLAT.png', + discount_breakdown: { + vaoMtAZlXy: { cents: -5943, weight: 0.5942622950819673 } + }, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'skus', + frequency: null, + created_at: '2023-05-16T11:06:02.458Z', + updated_at: '2023-05-16T11:06:02.458Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'NlQmtMAnGy', + type: 'line_items', + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy' + }, + attributes: { + sku_code: 'CANVASAU000000FFFFFF1824', + bundle_code: null, + quantity: 1, + currency_code: 'EUR', + unit_amount_cents: 9900, + unit_amount_float: 99.0, + formatted_unit_amount: '€99,00', + options_amount_cents: 0, + options_amount_float: 0.0, + formatted_options_amount: '€0,00', + discount_cents: -4057, + discount_float: -40.57, + formatted_discount: '-€40,57', + total_amount_cents: 9900, + total_amount_float: 99.0, + formatted_total_amount: '€99,00', + tax_amount_cents: 0, + tax_amount_float: 0.0, + formatted_tax_amount: '€0,00', + name: 'Black Canvas with White Logo (18x24)', + image_url: + 'https://img.commercelayer.io/skus/CANVASAU000000FFFFFF.png?fm=jpg&q=90', + discount_breakdown: { + vaoMtAZlXy: { cents: -4057, weight: 0.4057377049180328 } + }, + tax_rate: 0.0, + tax_breakdown: {}, + item_type: 'skus', + frequency: null, + created_at: '2023-05-16T11:06:02.444Z', + updated_at: '2023-05-16T11:06:02.444Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/order' + } + }, + item: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/item', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/item' + } + }, + line_item_options: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/line_item_options', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/line_item_options' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/shipment_line_items' + } + }, + stock_reservations: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_reservations', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_reservations' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_transfers' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/events' + } + }, + tags: { + links: { + self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/tags', + related: + 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/tags' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'YpLwCnNQgY', + type: 'shipments', + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY' + }, + attributes: { + number: '2485862/S/001', + status: 'on_hold', + currency_code: 'EUR', + cost_amount_cents: 0, + cost_amount_float: 0.0, + formatted_cost_amount: '$0.00', + skus_count: 5, + selected_rate_id: null, + rates: [], + purchase_error_code: null, + purchase_error_message: null, + get_rates_errors: [], + get_rates_started_at: null, + get_rates_completed_at: null, + purchase_started_at: null, + purchase_completed_at: null, + purchase_failed_at: null, + on_hold_at: '2023-07-21T14:12:13.287Z', + picking_at: '2023-07-21T14:12:08.574Z', + packing_at: '2023-07-21T14:10:54.107Z', + ready_to_ship_at: null, + shipped_at: null, + created_at: '2023-05-16T11:06:07.685Z', + updated_at: '2023-07-21T14:12:13.286Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/order', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/order' + } + }, + shipping_category: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_category', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_category' + } + }, + stock_location: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_location', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_location' + } + }, + origin_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/origin_address', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/origin_address' + } + }, + shipping_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_address', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_address' + } + }, + shipping_method: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_method', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_method' + } + }, + delivery_lead_time: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/delivery_lead_time', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/delivery_lead_time' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipment_line_items' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_transfers' + } + }, + available_shipping_methods: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/available_shipping_methods', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/available_shipping_methods' + } + }, + carrier_accounts: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/carrier_accounts', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/carrier_accounts' + } + }, + parcels: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/parcels', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/parcels' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/attachments' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/events', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/events' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'PabvCpOxRy', + type: 'shipments', + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy' + }, + attributes: { + number: '2485862/S/002', + status: 'shipped', + currency_code: 'EUR', + cost_amount_cents: 0, + cost_amount_float: 0.0, + formatted_cost_amount: '$0.00', + skus_count: 1, + selected_rate_id: null, + rates: [], + purchase_error_code: null, + purchase_error_message: null, + get_rates_errors: [], + get_rates_started_at: null, + get_rates_completed_at: null, + purchase_started_at: null, + purchase_completed_at: null, + purchase_failed_at: null, + on_hold_at: null, + picking_at: '2023-05-16T14:18:35.559Z', + packing_at: '2023-05-16T14:20:24.459Z', + ready_to_ship_at: '2023-05-16T14:21:43.665Z', + shipped_at: '2023-05-16T14:22:42.632Z', + created_at: '2023-05-16T11:06:07.711Z', + updated_at: '2023-05-16T14:22:42.633Z', + reference: null, + reference_origin: null, + metadata: {} + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/order', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/order' + } + }, + shipping_category: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_category', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_category' + } + }, + stock_location: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_location', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_location' + } + }, + origin_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/origin_address', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/origin_address' + } + }, + shipping_address: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_address', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_address' + } + }, + shipping_method: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_method', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_method' + } + }, + delivery_lead_time: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/delivery_lead_time', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/delivery_lead_time' + } + }, + shipment_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipment_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipment_line_items' + } + }, + stock_line_items: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_line_items', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_line_items' + } + }, + stock_transfers: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_transfers', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_transfers' + } + }, + available_shipping_methods: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/available_shipping_methods', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/available_shipping_methods' + } + }, + carrier_accounts: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/carrier_accounts', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/carrier_accounts' + } + }, + parcels: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/parcels', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/parcels' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/attachments' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/events', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/events' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/versions' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'nKZkPUDBVj', + type: 'authorizations', + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj' + }, + attributes: { + number: '2485862/T/001', + currency_code: 'EUR', + amount_cents: 15400, + amount_float: 154.0, + formatted_amount: '€154,00', + succeeded: true, + message: 'Success!', + error_code: null, + error_detail: null, + token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + created_at: '2023-05-16T11:06:21.964Z', + updated_at: '2023-05-16T11:06:21.964Z', + reference: null, + reference_origin: null, + metadata: {}, + cvv_code: null, + cvv_message: null, + avs_code: null, + avs_message: null, + fraud_review: null, + capture_amount_cents: 0, + capture_amount_float: 0.0, + formatted_capture_amount: '€0,00', + capture_balance_cents: 0, + capture_balance_float: 0.0, + formatted_capture_balance: '€0,00', + void_balance_cents: 15400, + void_balance_float: 154.0, + formatted_void_balance: '€154,00' + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/order', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/order' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/versions' + } + }, + captures: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/captures', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/captures' + } + }, + voids: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/voids', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/voids' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/events', + related: + 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/events' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'kyAnxUgegE', + type: 'captures', + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE' + }, + attributes: { + number: '2485862/T/002', + currency_code: 'EUR', + amount_cents: 15400, + amount_float: 154.0, + formatted_amount: '€154,00', + succeeded: true, + message: 'Success!', + error_code: null, + error_detail: null, + token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', + created_at: '2023-05-16T14:18:35.368Z', + updated_at: '2023-05-16T14:18:35.368Z', + reference: null, + reference_origin: null, + metadata: {}, + refund_amount_cents: 15400, + refund_amount_float: 154.0, + formatted_refund_amount: '€154,00', + refund_balance_cents: 15400, + refund_balance_float: 154.0, + formatted_refund_balance: '€154,00' + }, + relationships: { + order: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/order', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/order' + } + }, + attachments: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/attachments', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/attachments' + } + }, + versions: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/versions', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/versions' + } + }, + reference_authorization: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/reference_authorization', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/reference_authorization' + } + }, + refunds: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/refunds', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/refunds' + } + }, + events: { + links: { + self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/events', + related: + 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/events' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + }, + { + id: 'EqGrksxWNW', + type: 'attachments', + links: { + self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW' + }, + attributes: { + name: 'M. Montalbano', + description: 'Ehi there!', + url: null, + created_at: '2023-07-20T13:58:52.184Z', + updated_at: '2023-07-20T13:58:52.184Z', + reference: null, + reference_origin: 'app-orders--note', + metadata: {} + }, + relationships: { + attachable: { + links: { + self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/relationships/attachable', + related: + 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/attachable' + } + } + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + } + ] + }) + ) + } +) + +export default [orderDetail, orderList] diff --git a/packages/document/mocks/data/tags.js b/packages/document/mocks/data/tags.js new file mode 100644 index 00000000..3fdf23d7 --- /dev/null +++ b/packages/document/mocks/data/tags.js @@ -0,0 +1,42 @@ +import { HttpResponse, http } from 'msw' + +const mockedTags = Array(15) + .fill(null) + .map((item, idx) => ({ + id: Math.random().toString().substring(2, 12), + type: 'tags', + attributes: { + name: `tag-${idx}`, + created_at: '2023-03-17T14:07:36.604Z', + updated_at: '2023-03-17T14:07:36.604Z' + }, + meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } + })) + +const customerTags = http.get( + `https://mock.localhost/api/customers/NMWYhbGorj/tags`, + async () => { + return HttpResponse.json( + { + data: mockedTags.slice(0, 2), + meta: { record_count: 2, page_count: 1 } + }, + { status: 200 } + ) + } +) + +const organizationTags = http.get( + `https://mock.localhost/api/tags`, + async () => { + return HttpResponse.json( + { + data: mockedTags, + meta: { record_count: 100, page_count: 10 } + }, + { status: 200 } + ) + } +) + +export default [customerTags, organizationTags] diff --git a/packages/document/mocks/handlers.js b/packages/document/mocks/handlers.js new file mode 100644 index 00000000..df071002 --- /dev/null +++ b/packages/document/mocks/handlers.js @@ -0,0 +1,15 @@ +import adjustments from './data/adjustments' +import bundles from './data/bundles' +import lineItems from './data/line_items' +import markets from './data/markets' +import orders from './data/orders' +import tags from './data/tags' + +export const handlers = [ + ...adjustments, + ...bundles, + ...lineItems, + ...markets, + ...orders, + ...tags +] diff --git a/packages/document/package.json b/packages/document/package.json new file mode 100644 index 00000000..f179175e --- /dev/null +++ b/packages/document/package.json @@ -0,0 +1,53 @@ +{ + "name": "document", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@chromatic-com/storybook": "^3.2.4", + "@eslint/js": "^9.19.0", + "@storybook/addon-docs": "^7.6.17", + "@storybook/addon-essentials": "^8.5.3", + "@storybook/addon-interactions": "^8.5.3", + "@storybook/addon-links": "^7.6.17", + "@storybook/addon-mdx-gfm": "^8.5.3", + "@storybook/addon-onboarding": "^8.5.3", + "@storybook/blocks": "^8.5.3", + "@storybook/react": "^8.5.3", + "@storybook/react-vite": "^8.5.3", + "@storybook/test": "^8.5.3", + "@storybook/theming": "^8.5.3", + "@types/react": "^19.0.8", + "@types/react-dom": "^19.0.3", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.19.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.18", + "eslint-plugin-storybook": "^0.11.2", + "globals": "^15.14.0", + "msw": "^2.7.0", + "remark-gfm": "^4.0.0", + "storybook": "^8.5.3", + "typescript": "~5.7.2", + "typescript-eslint": "^8.22.0", + "vite": "^6.1.0", + "vite-tsconfig-paths": "^5.1.4" + }, + "eslintConfig": { + "extends": [ + "plugin:storybook/recommended" + ] + } +} diff --git a/packages/document/public/app-logo.png b/packages/document/public/app-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..77e678b5bf1857fc4ea500ae856282d0aabe3996 GIT binary patch literal 28732 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 { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +self.addEventListener('fetch', function (event) { + const { request } = event + const accept = request.headers.get('accept') || '' + + // Bypass server-sent events. + if (accept.includes('text/event-stream')) { + return + } + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + // Generate unique request ID. + const requestId = Math.random().toString(16).slice(2) + + event.respondWith( + handleRequest(event, requestId).catch((error) => { + if (error.name === 'NetworkError') { + console.warn( + '[MSW] Successfully emulated a network error for the "%s %s" request.', + request.method, + request.url, + ) + return + } + + // At this point, any exception indicates an issue with the original request/response. + console.error( + `\ +[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, + request.method, + request.url, + `${error.name}: ${error.message}`, + ) + }), + ) +}) + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const clonedResponse = response.clone() + sendToClient(client, { + type: 'RESPONSE', + payload: { + requestId, + type: clonedResponse.type, + ok: clonedResponse.ok, + status: clonedResponse.status, + statusText: clonedResponse.statusText, + body: + clonedResponse.body === null ? null : await clonedResponse.text(), + headers: Object.fromEntries(clonedResponse.headers.entries()), + redirected: clonedResponse.redirected, + }, + }) + })() + } + + return response +} + +// Resolve the main client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client?.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function getResponse(event, client, requestId) { + const { request } = event + const clonedRequest = request.clone() + + function passthrough() { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const headers = Object.fromEntries(clonedRequest.headers.entries()) + + // Remove MSW-specific request headers so the bypassed requests + // comply with the server's CORS preflight check. + // Operate with the headers as an object because request "Headers" + // are immutable. + delete headers['x-msw-bypass'] + + return fetch(clonedRequest, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Bypass requests with the explicit bypass header. + // Such requests can be issued by "ctx.fetch()". + if (request.headers.get('x-msw-bypass') === 'true') { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const clientMessage = await sendToClient(client, { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.text(), + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'MOCK_NOT_FOUND': { + return passthrough() + } + + case 'NETWORK_ERROR': { + const { name, message } = clientMessage.data + const networkError = new Error(message) + networkError.name = name + + // Rejecting a "respondWith" promise emulates a network error. + throw networkError + } + } + + return passthrough() +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage(message, [channel.port2]) + }) +} + +function sleep(timeMs) { + return new Promise((resolve) => { + setTimeout(resolve, timeMs) + }) +} + +async function respondWithMock(response) { + await sleep(response.delay) + return new Response(response.body, response) +} diff --git a/packages/document/public/storybook-preview.css b/packages/document/public/storybook-preview.css new file mode 100644 index 00000000..3d591793 --- /dev/null +++ b/packages/document/public/storybook-preview.css @@ -0,0 +1,38 @@ +/* Global */ +.sbdocs-wrapper ol { + list-style: decimal; +} + +/** Blockquote */ +span[type] { + display: block; + padding: 16px !important; + font-size: 14px !important; + color: #2e3438 !important; + margin: 16px 0; + border-left: 4px solid; +} +span[type]::before { + content: attr(title); + display: block; + font-weight: bold; +} +span[type] > p { + margin: 0; +} +span[type='info'] { + border-color: #3b82f6; + background-color: #dbebfe; +} +span[type='warning'] { + border-color: #f97317; + background-color: #ffedd5; +} +span[type='success'] { + border-color: #22c55f; + background-color: #ddfce7; +} +span[type='danger'] { + border-color: #ef4544; + background-color: #fee2e3; +} diff --git a/packages/document/public/welcome-hero.png b/packages/document/public/welcome-hero.png new file mode 100644 index 0000000000000000000000000000000000000000..57c9193bb7778c712d774da1fd68cb13c17293cc GIT binary patch literal 103964 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 z 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 m&Hplk|1tyU|669T;MjP>7eA1we-Ym9�eQOINuZ@P7b&d + +

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/packages/document/src/assets/react.svg b/packages/document/src/assets/react.svg new file mode 100644 index 00000000..6c87de9b --- /dev/null +++ b/packages/document/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/document/src/index.css b/packages/document/src/index.css new file mode 100644 index 00000000..6119ad9a --- /dev/null +++ b/packages/document/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/document/src/main.tsx b/packages/document/src/main.tsx new file mode 100644 index 00000000..86e0ef88 --- /dev/null +++ b/packages/document/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react" +import { createRoot } from "react-dom/client" +import "./index.css" +import App from "./App.tsx" + +createRoot(document.getElementById("root")!).render( + + + , +) diff --git a/packages/document/src/stories/_internals/Code.tsx b/packages/document/src/stories/_internals/Code.tsx new file mode 100644 index 00000000..383c69b0 --- /dev/null +++ b/packages/document/src/stories/_internals/Code.tsx @@ -0,0 +1,3 @@ +export const Code: React.FC<{ children?: string }> = ({ children }) => { + return {children} +} diff --git a/packages/document/src/stories/_internals/CommerceLayer.tsx b/packages/document/src/stories/_internals/CommerceLayer.tsx new file mode 100644 index 00000000..e4bed7a8 --- /dev/null +++ b/packages/document/src/stories/_internals/CommerceLayer.tsx @@ -0,0 +1,35 @@ +import { type DefaultChildrenType } from '#typings/globals' +import CommerceLayerComponent from '#components/auth/CommerceLayer' +import { useGetToken } from './useGetToken' + +interface Props { + children: DefaultChildrenType + accessToken: + | 'customer-access-token' + | 'customer-orders-access-token' + | 'my-access-token' // guest token + endpoint?: string +} + +/** + * Custom setup for the `CommerceLayer` component that can be used in Storybook. + * without exposing the `accessToken` and `endpoint` props. + */ +function CommerceLayer({ children, ...props }: Props): JSX.Element { + const { accessToken, endpoint } = useGetToken({ + mode: + props.accessToken === 'customer-access-token' + ? 'customer' + : props.accessToken === 'customer-orders-access-token' + ? 'customer-orders' + : 'guest' + }) + + return ( + + {children} + + ) +} + +export default CommerceLayer diff --git a/packages/document/src/stories/_internals/OrderStorage.tsx b/packages/document/src/stories/_internals/OrderStorage.tsx new file mode 100644 index 00000000..41df3c7b --- /dev/null +++ b/packages/document/src/stories/_internals/OrderStorage.tsx @@ -0,0 +1,96 @@ +/* eslint-disable @typescript-eslint/no-misused-promises */ +import OrderStorageComponent from "#components/orders/OrderStorage"; +import useCommerceLayer from "#hooks/useCommerceLayer"; +import { useState, useEffect } from "react"; +import useOrderContainer from "#hooks/useOrderContainer"; +import type { CommerceLayerClient } from "@commercelayer/sdk"; + +export const OrderStorage = ({ + persistKey, + children, +}: { + persistKey: string; + children: React.ReactNode; +}): JSX.Element => { + const [orderId, setOrderId] = useState(localStorage.getItem(persistKey)); + const { sdkClient, accessToken } = useCommerceLayer(); + const cl = + accessToken != null && accessToken !== "" && sdkClient != null + ? sdkClient() + : undefined; + + useEffect(() => { + if (cl != null && orderId == null) { + createOrderWithItems(cl).then((orderId) => { + setOrderId(orderId); + localStorage.setItem(persistKey, orderId); + }); + } + }, [cl, persistKey]); + + if (cl == null || orderId == null) { + return
; + } + + return ( + + {children} + + ); +}; + +export const AddSampleItems = (): JSX.Element => { + const { sdkClient, accessToken } = useCommerceLayer(); + const { order, addToCart } = useOrderContainer(); + const cl = accessToken != null && accessToken !== "" && sdkClient(); + + if (cl == null || cl === false || order == null) return
loading...
; + + return ( +
+

Cart is empty

+ +
+ ); +}; + +async function createOrderWithItems(cl: CommerceLayerClient): Promise { + const order = await cl.orders.create({ + language_code: "en", + }); + await fillOrder(order.id, cl); + return order.id; +} + +async function fillOrder( + orderId: string, + cl: CommerceLayerClient, +): Promise { + await cl.line_items.create({ + item_type: "skus", + sku_code: "5PANECAP9D9CA1FFFFFFXXXX", + quantity: 2, + order: cl.orders.relationship(orderId), + }); + + await cl.line_items.create({ + item_type: "skus", + sku_code: "BACKPACK000000FFFFFFXXXX", + quantity: 3, + order: cl.orders.relationship(orderId), + }); +} diff --git a/packages/document/src/stories/_internals/useGetToken.ts b/packages/document/src/stories/_internals/useGetToken.ts new file mode 100644 index 00000000..966dd14f --- /dev/null +++ b/packages/document/src/stories/_internals/useGetToken.ts @@ -0,0 +1,261 @@ +import { authenticate } from '@commercelayer/js-auth' +import { useEffect, useMemo, useState } from 'react' +import Cookie from 'js-cookie' +import { jwtDecode } from 'jwt-decode' + +const salesChannel = { + clientId: 'Z5ypiDlsqgV8twWRz0GabrJvTKXad4U-PMoVAU-XvV0', + slug: 'react-components-store', + scope: 'market:15283', + domain: 'commercelayer.io' +} +const savedCustomerWithOrders = { + username: 'bruce@wayne.com', + password: '123456' +} + +type UserMode = 'customer' | 'customer-orders' | 'guest' +interface UseGetTokenOptions { + mode?: UserMode +} + +const getAccessTokenCookieName = (mode: UserMode): string => + `clToken.${salesChannel.slug}.${mode}` + +const getCustomerLoginCookieName = (mode: UserMode): string => + `clToken.customerLogin.${mode}` + +export function useGetToken( + options?: T +): { + accessToken: string + endpoint: string +} { + const mode = options?.mode ?? 'guest' + const [accessToken, setAccessToken] = useState( + Cookie.get(getAccessTokenCookieName(mode)) ?? '' + ) + const clientId = salesChannel.clientId + const slug = salesChannel.slug + const scope = salesChannel.scope + const domain = salesChannel.domain + + const initToken = useMemo(() => { + return async () => { + const user = + mode === 'customer' + ? await retrieveCustomerData({ + clientId, + slug, + scope, + domain, + mode + }) + : mode === 'customer-orders' + ? savedCustomerWithOrders + : undefined + + await generateNewToken({ + clientId, + slug, + scope, + domain, + user, + mode + }).then(({ accessToken, expires }) => { + setAccessToken(accessToken) + Cookie.set(getAccessTokenCookieName(mode), accessToken, { expires }) + }) + } + }, []) + + useEffect(() => { + if ( + accessToken == null || + accessToken === '' || + isTokenExpired({ accessToken, compareTo: new Date() }) + ) { + initToken() + } + }, [accessToken]) + + return { + accessToken, + endpoint: `https://${slug}.${domain}` + } +} + +async function retrieveCustomerData({ + clientId, + slug, + scope, + domain, + mode +}: { + clientId: string + slug: string + scope: string + domain: string + mode: UserMode +}): Promise<{ + username: string + password: string +}> { + const existingUser = Cookie.get(getCustomerLoginCookieName(mode)) + const savedEmail = parseEmailAddress(existingUser?.split(':')[0]) + const savedPassword = parsePassword(existingUser?.split(':')[1]) + + if (savedEmail != null && savedPassword != null) { + return { + username: savedEmail, + password: savedPassword + } + } + + const newEmail = `user-${generateRandomString(5)}-${generateRandomString( + 5 + )}@domain.com` + const newPassword = generateRandomString(10) + + const guestToken = await generateNewToken({ + clientId, + slug, + scope, + domain, + mode + }) + + await createNewCustomer({ + email: newEmail, + password: newPassword, + salesChannelToken: guestToken.accessToken, + slug, + domain + }) + + Cookie.set(getCustomerLoginCookieName(mode), `${newEmail}:${newPassword}`) + + return { + username: newEmail, + password: newPassword + } +} + +// eslint-disable-next-line @typescript-eslint/explicit-function-return-type +async function generateNewToken({ + clientId, + slug, + scope, + domain, + user, + mode +}: { + clientId: string + slug: string + scope: string + domain: string + user?: { username: string; password: string } + mode: UserMode +}) { + return user == null + ? await authenticate('client_credentials', { + clientId, + scope, + domain + }) + : await authenticate('password', { + clientId, + scope, + domain, + ...user + }).then((res) => { + if (res != null && 'error' in res) { + Cookie.remove(getCustomerLoginCookieName('customer')) + Cookie.remove(getCustomerLoginCookieName('customer-orders')) + Cookie.remove(getAccessTokenCookieName(mode)) + } + return res + }) +} + +function isTokenExpired({ + accessToken, + compareTo +}: { + accessToken?: string + compareTo: Date +}): boolean { + if (accessToken == null || accessToken === '') { + return true + } + + try { + const { exp } = jwtDecode<{ exp: number }>(accessToken) + + if (exp == null) { + return true + } + + const nowTime = Math.trunc(compareTo.getTime() / 1000) + return nowTime > exp + } catch { + return true + } +} + +function generateRandomString(length = 10): string { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + let result = '' + for (let i = 0; i < length; i++) { + result += chars.charAt(Math.floor(Math.random() * chars.length)) + } + return result +} + +function parseEmailAddress(email?: string): string | undefined { + const re = /^[a-zA-Z0-9._%+-]+@domain\.com$/ + if (email == null) { + return undefined + } + return re.test(email) ? email : undefined +} + +function parsePassword(password?: string): string | undefined { + return password?.length === 10 ? password : undefined +} + +async function createNewCustomer({ + email, + password, + salesChannelToken, + slug, + domain +}: { + email: string + password: string + salesChannelToken: string + slug: string + domain: string +}): Promise { + const newCustomer = await fetch(`https://${slug}.${domain}/api/customers`, { + method: 'POST', + headers: { + Accept: 'application/vnd.api+json', + 'Content-Type': 'application/vnd.api+json', + Authorization: `Bearer ${salesChannelToken}` + }, + body: JSON.stringify({ + data: { + type: 'customers', + attributes: { + email, + password + } + } + }) + }) + + if (newCustomer.status !== 201) { + throw new Error('Error creating customer') + } +} diff --git a/packages/document/src/stories/getting-started/001.introduction.mdx b/packages/document/src/stories/getting-started/001.introduction.mdx new file mode 100644 index 00000000..51386c8d --- /dev/null +++ b/packages/document/src/stories/getting-started/001.introduction.mdx @@ -0,0 +1,55 @@ +import { Meta, Source } from '@storybook/addon-docs'; + + + +![App Element splashscreen](welcome-hero.png) + +A collection of reusable React components that makes it super fast and simple to build your own custom commerce UI, leveraging Commerce Layer API. + +Under the hood, our React components are built on top of [Commerce Layer JS SDK](https://github.com/commercelayer/commercelayer-sdk) — feel free to use it if you want to develop your custom ones. + + +## Installation + +This library is [open sourced](https://github.com/commercelayer/commercelayer-react-components/) and served as [npm package](https://www.npmjs.com/package/@commercelayer/react-components) and need to be installed as dependency inside your project. + + + + + +## Import components into your project + +You can use ES6 named import with every single component you plan to use (in addition to `CommerceLayer` one), as follow: + + + +But you can also leverage treeshaking by importing only the components you need from its folder using either default or named export, as follow: + + diff --git a/packages/document/src/stories/getting-started/002.authentication.mdx b/packages/document/src/stories/getting-started/002.authentication.mdx new file mode 100644 index 00000000..802a5adf --- /dev/null +++ b/packages/document/src/stories/getting-started/002.authentication.mdx @@ -0,0 +1,61 @@ +import { Meta, Source } from '@storybook/addon-docs'; + + + +# Authentication + +To get started with **Commerce Layer React Components** you need get the credentials that will allow you to perform the API calls they wrap. + +All requests to Commerce Layer API must be authenticated with an [OAuth2](https://oauth.net/2/) bearer token. +Hence, to use these components, you need to get a valid access token. + + +## Getting an access token + +If you are new to Commerce Layer, we suggest you to read the [Overview of Commerce Layer's OAuth 2.0](https://docs.commercelayer.io/core/applications) guide. + + +There are many ways to get an access token and the one you choose depends on your specific needs. + +You can get an access token by using one of the following methods: +- [API/OAuth requests](https://docs.commercelayer.io/core/authentication/client-credentials#getting-an-access-token) (i.e. `curl` or `postman`) +- [Commerce Layer CLI](https://github.com/commercelayer/commercelayer-cli) +- [Commerce Layer JS Auth Library](https://github.com/commercelayer/commercelayer-js-auth) + + +If you want to retrieve the access token from the **command line**, we suggest you to use the [Commerce Layer CLI](https://github.com/commercelayer/commercelayer-cli) +using the `commercelayer application:login` command ([view example](https://github.com/commercelayer/commercelayer-cli/blob/main/docs/applications.md#commercelayer-applicationslogin)), +followed by `commercelayer application:token` + +
+Otherwise, if you need to get it from a **web application**, you can use the Commerce Layer JS Auth library that works both in the browser and in Node.js environments. +
+ + + + +## Configure the `CommerceLayer` component +Once you got it, you can pass it as prop to the `CommerceLayer` component, as follow: + + ( + + {/* ... child components */} + +) +`} +/> + + +This token will be used to authorize the API calls of all its child components. +That's why the presence of (at least) one `CommerceLayer` component is mandatory — it must wrap every other component you need to use. + + +In case you need to fetch data with different tokens (i.e. from different organizations or using apps with different roles and permissions) +— nothing prevents you from putting as many `` components you want in the same page. + diff --git a/packages/document/src/stories/getting-started/003.microfrontends.mdx b/packages/document/src/stories/getting-started/003.microfrontends.mdx new file mode 100644 index 00000000..1bc7aba4 --- /dev/null +++ b/packages/document/src/stories/getting-started/003.microfrontends.mdx @@ -0,0 +1,17 @@ +import { Meta, Source } from '@storybook/addon-docs'; + + + +# Micro frontends + +We use **Commerce Layer React Components** library in our official open sourced hosted applications. + +Feel free to check them out and see how it works in a real world application. + + +|Application|Description|Source| +|:-----------|:-----------|:----| +| Checkout | Checkout application that you can integrate with just a single link or use as an open-source reference for your projects. | [GitHub](https://github.com/commercelayer/mfe-checkout) +| Cart | Shopping cart application that you can integrate with just a single link or use as an open-source reference for your projects. | [GitHub](https://github.com/commercelayer/mfe-cart) +| My account | Customer portal application with personal account information and management that you can integrate with just a single link or use as an open-source reference for your projects. | [GitHub](https://github.com/commercelayer/mfe-my-account) +| Microstore | Production-ready, self-contained store. Each microstore will be accessible at a unique URL and configurable via URL query strings, with no development required. | [GitHub](https://github.com/commercelayer/mfe-microstore) diff --git a/packages/document/src/stories/getting-started/004.styling.mdx b/packages/document/src/stories/getting-started/004.styling.mdx new file mode 100644 index 00000000..6ce9259b --- /dev/null +++ b/packages/document/src/stories/getting-started/004.styling.mdx @@ -0,0 +1,16 @@ +import { Meta, Source } from '@storybook/addon-docs'; + + + +# Styling the components + +This library does not provide any styling. They return simple html/jsx tags filled with fetched data. + +**It is up to you to style the components as you want**. + +Almost all components expose a `className` prop that allows you to add your own css classes. +Some components that renders multiple elements also expose other props to add classes to each specific elements. + + +All the examples in this documentation use [Tailwind CSS](https://tailwindcss.com/) to demostrate how the components can be styled. + diff --git a/packages/document/src/stories/getting-started/005.containers.mdx b/packages/document/src/stories/getting-started/005.containers.mdx new file mode 100644 index 00000000..b3d44fee --- /dev/null +++ b/packages/document/src/stories/getting-started/005.containers.mdx @@ -0,0 +1,36 @@ +import { Meta, Source } from '@storybook/addon-docs'; + + + +# Containers + +Getting used to the components hierarchy is important to understand how to use this library. + +All components need to be wrapped inside the main `` context that handles the authentication with the API layer. +**It needs to be placed at the top of the application**. + +Other components need to be wrapped inside their own containers in order to access to their specific context. +As example the `` component needs to be wrapped inside the `` or it won't work. +At the same time, the `` will not render any HTML since it just holds the data for the `` component. + + +To amultiple requests to the API, the library uses a cache system that stores the data in React contexts that we refer as containers.
+Less re-rendering of those containers means better performance and less requests to the API. +
+ + +## Hierarchy +Each container documentend in the Components section of this guide, highlights a list of **Requirements** and **Children** that are needed to make it work. + +Example: + + +Must be a child of `` component. + + + + +`` +`` +`` + diff --git a/packages/document/src/vite-env.d.ts b/packages/document/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/packages/document/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/document/tsconfig.app.json b/packages/document/tsconfig.app.json new file mode 100644 index 00000000..358ca9ba --- /dev/null +++ b/packages/document/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/packages/document/tsconfig.json b/packages/document/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/packages/document/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/packages/document/tsconfig.node.json b/packages/document/tsconfig.node.json new file mode 100644 index 00000000..db0becc8 --- /dev/null +++ b/packages/document/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/document/vite.config.ts b/packages/document/vite.config.ts new file mode 100644 index 00000000..8b0f57b9 --- /dev/null +++ b/packages/document/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 817a084e..0d753925 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,7 +64,7 @@ importers: version: 5.7.3 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) + version: 5.1.4(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) vitest: specifier: ^3.0.4 version: 3.0.4(@types/debug@4.1.12)(@types/node@22.12.0)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(terser@5.37.0)(yaml@2.6.1) @@ -79,7 +79,7 @@ importers: version: 7.26.0(@babel/core@7.26.0) '@commercelayer/eslint-config-ts-react': specifier: ^1.3.0 - version: 1.4.5(@types/eslint@9.6.1)(eslint@9.17.0)(react@18.3.1)(typescript@5.7.2) + version: 1.4.5(@types/eslint@9.6.1)(eslint@9.19.0)(react@18.3.1)(typescript@5.7.2) '@commercelayer/js-auth': specifier: ^6.3.1 version: 6.7.0 @@ -97,10 +97,10 @@ importers: version: 7.6.20 '@storybook/addon-docs': specifier: ^7.6.17 - version: 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-essentials': specifier: ^7.6.17 - version: 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': specifier: ^7.6.17 version: 7.6.20 @@ -124,7 +124,7 @@ importers: version: 7.6.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/blocks': specifier: ^7.6.17 - version: 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-api': specifier: ^7.6.17 version: 7.6.17 @@ -195,6 +195,100 @@ importers: specifier: ^4.3.1 version: 4.3.2(typescript@5.7.2)(vite@5.4.11(@types/node@22.12.0)(terser@5.37.0)) + packages/document: + dependencies: + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + devDependencies: + '@chromatic-com/storybook': + specifier: ^3.2.4 + version: 3.2.4(react@19.0.0)(storybook@8.5.3(prettier@3.4.2)) + '@eslint/js': + specifier: ^9.19.0 + version: 9.19.0 + '@storybook/addon-docs': + specifier: ^7.6.17 + version: 7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(encoding@0.1.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/addon-essentials': + specifier: ^8.5.3 + version: 8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-interactions': + specifier: ^8.5.3 + version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-links': + specifier: ^7.6.17 + version: 7.6.20(react@19.0.0) + '@storybook/addon-mdx-gfm': + specifier: ^8.5.3 + version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-onboarding': + specifier: ^8.5.3 + version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/blocks': + specifier: ^8.5.3 + version: 8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2)) + '@storybook/react': + specifier: ^8.5.3 + version: 8.5.3(@storybook/test@8.5.3(storybook@8.5.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3) + '@storybook/react-vite': + specifier: ^8.5.3 + version: 8.5.3(@storybook/test@8.5.3(storybook@8.5.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.32.0)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) + '@storybook/test': + specifier: ^8.5.3 + version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/theming': + specifier: ^8.5.3 + version: 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@types/react': + specifier: ^19.0.8 + version: 19.0.8 + '@types/react-dom': + specifier: ^19.0.3 + version: 19.0.3(@types/react@19.0.8) + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) + eslint: + specifier: ^9.19.0 + version: 9.19.0 + eslint-plugin-react-hooks: + specifier: ^5.0.0 + version: 5.1.0(eslint@9.19.0) + eslint-plugin-react-refresh: + specifier: ^0.4.18 + version: 0.4.18(eslint@9.19.0) + eslint-plugin-storybook: + specifier: ^0.11.2 + version: 0.11.2(eslint@9.19.0)(typescript@5.7.3) + globals: + specifier: ^15.14.0 + version: 15.14.0 + msw: + specifier: ^2.7.0 + version: 2.7.0(@types/node@22.12.0)(typescript@5.7.3) + remark-gfm: + specifier: ^4.0.0 + version: 4.0.0 + storybook: + specifier: ^8.5.3 + version: 8.5.3(prettier@3.4.2) + typescript: + specifier: ~5.7.2 + version: 5.7.3 + typescript-eslint: + specifier: ^8.22.0 + version: 8.23.0(eslint@9.19.0)(typescript@5.7.3) + vite: + specifier: ^6.1.0 + version: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) + packages/react-components: dependencies: '@adyen/adyen-web': @@ -251,7 +345,7 @@ importers: version: 10.4.0 '@testing-library/react': specifier: ^16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@types/braintree-web': specifier: ^3.96.16 version: 3.96.16 @@ -318,6 +412,9 @@ importers: packages: + '@adobe/css-tools@4.4.1': + resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} + '@adyen/adyen-web@6.8.0': resolution: {integrity: sha512-qOCFk4c0tc+So3a4co+RX01eVQFJpnzHRmUTtEiWIetWYSaBX1+htovIoj6L1k4mhRXohyo2GjAJAlueoe8rVQ==} @@ -992,6 +1089,12 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@chromatic-com/storybook@3.2.4': + resolution: {integrity: sha512-5/bOOYxfwZ2BktXeqcCpOVAoR6UCoeART5t9FVy22hoo8F291zOuX4y3SDgm10B1GVU/ZTtJWPT2X9wZFlxYLg==} + engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1509,16 +1612,12 @@ packages: resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.1': - resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.2.0': resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.17.0': - resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} + '@eslint/js@9.19.0': + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.5': @@ -1635,6 +1734,15 @@ packages: typescript: optional: true + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2': + resolution: {integrity: sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ==} + peerDependencies: + typescript: '>= 4.3.x' + vite: '>=4.5.2' + peerDependenciesMeta: + typescript: + optional: true + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -2549,30 +2657,65 @@ packages: '@storybook/addon-actions@7.6.20': resolution: {integrity: sha512-c/GkEQ2U9BC/Ew/IMdh+zvsh4N6y6n7Zsn2GIhJgcu9YEAa5aF2a9/pNgEGBMOABH959XE8DAOMERw/5qiLR8g==} + '@storybook/addon-actions@8.5.3': + resolution: {integrity: sha512-7a+SD4EZdZocm+NG1Kx4yV6Aw7+YUlRIyGvKcxsGtYMOLaqrUewApqveXF83+FbYWMoezXcoZCLQFROtS/Z6Fw==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-backgrounds@7.6.20': resolution: {integrity: sha512-a7ukoaXT42vpKsMxkseIeO3GqL0Zst2IxpCTq5dSlXiADrcemSF/8/oNpNW9C4L6F1Zdt+WDtECXslEm017FvQ==} + '@storybook/addon-backgrounds@8.5.3': + resolution: {integrity: sha512-sZcw8/C/HIIgbRBY+0ZYTBc5Py8xvw3bt6lzSVQEXA2aygfJpO/jiQJlmOXTmK3g5F5pjFKaaCodfXT7V/9mzw==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-controls@7.6.20': resolution: {integrity: sha512-06ZT5Ce1sZW52B0s6XuokwjkKO9GqHlTUHvuflvd8wifxKlCmRvNUxjBvwh+ccGJ49ZS73LbMSLFgtmBEkCxbg==} + '@storybook/addon-controls@8.5.3': + resolution: {integrity: sha512-A4UVQhPyC7FvV+fM50xvEZO26/2uE41Ns0TN0qq7U5EH0Dlj43Salgay6qT8fve6XAI4SgVjkujPVCSbLg/yVQ==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-docs@7.6.20': resolution: {integrity: sha512-XNfYRhbxH5JP7B9Lh4W06PtMefNXkfpV39Gaoih5HuqngV3eoSL4RikZYOMkvxRGQ738xc6axySU3+JKcP1OZg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-docs@8.5.3': + resolution: {integrity: sha512-XVcQlHX963nuoeRkb7qQg89t/9CThdT46UV7jX3FFn08NEMhmDEa+4iVA4l+4xNgJ+Av6uX+u6yRGnM/910mLg==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-essentials@7.6.20': resolution: {integrity: sha512-hCupSOiJDeOxJKZSgH0x5Mb2Xqii6mps21g5hpxac1XjhQtmGflShxi/xOHhK3sNqrbgTSbScfpUP3hUlZO/2Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-essentials@8.5.3': + resolution: {integrity: sha512-0zbEWQQZCiYRUxMo6FrfwQER/vi+B8mCLLivdjbSVSvZsjmlpcaBA5uBjbsXfIRcedHlou4QiJXn+nR8thDlKA==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-highlight@7.6.20': resolution: {integrity: sha512-7/x7xFdFyqCki5Dm3uBePldUs9l98/WxJ7rTHQuYqlX7kASwyN5iXPzuhmMRUhlMm/6G6xXtLabIpzwf1sFurA==} + '@storybook/addon-highlight@8.5.3': + resolution: {integrity: sha512-xhsr3W6KTvlOIIe+8JE9/sEOAgkW0yjMZzs47A+bWcxKwcFhAUgVLbAgEzjJ0u248rjGKlCJ2pswWefO+ZKJeg==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-interactions@7.6.20': resolution: {integrity: sha512-uH+OIxLtvfnnmdN3Uf8MwzfEFYtaqSA6Hir6QNPc643se0RymM8mULN0rzRyvspwd6OagWdtOxsws3aHk02KTA==} + '@storybook/addon-interactions@8.5.3': + resolution: {integrity: sha512-nQuP65iFGgqfVp/O8NxNDUwLTWmQBW4bofUFaT4wzYn7Jk9zobOZYtgQvdqBZtNzBDYmLrfrCutEBj5jVPRyuQ==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-links@7.6.20': resolution: {integrity: sha512-iomSnBD90CA4MinesYiJkFX2kb3P1Psd/a1Y0ghlFEsHD4uMId9iT6sx2s16DYMja0SlPkrbWYnGukqaCjZpRw==} peerDependencies: @@ -2584,18 +2727,48 @@ packages: '@storybook/addon-mdx-gfm@7.6.20': resolution: {integrity: sha512-htfiooRdIYIjdKpxFjJAT+b90iatraI7yfmgF8VmpGTPqjyjGDZccUFCaE7op9S2smLZi4zYYGd+fqA5NtykkQ==} + '@storybook/addon-mdx-gfm@8.5.3': + resolution: {integrity: sha512-jKfJir3E+jJkD1K9SvrzUQBhaQJbGd2DtcE5IusXe0NKBJegbBy+eMhh9K7ani/isTf8+ZkhoXR3DFWwi2IJhg==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-measure@7.6.20': resolution: {integrity: sha512-i2Iq08bGfI7gZbG6Lb8uF/L287tnaGUR+2KFEmdBjH6+kgjWLiwfpanoPQpy4drm23ar0gUjX+L3Ri03VI5/Xg==} + '@storybook/addon-measure@8.5.3': + resolution: {integrity: sha512-unb0bRsnISXWiCBBECxNUUdM12hHpV+1uJUu5OJHtKb26YpiQvewDFLTLjuZJ3NIAfw+F5232Q7K88AWJV6weg==} + peerDependencies: + storybook: ^8.5.3 + + '@storybook/addon-onboarding@8.5.3': + resolution: {integrity: sha512-NZhYj3UZK65reO7mXcK7FPPu7QkLCRyIa6TpfQ3mRAocfjqg401mcBsRO37JNywYfHCZrU4w1l7pwpqjvcYceg==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-outline@7.6.20': resolution: {integrity: sha512-TdsIQZf/TcDsGoZ1XpO+9nBc4OKqcMIzY4SrI8Wj9dzyFLQ37s08gnZr9POci8AEv62NTUOVavsxcafllkzqDQ==} + '@storybook/addon-outline@8.5.3': + resolution: {integrity: sha512-e1MkGN6XVdeRh2oUKGdqEDyAo2TD/47ashAAxw8DEiLRWgBMbQ+KBVH4EOG+dn5395jxh7YgRLJn/miqNnfN5g==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-toolbars@7.6.20': resolution: {integrity: sha512-5Btg4i8ffWTDHsU72cqxC8nIv9N3E3ObJAc6k0llrmPBG/ybh3jxmRfs8fNm44LlEXaZ5qrK/petsXX3UbpIFg==} + '@storybook/addon-toolbars@8.5.3': + resolution: {integrity: sha512-AWr9Per9WDrbFtNlbVlj6CiEwKOvOyoBt3bCuMHuRfTdqKwkwInEtyUi4//T8U+c1qs7KJBpsWV2vhIuc5sODg==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addon-viewport@7.6.20': resolution: {integrity: sha512-i8mIw8BjLWAVHEQsOTE6UPuEGQvJDpsu1XZnOCkpfTfPMz73m+3td/PmLG7mMT2wPnLu9IZncKLCKTAZRbt/YQ==} + '@storybook/addon-viewport@8.5.3': + resolution: {integrity: sha512-OkLJ2B8+PiOEAd2HtRG6XewVjtw6AkBMgoSbfKCMr6TWSbuKrOeiwIMqqieAAPVNfsOQ8hTK6JGhr/KPRCKgRA==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/addons@7.6.17': resolution: {integrity: sha512-Ok18Y698Ccyg++MoUNJNHY0cXUvo8ETFIRLJk1g9ElJ70j6kPgNnzW2pAtZkBNmswHtofZ7pT156cj96k/LgfA==} @@ -2608,6 +2781,18 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/blocks@8.5.3': + resolution: {integrity: sha512-a/PpHFmeBtVB9Q/6cNAnqfeCqMowsrI8nGka0Nl7BB3x1eJnS3I1Qo3Skht0LBEsmXOgXk4dwWxpeQL3qHMRkw==} + 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: ^8.5.3 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + '@storybook/builder-manager@7.6.20': resolution: {integrity: sha512-e2GzpjLaw6CM/XSmc4qJRzBF8GOoOyotyu3JrSPTYOt4RD8kjUsK4QlismQM1DQRu8i39aIexxmRbiJyD74xzQ==} @@ -2626,6 +2811,12 @@ packages: vite-plugin-glimmerx: optional: true + '@storybook/builder-vite@8.5.3': + resolution: {integrity: sha512-MxriwzZSVidaXj3kpH/jCOJZUdF7ofcvxmvrMrNehH9UvXIGM6b73CBC5ucnptbnQ7qxYKdAZiMhQbPHZ9cqOQ==} + peerDependencies: + storybook: ^8.5.3 + vite: '>=4.5.2' + '@storybook/channels@7.6.17': resolution: {integrity: sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==} @@ -2654,6 +2845,11 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/components@8.5.3': + resolution: {integrity: sha512-iC9VbpM8Equ8wXI2syBzov+8wys4sGYW7Xfz67LdSVbCMhsH9FRtvgbDppJQC/ZDCofg4sTAHhWpDV/KAQ385A==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/core-client@7.6.20': resolution: {integrity: sha512-upQuQQinLmlOPKcT8yqXNtwIucZ4E4qegYZXH5HXRWoLAL6GQtW7sUVSIuFogdki8OXRncr/dz8OA+5yQyYS4w==} @@ -2669,9 +2865,22 @@ packages: '@storybook/core-server@7.6.20': resolution: {integrity: sha512-qC5BdbqqwMLTdCwMKZ1Hbc3+3AaxHYWLiJaXL9e8s8nJw89xV8c8l30QpbJOGvcDmsgY6UTtXYaJ96OsTr7MrA==} + '@storybook/core@8.5.3': + resolution: {integrity: sha512-ZLlr2pltbj/hmC54lggJTnh09FCAJR62lIdiXNwa+V+/eJz0CfD8tfGmZGKPSmaQeZBpMwAOeRM97k2oLPF+0w==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + '@storybook/csf-plugin@7.6.20': resolution: {integrity: sha512-dzBzq0dN+8WLDp6NxYS4G7BCe8+vDeDRBRjHmM0xb0uJ6xgQViL8SDplYVSGnk3bXE/1WmtvyRzQyTffBnaj9Q==} + '@storybook/csf-plugin@8.5.3': + resolution: {integrity: sha512-u5oyXTFg3KIy4h9qoNyiCG2mJF3OpkLO/AcM4lMAwQVnBvz8pwITvr4jDZByVjGmcIbgKJQnWX+BwdK2NI4yAw==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/csf-tools@7.6.20': resolution: {integrity: sha512-rwcwzCsAYh/m/WYcxBiEtLpIW5OH1ingxNdF/rK9mtGWhJxXRDV8acPkFrF8rtFWIVKoOCXu5USJYmc3f2gdYQ==} @@ -2687,12 +2896,29 @@ packages: '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + '@storybook/icons@1.3.2': + resolution: {integrity: sha512-t3xcbCKkPvqyef8urBM0j/nP6sKtnlRkVgC+8JTbTAZQjaTmOjes3byEgzs89p4B/K6cJsg9wLW2k3SknLtYJw==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + + '@storybook/instrumenter@8.5.3': + resolution: {integrity: sha512-pxaTbGeju8MkwouIiaWX5DMWtpRruxqig8W3nZPOvzoSCCbQY+sLMQoyXxFlpGxLBjcvXivkL7AMVBKps5sFEQ==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/manager-api@7.6.17': resolution: {integrity: sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==} '@storybook/manager-api@7.6.20': resolution: {integrity: sha512-gOB3m8hO3gBs9cBoN57T7jU0wNKDh+hi06gLcyd2awARQlAlywnLnr3s1WH5knih6Aq+OpvGBRVKkGLOkaouCQ==} + '@storybook/manager-api@8.5.3': + resolution: {integrity: sha512-JtfuMgQpKIPU0ARn1jNPce8FmknpM0Ap0mppWl+KGAWWGadJPDaX/nrY/19dT1kRgIhyOnbX6tgJxII4E9dE5w==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/manager@7.6.20': resolution: {integrity: sha512-0Cf6WN0t7yEG2DR29tN5j+i7H/TH5EfPppg9h9/KiQSoFHk+6KLoy2p5do94acFU+Ro4+zzxvdCGbcYGKuArpg==} @@ -2716,6 +2942,11 @@ packages: '@storybook/preview-api@7.6.20': resolution: {integrity: sha512-3ic2m9LDZEPwZk02wIhNc3n3rNvbi7VDKn52hDXfAxnL5EYm7yDICAkaWcVaTfblru2zn0EDJt7ROpthscTW5w==} + '@storybook/preview-api@8.5.3': + resolution: {integrity: sha512-dUsuXW+KgDg4tWXOB6dk5j5gwwRUzbPvicHAY9mzbpSVScbWXuE5T/S/9hHlbtfkhFroWQgPx2eB8z3rai+7RQ==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/preview@7.6.20': resolution: {integrity: sha512-cxYlZ5uKbCYMHoFpgleZqqGWEnqHrk5m5fT8bYSsDsdQ+X5wPcwI/V+v8dxYAdQcMphZVIlTjo6Dno9WG8qmVA==} @@ -2725,6 +2956,13 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/react-dom-shim@8.5.3': + resolution: {integrity: sha512-kNIGk6mpXW3Wy+uS9pH9b9w/54EPJnH+QXA6MX4EQgmxhMQlGlS/l/YZp+3jsVQW4YgTmqe740qB+ccJAKZxBQ==} + 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: ^8.5.3 + '@storybook/react-vite@7.6.20': resolution: {integrity: sha512-uKuBFyGPZxpfR8vpDU/2OE9v7iTaxwL7ldd7k1swYd1rTSAPacTnEHSMl1R5AjUhkdI7gRmGN9q7qiVfK2XJCA==} engines: {node: '>=16'} @@ -2733,6 +2971,19 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: '>=4.5.2' + '@storybook/react-vite@8.5.3': + resolution: {integrity: sha512-F30u2Xf+X774wrfQzWgg7vRVJmmJFbBVGdULsAGonkdy1FUeYo7puPiD2Qg6hBYNDyIyxDXVOukkOvTlG7IBRg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@storybook/test': 8.5.3 + 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: ^8.5.3 + vite: '>=4.5.2' + peerDependenciesMeta: + '@storybook/test': + optional: true + '@storybook/react@7.6.20': resolution: {integrity: sha512-i5tKNgUbTNwlqBWGwPveDhh9ktlS0wGtd97A1ZgKZc3vckLizunlAFc7PRC1O/CMq5PTyxbuUb4RvRD2jWKwDA==} engines: {node: '>=16.0.0'} @@ -2744,6 +2995,21 @@ packages: typescript: optional: true + '@storybook/react@8.5.3': + resolution: {integrity: sha512-QIdBSjsnwV/J919i4Fi7DlwxDKHU815t0c4B/w2KTMtKKBkk+Bge+vgVi0/lNqD3eF4w3yjVWGbkzUQZ63yiPg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@storybook/test': 8.5.3 + 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: ^8.5.3 + typescript: '>= 4.2.x' + peerDependenciesMeta: + '@storybook/test': + optional: true + typescript: + optional: true + '@storybook/router@7.6.17': resolution: {integrity: sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==} @@ -2753,6 +3019,11 @@ packages: '@storybook/telemetry@7.6.20': resolution: {integrity: sha512-dmAOCWmOscYN6aMbhCMmszQjoycg7tUPRVy2kTaWg6qX10wtMrvEtBV29W4eMvqdsoRj5kcvoNbzRdYcWBUOHQ==} + '@storybook/test@8.5.3': + resolution: {integrity: sha512-2smoDbtU6Qh4yk0uD18qGfW6ll7lZBzKlF58Ha1CgWR4o+jpeeTQcfDLH9gG6sNrpojF7AVzMh/aN9BDHD+Chg==} + peerDependencies: + storybook: ^8.5.3 + '@storybook/testing-library@0.2.2': resolution: {integrity: sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==} deprecated: In Storybook 8, this package functionality has been integrated to a new package called @storybook/test, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can. @@ -2769,6 +3040,11 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/theming@8.5.3': + resolution: {integrity: sha512-Jvzw+gT1HNarkJo21WZBq5pU89qDN8u/pD3woSh/1c2h5RS6UylWjQHotPFpcBIQiUSrDFtvCU9xugJm4MD0+w==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/types@7.6.17': resolution: {integrity: sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==} @@ -2805,6 +3081,10 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/react@16.2.0': resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} engines: {node: '>=18'} @@ -2954,6 +3234,9 @@ packages: '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -2999,6 +3282,11 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/react-dom@19.0.3': + resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} + peerDependencies: + '@types/react': ^19.0.0 + '@types/react-test-renderer@19.0.0': resolution: {integrity: sha512-qDVnNybqFm2eZKJ4jD34EvRd6VHD67KjgnWaEMM0Id9L22EpWe3nOSVKHWL1XWRCxUWe3lhXwlEeCKD1BlJCQA==} @@ -3032,6 +3320,9 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} @@ -3055,6 +3346,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.23.0': + resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3075,6 +3374,13 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.23.0': + resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3083,6 +3389,10 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.23.0': + resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@7.18.0': resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -3093,6 +3403,13 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.23.0': + resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3101,6 +3418,10 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.23.0': + resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3119,12 +3440,25 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.23.0': + resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/utils@7.18.0': resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 + '@typescript-eslint/utils@8.23.0': + resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3133,6 +3467,10 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.23.0': + resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-react@3.1.0': resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3154,6 +3492,9 @@ packages: '@vitest/browser': optional: true + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/expect@3.0.4': resolution: {integrity: sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==} @@ -3168,6 +3509,12 @@ packages: vite: optional: true + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@3.0.4': resolution: {integrity: sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==} @@ -3177,9 +3524,18 @@ packages: '@vitest/snapshot@3.0.4': resolution: {integrity: sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==} + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@3.0.4': resolution: {integrity: sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==} + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vitest/utils@3.0.4': resolution: {integrity: sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==} @@ -3643,6 +3999,10 @@ packages: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + chalk@4.1.0: resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} engines: {node: '>=10'} @@ -3676,6 +4036,18 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + chromatic@11.25.2: + resolution: {integrity: sha512-/9eQWn6BU1iFsop86t8Au21IksTRxwXAl7if8YHD05L2AbuMjClLWZo5cZojqrJHGKDhTqfrC2X2xE4uSm0iKw==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -3899,6 +4271,9 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -4057,6 +4432,9 @@ packages: engines: {node: '>= 4.0.0'} hasBin: true + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4080,6 +4458,9 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -4364,12 +4745,29 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.18: + resolution: {integrity: sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==} + peerDependencies: + eslint: '>=8.40' + eslint-plugin-react@7.37.2: resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-storybook@0.11.2: + resolution: {integrity: sha512-0Z4DUklJrC+GHjCRXa7PYfPzWC15DaVnwaOYenpgXiCEijXPZkLKCms+rHhtoRcWccP7Z8DpOOaP1gc3P9oOwg==} + engines: {node: '>= 18'} + peerDependencies: + eslint: '>=8' + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -4386,8 +4784,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.17.0: - resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} + eslint@9.19.0: + resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4529,6 +4927,10 @@ packages: filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} + engines: {node: '>= 10.4.0'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4789,6 +5191,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -5317,6 +5723,10 @@ packages: '@babel/preset-env': optional: true + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + jsdom@26.0.0: resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} engines: {node: '>=18'} @@ -5586,39 +5996,72 @@ packages: mdast-util-find-and-replace@2.2.2: resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-gfm-autolink-literal@1.0.3: resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + mdast-util-gfm-footnote@1.0.2: resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + mdast-util-gfm-strikethrough@1.0.3: resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + mdast-util-gfm-table@1.0.7: resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + mdast-util-gfm-task-list-item@1.0.2: resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + mdast-util-gfm@2.0.2: resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + mdast-util-phrasing@3.0.1: resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + mdast-util-to-string@1.1.0: resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -5651,87 +6094,171 @@ packages: micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-core-commonmark@2.0.2: + resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} + micromark-extension-gfm-autolink-literal@1.0.5: resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + micromark-extension-gfm-footnote@1.1.2: resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + micromark-extension-gfm-strikethrough@1.0.7: resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + micromark-extension-gfm-table@1.0.7: resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + micromark-extension-gfm-tagfilter@1.0.2: resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + micromark-extension-gfm-task-list-item@1.0.5: resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + micromark-extension-gfm@2.0.3: resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-factory-destination@1.1.0: resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + micromark-factory-label@1.1.0: resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + micromark-factory-title@1.1.0: resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + micromark-factory-whitespace@1.1.0: resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + micromark-util-character@1.2.0: resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + micromark-util-classify-character@1.1.0: resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + micromark-util-combine-extensions@1.1.0: resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + micromark-util-decode-numeric-character-reference@1.1.0: resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + micromark-util-decode-string@1.1.0: resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + micromark-util-encode@1.1.0: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + micromark-util-normalize-identifier@1.1.0: resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + micromark-util-resolve-all@1.1.0: resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + micromark-util-sanitize-uri@1.2.0: resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@2.0.4: + resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==} + micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@4.0.1: + resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -6554,6 +7081,12 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' + react-confetti@6.2.2: + resolution: {integrity: sha512-K+kTyOPgX+ZujMZ+Rmb7pZdHBvg+DzinG/w4Eh52WOB8/pfO38efnnrtEZNJmjTvLxc16RBYO+tPM68Fg8viBA==} + engines: {node: '>=16'} + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 + react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: @@ -6730,9 +7263,18 @@ packages: remark-gfm@3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-slug@6.1.0: resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -7045,6 +7587,15 @@ packages: resolution: {integrity: sha512-Wt04pPTO71pwmRmsgkyZhNo4Bvdb/1pBAMsIFb9nQLykEdzzpXjvingxFFvdOG4nIowzwgxD+CLlyRqVJqnATw==} hasBin: true + storybook@8.5.3: + resolution: {integrity: sha512-2WtNBZ45u1AhviRU+U+ld588tH8gDa702dNSq5C8UBaE9PlOsazGsyp90dw1s9YRvi+ejrjKAupQAU0GwwUiVg==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -7249,6 +7800,10 @@ packages: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} @@ -7325,6 +7880,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -7382,6 +7943,9 @@ packages: resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==} engines: {node: ^16.14.0 || >=18.0.0} + tween-functions@1.2.0: + resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -7445,6 +8009,13 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript-eslint@8.23.0: + resolution: {integrity: sha512-/LBRo3HrXr5LxmrdYSOCvoAMm7p2jNizNfbIpCgvG4HMsnoprRUOce/+8VJ9BDYWW68rqIENE/haVLWPeFZBVQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} @@ -7497,6 +8068,9 @@ packages: unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -7515,21 +8089,33 @@ packages: unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + unist-util-visit-parents@3.1.1: resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit@2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} @@ -7632,9 +8218,15 @@ packages: vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@3.0.4: resolution: {integrity: sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -7727,16 +8319,56 @@ packages: yaml: optional: true - vitest@3.0.4: - resolution: {integrity: sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==} + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.4 - '@vitest/ui': 3.0.4 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.0.4: + resolution: {integrity: sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.4 + '@vitest/ui': 3.0.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -7977,6 +8609,8 @@ packages: snapshots: + '@adobe/css-tools@4.4.1': {} + '@adyen/adyen-web@6.8.0': dependencies: '@adyen/bento-design-tokens': 1.10.0 @@ -8797,17 +9431,30 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@chromatic-com/storybook@3.2.4(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + chromatic: 11.25.2 + filesize: 10.1.6 + jsonfile: 6.1.0 + react-confetti: 6.2.2(react@19.0.0) + storybook: 8.5.3(prettier@3.4.2) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - react + '@colors/colors@1.5.0': optional: true - '@commercelayer/eslint-config-ts-react@1.4.5(@types/eslint@9.6.1)(eslint@9.17.0)(react@18.3.1)(typescript@5.7.2)': + '@commercelayer/eslint-config-ts-react@1.4.5(@types/eslint@9.6.1)(eslint@9.19.0)(react@18.3.1)(typescript@5.7.2)': dependencies: - '@commercelayer/eslint-config-ts': 1.4.5(@types/eslint@9.6.1)(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0)(typescript@5.7.2) - eslint: 9.17.0 - eslint-config-standard-jsx: 11.0.0(eslint-plugin-react@7.37.2(eslint@9.17.0))(eslint@9.17.0) - eslint-plugin-react: 7.37.2(eslint@9.17.0) + '@commercelayer/eslint-config-ts': 1.4.5(@types/eslint@9.6.1)(eslint@9.19.0)(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0)(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.19.0)(typescript@5.7.2) + eslint: 9.19.0 + eslint-config-standard-jsx: 11.0.0(eslint-plugin-react@7.37.2(eslint@9.19.0))(eslint@9.19.0) + eslint-plugin-react: 7.37.2(eslint@9.19.0) react: 18.3.1 typescript: 5.7.2 transitivePeerDependencies: @@ -8816,17 +9463,17 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@commercelayer/eslint-config-ts@1.4.5(@types/eslint@9.6.1)(eslint@9.17.0)(typescript@5.7.2)': - dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0)(typescript@5.7.2) - eslint: 9.17.0 - eslint-config-love: 43.1.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0))(eslint-plugin-n@16.6.2(eslint@9.17.0))(eslint-plugin-promise@6.6.0(eslint@9.17.0))(eslint@9.17.0)(typescript@5.7.2) - eslint-config-prettier: 9.1.0(eslint@9.17.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0) - eslint-plugin-n: 16.6.2(eslint@9.17.0) - eslint-plugin-prettier: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.17.0))(eslint@9.17.0)(prettier@3.4.2) - eslint-plugin-promise: 6.6.0(eslint@9.17.0) + '@commercelayer/eslint-config-ts@1.4.5(@types/eslint@9.6.1)(eslint@9.19.0)(typescript@5.7.2)': + dependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0)(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.19.0)(typescript@5.7.2) + eslint: 9.19.0 + eslint-config-love: 43.1.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0))(eslint-plugin-n@16.6.2(eslint@9.19.0))(eslint-plugin-promise@6.6.0(eslint@9.19.0))(eslint@9.19.0)(typescript@5.7.2) + eslint-config-prettier: 9.1.0(eslint@9.19.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0) + eslint-plugin-n: 16.6.2(eslint@9.19.0) + eslint-plugin-prettier: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.19.0))(eslint@9.19.0)(prettier@3.4.2) + eslint-plugin-promise: 6.6.0(eslint@9.19.0) prettier: 3.4.2 typescript: 5.7.2 transitivePeerDependencies: @@ -8884,6 +9531,10 @@ snapshots: dependencies: react: 18.3.1 + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.0.0)': + dependencies: + react: 19.0.0 + '@esbuild/aix-ppc64@0.21.5': optional: true @@ -9094,9 +9745,9 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0)': dependencies: - eslint: 9.17.0 + eslint: 9.19.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -9113,10 +9764,6 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.9.1': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 @@ -9131,7 +9778,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.17.0': {} + '@eslint/js@9.19.0': {} '@eslint/object-schema@2.1.5': {} @@ -9159,6 +9806,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/dom': 1.6.12 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + '@floating-ui/utils@0.2.8': {} '@humanfs/core@0.19.1': {} @@ -9274,6 +9927,14 @@ snapshots: optionalDependencies: typescript: 5.7.2 + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1))': + dependencies: + magic-string: 0.27.0 + react-docgen-typescript: 2.2.2(typescript@5.7.3) + vite: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + optionalDependencies: + typescript: 5.7.3 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -9384,15 +10045,27 @@ snapshots: '@mdx-js/react@2.3.0(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.17 + '@types/react': 19.0.8 react: 18.3.1 + '@mdx-js/react@2.3.0(react@19.0.0)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.0.8 + react: 19.0.0 + '@mdx-js/react@3.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 '@types/react': 18.3.17 react: 18.3.1 + '@mdx-js/react@3.1.0(@types/react@19.0.8)(react@18.3.1)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.0.8 + react: 18.3.1 + '@mswjs/interceptors@0.37.3': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -9715,37 +10388,75 @@ snapshots: '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-arrow@1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-collection@1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-collection@1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.0.2(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-collection@1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.1(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: @@ -9754,12 +10465,25 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-compose-refs@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.17)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-context@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -9767,12 +10491,25 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-context@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-context@1.1.1(@types/react@18.3.17)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-context@1.1.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-direction@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -9780,24 +10517,52 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-direction@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-direction@1.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.17 - '@radix-ui/react-dismissable-layer@1.0.4(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: @@ -9806,16 +10571,36 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 - '@radix-ui/react-focus-scope@1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-guards@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) '@radix-ui/react-id@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: @@ -9825,6 +10610,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-id@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-id@1.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.17)(react@18.3.1) @@ -9832,14 +10625,21 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 - '@radix-ui/react-popper@1.1.2(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-popper@1.1.2(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.17)(react@18.3.1) @@ -9849,17 +10649,48 @@ snapshots: react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-popper@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/rect': 1.0.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-portal@1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-portal@1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-primitive@1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.17)(react@18.3.1) @@ -9867,67 +10698,147 @@ snapshots: react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-primitive@1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-slot': 1.0.2(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-primitive@2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.1(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-roving-focus@1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) - '@radix-ui/react-select@1.2.2(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-select@1.2.2(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-popper': 1.1.2(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.17)(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-select@1.2.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.0.2(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + aria-hidden: 1.2.4 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.5.5(@types/react@19.0.8)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-separator@1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-separator@1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-separator@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) '@radix-ui/react-slot@1.0.2(@types/react@18.3.17)(react@18.3.1)': dependencies: @@ -9937,6 +10848,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-slot@1.0.2(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-slot@1.1.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.17)(react@18.3.1) @@ -9944,43 +10863,94 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 - '@radix-ui/react-toggle-group@1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-slot@1.1.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toggle': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-toggle@1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) - '@radix-ui/react-toolbar@1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toolbar@1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.3.17)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.17)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-separator': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toggle-group': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-separator': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle-group': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-toolbar@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-separator': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-toggle-group': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: @@ -9989,20 +10959,41 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.17 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.17)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: - '@babel/runtime': 7.26.7 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.17)(react@18.3.1) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.17)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.17)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.17)(react@18.3.1) @@ -10010,6 +11001,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -10018,6 +11016,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -10025,12 +11031,25 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -10038,6 +11057,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-previous@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -10046,6 +11072,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + '@radix-ui/react-use-rect@1.0.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/rect': 1.0.1 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.7 @@ -10054,14 +11088,33 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 - '@radix-ui/react-visually-hidden@1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-use-size@1.0.1(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.17 + '@types/react-dom': 19.0.3(@types/react@18.3.17) + + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) '@radix-ui/rect@1.0.1': dependencies: @@ -10239,15 +11292,31 @@ snapshots: polished: 4.3.1 uuid: 9.0.1 + '@storybook/addon-actions@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + storybook: 8.5.3(prettier@3.4.2) + uuid: 9.0.1 + '@storybook/addon-backgrounds@7.6.20': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 - '@storybook/addon-controls@7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-backgrounds@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/addon-controls@7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/blocks': 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -10258,13 +11327,20 @@ snapshots: - react-dom - supports-color - '@storybook/addon-docs@7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-controls@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + dequal: 2.0.3 + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/addon-docs@7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.3.1) - '@storybook/blocks': 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-logger': 7.6.20 - '@storybook/components': 7.6.20(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/csf-plugin': 7.6.20 '@storybook/csf-tools': 7.6.20 '@storybook/global': 5.0.0 @@ -10287,12 +11363,54 @@ snapshots: - encoding - supports-color - '@storybook/addon-essentials@7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-docs@7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(encoding@0.1.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@jest/transform': 29.7.0 + '@mdx-js/react': 2.3.0(react@19.0.0) + '@storybook/blocks': 7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(encoding@0.1.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/client-logger': 7.6.20 + '@storybook/components': 7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/csf-plugin': 7.6.20 + '@storybook/csf-tools': 7.6.20 + '@storybook/global': 5.0.0 + '@storybook/mdx2-csf': 1.1.0 + '@storybook/node-logger': 7.6.20 + '@storybook/postinstall': 7.6.20 + '@storybook/preview-api': 7.6.20 + '@storybook/react-dom-shim': 7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/theming': 7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/types': 7.6.20 + fs-extra: 11.2.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + remark-external-links: 8.0.0 + remark-slug: 6.1.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - encoding + - supports-color + + '@storybook/addon-docs@8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@mdx-js/react': 3.1.0(@types/react@19.0.8)(react@18.3.1) + '@storybook/blocks': 8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.2)) + '@storybook/csf-plugin': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.2)) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-essentials@7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/addon-actions': 7.6.20 '@storybook/addon-backgrounds': 7.6.20 - '@storybook/addon-controls': 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/addon-docs': 7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/addon-controls': 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/addon-docs': 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-highlight': 7.6.20 '@storybook/addon-measure': 7.6.20 '@storybook/addon-outline': 7.6.20 @@ -10311,10 +11429,31 @@ snapshots: - encoding - supports-color + '@storybook/addon-essentials@8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/addon-actions': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-backgrounds': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-controls': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-docs': 8.5.3(@types/react@19.0.8)(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-highlight': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-measure': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-outline': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-toolbars': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/addon-viewport': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + '@storybook/addon-highlight@7.6.20': dependencies: '@storybook/global': 5.0.0 + '@storybook/addon-highlight@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.5.3(prettier@3.4.2) + '@storybook/addon-interactions@7.6.20': dependencies: '@storybook/global': 5.0.0 @@ -10323,6 +11462,15 @@ snapshots: polished: 4.3.1 ts-dedent: 2.2.0 + '@storybook/addon-interactions@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/test': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + polished: 4.3.1 + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + '@storybook/addon-links@7.6.20(react@18.3.1)': dependencies: '@storybook/csf': 0.1.12 @@ -10331,6 +11479,14 @@ snapshots: optionalDependencies: react: 18.3.1 + '@storybook/addon-links@7.6.20(react@19.0.0)': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + ts-dedent: 2.2.0 + optionalDependencies: + react: 19.0.0 + '@storybook/addon-mdx-gfm@7.6.20': dependencies: '@storybook/node-logger': 7.6.20 @@ -10339,22 +11495,55 @@ snapshots: transitivePeerDependencies: - supports-color + '@storybook/addon-mdx-gfm@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + remark-gfm: 4.0.0 + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + '@storybook/addon-measure@7.6.20': dependencies: '@storybook/global': 5.0.0 tiny-invariant: 1.3.3 + '@storybook/addon-measure@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.5.3(prettier@3.4.2) + tiny-invariant: 1.3.3 + + '@storybook/addon-onboarding@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + '@storybook/addon-outline@7.6.20': dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 + '@storybook/addon-outline@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + '@storybook/addon-toolbars@7.6.20': {} + '@storybook/addon-toolbars@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + '@storybook/addon-viewport@7.6.20': dependencies: memoizerific: 1.11.3 + '@storybook/addon-viewport@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + memoizerific: 1.11.3 + storybook: 8.5.3(prettier@3.4.2) + '@storybook/addons@7.6.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/manager-api': 7.6.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10372,11 +11561,11 @@ snapshots: - react - react-dom - '@storybook/blocks@7.6.20(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/blocks@7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 - '@storybook/components': 7.6.20(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/core-events': 7.6.20 '@storybook/csf': 0.1.12 '@storybook/docs-tools': 7.6.20(encoding@0.1.13) @@ -10405,6 +11594,59 @@ snapshots: - encoding - supports-color + '@storybook/blocks@7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(encoding@0.1.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@storybook/channels': 7.6.20 + '@storybook/client-logger': 7.6.20 + '@storybook/components': 7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/core-events': 7.6.20 + '@storybook/csf': 0.1.12 + '@storybook/docs-tools': 7.6.20(encoding@0.1.13) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/preview-api': 7.6.20 + '@storybook/theming': 7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/types': 7.6.20 + '@types/lodash': 4.17.14 + color-convert: 2.0.1 + dequal: 2.0.3 + lodash: 4.17.21 + markdown-to-jsx: 7.7.2(react@19.0.0) + memoizerific: 1.11.3 + polished: 4.3.1 + react: 19.0.0 + react-colorful: 5.6.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-dom: 19.0.0(react@19.0.0) + telejson: 7.2.0 + tocbot: 4.32.2 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - encoding + - supports-color + + '@storybook/blocks@8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/icons': 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@storybook/blocks@8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/icons': 1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + optionalDependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + '@storybook/builder-manager@7.6.20(encoding@0.1.13)': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 @@ -10452,6 +11694,14 @@ snapshots: - encoding - supports-color + '@storybook/builder-vite@8.5.3(storybook@8.5.3(prettier@3.4.2))(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1))': + dependencies: + '@storybook/csf-plugin': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + browser-assert: 1.2.1 + storybook: 8.5.3(prettier@3.4.2) + ts-dedent: 2.2.0 + vite: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + '@storybook/channels@7.6.17': dependencies: '@storybook/client-logger': 7.6.17 @@ -10550,10 +11800,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/components@7.6.20(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/components@7.6.20(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-select': 1.2.2(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toolbar': 1.1.1(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 1.2.2(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toolbar': 1.1.1(@types/react-dom@19.0.3(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-logger': 7.6.20 '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 @@ -10568,6 +11818,28 @@ snapshots: - '@types/react' - '@types/react-dom' + '@storybook/components@7.6.20(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-select': 1.2.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-toolbar': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/client-logger': 7.6.20 + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + '@storybook/theming': 7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/types': 7.6.20 + memoizerific: 1.11.3 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + use-resize-observer: 9.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + + '@storybook/components@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + '@storybook/core-client@7.6.20': dependencies: '@storybook/client-logger': 7.6.20 @@ -10658,6 +11930,26 @@ snapshots: - supports-color - utf-8-validate + '@storybook/core@8.5.3(prettier@3.4.2)': + dependencies: + '@storybook/csf': 0.1.12 + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.24.2 + esbuild-register: 3.6.0(esbuild@0.24.2) + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.9 + semver: 7.6.3 + util: 0.12.5 + ws: 8.18.0 + optionalDependencies: + prettier: 3.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@storybook/csf-plugin@7.6.20': dependencies: '@storybook/csf-tools': 7.6.20 @@ -10665,6 +11957,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@storybook/csf-plugin@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + unplugin: 1.16.0 + '@storybook/csf-tools@7.6.20': dependencies: '@babel/generator': 7.26.3 @@ -10700,6 +11997,22 @@ snapshots: '@storybook/global@5.0.0': {} + '@storybook/icons@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@storybook/icons@1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@storybook/instrumenter@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.9 + storybook: 8.5.3(prettier@3.4.2) + '@storybook/manager-api@7.6.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 7.6.17 @@ -10740,6 +12053,30 @@ snapshots: - react - react-dom + '@storybook/manager-api@7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@storybook/channels': 7.6.20 + '@storybook/client-logger': 7.6.20 + '@storybook/core-events': 7.6.20 + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + '@storybook/router': 7.6.20 + '@storybook/theming': 7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@storybook/types': 7.6.20 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + store2: 2.14.3 + telejson: 7.2.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - react + - react-dom + + '@storybook/manager-api@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + '@storybook/manager@7.6.20': {} '@storybook/mdx2-csf@1.1.0': {} @@ -10786,6 +12123,10 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 + '@storybook/preview-api@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + '@storybook/preview@7.6.20': {} '@storybook/react-dom-shim@7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -10793,6 +12134,23 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@storybook/react-dom-shim@7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@storybook/react-dom-shim@8.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.5.3(prettier@3.4.2) + + '@storybook/react-dom-shim@8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))': + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + storybook: 8.5.3(prettier@3.4.2) + '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.32.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.12.0)(terser@5.37.0))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.7.2)(vite@5.4.11(@types/node@22.12.0)(terser@5.37.0)) @@ -10813,6 +12171,28 @@ snapshots: - typescript - vite-plugin-glimmerx + '@storybook/react-vite@8.5.3(@storybook/test@8.5.3(storybook@8.5.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.32.0)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) + '@rollup/pluginutils': 5.1.4(rollup@4.32.0) + '@storybook/builder-vite': 8.5.3(storybook@8.5.3(prettier@3.4.2))(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)) + '@storybook/react': 8.5.3(@storybook/test@8.5.3(storybook@8.5.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3) + find-up: 5.0.0 + magic-string: 0.30.17 + react: 19.0.0 + react-docgen: 7.1.0 + react-dom: 19.0.0(react@19.0.0) + resolve: 1.22.9 + storybook: 8.5.3(prettier@3.4.2) + tsconfig-paths: 4.2.0 + vite: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + optionalDependencies: + '@storybook/test': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + '@storybook/react@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)': dependencies: '@storybook/client-logger': 7.6.20 @@ -10844,6 +12224,21 @@ snapshots: - encoding - supports-color + '@storybook/react@8.5.3(@storybook/test@8.5.3(storybook@8.5.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2))(typescript@5.7.3)': + dependencies: + '@storybook/components': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/preview-api': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.5.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.3(prettier@3.4.2)) + '@storybook/theming': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + storybook: 8.5.3(prettier@3.4.2) + optionalDependencies: + '@storybook/test': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + typescript: 5.7.3 + '@storybook/router@7.6.17': dependencies: '@storybook/client-logger': 7.6.17 @@ -10870,6 +12265,18 @@ snapshots: - encoding - supports-color + '@storybook/test@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.5.3(storybook@8.5.3(prettier@3.4.2)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 + storybook: 8.5.3(prettier@3.4.2) + '@storybook/testing-library@0.2.2': dependencies: '@testing-library/dom': 9.3.4 @@ -10894,6 +12301,19 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@storybook/theming@7.6.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@storybook/client-logger': 7.6.20 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@storybook/theming@8.5.3(storybook@8.5.3(prettier@3.4.2))': + dependencies: + storybook: 8.5.3(prettier@3.4.2) + '@storybook/types@7.6.17': dependencies: '@storybook/channels': 7.6.17 @@ -10947,7 +12367,17 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@testing-library/jest-dom@6.5.0': + dependencies: + '@adobe/css-tools': 4.4.1 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.7 '@testing-library/dom': 10.4.0 @@ -10955,6 +12385,11 @@ snapshots: react-dom: 19.0.0(react@19.0.0) optionalDependencies: '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4)': dependencies: @@ -11101,6 +12536,10 @@ snapshots: dependencies: '@types/unist': 2.0.11 + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/mdx@2.0.13': {} '@types/mime-types@2.1.4': {} @@ -11138,6 +12577,15 @@ snapshots: '@types/range-parser@1.2.7': {} + '@types/react-dom@19.0.3(@types/react@18.3.17)': + dependencies: + '@types/react': 18.3.17 + optional: true + + '@types/react-dom@19.0.3(@types/react@19.0.8)': + dependencies: + '@types/react': 19.0.8 + '@types/react-test-renderer@19.0.0': dependencies: '@types/react': 19.0.8 @@ -11176,6 +12624,8 @@ snapshots: '@types/unist@2.0.11': {} + '@types/unist@3.0.3': {} + '@types/uuid@9.0.8': {} '@types/yargs-parser@21.0.3': {} @@ -11188,15 +12638,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0)(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.19.0)(typescript@5.7.2) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/utils': 7.18.0(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/type-utils': 7.18.0(eslint@9.19.0)(typescript@5.7.2) + '@typescript-eslint/utils': 7.18.0(eslint@9.19.0)(typescript@5.7.2) '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 9.17.0 + eslint: 9.19.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -11206,32 +12656,61 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 + eslint: 9.19.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@9.19.0)(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.0 - eslint: 9.17.0 + eslint: 9.19.0 optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.4.0 - eslint: 9.17.0 + eslint: 9.19.0 optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0 + eslint: 9.19.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -11242,22 +12721,40 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/scope-manager@8.23.0': + dependencies: + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@9.19.0)(typescript@5.7.2)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) - '@typescript-eslint/utils': 7.18.0(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/utils': 7.18.0(eslint@9.19.0)(typescript@5.7.2) debug: 4.4.0 - eslint: 9.17.0 + eslint: 9.19.0 ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.19.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@6.21.0': {} '@typescript-eslint/types@7.18.0': {} + '@typescript-eslint/types@8.23.0': {} + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -11288,17 +12785,42 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.18.0(eslint@9.19.0)(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) - eslint: 9.17.0 + eslint: 9.19.0 transitivePeerDependencies: - supports-color - typescript + '@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + eslint: 9.19.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -11309,6 +12831,11 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.23.0': + dependencies: + '@typescript-eslint/types': 8.23.0 + eslint-visitor-keys: 4.2.0 + '@vitejs/plugin-react@3.1.0(vite@5.4.11(@types/node@22.12.0)(terser@5.37.0))': dependencies: '@babel/core': 7.26.0 @@ -11342,6 +12869,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@3.0.4(vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.12.0)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(terser@5.37.0)(yaml@2.6.1))': dependencies: '@ampproject/remapping': 2.3.0 @@ -11360,6 +12898,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.2 + tinyrainbow: 1.2.0 + '@vitest/expect@3.0.4': dependencies: '@vitest/spy': 3.0.4 @@ -11376,6 +12921,14 @@ snapshots: msw: 2.7.0(@types/node@22.12.0)(typescript@5.7.3) vite: 6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.1.9': + dependencies: + tinyrainbow: 1.2.0 + '@vitest/pretty-format@3.0.4': dependencies: tinyrainbow: 2.0.0 @@ -11391,10 +12944,27 @@ snapshots: magic-string: 0.30.17 pathe: 2.0.2 + '@vitest/spy@2.0.5': + dependencies: + tinyspy: 3.0.2 + '@vitest/spy@3.0.4': dependencies: tinyspy: 3.0.2 + '@vitest/utils@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.2 + tinyrainbow: 1.2.0 + + '@vitest/utils@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + loupe: 3.1.2 + tinyrainbow: 1.2.0 + '@vitest/utils@3.0.4': dependencies: '@vitest/pretty-format': 3.0.4 @@ -11955,6 +13525,11 @@ snapshots: loupe: 3.1.2 pathval: 2.0.0 + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@4.1.0: dependencies: ansi-styles: 4.3.0 @@ -11991,6 +13566,8 @@ snapshots: chownr@2.0.0: {} + chromatic@11.25.2: {} + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -12212,6 +13789,8 @@ snapshots: crypto-random-string@2.0.0: {} + css.escape@1.5.1: {} + cssesc@3.0.0: {} cssstyle@4.2.1: @@ -12363,6 +13942,10 @@ snapshots: transitivePeerDependencies: - supports-color + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff-sequences@29.6.3: {} diff@5.2.0: {} @@ -12381,6 +13964,8 @@ snapshots: dom-accessibility-api@0.5.16: {} + dom-accessibility-api@0.6.3: {} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -12581,6 +14166,13 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild-register@3.6.0(esbuild@0.24.2): + dependencies: + debug: 4.4.0 + esbuild: 0.24.2 + transitivePeerDependencies: + - supports-color + esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -12678,39 +14270,39 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.17.0): + eslint-compat-utils@0.5.1(eslint@9.19.0): dependencies: - eslint: 9.17.0 + eslint: 9.19.0 semver: 7.6.3 - eslint-config-love@43.1.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0))(eslint-plugin-n@16.6.2(eslint@9.17.0))(eslint-plugin-promise@6.6.0(eslint@9.17.0))(eslint@9.17.0)(typescript@5.7.2): + eslint-config-love@43.1.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0))(eslint-plugin-n@16.6.2(eslint@9.19.0))(eslint-plugin-promise@6.6.0(eslint@9.19.0))(eslint@9.19.0)(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/parser': 6.21.0(eslint@9.17.0)(typescript@5.7.2) - eslint: 9.17.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0))(eslint-plugin-n@16.6.2(eslint@9.17.0))(eslint-plugin-promise@6.6.0(eslint@9.17.0))(eslint@9.17.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0) - eslint-plugin-n: 16.6.2(eslint@9.17.0) - eslint-plugin-promise: 6.6.0(eslint@9.17.0) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0)(typescript@5.7.2) + '@typescript-eslint/parser': 6.21.0(eslint@9.19.0)(typescript@5.7.2) + eslint: 9.19.0 + eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0))(eslint-plugin-n@16.6.2(eslint@9.19.0))(eslint-plugin-promise@6.6.0(eslint@9.19.0))(eslint@9.19.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0) + eslint-plugin-n: 16.6.2(eslint@9.19.0) + eslint-plugin-promise: 6.6.0(eslint@9.19.0) typescript: 5.7.2 transitivePeerDependencies: - supports-color - eslint-config-prettier@9.1.0(eslint@9.17.0): + eslint-config-prettier@9.1.0(eslint@9.19.0): dependencies: - eslint: 9.17.0 + eslint: 9.19.0 - eslint-config-standard-jsx@11.0.0(eslint-plugin-react@7.37.2(eslint@9.17.0))(eslint@9.17.0): + eslint-config-standard-jsx@11.0.0(eslint-plugin-react@7.37.2(eslint@9.19.0))(eslint@9.19.0): dependencies: - eslint: 9.17.0 - eslint-plugin-react: 7.37.2(eslint@9.17.0) + eslint: 9.19.0 + eslint-plugin-react: 7.37.2(eslint@9.19.0) - eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0))(eslint-plugin-n@16.6.2(eslint@9.17.0))(eslint-plugin-promise@6.6.0(eslint@9.17.0))(eslint@9.17.0): + eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0))(eslint-plugin-n@16.6.2(eslint@9.19.0))(eslint-plugin-promise@6.6.0(eslint@9.19.0))(eslint@9.19.0): dependencies: - eslint: 9.17.0 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0) - eslint-plugin-n: 16.6.2(eslint@9.17.0) - eslint-plugin-promise: 6.6.0(eslint@9.17.0) + eslint: 9.19.0 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0) + eslint-plugin-n: 16.6.2(eslint@9.19.0) + eslint-plugin-promise: 6.6.0(eslint@9.19.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -12720,24 +14312,24 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.19.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0)(typescript@5.7.2) - eslint: 9.17.0 + '@typescript-eslint/parser': 7.18.0(eslint@9.19.0)(typescript@5.7.2) + eslint: 9.19.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-es-x@7.8.0(eslint@9.17.0): + eslint-plugin-es-x@7.8.0(eslint@9.19.0): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) '@eslint-community/regexpp': 4.12.1 - eslint: 9.17.0 - eslint-compat-utils: 0.5.1(eslint@9.17.0) + eslint: 9.19.0 + eslint-compat-utils: 0.5.1(eslint@9.19.0) - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint@9.19.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -12746,9 +14338,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.17.0 + eslint: 9.19.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.19.0) hasown: 2.0.2 is-core-module: 2.16.0 is-glob: 4.0.3 @@ -12760,18 +14352,18 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.19.0)(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-n@16.6.2(eslint@9.17.0): + eslint-plugin-n@16.6.2(eslint@9.19.0): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) builtins: 5.1.0 - eslint: 9.17.0 - eslint-plugin-es-x: 7.8.0(eslint@9.17.0) + eslint: 9.19.0 + eslint-plugin-es-x: 7.8.0(eslint@9.19.0) get-tsconfig: 4.8.1 globals: 13.24.0 ignore: 5.3.2 @@ -12781,21 +14373,29 @@ snapshots: resolve: 1.22.9 semver: 7.6.3 - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.17.0))(eslint@9.17.0)(prettier@3.4.2): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.19.0))(eslint@9.19.0)(prettier@3.4.2): dependencies: - eslint: 9.17.0 + eslint: 9.19.0 prettier: 3.4.2 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.0(eslint@9.17.0) + eslint-config-prettier: 9.1.0(eslint@9.19.0) + + eslint-plugin-promise@6.6.0(eslint@9.19.0): + dependencies: + eslint: 9.19.0 - eslint-plugin-promise@6.6.0(eslint@9.17.0): + eslint-plugin-react-hooks@5.1.0(eslint@9.19.0): dependencies: - eslint: 9.17.0 + eslint: 9.19.0 - eslint-plugin-react@7.37.2(eslint@9.17.0): + eslint-plugin-react-refresh@0.4.18(eslint@9.19.0): + dependencies: + eslint: 9.19.0 + + eslint-plugin-react@7.37.2(eslint@9.19.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -12803,7 +14403,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.0 - eslint: 9.17.0 + eslint: 9.19.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -12817,6 +14417,16 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 + eslint-plugin-storybook@0.11.2(eslint@9.19.0)(typescript@5.7.3): + dependencies: + '@storybook/csf': 0.1.12 + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + eslint: 9.19.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + - typescript + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -12831,14 +14441,14 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.17.0: + eslint@9.19.0: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 - '@eslint/core': 0.9.1 + '@eslint/core': 0.10.0 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.17.0 + '@eslint/js': 9.19.0 '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -13050,6 +14660,8 @@ snapshots: dependencies: minimatch: 5.1.6 + filesize@10.1.6: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -13341,6 +14953,8 @@ snapshots: globals@14.0.0: {} + globals@15.14.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -13895,6 +15509,8 @@ snapshots: transitivePeerDependencies: - supports-color + jsdoc-type-pratt-parser@4.1.0: {} + jsdom@26.0.0: dependencies: cssstyle: 4.2.1 @@ -14250,6 +15866,10 @@ snapshots: dependencies: react: 18.3.1 + markdown-to-jsx@7.7.2(react@19.0.0): + dependencies: + react: 19.0.0 + math-intrinsics@1.0.0: {} mdast-util-definitions@4.0.0: @@ -14263,6 +15883,13 @@ snapshots: unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + mdast-util-from-markdown@1.3.1: dependencies: '@types/mdast': 3.0.15 @@ -14280,6 +15907,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-autolink-literal@1.0.3: dependencies: '@types/mdast': 3.0.15 @@ -14287,17 +15931,43 @@ snapshots: mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.2.0 + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + mdast-util-gfm-footnote@1.0.2: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-util-normalize-identifier: 1.1.0 + mdast-util-gfm-footnote@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-strikethrough@1.0.3: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-table@1.0.7: dependencies: '@types/mdast': 3.0.15 @@ -14307,11 +15977,30 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-task-list-item@1.0.2: dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-gfm@2.0.2: dependencies: mdast-util-from-markdown: 1.3.1 @@ -14324,11 +16013,28 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-gfm@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-phrasing@3.0.1: dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + mdast-util-to-markdown@1.5.0: dependencies: '@types/mdast': 3.0.15 @@ -14340,12 +16046,28 @@ snapshots: unist-util-visit: 4.1.2 zwitch: 2.0.4 + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + mdast-util-to-string@1.1.0: {} mdast-util-to-string@3.2.0: dependencies: '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + media-typer@0.3.0: {} memoizerific@1.11.3: @@ -14397,6 +16119,25 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-core-commonmark@2.0.2: + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-gfm-autolink-literal@1.0.5: dependencies: micromark-util-character: 1.2.0 @@ -14404,6 +16145,13 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-gfm-footnote@1.1.2: dependencies: micromark-core-commonmark: 1.1.0 @@ -14415,6 +16163,17 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-gfm-strikethrough@1.0.7: dependencies: micromark-util-chunked: 1.1.0 @@ -14424,6 +16183,15 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-gfm-table@1.0.7: dependencies: micromark-factory-space: 1.1.0 @@ -14432,10 +16200,22 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-gfm-tagfilter@1.0.2: dependencies: micromark-util-types: 1.1.0 + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.1 + micromark-extension-gfm-task-list-item@1.0.5: dependencies: micromark-factory-space: 1.1.0 @@ -14444,6 +16224,14 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-gfm@2.0.3: dependencies: micromark-extension-gfm-autolink-literal: 1.0.5 @@ -14455,12 +16243,29 @@ snapshots: micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-destination@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-label@1.1.0: dependencies: micromark-util-character: 1.2.0 @@ -14468,11 +16273,23 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-space@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.1 + micromark-factory-title@1.1.0: dependencies: micromark-factory-space: 1.1.0 @@ -14480,6 +16297,13 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-whitespace@1.1.0: dependencies: micromark-factory-space: 1.1.0 @@ -14487,30 +16311,61 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-character@1.2.0: dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-chunked@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-classify-character@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-combine-extensions@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-decode-numeric-character-reference@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-decode-string@1.1.0: dependencies: decode-named-character-reference: 1.0.2 @@ -14518,24 +16373,49 @@ snapshots: micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + micromark-util-encode@1.1.0: {} + micromark-util-encode@2.0.1: {} + micromark-util-html-tag-name@1.2.0: {} + micromark-util-html-tag-name@2.0.1: {} + micromark-util-normalize-identifier@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-resolve-all@1.1.0: dependencies: micromark-util-types: 1.1.0 + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.1 + micromark-util-sanitize-uri@1.2.0: dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-subtokenize@1.1.0: dependencies: micromark-util-chunked: 1.1.0 @@ -14543,10 +16423,21 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-util-subtokenize@2.0.4: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-symbol@1.1.0: {} + micromark-util-symbol@2.0.1: {} + micromark-util-types@1.1.0: {} + micromark-util-types@2.0.1: {} + micromark@3.2.0: dependencies: '@types/debug': 4.1.12 @@ -14569,6 +16460,28 @@ snapshots: transitivePeerDependencies: - supports-color + micromark@4.0.1: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.0 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -15458,10 +17371,24 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-colorful@5.6.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + react-confetti@6.2.2(react@19.0.0): + dependencies: + react: 19.0.0 + tween-functions: 1.2.0 + react-docgen-typescript@2.2.2(typescript@5.7.2): dependencies: typescript: 5.7.2 + react-docgen-typescript@2.2.2(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + react-docgen@7.1.0: dependencies: '@babel/core': 7.26.0 @@ -15516,6 +17443,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + react-remove-scroll-bar@2.3.8(@types/react@19.0.8)(react@19.0.0): + dependencies: + react: 19.0.0 + react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + react-remove-scroll@2.5.5(@types/react@18.3.17)(react@18.3.1): dependencies: react: 18.3.1 @@ -15527,6 +17462,17 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + react-remove-scroll@2.5.5(@types/react@19.0.8)(react@19.0.0): + dependencies: + react: 19.0.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.0.8)(react@19.0.0) + react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.0.8)(react@19.0.0) + use-sidecar: 1.1.3(@types/react@19.0.8)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + react-style-singleton@2.2.3(@types/react@18.3.17)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -15535,6 +17481,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + react-style-singleton@2.2.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + get-nonce: 1.0.1 + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + react-test-renderer@19.0.0(react@19.0.0): dependencies: react: 19.0.0 @@ -15679,12 +17633,38 @@ snapshots: transitivePeerDependencies: - supports-color + remark-gfm@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.1 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-slug@6.1.0: dependencies: github-slugger: 1.5.0 mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -16067,6 +18047,16 @@ snapshots: - supports-color - utf-8-validate + storybook@8.5.3(prettier@3.4.2): + dependencies: + '@storybook/core': 8.5.3(prettier@3.4.2) + optionalDependencies: + prettier: 3.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + stream-shift@1.0.3: {} strict-event-emitter@0.5.1: {} @@ -16301,6 +18291,8 @@ snapshots: tinypool@1.0.2: {} + tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} tinyspy@3.0.2: {} @@ -16360,6 +18352,10 @@ snapshots: dependencies: typescript: 5.7.2 + ts-api-utils@2.0.1(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} @@ -16433,6 +18429,8 @@ snapshots: transitivePeerDependencies: - supports-color + tween-functions@1.2.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -16495,6 +18493,16 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.23.0(eslint@9.19.0)(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + eslint: 9.19.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + typescript@4.9.5: {} typescript@5.7.2: {} @@ -16538,6 +18546,16 @@ snapshots: trough: 2.2.0 vfile: 5.3.7 + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 @@ -16556,10 +18574,18 @@ snapshots: dependencies: '@types/unist': 2.0.11 + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position@3.0.3: dependencies: '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit-parents@3.1.1: dependencies: '@types/unist': 2.0.11 @@ -16570,6 +18596,11 @@ snapshots: '@types/unist': 2.0.11 unist-util-is: 5.2.1 + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit@2.0.3: dependencies: '@types/unist': 2.0.11 @@ -16582,6 +18613,12 @@ snapshots: unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universal-user-agent@6.0.1: {} universalify@0.2.0: {} @@ -16621,12 +18658,25 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + use-callback-ref@1.3.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + use-resize-observer@9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@juggle/resize-observer': 3.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + use-resize-observer@9.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@juggle/resize-observer': 3.4.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + use-sidecar@1.1.3(@types/react@18.3.17)(react@18.3.1): dependencies: detect-node-es: 1.1.0 @@ -16635,6 +18685,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 + use-sidecar@1.1.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + util-deprecate@1.0.2: {} util@0.12.5: @@ -16672,6 +18730,11 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + vfile@5.3.7: dependencies: '@types/unist': 2.0.11 @@ -16679,13 +18742,18 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + vite-node@3.0.4(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + vite: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) transitivePeerDependencies: - '@types/node' - jiti @@ -16722,6 +18790,17 @@ snapshots: - supports-color - typescript + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1)): + dependencies: + debug: 4.4.0 + globrex: 0.1.2 + tsconfck: 3.1.4(typescript@5.7.3) + optionalDependencies: + vite: 6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1) + transitivePeerDependencies: + - supports-color + - typescript + vite@5.4.11(@types/node@22.12.0)(terser@5.37.0): dependencies: esbuild: 0.21.5 @@ -16743,6 +18822,17 @@ snapshots: terser: 5.37.0 yaml: 2.6.1 + vite@6.1.0(@types/node@22.12.0)(terser@5.37.0)(yaml@2.6.1): + dependencies: + esbuild: 0.24.2 + postcss: 8.5.1 + rollup: 4.32.0 + optionalDependencies: + '@types/node': 22.12.0 + fsevents: 2.3.3 + terser: 5.37.0 + yaml: 2.6.1 + vitest@3.0.4(@types/debug@4.1.12)(@types/node@22.12.0)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(terser@5.37.0)(yaml@2.6.1): dependencies: '@vitest/expect': 3.0.4