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 00000000..77e678b5 Binary files /dev/null and b/packages/document/public/app-logo.png differ diff --git a/packages/document/public/mockServiceWorker.js b/packages/document/public/mockServiceWorker.js new file mode 100644 index 00000000..87e0f31b --- /dev/null +++ b/packages/document/public/mockServiceWorker.js @@ -0,0 +1,303 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker (1.2.1). + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70' +const activeClientIds = new Set() + +self.addEventListener('install', function () { + self.skipWaiting() +}) + +self.addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + 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 00000000..57c9193b Binary files /dev/null and b/packages/document/public/welcome-hero.png differ diff --git a/packages/document/src/App.css b/packages/document/src/App.css new file mode 100644 index 00000000..b9d355df --- /dev/null +++ b/packages/document/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/packages/document/src/App.tsx b/packages/document/src/App.tsx new file mode 100644 index 00000000..3d7ded3f --- /dev/null +++ b/packages/document/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> +
+ + Vite logo + + + React logo + +
+

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