From 58845dbd5e03c09c38fb44c682161db2d0734253 Mon Sep 17 00:00:00 2001 From: Miro Date: Tue, 14 Oct 2025 12:53:58 +0300 Subject: [PATCH 1/4] Storybook Deployment Setup (#248) * Added Storybook deployment workflow * Added secrets references * Added workflow dependency to run the GitHub action * Fixed workflow build * Fixed workflow build * Fixed workflow build * Fixed workflow build * Fixed workflow build * Fixed storybook build rendering on server * Fixed type in main * Added comments to converter * Updated CHANGELOG.md * Updated deployment branch * Fixed build * Removed lit * Fixed build * Updated deployment branch * Updated deployment branch * Remove lit --------- Co-authored-by: Tudor Morar --- .github/workflows/deploy-storybook.yml | 71 + .storybook/jsxToHtml.ts | 107 ++ .storybook/main.ts | 10 +- .storybook/preview.tsx | 14 +- .storybook/public/CNAME | 1 + CHANGELOG.md | 2 + package.json | 7 +- pnpm-lock.yaml | 1784 +++++++++++++----------- 8 files changed, 1134 insertions(+), 862 deletions(-) create mode 100644 .github/workflows/deploy-storybook.yml create mode 100644 .storybook/jsxToHtml.ts create mode 100644 .storybook/public/CNAME diff --git a/.github/workflows/deploy-storybook.yml b/.github/workflows/deploy-storybook.yml new file mode 100644 index 00000000..9f93a1d5 --- /dev/null +++ b/.github/workflows/deploy-storybook.yml @@ -0,0 +1,71 @@ +name: Deploy Storybook + +on: + push: + branches: [main] + paths: + - 'src/**' + - '.storybook/**' + - 'package.json' + - '.github/workflows/deploy-storybook.yml' + workflow_dispatch: + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + clean: true + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Setup Yarn + run: npm install -g yarn + + - name: Install Dependencies + run: yarn install --frozen-lockfile + + - name: Build Storybook (includes Stencil build) + run: yarn run storybook-build + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: 'us-east-1' + + - name: Deploy to S3 bucket + run: aws s3 sync ./storybook-static/ s3://${{ secrets.AWS_S3_BUCKET }} --delete --acl public-read + + - name: Set proper MIME types and headers for all files + run: | + # JavaScript files with proper CORS + aws s3 cp s3://${{ secrets.AWS_S3_BUCKET }}/ s3://${{ secrets.AWS_S3_BUCKET }}/ --recursive --exclude "*" --include "*.js" --content-type "application/javascript" --metadata-directive REPLACE --acl public-read --cache-control "public, max-age=31536000" + # CSS files + aws s3 cp s3://${{ secrets.AWS_S3_BUCKET }}/ s3://${{ secrets.AWS_S3_BUCKET }}/ --recursive --exclude "*" --include "*.css" --content-type "text/css" --metadata-directive REPLACE --acl public-read --cache-control "public, max-age=31536000" + # JSON files + aws s3 cp s3://${{ secrets.AWS_S3_BUCKET }}/ s3://${{ secrets.AWS_S3_BUCKET }}/ --recursive --exclude "*" --include "*.json" --content-type "application/json" --metadata-directive REPLACE --acl public-read + # HTML files (iframe.html, etc.) + aws s3 cp s3://${{ secrets.AWS_S3_BUCKET }}/ s3://${{ secrets.AWS_S3_BUCKET }}/ --recursive --exclude "*" --include "*.html" --content-type "text/html" --metadata-directive REPLACE --acl public-read --cache-control "no-cache" + + - name: No-cache index.html + run: aws s3 cp s3://${{ secrets.AWS_S3_BUCKET }}/index.html s3://${{ secrets.AWS_S3_BUCKET }}/index.html --metadata-directive REPLACE --cache-control max-age=0,no-cache,no-store,must-revalidate --content-type text/html --acl public-read + + - name: Slack Notification + uses: rtCamp/action-slack-notify@master + env: + SLACK_ICON_EMOJI: ':books:' + SLACK_USERNAME: mx-sdk-dapp-ui + SLACK_TITLE: 'Storybook' + SLACK_MESSAGE: 'Successfully deployed to: https://${{ secrets.AWS_S3_BUCKET }}' + SLACK_COLOR: 'good' + SLACK_FOOTER: 'Deployed from branch: ${{ github.ref_name }}' + MSG_MINIMAL: false + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.storybook/jsxToHtml.ts b/.storybook/jsxToHtml.ts new file mode 100644 index 00000000..b1582306 --- /dev/null +++ b/.storybook/jsxToHtml.ts @@ -0,0 +1,107 @@ +// Interface representing a Stencil VNode structure +interface VNodeStencil { + $tag$?: string; + $attrs$?: Record | null; + $children$?: Array | null; + $text$?: string | null; +} + +// Interface representing a React-like VNode structure +interface VNodeLike { + type?: string | ((...args: unknown[]) => unknown); + props?: Record & { children?: Array | VNodeLike | string }; + children?: Array | VNodeLike | string; +} + +// Escapes HTML special characters to prevent XSS attacks +const escapeHtml = (value: string): string => + value + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + +// Converts attribute object to HTML attribute string +const attrsToString = (attrs: Record | null | undefined): string => { + if (!attrs) { + return ''; + } + + return Object.entries(attrs) + .filter(([, v]) => v !== undefined && v !== null && v !== false) + .map(([k, v]) => (v === true ? k : `${k}="${escapeHtml(String(v))}"`)) + .join(' '); +}; + +// Normalizes children to a consistent array format +const normalizeChildren = (children: unknown): Array => { + if (children == null) { + return []; + } + + if (Array.isArray(children)) { + return children as Array; + } + + return [children as VNodeStencil | VNodeLike | string]; +}; + +// Renders a Stencil VNode to HTML string +const renderStencil = (node: VNodeStencil): string => { + if (node.$text$ != null) { + return escapeHtml(String(node.$text$)); + } + + const tag = node.$tag$ || 'div'; + const attrs = attrsToString(node.$attrs$ || undefined); + const children = (node.$children$ || []).map(renderAny).join(''); + const attrsStr = attrs ? ` ${attrs}` : ''; + + return `<${tag}${attrsStr}>${children}`; +}; + +// Renders a React-like VNode to HTML string +const renderLike = (node: VNodeLike): string => { + const tag = typeof node.type === 'string' ? node.type : 'div'; + const props = node.props || {}; + const { children, ...rest } = props as Record & { children?: unknown }; + const attrs = attrsToString(rest); + const childrenArr = normalizeChildren(children ?? node.children); + const childrenStr = childrenArr.map(renderAny).join(''); + const attrsStr = attrs ? ` ${attrs}` : ''; + + return `<${tag}${attrsStr}>${childrenStr}`; +}; + +// Main export function that converts JSX to HTML string +export const renderJsxToHtml = (node: unknown): string => renderAny(node); + +// Renders any node type to HTML string with type detection +const renderAny = (node: unknown): string => { + if (node == null || node === false) { + return ''; + } + + if (typeof node === 'string' || typeof node === 'number') { + return escapeHtml(String(node)); + } + + // Heuristics for detecting node types + if (typeof node === 'object') { + const o = node as Record; + + // Check for Stencil VNode + if ('$tag$' in o || '$text$' in o || '$children$' in o) { + return renderStencil(node as VNodeStencil); + } + + // Check for React-like VNode + if ('type' in o || 'props' in o || 'children' in o) { + return renderLike(node as VNodeLike); + } + } + + // Fallback for unknown node types + return escapeHtml(String(node)); +}; diff --git a/.storybook/main.ts b/.storybook/main.ts index 4af35ebd..2997d663 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -2,8 +2,16 @@ const config = { stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], addons: ['@storybook/addon-links', '@storybook/addon-docs'], framework: { - name: '@stencil/storybook-plugin', + name: '@storybook/html-vite', }, + managerHead: head => ` + ${head} + + `, + previewHead: head => ` + ${head} + + `, }; export default config; diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index a7072cdc..037689a4 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -1,6 +1,7 @@ /** @jsx h */ import { h } from '@stencil/core'; -import type { Preview } from '@stencil/storybook-plugin'; +import type { Preview } from '@storybook/html-vite'; +import { renderJsxToHtml } from './jsxToHtml'; import { defineCustomElements } from '../dist/web-components'; @@ -11,11 +12,12 @@ import './tailwind.css'; defineCustomElements(); export const decorators: Preview['decorators'] = [ - (Story, context) => ( -
- -
- ), + (Story, context) => + renderJsxToHtml( +
+ +
, + ), ]; export const initialGlobals: Preview['initialGlobals'] = { diff --git a/.storybook/public/CNAME b/.storybook/public/CNAME new file mode 100644 index 00000000..eb4d4c4d --- /dev/null +++ b/.storybook/public/CNAME @@ -0,0 +1 @@ +sdk-dapp-ui.multiversx.com \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 41f664dd..655ea53b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- [Added the Storybook as a live server deployment](https://github.com/multiversx/mx-sdk-dapp-ui/pull/248) + ## [[0.0.35](https://github.com/multiversx/mx-sdk-dapp-ui/pull/246)] - 2025-10-10 - [Added passkey provider](https://github.com/multiversx/mx-sdk-dapp-ui/pull/242) diff --git a/package.json b/package.json index 25484ca2..b2be7b08 100644 --- a/package.json +++ b/package.json @@ -84,8 +84,9 @@ "build:dev": "stencil build --dev", "build": "stencil build --prod && tsc -p tsconfig.utils.json && tsc-alias -p tsconfig.utils.json", "start": "yarn run build:dev --watch --serve", - "storybook-tailwind": "npx ts-node .storybook/generate-safelist.ts && npx @tailwindcss/cli -i src/global/tailwind.css -o .storybook/tailwind.css --content '.storybook/tailwind-safelist.html' && rm -f .storybook/tailwind-safelist.html", - "storybook": "yarn run storybook-tailwind && storybook dev -p 6006 --no-open" + "storybook-build-tailwind": "npx ts-node .storybook/generate-safelist.ts && npx @tailwindcss/cli -i src/global/tailwind.css -o .storybook/tailwind.css --content '.storybook/tailwind-safelist.html' && rm -f .storybook/tailwind-safelist.html", + "storybook-dev": "yarn run build && yarn run storybook-build-tailwind && storybook dev -p 6006 --no-open", + "storybook-build": "yarn run build && yarn run storybook-build-tailwind && storybook build" }, "dependencies": { "@stencil/core": "^4.36.2", @@ -103,6 +104,8 @@ "@stencil/storybook-plugin": "^0.4.2", "@storybook/addon-docs": "9.1.7", "@storybook/addon-links": "9.1.7", + "@storybook/html": "^9.1.10", + "@storybook/html-vite": "^9.1.10", "@tailwindcss/cli": "4.0.17", "@tailwindcss/postcss": "4.1.3", "@types/jest": "^29.5.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5ec0f8f..5bc57f4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,10 +10,10 @@ importers: dependencies: '@stencil/core': specifier: ^4.36.2 - version: 4.36.3 + version: 4.38.1 '@stencil/react-output-target': specifier: 1.2.0 - version: 1.2.0(@stencil/core@4.36.3)(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 1.2.0(@stencil/core@4.38.1)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) classnames: specifier: '>=2.5.1' version: 2.5.1 @@ -35,19 +35,25 @@ importers: version: 3.0.3 '@stencil/sass': specifier: ^3.0.12 - version: 3.2.2(@stencil/core@4.36.3) + version: 3.2.2(@stencil/core@4.38.1) '@stencil/store': specifier: 2.0.16 - version: 2.0.16(@stencil/core@4.36.3) + version: 2.0.16(@stencil/core@4.38.1) '@stencil/storybook-plugin': specifier: ^0.4.2 - version: 0.4.2(@stencil/core@4.36.3)(esbuild@0.25.9)(preact@10.27.1)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))(typescript@5.9.2)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + version: 0.4.2(@stencil/core@4.38.1)(esbuild@0.25.10)(preact@10.27.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) '@storybook/addon-docs': specifier: 9.1.7 - version: 9.1.7(@types/react@19.1.12)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))) + version: 9.1.7(@types/react@19.2.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) '@storybook/addon-links': specifier: 9.1.7 - version: 9.1.7(react@19.1.1)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))) + version: 9.1.7(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + '@storybook/html': + specifier: ^9.1.10 + version: 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + '@storybook/html-vite': + specifier: ^9.1.10 + version: 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) '@tailwindcss/cli': specifier: 4.0.17 version: 4.0.17 @@ -62,34 +68,34 @@ importers: version: 21.1.7 '@types/node': specifier: ^22.10.0 - version: 22.18.1 + version: 22.18.10 '@types/qrcode': specifier: ^1.5.5 version: 1.5.5 '@typescript-eslint/eslint-plugin': specifier: ^8.23.0 - version: 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.23.0 - version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: specifier: ^9.19.0 - version: 9.34.0(jiti@2.5.1) + version: 9.37.0(jiti@2.6.1) eslint-plugin-simple-import-sort: specifier: ^12.1.1 - version: 12.1.1(eslint@9.34.0(jiti@2.5.1)) + version: 12.1.1(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-storybook: specifier: 9.1.7 - version: 9.1.7(eslint@9.34.0(jiti@2.5.1))(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))(typescript@5.9.2) + version: 9.1.7(eslint@9.37.0(jiti@2.6.1))(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(typescript@5.9.3) globals: specifier: ^15.14.0 version: 15.15.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.18.1) + version: 29.7.0(@types/node@22.18.10) jest-cli: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.18.1) + version: 29.7.0(@types/node@22.18.10) jsdom: specifier: ^22.1.0 version: 22.1.0 @@ -98,19 +104,19 @@ importers: version: 3.2.5 puppeteer: specifier: ^23.9.0 - version: 23.11.1(typescript@5.9.2) + version: 23.11.1(typescript@5.9.3) rollup-plugin-node-polyfills: specifier: ^0.2.1 version: 0.2.1 sass-embedded: specifier: ^1.85.1 - version: 1.92.0 + version: 1.93.2 stencil-tailwind-plugin: specifier: 2.0.5 - version: 2.0.5(@tailwindcss/postcss@4.1.3)(jiti@2.5.1)(tailwindcss@4.0.15)(typescript@5.9.2) + version: 2.0.5(@tailwindcss/postcss@4.1.3)(jiti@2.6.1)(tailwindcss@4.0.15)(typescript@5.9.3) storybook: specifier: ^9.1.7 - version: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + version: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) tailwindcss: specifier: 4.0.15 version: 4.0.15 @@ -119,10 +125,10 @@ importers: version: 1.8.16 typescript: specifier: ^5.7.3 - version: 5.9.2 + version: 5.9.3 vite: specifier: ^7.0.6 - version: 7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0) + version: 7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2) packages: @@ -133,20 +139,16 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.3': - resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} '@babel/generator@7.28.3': @@ -187,12 +189,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.3': - resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -287,189 +289,189 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.3': - resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.3': - resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bufbuild/protobuf@2.7.0': - resolution: {integrity: sha512-qn6tAIZEw5i/wiESBF4nQxZkl86aY4KoO0IkUa2Lh+rya64oTOdJQFlZuMwI1Qz9VBJQrQC4QlSA2DNek5gCOA==} + '@bufbuild/protobuf@2.9.0': + resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} '@emotion/unitless@0.10.0': resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.8.0': - resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -482,28 +484,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.1': - resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + '@eslint/config-helpers@0.4.0': + resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.2': - resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.34.0': - resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} + '@eslint/js@9.37.0': + resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.5': - resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -609,16 +611,16 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.30': - resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@lit/react@1.0.8': resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} peerDependencies: '@types/react': 17 || 18 || 19 - '@mdx-js/react@3.1.0': - resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: '@types/react': '>=16' react: '>=16' @@ -740,13 +742,13 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.50.0': - resolution: {integrity: sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==} + '@rollup/rollup-android-arm-eabi@4.52.4': + resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.50.0': - resolution: {integrity: sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==} + '@rollup/rollup-android-arm64@4.52.4': + resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} cpu: [arm64] os: [android] @@ -755,8 +757,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.50.0': - resolution: {integrity: sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==} + '@rollup/rollup-darwin-arm64@4.52.4': + resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} cpu: [arm64] os: [darwin] @@ -765,28 +767,28 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.50.0': - resolution: {integrity: sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==} + '@rollup/rollup-darwin-x64@4.52.4': + resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.50.0': - resolution: {integrity: sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==} + '@rollup/rollup-freebsd-arm64@4.52.4': + resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.50.0': - resolution: {integrity: sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==} + '@rollup/rollup-freebsd-x64@4.52.4': + resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.50.0': - resolution: {integrity: sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.50.0': - resolution: {integrity: sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==} + '@rollup/rollup-linux-arm-musleabihf@4.52.4': + resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] @@ -795,8 +797,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.50.0': - resolution: {integrity: sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==} + '@rollup/rollup-linux-arm64-gnu@4.52.4': + resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] @@ -805,33 +807,33 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.50.0': - resolution: {integrity: sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==} + '@rollup/rollup-linux-arm64-musl@4.52.4': + resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.50.0': - resolution: {integrity: sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==} + '@rollup/rollup-linux-loong64-gnu@4.52.4': + resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.50.0': - resolution: {integrity: sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==} + '@rollup/rollup-linux-ppc64-gnu@4.52.4': + resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.50.0': - resolution: {integrity: sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==} + '@rollup/rollup-linux-riscv64-gnu@4.52.4': + resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.50.0': - resolution: {integrity: sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==} + '@rollup/rollup-linux-riscv64-musl@4.52.4': + resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.50.0': - resolution: {integrity: sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==} + '@rollup/rollup-linux-s390x-gnu@4.52.4': + resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] @@ -840,8 +842,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.50.0': - resolution: {integrity: sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==} + '@rollup/rollup-linux-x64-gnu@4.52.4': + resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] @@ -850,13 +852,13 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.50.0': - resolution: {integrity: sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==} + '@rollup/rollup-linux-x64-musl@4.52.4': + resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.50.0': - resolution: {integrity: sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==} + '@rollup/rollup-openharmony-arm64@4.52.4': + resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} cpu: [arm64] os: [openharmony] @@ -865,23 +867,28 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.50.0': - resolution: {integrity: sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==} + '@rollup/rollup-win32-arm64-msvc@4.52.4': + resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.50.0': - resolution: {integrity: sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==} + '@rollup/rollup-win32-ia32-msvc@4.52.4': + resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.52.4': + resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.34.9': resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.50.0': - resolution: {integrity: sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==} + '@rollup/rollup-win32-x64-msvc@4.52.4': + resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} cpu: [x64] os: [win32] @@ -894,8 +901,8 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@stencil/core@4.36.3': - resolution: {integrity: sha512-C9DOaAjm+hSYRuVoUuYWG/lrYT8+4DG0AL0m1Ea9+G5v2Y6ApVpNJLbXvFlRZIdDMGecH86s6v0Gp39uockLxg==} + '@stencil/core@4.38.1': + resolution: {integrity: sha512-qImplYLSp2wSZJo3oMZ3HrTaI+uULcRB4Knrua7UT9VjN/va+TDfk4JAKwDyDfTDkD2laDPcy6QJP2S3hVxZFQ==} engines: {node: '>=16.0.0', npm: '>=7.10.0'} hasBin: true @@ -942,16 +949,16 @@ packages: react: optional: true - '@storybook/builder-vite@9.1.4': - resolution: {integrity: sha512-YtWl35EU/I4S00yKYZO7hgfy7ERChFi6/G/hwlV+hLbNLtQm+aS8nhvrJpJvjffP+5p2pS38gRx8OgXXt7cMPQ==} + '@storybook/builder-vite@9.1.10': + resolution: {integrity: sha512-0ogI+toZJYaFptcFpRcRPOZ9/NrFUYhiaI09ggeEB1FF9ygHMVsobp4eaj4HjZI6V3x7cQwkd2ZmxAMQDBQuMA==} peerDependencies: - storybook: ^9.1.4 + storybook: ^9.1.10 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/csf-plugin@9.1.4': - resolution: {integrity: sha512-t7W6NpH7ZJ9sfBW8Snck4P7m8NWQNGgSgDNnXtjEgH4llgJveNpWy59ho+A4/xcC4Jr/0eTbbhngKXn5hkqctw==} + '@storybook/csf-plugin@9.1.10': + resolution: {integrity: sha512-247F/JU0Naxm/RIUnQYpqXeCL0wG8UNJkZe+/GkLjdqzsyML0lb+8OwBsWFfG8zfj6fkjmRU2mF44TnNkzoQcg==} peerDependencies: - storybook: ^9.1.4 + storybook: ^9.1.10 '@storybook/csf-plugin@9.1.7': resolution: {integrity: sha512-xrPKWt16hBXvyHliuIEzPLvHdRbEe5Oubk/NIPibFVG4cxhEmNxMeHo3uFua3wgtEXyp4UErRWteviNjYSzjUA==} @@ -961,14 +968,20 @@ packages: '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@storybook/html@9.1.4': - resolution: {integrity: sha512-iPnnlAcUXvAtBw22VtQ8gRup8X+Nv3KzmuT0UqFtsxd6pDi+yvxUI2qRSYNphHMeCvQkWWCSOquYlVXynXK+Vg==} + '@storybook/html-vite@9.1.10': + resolution: {integrity: sha512-T3cF2F/B4SO/gvnPfE+w22bk+Aur7praEjuo4b/PolvDCgKXysMeoJXk6c5xncyrp4tTuZvyKRBY3ClWUfHILA==} + engines: {node: '>=20.0.0'} + peerDependencies: + storybook: ^9.1.10 + + '@storybook/html@9.1.10': + resolution: {integrity: sha512-cmtypz6P8OKM3+A1jmDB2c/DbF07ZSojZf/6RowX0yniYCteRnfEakW/gGW5KmkmVqN/TaEbTi0wO0hcMP9B0w==} engines: {node: '>=20.0.0'} peerDependencies: - storybook: ^9.1.4 + storybook: ^9.1.10 - '@storybook/icons@1.4.0': - resolution: {integrity: sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==} + '@storybook/icons@1.6.0': + resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} engines: {node: '>=14.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -1138,8 +1151,8 @@ packages: resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.8.0': - resolution: {integrity: sha512-WgXcWzVM6idy5JaftTVC8Vs83NKRmGJz4Hqs4oyOuO2J4r/y79vvKZsb+CaGyCSEbUPI6OsewfPd0G1A0/TUZQ==} + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} '@testing-library/user-event@14.6.1': @@ -1206,14 +1219,14 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/node@22.18.1': - resolution: {integrity: sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==} + '@types/node@22.18.10': + resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} '@types/qrcode@1.5.5': resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} - '@types/react@19.1.12': - resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==} + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -1230,63 +1243,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.42.0': - resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} + '@typescript-eslint/eslint-plugin@8.46.0': + resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.42.0 + '@typescript-eslint/parser': ^8.46.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.42.0': - resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} + '@typescript-eslint/parser@8.46.0': + resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.42.0': - resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} + '@typescript-eslint/project-service@8.46.0': + resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.42.0': - resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} + '@typescript-eslint/scope-manager@8.46.0': + resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.42.0': - resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} + '@typescript-eslint/tsconfig-utils@8.46.0': + resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.42.0': - resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} + '@typescript-eslint/type-utils@8.46.0': + resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.42.0': - resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} + '@typescript-eslint/types@8.46.0': + resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.42.0': - resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} + '@typescript-eslint/typescript-estree@8.46.0': + resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.42.0': - resolution: {integrity: sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==} + '@typescript-eslint/utils@8.46.0': + resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.42.0': - resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} + '@typescript-eslint/visitor-keys@8.46.0': + resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitest/expect@3.2.4': @@ -1389,8 +1402,13 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + b4a@1.7.3: + resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -1420,11 +1438,16 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.6.1: - resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} + bare-events@2.8.0: + resolution: {integrity: sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true - bare-fs@4.2.3: - resolution: {integrity: sha512-1aGs5pRVLToMQ79elP+7cc0u0s/wXAzfBv/7hDloT7WFggLqECCas5qqPky7WHCFdsBH5WDq6sD4fAoz5sJbtA==} + bare-fs@4.4.10: + resolution: {integrity: sha512-arqVF+xX/rJHwrONZaSPhlzleT2gXwVs9rsAe1p1mIVwWZI2A76/raio+KwwxfWMO8oV9Wo90EaUkS2QwVmy4w==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -1450,9 +1473,16 @@ packages: bare-events: optional: true + bare-url@2.3.0: + resolution: {integrity: sha512-c+RCqMSZbkz97Mw1LWR0gcOqwK82oyYKfLoHJ8k13ybi1+I80ffdDzUy0TdAburdrR/kI0/VuN8YgEnJqX+Nyw==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.8.16: + resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} + hasBin: true + basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} @@ -1478,8 +1508,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.4: - resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} + browserslist@4.26.3: + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1517,8 +1547,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001739: - resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==} + caniuse-lite@1.0.30001750: + resolution: {integrity: sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} @@ -1628,8 +1658,8 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + css-declaration-sorter@7.3.0: + resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.0.9 @@ -1694,8 +1724,8 @@ packages: resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} engines: {node: '>=14'} - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1750,8 +1780,8 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@3.1.0: @@ -1800,8 +1830,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.214: - resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} + electron-to-chromium@1.5.234: + resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -1829,8 +1859,8 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} @@ -1853,8 +1883,8 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} engines: {node: '>=18'} hasBin: true @@ -1899,8 +1929,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.34.0: - resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==} + eslint@9.37.0: + resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1946,6 +1976,9 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2024,8 +2057,8 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} - fs-extra@11.3.1: - resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} fs.realpath@1.0.0: @@ -2067,8 +2100,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.12.0: + resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -2181,8 +2214,8 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - immutable@5.1.3: - resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -2418,8 +2451,8 @@ packages: node-notifier: optional: true - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true js-tokens@4.0.0: @@ -2596,8 +2629,8 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.18: - resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -2694,8 +2727,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.23: + resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -2708,8 +2741,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.21: - resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} + nwsapi@2.2.22: + resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3047,13 +3080,13 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - preact-render-to-string@6.6.1: - resolution: {integrity: sha512-IIMfXRjmbSP9QmG18WJLQa4Z4yx3J0VC9QN5q9z2XYlWSzFlJ+bSm/AyLyyV/YFwjof1OXFX2Mz6Ao60LXudJg==} + preact-render-to-string@6.6.2: + resolution: {integrity: sha512-VJ++Pkzv6+ZOmeN/9Qvx0mRdXqnei1Lo3uu9bGvYHhoMI1VUkDT44hcpGbiokl/kuuYTayYa3yvmYTLZMplfMA==} peerDependencies: preact: '>=10 || >= 11.0.0-0' - preact@10.27.1: - resolution: {integrity: sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ==} + preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -3104,7 +3137,7 @@ packages: puppeteer@23.11.1: resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==} engines: {node: '>=18'} - deprecated: < 24.10.2 is no longer supported + deprecated: < 24.15.0 is no longer supported hasBin: true pure-rand@6.1.0: @@ -3130,10 +3163,10 @@ packages: peerDependencies: typescript: '>= 4.3.x' - react-dom@19.1.1: - resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: - react: ^19.1.1 + react: ^19.2.0 react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -3148,8 +3181,8 @@ packages: resolution: {integrity: sha512-88JZckqgbfXJaGcDQoTFKRmBwHBF0Ddaxz3PL9Q+vywAJruBY+NdN+ZiKSBe7r/pWtjbt0naZdtH5oNI1X3FLA==} engines: {node: '>=14.0.0'} - react@19.1.1: - resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} readdirp@3.6.0: @@ -3216,8 +3249,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.50.0: - resolution: {integrity: sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==} + rollup@4.52.4: + resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3233,117 +3266,117 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.92.0: - resolution: {integrity: sha512-0VcRBilndf8Iot7zfKKEYH7Ig4JBRjltf7Ba9dNL6wtv0m1a36cm8FgZFofrXtDjUgVTV/aEH/Xw4zBUs6vFYA==} + sass-embedded-all-unknown@1.93.2: + resolution: {integrity: sha512-GdEuPXIzmhRS5J7UKAwEvtk8YyHQuFZRcpnEnkA3rwRUI27kwjyXkNeIj38XjUQ3DzrfMe8HcKFaqWGHvblS7Q==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.92.0: - resolution: {integrity: sha512-m0JY0QyskN77AFpA8FKxqXZNWSzrPvKOvZqOu1DwEEipyHuSdiAVFDHZ6EpI3aABxCXE3jgkP+Ij2mb4hiLxFw==} + sass-embedded-android-arm64@1.93.2: + resolution: {integrity: sha512-346f4iVGAPGcNP6V6IOOFkN5qnArAoXNTPr5eA/rmNpeGwomdb7kJyQ717r9rbJXxOG8OAAUado6J0qLsjnjXQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.92.0: - resolution: {integrity: sha512-0NH0zElKL5gLdNcWFzYX/bqtpoFq5ogcU+4vLdmpBXA9Zl5NFPXAPRA6K8pgjQNWpnV7bG05JSIVPuNKZ60Ptg==} + sass-embedded-android-arm@1.93.2: + resolution: {integrity: sha512-I8bpO8meZNo5FvFx5FIiE7DGPVOYft0WjuwcCCdeJ6duwfkl6tZdatex1GrSigvTsuz9L0m4ngDcX/Tj/8yMow==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.92.0: - resolution: {integrity: sha512-wfVRf2PFR15vCgJE3SWLZQRo+98xm7vKvpHiaPU4satutwMKC8yXxDvsc7hFBqQYBtqHNK5ap5dZSXlgdGGZrA==} + sass-embedded-android-riscv64@1.93.2: + resolution: {integrity: sha512-hSMW1s4yJf5guT9mrdkumluqrwh7BjbZ4MbBW9tmi1DRDdlw1Wh9Oy1HnnmOG8x9XcI1qkojtPL6LUuEJmsiDg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.92.0: - resolution: {integrity: sha512-bc1c3OMdfrYoiIzVzsMI3KBnIa4mEumg7jHzonkDUIUWrfUNsbzlO+UXX1CcRyfaOIqyKNNZLVvBCz8EwmUsbQ==} + sass-embedded-android-x64@1.93.2: + resolution: {integrity: sha512-JqktiHZduvn+ldGBosE40ALgQ//tGCVNAObgcQ6UIZznEJbsHegqStqhRo8UW3x2cgOO2XYJcrInH6cc7wdKbw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.92.0: - resolution: {integrity: sha512-vZh1WCL2QlQyTlAD8snmC8W90XBZI/125o15bfKkGbUzV58dkZJf413hk6JVQS2+a0lZT4GxvrlGH1fSaSNTug==} + sass-embedded-darwin-arm64@1.93.2: + resolution: {integrity: sha512-qI1X16qKNeBJp+M/5BNW7v/JHCDYWr1/mdoJ7+UMHmP0b5AVudIZtimtK0hnjrLnBECURifd6IkulybR+h+4UA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.92.0: - resolution: {integrity: sha512-4vJsXpOQAgU+KrrW/3POvhnfkG9iJ4gU8ujeEDXqCSSY2M+5B/j0S6iXB7nu3Z9MfmCl8V4B6xyeB0EWE5Ul0g==} + sass-embedded-darwin-x64@1.93.2: + resolution: {integrity: sha512-4KeAvlkQ0m0enKUnDGQJZwpovYw99iiMb8CTZRSsQm8Eh7halbJZVmx67f4heFY/zISgVOCcxNg19GrM5NTwtA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.92.0: - resolution: {integrity: sha512-HH4LNY1svM2Lv6NCxqOQca42hzG/o55ON9X3T0R18Rl9kVb3y5qiJpdrHh7sSlZWF4qhHYbRc9BIc+Tw142oog==} + sass-embedded-linux-arm64@1.93.2: + resolution: {integrity: sha512-9ftX6nd5CsShJqJ2WRg+ptaYvUW+spqZfJ88FbcKQBNFQm6L87luj3UI1rB6cP5EWrLwHA754OKxRJyzWiaN6g==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.92.0: - resolution: {integrity: sha512-HMjTDjIT8bHwAVd0c8r8QvGxGZwJg3H06/Y5ZiaiwVGiZtYS9jfef6LnrPw8LY5cOG8wm9RZ9AgVqvkL7E2jBQ==} + sass-embedded-linux-arm@1.93.2: + resolution: {integrity: sha512-N3+D/ToHtzwLDO+lSH05Wo6/KRxFBPnbjVHASOlHzqJnK+g5cqex7IFAp6ozzlRStySk61Rp6d+YGrqZ6/P0PA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.92.0: - resolution: {integrity: sha512-xYzZDmcPb3BsaD6qlRTqZqtyMOZfGCSKJBZYj2ZRJiKDDr1sqPSIqKx6G8jc1wJAVdvoNp5tzENnCfY7NRkxNA==} + sass-embedded-linux-musl-arm64@1.93.2: + resolution: {integrity: sha512-+3EHuDPkMiAX5kytsjEC1bKZCawB9J6pm2eBIzzLMPWbf5xdx++vO1DpT7hD4bm4ZGn0eVHgSOKIfP6CVz6tVg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.92.0: - resolution: {integrity: sha512-qJDCXm379yRT9+8wKSi6nHFCOODTmD6XmE8rqmMozKo6kvCM+Y3sAMlHrT/0+pfzlGh1JSamkoYIo/ODn+LRVA==} + sass-embedded-linux-musl-arm@1.93.2: + resolution: {integrity: sha512-XBTvx66yRenvEsp3VaJCb3HQSyqCsUh7R+pbxcN5TuzueybZi0LXvn9zneksdXcmjACMlMpIVXi6LyHPQkYc8A==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.92.0: - resolution: {integrity: sha512-ZD3a6c7YvAjp1lEkKyaQpHc5EuetQ0RU3YoTfjwHiyWwezsuJHZc4hkS7SXWbZNEvi7tc2U1bdt4nSdx9c5Qxw==} + sass-embedded-linux-musl-riscv64@1.93.2: + resolution: {integrity: sha512-0sB5kmVZDKTYzmCSlTUnjh6mzOhzmQiW/NNI5g8JS4JiHw2sDNTvt1dsFTuqFkUHyEOY3ESTsfHHBQV8Ip4bEA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.92.0: - resolution: {integrity: sha512-ShivGoEKmpyL57hQB9K+EMEOWOo+LuwH5eIM2T0sRIHW5n28IS6h12R3WEJVf+PYtSi9FKWazy7kzeLefya6fQ==} + sass-embedded-linux-musl-x64@1.93.2: + resolution: {integrity: sha512-t3ejQ+1LEVuHy7JHBI2tWHhoMfhedUNDjGJR2FKaLgrtJntGnyD1RyX0xb3nuqL/UXiEAtmTmZY+Uh3SLUe1Hg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.92.0: - resolution: {integrity: sha512-CTZF8rMYBS4JsGGFMUwdPExq6DxhONXQv9omKpVmuleRw52Isx37GaMTQg5zSxunS6QfwqCyUysjWXTLe8khHA==} + sass-embedded-linux-riscv64@1.93.2: + resolution: {integrity: sha512-e7AndEwAbFtXaLy6on4BfNGTr3wtGZQmypUgYpSNVcYDO+CWxatKVY4cxbehMPhxG9g5ru+eaMfynvhZt7fLaA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.92.0: - resolution: {integrity: sha512-jAY4tzhSUUDUYSl0m+GQub/ZpVk00Pn4ybHeUICAYSQj043A9rkag+LSKDGCvC/0MptMM+/HkIDAC06tRY4PeQ==} + sass-embedded-linux-x64@1.93.2: + resolution: {integrity: sha512-U3EIUZQL11DU0xDDHXexd4PYPHQaSQa2hzc4EzmhHqrAj+TyfYO94htjWOd+DdTPtSwmLp+9cTWwPZBODzC96w==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.92.0: - resolution: {integrity: sha512-s0UF1jquqhrxg0dl/0E+L5tCH1zv1ueF+m3VgJukDkDSTW+nb7wpCGcm8csGoSXnP8+dq53jtUXVtt8sPLr8ZQ==} + sass-embedded-unknown-all@1.93.2: + resolution: {integrity: sha512-7VnaOmyewcXohiuoFagJ3SK5ddP9yXpU0rzz+pZQmS1/+5O6vzyFCUoEt3HDRaLctH4GT3nUGoK1jg0ae62IfQ==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.92.0: - resolution: {integrity: sha512-K8x+q2W0VyGPBtO3b0AlpecGOk47ce2FkEX0WD1gEexpbRCytQ+udDACHQGXpwWYPgSIT9ky0IASzDVT1fjMcw==} + sass-embedded-win32-arm64@1.93.2: + resolution: {integrity: sha512-Y90DZDbQvtv4Bt0GTXKlcT9pn4pz8AObEjFF8eyul+/boXwyptPZ/A1EyziAeNaIEIfxyy87z78PUgCeGHsx3Q==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.92.0: - resolution: {integrity: sha512-b0051n7EwSvH580u8LjsCAj2US1F59FY6/GbWJWlE2bidzY86/f8ovl4LsGY/uM3lNzWQlA/0BGmdAm44d/qJg==} + sass-embedded-win32-x64@1.93.2: + resolution: {integrity: sha512-BbSucRP6PVRZGIwlEBkp+6VQl2GWdkWFMN+9EuOTPrLxCJZoq+yhzmbjspd3PeM8+7WJ7AdFu/uRYdO8tor1iQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.92.0: - resolution: {integrity: sha512-daqnoAA+AmXvcL1fvJRMd4RDPZM2s27qYxb51c5TYc1B1Zugu0gVGyA5leoXQJEzo6sDTQ95J8X0yFcdBNGNtw==} + sass-embedded@1.93.2: + resolution: {integrity: sha512-FvQdkn2dZ8DGiLgi0Uf4zsj7r/BsiLImNa5QJ10eZalY6NfZyjrmWGFcuCN5jNwlDlXFJnftauv+UtvBKLvepQ==} engines: {node: '>=16.0.0'} hasBin: true - sass@1.92.0: - resolution: {integrity: sha512-KDNI0BxgIRDAfJgzNm5wuy+4yOCIZyrUbjSpiU/JItfih+KGXAVefKL53MTml054MmBA3DDKIBMSI/7XLxZJ3A==} + sass@1.93.2: + resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} engines: {node: '>=14.0.0'} hasBin: true @@ -3354,15 +3387,15 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -3428,8 +3461,8 @@ packages: tailwindcss: '>=4.1.1' typescript: '>=5.8.2' - storybook@9.1.8: - resolution: {integrity: sha512-/iP+DvieJ6Mnixy4PFY/KXnhsg/IHIDlTbZqly3EDbveuhsCuIUELfGnj+QSRGf9C6v/f4sZf9sZ3r80ZnKuEA==} + storybook@9.1.10: + resolution: {integrity: sha512-4+U7gF9hMpGilQmdVJwQaVZZEkD7XwC4ZDmBa51mobaPYelELEMoMfNM2hLyvB2x12gk1IJui1DnwOE4t+MXhw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -3437,8 +3470,8 @@ packages: prettier: optional: true - streamx@2.22.1: - resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + streamx@2.23.0: + resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} @@ -3517,12 +3550,12 @@ packages: tailwindcss@4.1.3: resolution: {integrity: sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==} - tapable@2.2.3: - resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar-fs@3.1.0: - resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==} + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -3540,16 +3573,16 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} tmpl@1.0.5: @@ -3603,8 +3636,8 @@ packages: typed-query-selector@2.12.0: resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -3679,8 +3712,8 @@ packages: varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - vite@7.1.4: - resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==} + vite@7.1.9: + resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3833,33 +3866,28 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.3': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3868,17 +3896,17 @@ snapshots: '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.4 + browserslist: 4.26.3 lru-cache: 5.1.1 semver: 6.3.1 @@ -3886,17 +3914,17 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -3908,212 +3936,212 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.3': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 - '@babel/parser@7.28.3': + '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.3)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.3)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.3)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.3)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/runtime@7.28.3': {} + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@babel/traverse@7.28.3': + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1 + '@babel/types': 7.28.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@0.2.3': {} - '@bufbuild/protobuf@2.7.0': {} + '@bufbuild/protobuf@2.9.0': {} '@emotion/unitless@0.10.0': {} - '@esbuild/aix-ppc64@0.25.9': + '@esbuild/aix-ppc64@0.25.10': optional: true - '@esbuild/android-arm64@0.25.9': + '@esbuild/android-arm64@0.25.10': optional: true - '@esbuild/android-arm@0.25.9': + '@esbuild/android-arm@0.25.10': optional: true - '@esbuild/android-x64@0.25.9': + '@esbuild/android-x64@0.25.10': optional: true - '@esbuild/darwin-arm64@0.25.9': + '@esbuild/darwin-arm64@0.25.10': optional: true - '@esbuild/darwin-x64@0.25.9': + '@esbuild/darwin-x64@0.25.10': optional: true - '@esbuild/freebsd-arm64@0.25.9': + '@esbuild/freebsd-arm64@0.25.10': optional: true - '@esbuild/freebsd-x64@0.25.9': + '@esbuild/freebsd-x64@0.25.10': optional: true - '@esbuild/linux-arm64@0.25.9': + '@esbuild/linux-arm64@0.25.10': optional: true - '@esbuild/linux-arm@0.25.9': + '@esbuild/linux-arm@0.25.10': optional: true - '@esbuild/linux-ia32@0.25.9': + '@esbuild/linux-ia32@0.25.10': optional: true - '@esbuild/linux-loong64@0.25.9': + '@esbuild/linux-loong64@0.25.10': optional: true - '@esbuild/linux-mips64el@0.25.9': + '@esbuild/linux-mips64el@0.25.10': optional: true - '@esbuild/linux-ppc64@0.25.9': + '@esbuild/linux-ppc64@0.25.10': optional: true - '@esbuild/linux-riscv64@0.25.9': + '@esbuild/linux-riscv64@0.25.10': optional: true - '@esbuild/linux-s390x@0.25.9': + '@esbuild/linux-s390x@0.25.10': optional: true - '@esbuild/linux-x64@0.25.9': + '@esbuild/linux-x64@0.25.10': optional: true - '@esbuild/netbsd-arm64@0.25.9': + '@esbuild/netbsd-arm64@0.25.10': optional: true - '@esbuild/netbsd-x64@0.25.9': + '@esbuild/netbsd-x64@0.25.10': optional: true - '@esbuild/openbsd-arm64@0.25.9': + '@esbuild/openbsd-arm64@0.25.10': optional: true - '@esbuild/openbsd-x64@0.25.9': + '@esbuild/openbsd-x64@0.25.10': optional: true - '@esbuild/openharmony-arm64@0.25.9': + '@esbuild/openharmony-arm64@0.25.10': optional: true - '@esbuild/sunos-x64@0.25.9': + '@esbuild/sunos-x64@0.25.10': optional: true - '@esbuild/win32-arm64@0.25.9': + '@esbuild/win32-arm64@0.25.10': optional: true - '@esbuild/win32-ia32@0.25.9': + '@esbuild/win32-ia32@0.25.10': optional: true - '@esbuild/win32-x64@0.25.9': + '@esbuild/win32-x64@0.25.10': optional: true - '@eslint-community/eslint-utils@4.8.0(eslint@9.34.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -4121,21 +4149,23 @@ snapshots: '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.1': {} + '@eslint/config-helpers@0.4.0': + dependencies: + '@eslint/core': 0.16.0 - '@eslint/core@0.15.2': + '@eslint/core@0.16.0': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1 + debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -4146,13 +4176,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.34.0': {} + '@eslint/js@9.37.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.5': + '@eslint/plugin-kit@0.4.0': dependencies: - '@eslint/core': 0.15.2 + '@eslint/core': 0.16.0 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -4179,7 +4209,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4192,14 +4222,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.18.1) + jest-config: 29.7.0(@types/node@22.18.10) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4224,7 +4254,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4242,7 +4272,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.18.1 + '@types/node': 22.18.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4263,8 +4293,8 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.30 - '@types/node': 22.18.1 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 22.18.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4291,7 +4321,7 @@ snapshots: '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -4311,9 +4341,9 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -4334,38 +4364,38 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.18.1 + '@types/node': 22.18.10 '@types/yargs': 17.0.33 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lit/react@1.0.8(@types/react@19.1.12)': + '@lit/react@1.0.8(@types/react@19.2.2)': dependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.2 - '@mdx-js/react@3.1.0(@types/react@19.1.12)(react@19.1.1)': + '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.12 - react: 19.1.1 + '@types/react': 19.2.2 + react: 19.2.0 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -4441,16 +4471,18 @@ snapshots: '@puppeteer/browsers@2.6.1': dependencies: - debug: 4.4.1 + debug: 4.4.3 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.2 - tar-fs: 3.1.0 + semver: 7.7.3 + tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: + - bare-abort-controller - bare-buffer + - react-native-b4a - supports-color '@rollup/plugin-image@3.0.3': @@ -4464,91 +4496,94 @@ snapshots: estree-walker: 2.0.2 picomatch: 4.0.3 - '@rollup/rollup-android-arm-eabi@4.50.0': + '@rollup/rollup-android-arm-eabi@4.52.4': optional: true - '@rollup/rollup-android-arm64@4.50.0': + '@rollup/rollup-android-arm64@4.52.4': optional: true '@rollup/rollup-darwin-arm64@4.34.9': optional: true - '@rollup/rollup-darwin-arm64@4.50.0': + '@rollup/rollup-darwin-arm64@4.52.4': optional: true '@rollup/rollup-darwin-x64@4.34.9': optional: true - '@rollup/rollup-darwin-x64@4.50.0': + '@rollup/rollup-darwin-x64@4.52.4': optional: true - '@rollup/rollup-freebsd-arm64@4.50.0': + '@rollup/rollup-freebsd-arm64@4.52.4': optional: true - '@rollup/rollup-freebsd-x64@4.50.0': + '@rollup/rollup-freebsd-x64@4.52.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.50.0': + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.50.0': + '@rollup/rollup-linux-arm-musleabihf@4.52.4': optional: true '@rollup/rollup-linux-arm64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-arm64-gnu@4.50.0': + '@rollup/rollup-linux-arm64-gnu@4.52.4': optional: true '@rollup/rollup-linux-arm64-musl@4.34.9': optional: true - '@rollup/rollup-linux-arm64-musl@4.50.0': + '@rollup/rollup-linux-arm64-musl@4.52.4': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.50.0': + '@rollup/rollup-linux-loong64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.50.0': + '@rollup/rollup-linux-ppc64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.50.0': + '@rollup/rollup-linux-riscv64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.50.0': + '@rollup/rollup-linux-riscv64-musl@4.52.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.50.0': + '@rollup/rollup-linux-s390x-gnu@4.52.4': optional: true '@rollup/rollup-linux-x64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-x64-gnu@4.50.0': + '@rollup/rollup-linux-x64-gnu@4.52.4': optional: true '@rollup/rollup-linux-x64-musl@4.34.9': optional: true - '@rollup/rollup-linux-x64-musl@4.50.0': + '@rollup/rollup-linux-x64-musl@4.52.4': optional: true - '@rollup/rollup-openharmony-arm64@4.50.0': + '@rollup/rollup-openharmony-arm64@4.52.4': optional: true '@rollup/rollup-win32-arm64-msvc@4.34.9': optional: true - '@rollup/rollup-win32-arm64-msvc@4.50.0': + '@rollup/rollup-win32-arm64-msvc@4.52.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.50.0': + '@rollup/rollup-win32-ia32-msvc@4.52.4': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.4': optional: true '@rollup/rollup-win32-x64-msvc@4.34.9': optional: true - '@rollup/rollup-win32-x64-msvc@4.50.0': + '@rollup/rollup-win32-x64-msvc@4.52.4': optional: true '@sinclair/typebox@0.27.8': {} @@ -4561,7 +4596,7 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@stencil/core@4.36.3': + '@stencil/core@4.38.1': optionalDependencies: '@rollup/rollup-darwin-arm64': 4.34.9 '@rollup/rollup-darwin-x64': 4.34.9 @@ -4572,38 +4607,38 @@ snapshots: '@rollup/rollup-win32-arm64-msvc': 4.34.9 '@rollup/rollup-win32-x64-msvc': 4.34.9 - '@stencil/react-output-target@1.2.0(@stencil/core@4.36.3)(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@stencil/react-output-target@1.2.0(@stencil/core@4.38.1)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@lit/react': 1.0.8(@types/react@19.1.12) - '@stencil/core': 4.36.3 - html-react-parser: 5.2.6(@types/react@19.1.12)(react@19.1.1) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) + '@lit/react': 1.0.8(@types/react@19.2.2) + '@stencil/core': 4.38.1 + html-react-parser: 5.2.6(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) react-style-stringify: 1.2.0 ts-morph: 22.0.0 transitivePeerDependencies: - '@types/react' - '@stencil/sass@3.2.2(@stencil/core@4.36.3)': + '@stencil/sass@3.2.2(@stencil/core@4.38.1)': dependencies: - '@stencil/core': 4.36.3 - sass-embedded: 1.92.0 + '@stencil/core': 4.38.1 + sass-embedded: 1.93.2 - '@stencil/store@2.0.16(@stencil/core@4.36.3)': + '@stencil/store@2.0.16(@stencil/core@4.38.1)': dependencies: - '@stencil/core': 4.36.3 + '@stencil/core': 4.38.1 - '@stencil/storybook-plugin@0.4.2(@stencil/core@4.36.3)(esbuild@0.25.9)(preact@10.27.1)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))(typescript@5.9.2)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))': + '@stencil/storybook-plugin@0.4.2(@stencil/core@4.38.1)(esbuild@0.25.10)(preact@10.27.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))': dependencies: - '@stencil/core': 4.36.3 + '@stencil/core': 4.38.1 '@storybook/addon-actions': 9.0.8 - '@storybook/builder-vite': 9.1.4(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + '@storybook/builder-vite': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) '@storybook/global': 5.0.0 - '@storybook/html': 9.1.4(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))) - preact-render-to-string: 6.6.1(preact@10.27.1) - react-docgen-typescript: 2.4.0(typescript@5.9.2) - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) - unplugin-stencil: 0.3.5(@stencil/core@4.36.3)(esbuild@0.25.9)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + '@storybook/html': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + preact-render-to-string: 6.6.2(preact@10.27.2) + react-docgen-typescript: 2.4.0(typescript@5.9.3) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) + unplugin-stencil: 0.3.5(@stencil/core@4.38.1)(esbuild@0.25.10)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) transitivePeerDependencies: - '@nuxt/kit' - '@nuxt/schema' @@ -4616,61 +4651,69 @@ snapshots: '@storybook/addon-actions@9.0.8': {} - '@storybook/addon-docs@9.1.7(@types/react@19.1.12)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))': + '@storybook/addon-docs@9.1.7(@types/react@19.2.2)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.1.12)(react@19.1.1) - '@storybook/csf-plugin': 9.1.7(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))) - '@storybook/icons': 1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@storybook/react-dom-shim': 9.1.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) + '@storybook/csf-plugin': 9.1.7(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@storybook/react-dom-shim': 9.1.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-links@9.1.7(react@19.1.1)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))': + '@storybook/addon-links@9.1.7(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) optionalDependencies: - react: 19.1.1 + react: 19.2.0 - '@storybook/builder-vite@9.1.4(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))': + '@storybook/builder-vite@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))': dependencies: - '@storybook/csf-plugin': 9.1.4(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))) - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + '@storybook/csf-plugin': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) ts-dedent: 2.2.0 - vite: 7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0) + vite: 7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2) - '@storybook/csf-plugin@9.1.4(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))': + '@storybook/csf-plugin@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))': dependencies: - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) unplugin: 1.16.1 - '@storybook/csf-plugin@9.1.7(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))': + '@storybook/csf-plugin@9.1.7(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))': dependencies: - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) unplugin: 1.16.1 '@storybook/global@5.0.0': {} - '@storybook/html@9.1.4(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))': + '@storybook/html-vite@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))': + dependencies: + '@storybook/builder-vite': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) + '@storybook/html': 9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) + transitivePeerDependencies: + - vite + + '@storybook/html@9.1.10(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) ts-dedent: 2.2.0 - '@storybook/icons@1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@storybook/icons@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) - '@storybook/react-dom-shim@9.1.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))': + '@storybook/react-dom-shim@9.1.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))': dependencies: - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) '@tailwindcss/cli@4.0.17': dependencies: @@ -4686,13 +4729,13 @@ snapshots: '@tailwindcss/node@4.0.17': dependencies: enhanced-resolve: 5.18.3 - jiti: 2.5.1 + jiti: 2.6.1 tailwindcss: 4.0.17 '@tailwindcss/node@4.1.3': dependencies: enhanced-resolve: 5.18.3 - jiti: 2.5.1 + jiti: 2.6.1 lightningcss: 1.29.2 tailwindcss: 4.1.3 @@ -4801,7 +4844,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -4809,7 +4852,7 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.8.0': + '@testing-library/jest-dom@6.9.1': dependencies: '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 @@ -4837,24 +4880,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/chai@5.2.2': dependencies: @@ -4866,7 +4909,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 '@types/istanbul-lib-coverage@2.0.6': {} @@ -4885,7 +4928,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -4893,15 +4936,15 @@ snapshots: '@types/mdx@2.0.13': {} - '@types/node@22.18.1': + '@types/node@22.18.10': dependencies: undici-types: 6.21.0 '@types/qrcode@1.5.5': dependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 - '@types/react@19.1.12': + '@types/react@19.2.2': dependencies: csstype: 3.1.3 @@ -4917,100 +4960,100 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 optional: true - '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/type-utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.42.0 - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.0 + eslint: 9.37.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.1 - eslint: 9.34.0(jiti@2.5.1) - typescript: 5.9.2 + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3 + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 - debug: 4.4.1 - typescript: 5.9.2 + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + debug: 4.4.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.42.0': + '@typescript-eslint/scope-manager@8.46.0': dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 - '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)': dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1 - eslint: 9.34.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.37.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.42.0': {} + '@typescript-eslint/types@8.46.0': {} - '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.42.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.1 + '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.34.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) - typescript: 5.9.2 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.42.0': + '@typescript-eslint/visitor-keys@8.46.0': dependencies: - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.46.0 eslint-visitor-keys: 4.2.1 '@vitest/expect@3.2.4': @@ -5021,13 +5064,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0))': + '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.18 + magic-string: 0.30.19 optionalDependencies: - vite: 7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0) + vite: 7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -5035,7 +5078,7 @@ snapshots: '@vitest/spy@3.2.4': dependencies: - tinyspy: 4.0.3 + tinyspy: 4.0.4 '@vitest/utils@3.2.4': dependencies: @@ -5053,7 +5096,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -5109,15 +5152,15 @@ snapshots: asynckit@0.4.0: {} - b4a@1.6.7: {} + b4a@1.7.3: {} - babel-jest@29.7.0(@babel/core@7.28.3): + babel-jest@29.7.0(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.28.3) + babel-preset-jest: 29.6.3(@babel/core@7.28.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -5137,45 +5180,49 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.3): - dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.3) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.3) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.3) - - babel-preset-jest@29.6.3(@babel/core@7.28.3): - dependencies: - '@babel/core': 7.28.3 + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) + + babel-preset-jest@29.6.3(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.3) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) balanced-match@1.0.2: {} - bare-events@2.6.1: - optional: true + bare-events@2.8.0: {} - bare-fs@4.2.3: + bare-fs@4.4.10: dependencies: - bare-events: 2.6.1 + bare-events: 2.8.0 bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.6.1) + bare-stream: 2.7.0(bare-events@2.8.0) + bare-url: 2.3.0 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a optional: true bare-os@3.6.2: @@ -5186,15 +5233,25 @@ snapshots: bare-os: 3.6.2 optional: true - bare-stream@2.7.0(bare-events@2.6.1): + bare-stream@2.7.0(bare-events@2.8.0): dependencies: - streamx: 2.22.1 + streamx: 2.23.0 optionalDependencies: - bare-events: 2.6.1 + bare-events: 2.8.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-url@2.3.0: + dependencies: + bare-path: 3.0.0 optional: true base64-js@1.5.1: {} + baseline-browser-mapping@2.8.16: {} + basic-ftp@5.0.5: {} better-opn@3.0.2: @@ -5218,12 +5275,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.4: + browserslist@4.26.3: dependencies: - caniuse-lite: 1.0.30001739 - electron-to-chromium: 1.5.214 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.4) + baseline-browser-mapping: 2.8.16 + caniuse-lite: 1.0.30001750 + electron-to-chromium: 1.5.234 + node-releases: 2.0.23 + update-browserslist-db: 1.1.3(browserslist@4.26.3) bser@2.1.1: dependencies: @@ -5253,12 +5311,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.25.4 - caniuse-lite: 1.0.30001739 + browserslist: 4.26.3 + caniuse-lite: 1.0.30001750 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001739: {} + caniuse-lite@1.0.30001750: {} chai@5.3.3: dependencies: @@ -5348,22 +5406,22 @@ snapshots: convert-source-map@2.0.0: {} - cosmiconfig@9.0.0(typescript@5.9.2): + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - create-jest@29.7.0(@types/node@22.18.1): + create-jest@29.7.0(@types/node@22.18.10): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.18.1) + jest-config: 29.7.0(@types/node@22.18.10) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5378,7 +5436,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-declaration-sorter@7.2.0(postcss@8.5.6): + css-declaration-sorter@7.3.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -5408,8 +5466,8 @@ snapshots: cssnano-preset-default@7.0.9(postcss@8.5.6): dependencies: - browserslist: 4.25.4 - css-declaration-sorter: 7.2.0(postcss@8.5.6) + browserslist: 4.26.3 + css-declaration-sorter: 7.3.0(postcss@8.5.6) cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 postcss-calc: 10.1.1(postcss@8.5.6) @@ -5468,7 +5526,7 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 - debug@4.4.1: + debug@4.4.3: dependencies: ms: 2.1.3 @@ -5498,7 +5556,7 @@ snapshots: detect-libc@1.0.3: {} - detect-libc@2.0.4: {} + detect-libc@2.1.2: {} detect-newline@3.1.0: {} @@ -5544,7 +5602,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.214: {} + electron-to-chromium@1.5.234: {} emittery@0.13.1: {} @@ -5557,7 +5615,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.3 + tapable: 2.3.0 entities@4.5.0: {} @@ -5565,7 +5623,7 @@ snapshots: env-paths@2.2.1: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -5584,41 +5642,41 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild-register@3.6.0(esbuild@0.25.9): + esbuild-register@3.6.0(esbuild@0.25.10): dependencies: - debug: 4.4.1 - esbuild: 0.25.9 + debug: 4.4.3 + esbuild: 0.25.10 transitivePeerDependencies: - supports-color - esbuild@0.25.9: + esbuild@0.25.10: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.9 - '@esbuild/android-arm': 0.25.9 - '@esbuild/android-arm64': 0.25.9 - '@esbuild/android-x64': 0.25.9 - '@esbuild/darwin-arm64': 0.25.9 - '@esbuild/darwin-x64': 0.25.9 - '@esbuild/freebsd-arm64': 0.25.9 - '@esbuild/freebsd-x64': 0.25.9 - '@esbuild/linux-arm': 0.25.9 - '@esbuild/linux-arm64': 0.25.9 - '@esbuild/linux-ia32': 0.25.9 - '@esbuild/linux-loong64': 0.25.9 - '@esbuild/linux-mips64el': 0.25.9 - '@esbuild/linux-ppc64': 0.25.9 - '@esbuild/linux-riscv64': 0.25.9 - '@esbuild/linux-s390x': 0.25.9 - '@esbuild/linux-x64': 0.25.9 - '@esbuild/netbsd-arm64': 0.25.9 - '@esbuild/netbsd-x64': 0.25.9 - '@esbuild/openbsd-arm64': 0.25.9 - '@esbuild/openbsd-x64': 0.25.9 - '@esbuild/openharmony-arm64': 0.25.9 - '@esbuild/sunos-x64': 0.25.9 - '@esbuild/win32-arm64': 0.25.9 - '@esbuild/win32-ia32': 0.25.9 - '@esbuild/win32-x64': 0.25.9 + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 escalade@3.2.0: {} @@ -5634,15 +5692,15 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-plugin-simple-import-sort@12.1.1(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) - eslint-plugin-storybook@9.1.7(eslint@9.34.0(jiti@2.5.1))(storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)))(typescript@5.9.2): + eslint-plugin-storybook@9.1.7(eslint@9.37.0(jiti@2.6.1))(storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) - storybook: 9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + storybook: 9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) transitivePeerDependencies: - supports-color - typescript @@ -5656,16 +5714,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.34.0(jiti@2.5.1): + eslint@9.37.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.1 - '@eslint/core': 0.15.2 + '@eslint/config-helpers': 0.4.0 + '@eslint/core': 0.16.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.34.0 - '@eslint/plugin-kit': 0.3.5 + '@eslint/js': 9.37.0 + '@eslint/plugin-kit': 0.4.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -5674,7 +5732,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -5694,7 +5752,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.5.1 + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -5728,6 +5786,12 @@ snapshots: eventemitter3@4.0.7: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.8.0 + transitivePeerDependencies: + - bare-abort-controller + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -5752,7 +5816,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -5825,7 +5889,7 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - fs-extra@11.3.1: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -5868,7 +5932,7 @@ snapshots: get-stream@6.0.1: {} - get-tsconfig@4.10.1: + get-tsconfig@4.12.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -5876,7 +5940,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -5939,15 +6003,15 @@ snapshots: html-escaper@2.0.2: {} - html-react-parser@5.2.6(@types/react@19.1.12)(react@19.1.1): + html-react-parser@5.2.6(@types/react@19.2.2)(react@19.2.0): dependencies: domhandler: 5.0.3 html-dom-parser: 5.1.1 - react: 19.1.1 + react: 19.2.0 react-property: 2.0.2 style-to-js: 1.1.17 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.2 htmlparser2@10.0.0: dependencies: @@ -5960,28 +6024,28 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -5997,7 +6061,7 @@ snapshots: ignore@7.0.5: {} - immutable@5.1.3: {} + immutable@5.1.4: {} import-fresh@3.3.1: dependencies: @@ -6062,8 +6126,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -6072,11 +6136,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -6088,7 +6152,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6111,7 +6175,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.0 @@ -6131,16 +6195,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.18.1): + jest-cli@29.7.0(@types/node@22.18.10): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.18.1) + create-jest: 29.7.0(@types/node@22.18.10) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.18.1) + jest-config: 29.7.0(@types/node@22.18.10) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6150,12 +6214,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.18.1): + jest-config@29.7.0(@types/node@22.18.10): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.3) + babel-jest: 29.7.0(@babel/core@7.28.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6175,7 +6239,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6204,7 +6268,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6214,7 +6278,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.18.1 + '@types/node': 22.18.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6253,7 +6317,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6288,7 +6352,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6316,7 +6380,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -6336,15 +6400,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/generator': 7.28.3 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) - '@babel/types': 7.28.2 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.3) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6355,14 +6419,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6381,7 +6445,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.18.1 + '@types/node': 22.18.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6390,24 +6454,24 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.18.1): + jest@29.7.0(@types/node@22.18.10): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.18.1) + jest-cli: 29.7.0(@types/node@22.18.10) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jiti@2.5.1: {} + jiti@2.6.1: {} js-tokens@4.0.0: {} @@ -6432,7 +6496,7 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 7.3.0 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -6513,7 +6577,7 @@ snapshots: lightningcss@1.29.2: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.2 optionalDependencies: lightningcss-darwin-arm64: 1.29.2 lightningcss-darwin-x64: 1.29.2 @@ -6564,13 +6628,13 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.18: + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 makeerror@1.0.12: dependencies: @@ -6638,7 +6702,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.19: {} + node-releases@2.0.23: {} normalize-path@3.0.0: {} @@ -6650,7 +6714,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.21: {} + nwsapi@2.2.22: {} once@1.4.0: dependencies: @@ -6708,7 +6772,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -6729,7 +6793,7 @@ snapshots: parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6789,7 +6853,7 @@ snapshots: postcss-colormin@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -6806,7 +6870,7 @@ snapshots: postcss-convert-values@7.0.7(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -6827,11 +6891,11 @@ snapshots: dependencies: postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.5.1 + jiti: 2.6.1 postcss: 8.5.6 postcss-merge-longhand@7.0.5(postcss@8.5.6): @@ -6842,7 +6906,7 @@ snapshots: postcss-merge-rules@7.0.6(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 caniuse-api: 3.0.0 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 @@ -6862,7 +6926,7 @@ snapshots: postcss-minify-params@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -6904,7 +6968,7 @@ snapshots: postcss-normalize-unicode@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -6926,7 +6990,7 @@ snapshots: postcss-reduce-initial@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 caniuse-api: 3.0.0 postcss: 8.5.6 @@ -6964,11 +7028,11 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact-render-to-string@6.6.1(preact@10.27.1): + preact-render-to-string@6.6.2(preact@10.27.2): dependencies: - preact: 10.27.1 + preact: 10.27.2 - preact@10.27.1: {} + preact@10.27.2: {} prelude-ls@1.2.1: {} @@ -6996,7 +7060,7 @@ snapshots: proxy-agent@6.5.0: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -7023,27 +7087,31 @@ snapshots: dependencies: '@puppeteer/browsers': 2.6.1 chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) - debug: 4.4.1 + debug: 4.4.3 devtools-protocol: 0.0.1367902 typed-query-selector: 2.12.0 ws: 8.18.3 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil + - react-native-b4a - supports-color - utf-8-validate - puppeteer@23.11.1(typescript@5.9.2): + puppeteer@23.11.1(typescript@5.9.3): dependencies: '@puppeteer/browsers': 2.6.1 chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) devtools-protocol: 0.0.1367902 puppeteer-core: 23.11.1 typed-query-selector: 2.12.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil + - react-native-b4a - supports-color - typescript - utf-8-validate @@ -7062,14 +7130,14 @@ snapshots: queue-microtask@1.2.3: {} - react-docgen-typescript@2.4.0(typescript@5.9.2): + react-docgen-typescript@2.4.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - react-dom@19.1.1(react@19.1.1): + react-dom@19.2.0(react@19.2.0): dependencies: - react: 19.1.1 - scheduler: 0.26.0 + react: 19.2.0 + scheduler: 0.27.0 react-is@17.0.2: {} @@ -7081,7 +7149,7 @@ snapshots: dependencies: '@emotion/unitless': 0.10.0 - react@19.1.1: {} + react@19.2.0: {} readdirp@3.6.0: dependencies: @@ -7143,31 +7211,32 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.50.0: + rollup@4.52.4: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.0 - '@rollup/rollup-android-arm64': 4.50.0 - '@rollup/rollup-darwin-arm64': 4.50.0 - '@rollup/rollup-darwin-x64': 4.50.0 - '@rollup/rollup-freebsd-arm64': 4.50.0 - '@rollup/rollup-freebsd-x64': 4.50.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.0 - '@rollup/rollup-linux-arm-musleabihf': 4.50.0 - '@rollup/rollup-linux-arm64-gnu': 4.50.0 - '@rollup/rollup-linux-arm64-musl': 4.50.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.50.0 - '@rollup/rollup-linux-ppc64-gnu': 4.50.0 - '@rollup/rollup-linux-riscv64-gnu': 4.50.0 - '@rollup/rollup-linux-riscv64-musl': 4.50.0 - '@rollup/rollup-linux-s390x-gnu': 4.50.0 - '@rollup/rollup-linux-x64-gnu': 4.50.0 - '@rollup/rollup-linux-x64-musl': 4.50.0 - '@rollup/rollup-openharmony-arm64': 4.50.0 - '@rollup/rollup-win32-arm64-msvc': 4.50.0 - '@rollup/rollup-win32-ia32-msvc': 4.50.0 - '@rollup/rollup-win32-x64-msvc': 4.50.0 + '@rollup/rollup-android-arm-eabi': 4.52.4 + '@rollup/rollup-android-arm64': 4.52.4 + '@rollup/rollup-darwin-arm64': 4.52.4 + '@rollup/rollup-darwin-x64': 4.52.4 + '@rollup/rollup-freebsd-arm64': 4.52.4 + '@rollup/rollup-freebsd-x64': 4.52.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 + '@rollup/rollup-linux-arm-musleabihf': 4.52.4 + '@rollup/rollup-linux-arm64-gnu': 4.52.4 + '@rollup/rollup-linux-arm64-musl': 4.52.4 + '@rollup/rollup-linux-loong64-gnu': 4.52.4 + '@rollup/rollup-linux-ppc64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-musl': 4.52.4 + '@rollup/rollup-linux-s390x-gnu': 4.52.4 + '@rollup/rollup-linux-x64-gnu': 4.52.4 + '@rollup/rollup-linux-x64-musl': 4.52.4 + '@rollup/rollup-openharmony-arm64': 4.52.4 + '@rollup/rollup-win32-arm64-msvc': 4.52.4 + '@rollup/rollup-win32-ia32-msvc': 4.52.4 + '@rollup/rollup-win32-x64-gnu': 4.52.4 + '@rollup/rollup-win32-x64-msvc': 4.52.4 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -7182,98 +7251,98 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.92.0: + sass-embedded-all-unknown@1.93.2: dependencies: - sass: 1.92.0 + sass: 1.93.2 optional: true - sass-embedded-android-arm64@1.92.0: + sass-embedded-android-arm64@1.93.2: optional: true - sass-embedded-android-arm@1.92.0: + sass-embedded-android-arm@1.93.2: optional: true - sass-embedded-android-riscv64@1.92.0: + sass-embedded-android-riscv64@1.93.2: optional: true - sass-embedded-android-x64@1.92.0: + sass-embedded-android-x64@1.93.2: optional: true - sass-embedded-darwin-arm64@1.92.0: + sass-embedded-darwin-arm64@1.93.2: optional: true - sass-embedded-darwin-x64@1.92.0: + sass-embedded-darwin-x64@1.93.2: optional: true - sass-embedded-linux-arm64@1.92.0: + sass-embedded-linux-arm64@1.93.2: optional: true - sass-embedded-linux-arm@1.92.0: + sass-embedded-linux-arm@1.93.2: optional: true - sass-embedded-linux-musl-arm64@1.92.0: + sass-embedded-linux-musl-arm64@1.93.2: optional: true - sass-embedded-linux-musl-arm@1.92.0: + sass-embedded-linux-musl-arm@1.93.2: optional: true - sass-embedded-linux-musl-riscv64@1.92.0: + sass-embedded-linux-musl-riscv64@1.93.2: optional: true - sass-embedded-linux-musl-x64@1.92.0: + sass-embedded-linux-musl-x64@1.93.2: optional: true - sass-embedded-linux-riscv64@1.92.0: + sass-embedded-linux-riscv64@1.93.2: optional: true - sass-embedded-linux-x64@1.92.0: + sass-embedded-linux-x64@1.93.2: optional: true - sass-embedded-unknown-all@1.92.0: + sass-embedded-unknown-all@1.93.2: dependencies: - sass: 1.92.0 + sass: 1.93.2 optional: true - sass-embedded-win32-arm64@1.92.0: + sass-embedded-win32-arm64@1.93.2: optional: true - sass-embedded-win32-x64@1.92.0: + sass-embedded-win32-x64@1.93.2: optional: true - sass-embedded@1.92.0: + sass-embedded@1.93.2: dependencies: - '@bufbuild/protobuf': 2.7.0 + '@bufbuild/protobuf': 2.9.0 buffer-builder: 0.2.0 colorjs.io: 0.5.2 - immutable: 5.1.3 + immutable: 5.1.4 rxjs: 7.8.2 supports-color: 8.1.1 sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.92.0 - sass-embedded-android-arm: 1.92.0 - sass-embedded-android-arm64: 1.92.0 - sass-embedded-android-riscv64: 1.92.0 - sass-embedded-android-x64: 1.92.0 - sass-embedded-darwin-arm64: 1.92.0 - sass-embedded-darwin-x64: 1.92.0 - sass-embedded-linux-arm: 1.92.0 - sass-embedded-linux-arm64: 1.92.0 - sass-embedded-linux-musl-arm: 1.92.0 - sass-embedded-linux-musl-arm64: 1.92.0 - sass-embedded-linux-musl-riscv64: 1.92.0 - sass-embedded-linux-musl-x64: 1.92.0 - sass-embedded-linux-riscv64: 1.92.0 - sass-embedded-linux-x64: 1.92.0 - sass-embedded-unknown-all: 1.92.0 - sass-embedded-win32-arm64: 1.92.0 - sass-embedded-win32-x64: 1.92.0 - - sass@1.92.0: + sass-embedded-all-unknown: 1.93.2 + sass-embedded-android-arm: 1.93.2 + sass-embedded-android-arm64: 1.93.2 + sass-embedded-android-riscv64: 1.93.2 + sass-embedded-android-x64: 1.93.2 + sass-embedded-darwin-arm64: 1.93.2 + sass-embedded-darwin-x64: 1.93.2 + sass-embedded-linux-arm: 1.93.2 + sass-embedded-linux-arm64: 1.93.2 + sass-embedded-linux-musl-arm: 1.93.2 + sass-embedded-linux-musl-arm64: 1.93.2 + sass-embedded-linux-musl-riscv64: 1.93.2 + sass-embedded-linux-musl-x64: 1.93.2 + sass-embedded-linux-riscv64: 1.93.2 + sass-embedded-linux-x64: 1.93.2 + sass-embedded-unknown-all: 1.93.2 + sass-embedded-win32-arm64: 1.93.2 + sass-embedded-win32-x64: 1.93.2 + + sass@1.93.2: dependencies: chokidar: 4.0.3 - immutable: 5.1.3 + immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.1 @@ -7285,11 +7354,11 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.26.0: {} + scheduler@0.27.0: {} semver@6.3.1: {} - semver@7.7.2: {} + semver@7.7.3: {} set-blocking@2.0.0: {} @@ -7310,7 +7379,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -7337,38 +7406,38 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 - stencil-tailwind-plugin@2.0.5(@tailwindcss/postcss@4.1.3)(jiti@2.5.1)(tailwindcss@4.0.15)(typescript@5.9.2): + stencil-tailwind-plugin@2.0.5(@tailwindcss/postcss@4.1.3)(jiti@2.6.1)(tailwindcss@4.0.15)(typescript@5.9.3): dependencies: '@tailwindcss/postcss': 4.1.3 chalk: 4.1.2 cssnano: 7.1.1(postcss@8.5.6) - fs-extra: 11.3.1 + fs-extra: 11.3.2 p-queue: 6.6.2 postcss: 8.5.6 postcss-combine-duplicated-selectors: https://codeload.github.com/poimen/postcss-combine-duplicated-selectors/tar.gz/bdf9223342b6b1da8a91d6727b6e4cf719f7def7(postcss@8.5.6) postcss-combine-media-query: 1.0.1 postcss-discard-comments: 7.0.4(postcss@8.5.6) - postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6) tailwindcss: 4.0.15 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - jiti - tsx - yaml - storybook@9.1.8(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)): + storybook@9.1.10(@testing-library/dom@10.4.1)(prettier@3.2.5)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)): dependencies: '@storybook/global': 5.0.0 - '@testing-library/jest-dom': 6.8.0 + '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)) + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)) '@vitest/spy': 3.2.4 better-opn: 3.0.2 - esbuild: 0.25.9 - esbuild-register: 3.6.0(esbuild@0.25.9) + esbuild: 0.25.10 + esbuild-register: 3.6.0(esbuild@0.25.10) recast: 0.23.11 - semver: 7.7.2 + semver: 7.7.3 ws: 8.18.3 optionalDependencies: prettier: 3.2.5 @@ -7380,12 +7449,14 @@ snapshots: - utf-8-validate - vite - streamx@2.22.1: + streamx@2.23.0: dependencies: + events-universal: 1.0.1 fast-fifo: 1.3.2 text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.6.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a string-length@4.0.2: dependencies: @@ -7422,7 +7493,7 @@ snapshots: stylehacks@7.0.6(postcss@8.5.6): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 postcss: 8.5.6 postcss-selector-parser: 7.1.0 @@ -7460,23 +7531,28 @@ snapshots: tailwindcss@4.1.3: {} - tapable@2.2.3: {} + tapable@2.3.0: {} - tar-fs@3.1.0: + tar-fs@3.1.1: dependencies: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.2.3 + bare-fs: 4.4.10 bare-path: 3.0.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer + - react-native-b4a tar-stream@3.1.7: dependencies: - b4a: 1.6.7 + b4a: 1.7.3 fast-fifo: 1.3.2 - streamx: 2.22.1 + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a test-exclude@6.0.0: dependencies: @@ -7486,20 +7562,22 @@ snapshots: text-decoder@1.2.3: dependencies: - b4a: 1.6.7 + b4a: 1.7.3 + transitivePeerDependencies: + - react-native-b4a through@2.3.8: {} tiny-invariant@1.3.3: {} - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinyrainbow@2.0.0: {} - tinyspy@4.0.3: {} + tinyspy@4.0.4: {} tmpl@1.0.5: {} @@ -7518,9 +7596,9 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 ts-dedent@2.2.0: {} @@ -7533,7 +7611,7 @@ snapshots: dependencies: chokidar: 3.6.0 commander: 9.5.0 - get-tsconfig: 4.10.1 + get-tsconfig: 4.12.0 globby: 11.1.0 mylas: 2.1.13 normalize-path: 3.0.0 @@ -7551,7 +7629,7 @@ snapshots: typed-query-selector@2.12.0: {} - typescript@5.9.2: {} + typescript@5.9.3: {} ufo@1.6.1: {} @@ -7566,14 +7644,14 @@ snapshots: universalify@2.0.1: {} - unplugin-stencil@0.3.5(@stencil/core@4.36.3)(esbuild@0.25.9)(vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0)): + unplugin-stencil@0.3.5(@stencil/core@4.38.1)(esbuild@0.25.10)(vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2)): dependencies: - '@stencil/core': 4.36.3 + '@stencil/core': 4.38.1 mlly: 1.8.0 unplugin: 2.3.10 optionalDependencies: - esbuild: 0.25.9 - vite: 7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0) + esbuild: 0.25.10 + vite: 7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2) unplugin@1.16.1: dependencies: @@ -7587,9 +7665,9 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.3(browserslist@4.25.4): + update-browserslist-db@1.1.3(browserslist@4.26.3): dependencies: - browserslist: 4.25.4 + browserslist: 4.26.3 escalade: 3.2.0 picocolors: 1.1.1 @@ -7606,27 +7684,27 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 varint@6.0.0: {} - vite@7.1.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.29.2)(sass-embedded@1.92.0)(sass@1.92.0): + vite@7.1.9(@types/node@22.18.10)(jiti@2.6.1)(lightningcss@1.29.2)(sass-embedded@1.93.2)(sass@1.93.2): dependencies: - esbuild: 0.25.9 + esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.0 - tinyglobby: 0.2.14 + rollup: 4.52.4 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.18.1 + '@types/node': 22.18.10 fsevents: 2.3.3 - jiti: 2.5.1 + jiti: 2.6.1 lightningcss: 1.29.2 - sass: 1.92.0 - sass-embedded: 1.92.0 + sass: 1.93.2 + sass-embedded: 1.93.2 w3c-xmlserializer@4.0.0: dependencies: From cb5c0270e5f9bc915a71cc1c117f2be5f043808d Mon Sep 17 00:00:00 2001 From: Iulia Cimpeanu <72752718+iuliacimpeanu@users.noreply.github.com> Date: Wed, 15 Oct 2025 12:02:17 +0300 Subject: [PATCH 2/4] Refactor components in transactions table (#243) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated styles * Removed unused styles * Removed unused styles * Updated styles * Updated CHANGELOG.md * Updated icons * Removed unused icons * Updated styles * Updated styles * Updated styles * Updated styles * Updated shards arrow styles * Added icons to replace Fontawesome * Updated styles * Fixed tests * Updated styles on transactions table * Refactored FontAwesome icons * Fixed test * Updated scrollbar styles * Fixes after review. * Removed FontAwesome packages * Updated icons * Fixed tests * Fixes * Fixes. * Fixes * Refactored transaction-age * Updated changelog * Fixed path * Removed transaction-direction-badge component not used * Refactored transaction-hash comp * Refactored components from transactions-table * Refactored classNames * Updated changelog * Fixed tests * Fixed tests * Updated TransactionIcon * Updated TransactionIcon * Updated default icon * Fixes * Fixes --------- Co-authored-by: Miro Mărgineanu --- CHANGELOG.md | 2 + package.json | 2 +- src/common/Icon/icon.types.ts | 1 - src/components.d.ts | 181 +-------------- .../TransactionAccount/TransactionAccount.tsx | 52 +++++ .../TransactionAccountName.tsx | 38 ++++ .../TransactionAccountName/index.ts | 1 + .../tests/transaction-account-name.spec.tsx | 116 ++++++++++ .../TransactionAccount/components/index.ts | 1 + .../components/TransactionAccount/index.ts | 1 + .../tests/transaction-account.spec.tsx | 112 ++++++++++ .../TransactionAge/TransactionAge.tsx | 34 +++ .../components/TransactionAge/index.ts | 1 + .../tests/transaction-age.spec.tsx | 40 ++++ .../TransactionHash/TransactionHash.tsx | 43 ++++ .../components/TransactionHash/index.ts | 1 + .../tests/transaction-hash.spec.tsx | 143 ++++++++++++ .../TransactionIcon/TransactionIcon.tsx | 36 +++ .../components/TransactionIcon/index.ts | 1 + .../transactionIcon.helpers.ts | 15 ++ .../TransactionMethod/TransactionMethod.tsx | 32 +++ .../components/TransactionMethod/index.ts | 1 + .../tests/transaction-method.spec.tsx | 117 ++++++++++ .../TransactionShards/TransactionShards.tsx | 41 ++++ .../components/TransactionShards/index.ts | 1 + .../tests/transaction-shards.spec.tsx | 101 +++++++++ .../TransactionValue/TransactionValue.tsx | 77 +++++++ .../components/TransactionValue/index.ts | 1 + .../tests/transaction-value.spec.tsx | 195 ++++++++++++++++ .../transactionValue.styles.ts} | 0 .../transactions-table/components/index.ts | 7 + .../tests/transaction-account-name.spec.ts | 107 --------- .../transaction-account-name.scss | 1 - .../transaction-account-name.tsx | 40 ---- .../tests/transaction-account.spec.tsx | 85 ------- .../transaction-account.scss | 1 - .../transaction-account.tsx | 54 ----- .../tests/transaction-age.spec.ts | 71 ------ .../transaction-age/transaction-age.scss | 1 - .../transaction-age/transaction-age.tsx | 38 ---- .../tests/transaction-direction-badge.spec.ts | 53 ----- .../transaction-direction-badge.scss | 1 - .../transaction-direction-badge.tsx | 30 --- .../tests/transaction-hash.spec.tsx | 142 ------------ .../transaction-hash/transaction-hash.scss | 1 - .../transaction-hash/transaction-hash.tsx | 45 ---- .../transaction-icon/transaction-icon.scss | 1 - .../transaction-icon/transaction-icon.tsx | 36 --- .../tests/transaction-method.spec.ts | 102 --------- .../transaction-method.scss | 2 - .../transaction-method/transaction-method.tsx | 36 --- .../tests/transaction-shards.spec.tsx | 105 --------- .../transaction-shards.scss | 1 - .../transaction-shards/transaction-shards.tsx | 44 ---- .../tests/transaction-value.spec.tsx | 210 ------------------ .../transaction-value/transaction-value.scss | 1 - .../transaction-value/transaction-value.tsx | 80 ------- .../tests/transactions-table.spec.tsx | 21 +- .../transactions-table/transactions-table.tsx | 23 +- 59 files changed, 1232 insertions(+), 1494 deletions(-) create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/TransactionAccount.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/TransactionAccountName.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/tests/transaction-account-name.spec.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/components/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionAccount/tests/transaction-account.spec.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionAge/TransactionAge.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionAge/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionAge/tests/transaction-age.spec.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionHash/TransactionHash.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionHash/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionIcon/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionMethod/TransactionMethod.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionMethod/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionMethod/tests/transaction-method.spec.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionShards/TransactionShards.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionShards/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionShards/tests/transaction-shards.spec.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionValue/TransactionValue.tsx create mode 100644 src/components/controlled/transactions-table/components/TransactionValue/index.ts create mode 100644 src/components/controlled/transactions-table/components/TransactionValue/tests/transaction-value.spec.tsx rename src/components/controlled/transactions-table/components/{transaction-value/transaction-value.styles.ts => TransactionValue/transactionValue.styles.ts} (100%) create mode 100644 src/components/controlled/transactions-table/components/index.ts delete mode 100644 src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/tests/transaction-account-name.spec.ts delete mode 100644 src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-account/tests/transaction-account.spec.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-account/transaction-account.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-account/transaction-account.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-age/tests/transaction-age.spec.ts delete mode 100644 src/components/controlled/transactions-table/components/transaction-age/transaction-age.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-age/transaction-age.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-direction-badge/tests/transaction-direction-badge.spec.ts delete mode 100644 src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-method/tests/transaction-method.spec.ts delete mode 100644 src/components/controlled/transactions-table/components/transaction-method/transaction-method.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-method/transaction-method.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-shards/tests/transaction-shards.spec.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-value/tests/transaction-value.spec.tsx delete mode 100644 src/components/controlled/transactions-table/components/transaction-value/transaction-value.scss delete mode 100644 src/components/controlled/transactions-table/components/transaction-value/transaction-value.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 655ea53b..5a74ca8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Added the Storybook as a live server deployment](https://github.com/multiversx/mx-sdk-dapp-ui/pull/248) +- [Refactor components in transactions table](https://github.com/multiversx/mx-sdk-dapp-ui/pull/243) + ## [[0.0.35](https://github.com/multiversx/mx-sdk-dapp-ui/pull/246)] - 2025-10-10 - [Added passkey provider](https://github.com/multiversx/mx-sdk-dapp-ui/pull/242) diff --git a/package.json b/package.json index b2be7b08..e14b7ab0 100644 --- a/package.json +++ b/package.json @@ -132,4 +132,4 @@ "typescript": "^5.7.3", "vite": "^7.0.6" } -} +} \ No newline at end of file diff --git a/src/common/Icon/icon.types.ts b/src/common/Icon/icon.types.ts index ce81757d..89325ba1 100644 --- a/src/common/Icon/icon.types.ts +++ b/src/common/Icon/icon.types.ts @@ -25,7 +25,6 @@ export enum IconNameEnum { circleInfo = 'circle-info', coins = 'coins', arrowsRotate = 'arrows-rotate' - } export type IconPropsType = JSXBase.IntrinsicElements['svg'] & { diff --git a/src/components.d.ts b/src/components.d.ts index 6367766b..f566913c 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -11,12 +11,11 @@ import { CustomToastType, IComponentToast, ISimpleToast } from "./components/fun import { IConfirmScreenData, IConnectScreenData, ILedgerConnectPanelData } from "./components/functional/ledger-connect/ledger-connect.types"; import { IEventBus } from "./utils/EventBus"; import { DecodeMethodEnum } from "./components/functional/sign-transactions-panel/sign-transactions-panel.types"; -import { TransactionAccountType, TransactionIconInfoType, TransactionRowType } from "./components/controlled/transactions-table/transactions-table.type"; import { ITransactionListItem } from "./components/visual/transaction-list-item/transaction-list-item.types"; import { LocalJSX as JSX } from "@stencil/core"; import { ITransactionListItem as ITransactionListItem1 } from "./components/visual/transaction-list-item/transaction-list-item.types"; import { IToastDataState, ITransactionProgressState } from "./components/functional/toasts-list/components/transaction-toast/transaction-toast.type"; -import { TransactionValueType } from "./components/controlled/transactions-table/transactions-table.type"; +import { TransactionRowType } from "./components/controlled/transactions-table/transactions-table.type"; import { IProviderBase, ProviderTypeEnum } from "./types/provider.types"; import { IEventBus as IEventBus1, unknown as IWalletConnectPanelData } from "./components.d"; export { IAddressTableData } from "./types/address-table.types"; @@ -25,12 +24,11 @@ export { CustomToastType, IComponentToast, ISimpleToast } from "./components/fun export { IConfirmScreenData, IConnectScreenData, ILedgerConnectPanelData } from "./components/functional/ledger-connect/ledger-connect.types"; export { IEventBus } from "./utils/EventBus"; export { DecodeMethodEnum } from "./components/functional/sign-transactions-panel/sign-transactions-panel.types"; -export { TransactionAccountType, TransactionIconInfoType, TransactionRowType } from "./components/controlled/transactions-table/transactions-table.type"; export { ITransactionListItem } from "./components/visual/transaction-list-item/transaction-list-item.types"; export { LocalJSX as JSX } from "@stencil/core"; export { ITransactionListItem as ITransactionListItem1 } from "./components/visual/transaction-list-item/transaction-list-item.types"; export { IToastDataState, ITransactionProgressState } from "./components/functional/toasts-list/components/transaction-toast/transaction-toast.type"; -export { TransactionValueType } from "./components/controlled/transactions-table/transactions-table.type"; +export { TransactionRowType } from "./components/controlled/transactions-table/transactions-table.type"; export { IProviderBase, ProviderTypeEnum } from "./types/provider.types"; export { IEventBus as IEventBus1, unknown as IWalletConnectPanelData } from "./components.d"; export namespace Components { @@ -321,52 +319,9 @@ export namespace Components { */ "triggerOnClick"?: boolean; } - interface MvxTransactionAccount { - "account": TransactionAccountType; - "class"?: string; - "dataTestId"?: string; - "scope": 'receiver' | 'sender'; - /** - * @default false - */ - "showLockedAccounts": boolean; - } - interface MvxTransactionAccountName { - "address": string; - "class"?: string; - "dataTestId"?: string; - "description": string; - "name"?: string; - } - interface MvxTransactionAge { - "age": string; - "class"?: string; - "tooltip"?: string; - } - interface MvxTransactionDirectionBadge { - "class"?: string; - "direction": string; - } - interface MvxTransactionHash { - "class"?: string; - "transaction": TransactionRowType; - } - interface MvxTransactionIcon { - "class"?: string; - "iconInfo": TransactionIconInfoType; - } interface MvxTransactionListItem { "transaction": ITransactionListItem; } - interface MvxTransactionMethod { - "actionDescription": string; - "class"?: string; - "method": string; - } - interface MvxTransactionShards { - "class"?: string; - "transaction": TransactionRowType; - } interface MvxTransactionToast { "fullWidth"?: boolean; /** @@ -415,10 +370,6 @@ export namespace Components { "isStatusPending"?: boolean; "startTime"?: number; } - interface MvxTransactionValue { - "class"?: string; - "value": TransactionValueType; - } interface MvxTransactionsTable { "class"?: string; "transactions": TransactionRowType[]; @@ -988,60 +939,12 @@ declare global { prototype: HTMLMvxTooltipElement; new (): HTMLMvxTooltipElement; }; - interface HTMLMvxTransactionAccountElement extends Components.MvxTransactionAccount, HTMLStencilElement { - } - var HTMLMvxTransactionAccountElement: { - prototype: HTMLMvxTransactionAccountElement; - new (): HTMLMvxTransactionAccountElement; - }; - interface HTMLMvxTransactionAccountNameElement extends Components.MvxTransactionAccountName, HTMLStencilElement { - } - var HTMLMvxTransactionAccountNameElement: { - prototype: HTMLMvxTransactionAccountNameElement; - new (): HTMLMvxTransactionAccountNameElement; - }; - interface HTMLMvxTransactionAgeElement extends Components.MvxTransactionAge, HTMLStencilElement { - } - var HTMLMvxTransactionAgeElement: { - prototype: HTMLMvxTransactionAgeElement; - new (): HTMLMvxTransactionAgeElement; - }; - interface HTMLMvxTransactionDirectionBadgeElement extends Components.MvxTransactionDirectionBadge, HTMLStencilElement { - } - var HTMLMvxTransactionDirectionBadgeElement: { - prototype: HTMLMvxTransactionDirectionBadgeElement; - new (): HTMLMvxTransactionDirectionBadgeElement; - }; - interface HTMLMvxTransactionHashElement extends Components.MvxTransactionHash, HTMLStencilElement { - } - var HTMLMvxTransactionHashElement: { - prototype: HTMLMvxTransactionHashElement; - new (): HTMLMvxTransactionHashElement; - }; - interface HTMLMvxTransactionIconElement extends Components.MvxTransactionIcon, HTMLStencilElement { - } - var HTMLMvxTransactionIconElement: { - prototype: HTMLMvxTransactionIconElement; - new (): HTMLMvxTransactionIconElement; - }; interface HTMLMvxTransactionListItemElement extends Components.MvxTransactionListItem, HTMLStencilElement { } var HTMLMvxTransactionListItemElement: { prototype: HTMLMvxTransactionListItemElement; new (): HTMLMvxTransactionListItemElement; }; - interface HTMLMvxTransactionMethodElement extends Components.MvxTransactionMethod, HTMLStencilElement { - } - var HTMLMvxTransactionMethodElement: { - prototype: HTMLMvxTransactionMethodElement; - new (): HTMLMvxTransactionMethodElement; - }; - interface HTMLMvxTransactionShardsElement extends Components.MvxTransactionShards, HTMLStencilElement { - } - var HTMLMvxTransactionShardsElement: { - prototype: HTMLMvxTransactionShardsElement; - new (): HTMLMvxTransactionShardsElement; - }; interface HTMLMvxTransactionToastElementEventMap { "deleteToast": void; } @@ -1094,12 +997,6 @@ declare global { prototype: HTMLMvxTransactionToastProgressElement; new (): HTMLMvxTransactionToastProgressElement; }; - interface HTMLMvxTransactionValueElement extends Components.MvxTransactionValue, HTMLStencilElement { - } - var HTMLMvxTransactionValueElement: { - prototype: HTMLMvxTransactionValueElement; - new (): HTMLMvxTransactionValueElement; - }; interface HTMLMvxTransactionsTableElement extends Components.MvxTransactionsTable, HTMLStencilElement { } var HTMLMvxTransactionsTableElement: { @@ -1266,21 +1163,12 @@ declare global { "mvx-spinner-icon": HTMLMvxSpinnerIconElement; "mvx-toast-list": HTMLMvxToastListElement; "mvx-tooltip": HTMLMvxTooltipElement; - "mvx-transaction-account": HTMLMvxTransactionAccountElement; - "mvx-transaction-account-name": HTMLMvxTransactionAccountNameElement; - "mvx-transaction-age": HTMLMvxTransactionAgeElement; - "mvx-transaction-direction-badge": HTMLMvxTransactionDirectionBadgeElement; - "mvx-transaction-hash": HTMLMvxTransactionHashElement; - "mvx-transaction-icon": HTMLMvxTransactionIconElement; "mvx-transaction-list-item": HTMLMvxTransactionListItemElement; - "mvx-transaction-method": HTMLMvxTransactionMethodElement; - "mvx-transaction-shards": HTMLMvxTransactionShardsElement; "mvx-transaction-toast": HTMLMvxTransactionToastElement; "mvx-transaction-toast-content": HTMLMvxTransactionToastContentElement; "mvx-transaction-toast-details": HTMLMvxTransactionToastDetailsElement; "mvx-transaction-toast-details-body": HTMLMvxTransactionToastDetailsBodyElement; "mvx-transaction-toast-progress": HTMLMvxTransactionToastProgressElement; - "mvx-transaction-value": HTMLMvxTransactionValueElement; "mvx-transactions-table": HTMLMvxTransactionsTableElement; "mvx-trim": HTMLMvxTrimElement; "mvx-unlock-button": HTMLMvxUnlockButtonElement; @@ -1594,52 +1482,9 @@ declare namespace LocalJSX { */ "triggerOnClick"?: boolean; } - interface MvxTransactionAccount { - "account"?: TransactionAccountType; - "class"?: string; - "dataTestId"?: string; - "scope"?: 'receiver' | 'sender'; - /** - * @default false - */ - "showLockedAccounts"?: boolean; - } - interface MvxTransactionAccountName { - "address"?: string; - "class"?: string; - "dataTestId"?: string; - "description"?: string; - "name"?: string; - } - interface MvxTransactionAge { - "age"?: string; - "class"?: string; - "tooltip"?: string; - } - interface MvxTransactionDirectionBadge { - "class"?: string; - "direction"?: string; - } - interface MvxTransactionHash { - "class"?: string; - "transaction"?: TransactionRowType; - } - interface MvxTransactionIcon { - "class"?: string; - "iconInfo"?: TransactionIconInfoType; - } interface MvxTransactionListItem { "transaction"?: ITransactionListItem; } - interface MvxTransactionMethod { - "actionDescription"?: string; - "class"?: string; - "method"?: string; - } - interface MvxTransactionShards { - "class"?: string; - "transaction"?: TransactionRowType; - } interface MvxTransactionToast { "fullWidth"?: boolean; "onDeleteToast"?: (event: MvxTransactionToastCustomEvent) => void; @@ -1690,10 +1535,6 @@ declare namespace LocalJSX { "isStatusPending"?: boolean; "startTime"?: number; } - interface MvxTransactionValue { - "class"?: string; - "value"?: TransactionValueType; - } interface MvxTransactionsTable { "class"?: string; "transactions"?: TransactionRowType[]; @@ -1825,21 +1666,12 @@ declare namespace LocalJSX { "mvx-spinner-icon": MvxSpinnerIcon; "mvx-toast-list": MvxToastList; "mvx-tooltip": MvxTooltip; - "mvx-transaction-account": MvxTransactionAccount; - "mvx-transaction-account-name": MvxTransactionAccountName; - "mvx-transaction-age": MvxTransactionAge; - "mvx-transaction-direction-badge": MvxTransactionDirectionBadge; - "mvx-transaction-hash": MvxTransactionHash; - "mvx-transaction-icon": MvxTransactionIcon; "mvx-transaction-list-item": MvxTransactionListItem; - "mvx-transaction-method": MvxTransactionMethod; - "mvx-transaction-shards": MvxTransactionShards; "mvx-transaction-toast": MvxTransactionToast; "mvx-transaction-toast-content": MvxTransactionToastContent; "mvx-transaction-toast-details": MvxTransactionToastDetails; "mvx-transaction-toast-details-body": MvxTransactionToastDetailsBody; "mvx-transaction-toast-progress": MvxTransactionToastProgress; - "mvx-transaction-value": MvxTransactionValue; "mvx-transactions-table": MvxTransactionsTable; "mvx-trim": MvxTrim; "mvx-unlock-button": MvxUnlockButton; @@ -1909,21 +1741,12 @@ declare module "@stencil/core" { "mvx-spinner-icon": LocalJSX.MvxSpinnerIcon & JSXBase.HTMLAttributes; "mvx-toast-list": LocalJSX.MvxToastList & JSXBase.HTMLAttributes; "mvx-tooltip": LocalJSX.MvxTooltip & JSXBase.HTMLAttributes; - "mvx-transaction-account": LocalJSX.MvxTransactionAccount & JSXBase.HTMLAttributes; - "mvx-transaction-account-name": LocalJSX.MvxTransactionAccountName & JSXBase.HTMLAttributes; - "mvx-transaction-age": LocalJSX.MvxTransactionAge & JSXBase.HTMLAttributes; - "mvx-transaction-direction-badge": LocalJSX.MvxTransactionDirectionBadge & JSXBase.HTMLAttributes; - "mvx-transaction-hash": LocalJSX.MvxTransactionHash & JSXBase.HTMLAttributes; - "mvx-transaction-icon": LocalJSX.MvxTransactionIcon & JSXBase.HTMLAttributes; "mvx-transaction-list-item": LocalJSX.MvxTransactionListItem & JSXBase.HTMLAttributes; - "mvx-transaction-method": LocalJSX.MvxTransactionMethod & JSXBase.HTMLAttributes; - "mvx-transaction-shards": LocalJSX.MvxTransactionShards & JSXBase.HTMLAttributes; "mvx-transaction-toast": LocalJSX.MvxTransactionToast & JSXBase.HTMLAttributes; "mvx-transaction-toast-content": LocalJSX.MvxTransactionToastContent & JSXBase.HTMLAttributes; "mvx-transaction-toast-details": LocalJSX.MvxTransactionToastDetails & JSXBase.HTMLAttributes; "mvx-transaction-toast-details-body": LocalJSX.MvxTransactionToastDetailsBody & JSXBase.HTMLAttributes; "mvx-transaction-toast-progress": LocalJSX.MvxTransactionToastProgress & JSXBase.HTMLAttributes; - "mvx-transaction-value": LocalJSX.MvxTransactionValue & JSXBase.HTMLAttributes; "mvx-transactions-table": LocalJSX.MvxTransactionsTable & JSXBase.HTMLAttributes; "mvx-trim": LocalJSX.MvxTrim & JSXBase.HTMLAttributes; "mvx-unlock-button": LocalJSX.MvxUnlockButton & JSXBase.HTMLAttributes; diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/TransactionAccount.tsx b/src/components/controlled/transactions-table/components/TransactionAccount/TransactionAccount.tsx new file mode 100644 index 00000000..1627e81c --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/TransactionAccount.tsx @@ -0,0 +1,52 @@ +import { h } from '@stencil/core'; +import { Icon } from 'common/Icon'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +import type { TransactionAccountType } from '../../transactions-table.type'; +import { TransactionAccountName } from './components'; + +// prettier-ignore +const styles = { + transactionAccount: 'transaction-account mvx:flex mvx:items-center mvx:gap-2', + transactionAccountExplorerLink: 'transaction-account-explorer-link mvx:text-primary!' +} satisfies Record; + +interface TransactionAccountPropsType { + account: TransactionAccountType; + class?: string; + dataTestId?: string; + scope: 'receiver' | 'sender'; + showLockedAccounts: boolean; +} + +export function TransactionAccount({ account, dataTestId, scope, showLockedAccounts = false, class: className }: TransactionAccountPropsType) { + const explorerLinkDataTestId = + scope === 'receiver' ? DataTestIdsEnum.receiverLink : DataTestIdsEnum.senderLink; + + return ( +
+ {showLockedAccounts && account.isTokenLocked && } + {account.isContract && } + + {account.showLink ? ( + + {account.address} + + ) : ( + + )} +
+ ); +} + diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/TransactionAccountName.tsx b/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/TransactionAccountName.tsx new file mode 100644 index 00000000..10171a5e --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/TransactionAccountName.tsx @@ -0,0 +1,38 @@ +import { h } from '@stencil/core'; +import classNames from 'classnames'; + +// prettier-ignore +const styles = { + transactionAccountName: 'transaction-account-name mvx:w-max mvx:truncate' +} satisfies Record; + +interface TransactionAccountNamePropsType { + address: string; + class?: string; + dataTestId?: string; + description: string; + name?: string; +} + +export function TransactionAccountName({ address, dataTestId, description, name, class: className }: TransactionAccountNamePropsType) { + if (name) { + return ( +
+ {name} +
+ ); + } + + return ( + + ); + +} diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/index.ts b/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/index.ts new file mode 100644 index 00000000..0f89d2cc --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/index.ts @@ -0,0 +1 @@ +export * from './TransactionAccountName' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/tests/transaction-account-name.spec.tsx b/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/tests/transaction-account-name.spec.tsx new file mode 100644 index 00000000..85e4a4cf --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/components/TransactionAccountName/tests/transaction-account-name.spec.tsx @@ -0,0 +1,116 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; +import { TransactionAccountName } from '../TransactionAccountName'; + +describe('TransactionAccountName tests', () => { + it('renders name when provided', async () => { + const page = await newSpecPage({ + components: [], + template: () => ( + + ), + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('uses trim component when name is missing', async () => { + const page = await newSpecPage({ + components: [], + template: () => ( + + ) + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('handles empty name string', async () => { + const page = await newSpecPage({ + components: [], + template: () => ( + + ) + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('applies correct class names', async () => { + const page = await newSpecPage({ + components: [], + template: () => ( + + ) + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('handles missing dataTestId', async () => { + const page = await newSpecPage({ + components: [], + template: () => ( + + ) + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('uses description as title when name exists', async () => { + const page = await newSpecPage({ + components: [TransactionAccountName], + template: () => ( + + ) + }); + + expect(page.root).toEqualHtml(` + + `); + }) +}); diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/components/index.ts b/src/components/controlled/transactions-table/components/TransactionAccount/components/index.ts new file mode 100644 index 00000000..0f89d2cc --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/components/index.ts @@ -0,0 +1 @@ +export * from './TransactionAccountName' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/index.ts b/src/components/controlled/transactions-table/components/TransactionAccount/index.ts new file mode 100644 index 00000000..4ccfa2e8 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/index.ts @@ -0,0 +1 @@ +export * from './TransactionAccount' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionAccount/tests/transaction-account.spec.tsx b/src/components/controlled/transactions-table/components/TransactionAccount/tests/transaction-account.spec.tsx new file mode 100644 index 00000000..eb6efeb5 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAccount/tests/transaction-account.spec.tsx @@ -0,0 +1,112 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; + +import type { TransactionAccountType } from '../../../transactions-table.type'; +import { TransactionAccount } from '../TransactionAccount'; + +describe('TransactionAccount tests', () => { + const baseAccount: TransactionAccountType = { + address: '0x1234567890123456789012345678901234567890', + name: 'John Doe', + description: 'Test Account', + isContract: false, + isTokenLocked: false, + link: 'https://example.com/account/0x1234567890123456789012345678901234567890', + showLink: false, + }; + + it('should render basic account information', async () => { + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('should render locked account icon when showLockedAccounts is true and account is locked', async () => { + const lockedAccount: TransactionAccountType = { ...baseAccount, isTokenLocked: true }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('should render contract icon when account is a contract', async () => { + const contractAccount: TransactionAccountType = { ...baseAccount, isContract: true }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('should render explorer link when showLink is true', async () => { + const linkedAccount: TransactionAccountType = { ...baseAccount, showLink: true }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` + + `); + }); + + it('should apply custom class and data-testid', async () => { + const page = await newSpecPage({ + components: [], + template: () => ( + + ), + }); + + expect(page.root).toEqualHtml(` + + `); + }); +}); diff --git a/src/components/controlled/transactions-table/components/TransactionAge/TransactionAge.tsx b/src/components/controlled/transactions-table/components/TransactionAge/TransactionAge.tsx new file mode 100644 index 00000000..67befb52 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAge/TransactionAge.tsx @@ -0,0 +1,34 @@ +import { h } from '@stencil/core'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +// prettier-ignore +const styles = { + transactionAge: 'transaction-age mvx:w-max' +} satisfies Record; + +interface TransactionAgePropsType { + age: string; + class?: string; + tooltip?: string; +} + +export function TransactionAge({ age, tooltip, class: className }: TransactionAgePropsType) { + const component = tooltip ? ( +
+ {age} +
+ ) : ( +
+ {age} +
+ ); + + return
{component}
; +} diff --git a/src/components/controlled/transactions-table/components/TransactionAge/index.ts b/src/components/controlled/transactions-table/components/TransactionAge/index.ts new file mode 100644 index 00000000..fcb2deab --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAge/index.ts @@ -0,0 +1 @@ +export * from './TransactionAge'; \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionAge/tests/transaction-age.spec.tsx b/src/components/controlled/transactions-table/components/TransactionAge/tests/transaction-age.spec.tsx new file mode 100644 index 00000000..3354fc1b --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionAge/tests/transaction-age.spec.tsx @@ -0,0 +1,40 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; +import { TransactionAge } from '../TransactionAge'; + + +describe('TransactionAge tests', () => { + it('renders with age prop', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + const ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); + expect(ageSpan).not.toBeNull(); + expect(ageSpan.textContent).toBe('2 days ago'); + }); + + it('renders without tooltip when not provided', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + const ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); + expect(ageSpan).not.toBeNull(); + expect(ageSpan.getAttribute('title')).toBeNull(); + }); + + it('renders with tooltip when provided', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + const ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); + expect(ageSpan).not.toBeNull(); + expect(ageSpan.getAttribute('title')).toBe('2023-05-17 10:30:00 UTC'); + }); +}); diff --git a/src/components/controlled/transactions-table/components/TransactionHash/TransactionHash.tsx b/src/components/controlled/transactions-table/components/TransactionHash/TransactionHash.tsx new file mode 100644 index 00000000..fe2d0bc8 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionHash/TransactionHash.tsx @@ -0,0 +1,43 @@ +import { h } from '@stencil/core'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +import type { TransactionRowType } from '../../transactions-table.type'; +import { TransactionIcon } from '../TransactionIcon'; + +// prettier-ignore +const styles = { + transactionHash: 'transaction-hash mvx:flex mvx:gap-1 mvx:items-center mvx:justify-center', + transactionHashExplorerLink: 'transaction-hash-explorer-link mvx:text-primary!', + transactionHashIcon: 'transaction-hash-icon mvx:flex mvx:items-center mvx:justify-center', +} satisfies Record; + +interface TransactionHashPropsType { + class?: string; + transaction: TransactionRowType; +} + +export function TransactionHash({ transaction, class: className }: TransactionHashPropsType) { + if (!transaction) { + return null; + } + + return ( +
+ + + + + +
+ ); + +} diff --git a/src/components/controlled/transactions-table/components/TransactionHash/index.ts b/src/components/controlled/transactions-table/components/TransactionHash/index.ts new file mode 100644 index 00000000..3b8611a9 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionHash/index.ts @@ -0,0 +1 @@ +export * from './TransactionHash' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx b/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx new file mode 100644 index 00000000..3e72b346 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx @@ -0,0 +1,143 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +import type { TransactionAccountType, TransactionRowType } from '../../../transactions-table.type'; +import { TransactionHash } from '../TransactionHash'; + +const account: TransactionAccountType = { + address: 'erd...', + name: 'test', + description: 'test', + isContract: false, + isTokenLocked: false, + link: '/test', + showLink: false, + shard: '0', + shardLink: '/shard/0', +}; + +describe('TransactionHash tests', () => { + it('renders with transaction data', async () => { + const transaction: TransactionRowType = { + age: { + timeAgo: '1h', + tooltip: '1 hour ago', + }, + direction: 'in', + iconInfo: { icon: 'circle-info', tooltip: 'Test' }, + link: 'https://example.com/tx/123', + method: { + name: 'Smart Contract', + actionDescription: 'Contract call', + }, + receiver: account, + sender: account, + txHash: '0x123456789abcdef', + value: { + egldLabel: 'xEGLD', + valueDecimal: '0', + valueInteger: '100', + }, + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ + + + +
+ `); + }); + + it('updates when transaction prop changes', async () => { + const initialTransactionData: TransactionRowType = { + age: { + timeAgo: '1h', + tooltip: '1 hour ago', + }, + direction: 'in', + iconInfo: { icon: 'circle-Info', tooltip: 'Initial' }, + link: 'https://example.com/tx/initial', + method: { + name: 'Smart Contract', + actionDescription: 'Initial call', + }, + receiver: account, + sender: account, + txHash: '0xInitialHash', + value: { + egldLabel: 'xEGLD', + valueDecimal: '0', + valueInteger: '100', + }, + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ +
+ `); + }); + + it('renders with updated transaction data', async () => { + const updatedTransactionData: TransactionRowType = { + age: { + timeAgo: '2h', + tooltip: '2 hours ago', + }, + direction: 'out', + iconInfo: { icon: 'circle-check', tooltip: 'Updated' }, + link: 'https://example.com/tx/updated', + method: { + name: 'Transfer', + actionDescription: 'Token transfer', + }, + receiver: account, + sender: account, + txHash: '0xUpdatedHash', + value: { + egldLabel: 'xEGLD', + valueDecimal: '1', + valueInteger: '200', + }, + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ + + + +
+ `); + }); + + it('renders null when transaction is not provided', async () => { + const page = await newSpecPage({ + components: [TransactionHash], + template: () => , + }); + + expect(page.root).toEqualHtml(` + + + `); + }); +}); diff --git a/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx b/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx new file mode 100644 index 00000000..9a82d123 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx @@ -0,0 +1,36 @@ +import { h } from '@stencil/core'; + +import type { TransactionIconInfoType } from '../../transactions-table.type'; +import { Icon } from 'common/Icon'; +import { getValidIcon } from './transactionIcon.helpers'; + +// prettier-ignore +const styles = { + transactionIconError: 'transaction-icon-error mvx:text-error', + transactionIconPending: 'transaction-icon-pending mvx:text-pending' +} satisfies Record; + +interface TransactionIconPropsType { + iconInfo: TransactionIconInfoType; + class?: string; +} + +export function TransactionIcon({ iconInfo, class: className }: TransactionIconPropsType) { + if (!iconInfo) { + return null; + } + + const iconName = getValidIcon(iconInfo.icon); + + return ( + + ); + +} diff --git a/src/components/controlled/transactions-table/components/TransactionIcon/index.ts b/src/components/controlled/transactions-table/components/TransactionIcon/index.ts new file mode 100644 index 00000000..c6aafb2c --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionIcon/index.ts @@ -0,0 +1 @@ +export * from './TransactionIcon' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts b/src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts new file mode 100644 index 00000000..5a0d60c7 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts @@ -0,0 +1,15 @@ +import { IconNameEnum } from "common/Icon/icon.types"; + +const iconMap: Record = Object.values(IconNameEnum).reduce((acc, icon) => { + acc[icon] = true; + return acc; +}, {} as Record); + +function isValidIcon(value: string): value is IconNameEnum { + return value in iconMap; +} + +export function getValidIcon(icon: string): IconNameEnum { + return isValidIcon(icon) ? icon : null; +} + diff --git a/src/components/controlled/transactions-table/components/TransactionMethod/TransactionMethod.tsx b/src/components/controlled/transactions-table/components/TransactionMethod/TransactionMethod.tsx new file mode 100644 index 00000000..35caf702 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionMethod/TransactionMethod.tsx @@ -0,0 +1,32 @@ +import { h } from '@stencil/core'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +// prettier-ignore +const styles = { + transactionMethodBadge: 'transaction-method-badge mvx:inline-block mvx:py-1 mvx:px-1.5 mvx:font-normal mvx:text-center mvx:whitespace-pre-wrap mvx:text-xs mvx:leading-none mvx:break-all mvx:align-baseline mvx:rounded-sm mvx:transition-colors mvx:duration-200 mvx:ease-in-out mvx:motion-reduce:transition-none mvx:text-transaction-method mvx:border-1 mvx:border-transaction-method mvx:bg-transparent mvx:font-light', + transactionMethodBadgeEmpty: 'transaction-method-badge-empty mvx:hidden', + transactionMethodText: 'transaction-method-text mvx:truncate mvx:capitalize' + +} satisfies Record; + +interface TransactionMethodPropsType { + class?: string; + actionDescription: string; + method: string; +} + +export function TransactionMethod({ method, actionDescription, class: className }: TransactionMethodPropsType) { + return ( + +
{method}
+
+ ); +} diff --git a/src/components/controlled/transactions-table/components/TransactionMethod/index.ts b/src/components/controlled/transactions-table/components/TransactionMethod/index.ts new file mode 100644 index 00000000..2f5606bb --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionMethod/index.ts @@ -0,0 +1 @@ +export * from './TransactionMethod' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionMethod/tests/transaction-method.spec.tsx b/src/components/controlled/transactions-table/components/TransactionMethod/tests/transaction-method.spec.tsx new file mode 100644 index 00000000..c8c4488d --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionMethod/tests/transaction-method.spec.tsx @@ -0,0 +1,117 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; +import { TransactionMethod } from '../TransactionMethod'; + + + +describe('TransactionMethod tests', () => { + const createPage = async (props: { method?: string; actionDescription?: string }) => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + return page; + }; + + describe('rendering', () => { + it('renders with default props', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + expect(page.root).toBeTruthy(); + }); + + it('has correct data-testid', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + expect(page.root).toEqualHtml(` + +
testMethod
+
+ `); + }); + }); + + describe('method display', () => { + it('displays the transaction method', async () => { + const page = await createPage({ method: 'testMethod' }); + const methodElement = page.root.querySelector('.transaction-method-text'); + expect(methodElement.textContent).toBe('testMethod'); + }); + + it('handles empty method', async () => { + const page = await createPage({ method: '' }); + const methodElement = page.root.querySelector('.transaction-method-text'); + expect(methodElement.textContent).toBe(''); + }); + + it('handles undefined method', async () => { + const page = await createPage({ method: undefined }); + const methodElement = page.root.querySelector('.transaction-method-text'); + expect(methodElement.textContent).toBe(''); + }); + }); + + describe('action description', () => { + it('sets the action description as title', async () => { + const page = await createPage({ actionDescription: 'Test Description' }); + expect(page.root).toEqualHtml(` + +
+
+ `); + }); + + it('handles empty action description', async () => { + const page = await createPage({ actionDescription: '' }); + expect(page.root).toEqualHtml(` + +
+
+ `); + }); + + it('handles undefined action description', async () => { + const page = await createPage({ actionDescription: undefined }); + expect(page.root).toEqualHtml(` + +
+
+ `); + }); + }); + + describe('styling', () => { + it('applies correct CSS classes to outer span', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + expect(page.root).toEqualHtml(` + +
testMethod
+
+ `); + }); + + it('applies correct CSS classes to inner div', async () => { + const page = await newSpecPage({ + components: [], + template: () => + }); + + expect(page.root).toEqualHtml(` + +
testMethod
+
+ `); + }); + }); +}); diff --git a/src/components/controlled/transactions-table/components/TransactionShards/TransactionShards.tsx b/src/components/controlled/transactions-table/components/TransactionShards/TransactionShards.tsx new file mode 100644 index 00000000..3276f1b1 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionShards/TransactionShards.tsx @@ -0,0 +1,41 @@ +import { h } from '@stencil/core'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +import type { TransactionRowType } from '../../transactions-table.type'; + +// prettier-ignore +const styles = { + transactionShards: 'transaction-shards mvx:items-center mvx:flex mvx:gap-2 mvx:w-max mvx:fill-label', + transactionShardsArrowIcon: 'transaction-shards-arrow-icon mvx:w-4 mvx:h-4', + explorerLink: 'explorer-link mvx:text-primary!' +} satisfies Record; + +interface TransactionShardsPropsType { + class?: string; + transaction: TransactionRowType; +} + +export function TransactionShards({ transaction, class: className }: TransactionShardsPropsType) { + return ( +
+ + {transaction.sender.shard} + + + + + + {transaction.receiver.shard} + +
+ ); +} + diff --git a/src/components/controlled/transactions-table/components/TransactionShards/index.ts b/src/components/controlled/transactions-table/components/TransactionShards/index.ts new file mode 100644 index 00000000..18ca9b68 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionShards/index.ts @@ -0,0 +1 @@ +export * from './TransactionShards' \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionShards/tests/transaction-shards.spec.tsx b/src/components/controlled/transactions-table/components/TransactionShards/tests/transaction-shards.spec.tsx new file mode 100644 index 00000000..7a248e98 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionShards/tests/transaction-shards.spec.tsx @@ -0,0 +1,101 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +import type { TransactionRowType } from '../../../transactions-table.type'; +import { TransactionShards } from '../TransactionShards'; + +describe('TransactionShards tests', () => { + const createMockTransaction = (senderShard: string, receiverShard: string): TransactionRowType => ({ + age: { timeAgo: '1 min ago', tooltip: '1 minute ago' }, + method: { name: 'transfer' }, + iconInfo: { tooltip: 'Transfer' }, + link: '/tx/123', + receiver: { + address: 'erd1receiver...', + description: 'Receiver', + isContract: false, + isTokenLocked: false, + link: '/address/erd1receiver...', + name: 'Receiver', + shard: receiverShard, + shardLink: `/blocks?shard=${receiverShard}`, + showLink: true, + }, + sender: { + address: 'erd1sender...', + description: 'Sender', + isContract: false, + isTokenLocked: false, + link: '/address/erd1sender...', + name: 'Sender', + shard: senderShard, + shardLink: `/blocks?shard=${senderShard}`, + showLink: true, + }, + txHash: 'hash123', + value: { + egldLabel: 'xEGLD', + valueDecimal: '0', + valueInteger: '100', + }, + direction: 'in', + }); + + it('renders with default props', async () => { + const transaction = createMockTransaction('0', '1'); + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ + 0 + + + + 1 + +
+ `); + }); + + it('renders with custom class', async () => { + const transaction = createMockTransaction('0', '1'); + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ + 0 + + + + 1 + +
+ `); + }); + + it('renders with different shard values', async () => { + const transaction = createMockTransaction('2', '3'); + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + const senderShard = page.root.querySelector(`[data-testid="${DataTestIdsEnum.senderShard}"]`); + const receiverShard = page.root.querySelector(`[data-testid="${DataTestIdsEnum.receiverShard}"]`); + + expect(senderShard.textContent).toBe('2'); + expect(receiverShard.textContent).toBe('3'); + }); +}); diff --git a/src/components/controlled/transactions-table/components/TransactionValue/TransactionValue.tsx b/src/components/controlled/transactions-table/components/TransactionValue/TransactionValue.tsx new file mode 100644 index 00000000..fb5dcc3a --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionValue/TransactionValue.tsx @@ -0,0 +1,77 @@ +import { h } from '@stencil/core'; +import { Icon } from 'common/Icon'; +import type { TransactionValueType } from 'components/controlled/transactions-table/transactions-table.type'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; + +import styles from './transactionValue.styles'; +import classNames from 'classnames'; + +interface TransactionValuePropsType { + class?: string; + value: TransactionValueType; +} + +export function TransactionValue({ value, class: className }: TransactionValuePropsType) { + return ( +
+ {value.badge && ( +
+ {value.badge} +
+ )} + + {value.showFormattedAmount && ( +
+ {value.egldLabel && } + + +
+ )} + + {value.link && ( + +
+ {value.svgUrl && ( + {value.name + )} + + {value.linkText && ( + + {value.linkText} + + )} +
+
+ )} + + {value.titleText && ( + }> + {value.titleText} + + )} +
+ ); +} + diff --git a/src/components/controlled/transactions-table/components/TransactionValue/index.ts b/src/components/controlled/transactions-table/components/TransactionValue/index.ts new file mode 100644 index 00000000..31fba0ce --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionValue/index.ts @@ -0,0 +1 @@ +export * from './TransactionValue'; \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/TransactionValue/tests/transaction-value.spec.tsx b/src/components/controlled/transactions-table/components/TransactionValue/tests/transaction-value.spec.tsx new file mode 100644 index 00000000..471cacd5 --- /dev/null +++ b/src/components/controlled/transactions-table/components/TransactionValue/tests/transaction-value.spec.tsx @@ -0,0 +1,195 @@ +import { h } from '@stencil/core'; +import { newSpecPage } from '@stencil/core/testing'; +import type { TransactionValueType } from 'components/controlled/transactions-table/transactions-table.type'; +import { TransactionValue } from '../TransactionValue'; + +describe('TransactionValue tests', () => { + it('renders with minimal props', async () => { + const value: TransactionValueType = { + egldLabel: '', + link: '', + linkText: '', + name: '', + ticker: '', + valueDecimal: '', + valueInteger: '', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ `); + }); + + it('renders with badge', async () => { + const value: TransactionValueType = { + badge: 'NFT', + egldLabel: '', + link: '', + linkText: '', + name: '', + ticker: '', + valueDecimal: '', + valueInteger: '', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+
+ NFT +
+
+ `); + }); + + it('renders with formatted amount', async () => { + const value: TransactionValueType = { + showFormattedAmount: true, + egldLabel: 'xEGLD', + valueDecimal: '123', + valueInteger: '123', + link: '', + linkText: '', + name: '', + ticker: '', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+
+ + +
+
+ `); + }); + + it('renders with explorer link', async () => { + const value: TransactionValueType = { + egldLabel: '', + link: 'https://example.com', + linkText: 'Example Link', + name: 'Example', + ticker: 'EX', + valueDecimal: '', + valueInteger: '', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ +
+ Example Link +
+
+
+ `); + }); + + it('renders with SVG icon', async () => { + const value: TransactionValueType = { + egldLabel: '', + link: 'https://example.com', + linkText: 'Example Link', + svgUrl: 'https://example.com/icon.svg', + name: 'Example Icon', + ticker: 'EX', + valueDecimal: '', + valueInteger: '', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ +
+ Example Icon + Example Link +
+
+
+ `); + }); + + it('renders with truncated text', async () => { + const value: TransactionValueType = { + egldLabel: '', + link: 'https://example.com', + linkText: 'Example Link', + ticker: 'EXM', + collection: 'EXM', + name: 'Example', + valueDecimal: '', + valueInteger: '', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ +
+ Example Link +
+
+
+ `); + }); + + it('renders with titleText', async () => { + const value: TransactionValueType = { + egldLabel: '', + link: 'https://example.com', + linkText: 'Example Link', + name: 'Example', + ticker: 'EX', + valueDecimal: '', + valueInteger: '', + titleText: 'Title Text', + }; + + const page = await newSpecPage({ + components: [], + template: () => , + }); + + expect(page.root).toEqualHtml(` +
+ +
+ Example Link +
+
+ + Title Text + +
+ `); + }); +}); diff --git a/src/components/controlled/transactions-table/components/transaction-value/transaction-value.styles.ts b/src/components/controlled/transactions-table/components/TransactionValue/transactionValue.styles.ts similarity index 100% rename from src/components/controlled/transactions-table/components/transaction-value/transaction-value.styles.ts rename to src/components/controlled/transactions-table/components/TransactionValue/transactionValue.styles.ts diff --git a/src/components/controlled/transactions-table/components/index.ts b/src/components/controlled/transactions-table/components/index.ts new file mode 100644 index 00000000..6ff8a6c0 --- /dev/null +++ b/src/components/controlled/transactions-table/components/index.ts @@ -0,0 +1,7 @@ +export * from './TransactionAge'; +export * from './TransactionHash'; +export * from './TransactionIcon'; +export * from './TransactionMethod'; +export * from './TransactionValue'; +export * from './TransactionShards'; +export * from './TransactionAccount'; \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/tests/transaction-account-name.spec.ts b/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/tests/transaction-account-name.spec.ts deleted file mode 100644 index 5d5ad35a..00000000 --- a/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/tests/transaction-account-name.spec.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { newSpecPage } from '@stencil/core/testing'; - -import { TransactionAccountName } from '../transaction-account-name'; - -describe('transaction-account-name', () => { - it('renders name when provided', async () => { - const { root } = await newSpecPage({ - components: [TransactionAccountName], - html: ` - - `, - }); - - const element = root?.querySelector('div'); - expect(element).not.toBeNull(); - expect(element?.textContent).toBe('Alice'); - expect(element?.getAttribute('title')).toBe("Alice's Wallet"); - expect(element?.getAttribute('data-testid')).toBe('account-name'); - expect(element?.className).toContain('text-truncate'); - }); - - it('uses trim component when name is missing', async () => { - const { root } = await newSpecPage({ - components: [TransactionAccountName], - html: ` - - `, - }); - - const trimElement = root?.querySelector('mvx-trim'); - expect(trimElement).not.toBeNull(); - expect(trimElement?.getAttribute('text')).toBe('erd1q...'); - expect(trimElement?.getAttribute('datatestid')).toBe('account-trim'); - }); - - it('handles empty name string', async () => { - const { root } = await newSpecPage({ - components: [TransactionAccountName], - html: ` - - `, - }); - - const trimElement = root?.querySelector('mvx-trim'); - expect(trimElement).not.toBeNull(); - }); - - it('applies correct class names', async () => { - const { root } = await newSpecPage({ - components: [TransactionAccountName], - html: ` - - `, - }); - - const element = root?.querySelector('div'); - expect(element?.className).toContain('custom-class'); - expect(element?.className).toContain('text-truncate'); - expect(element?.className).toContain('transaction-account-name'); - }); - - it('handles missing dataTestId', async () => { - const { root } = await newSpecPage({ - components: [TransactionAccountName], - html: ` - - `, - }); - - const element = root?.querySelector('div'); - expect(element?.hasAttribute('data-testid')).toBe(false); - }); - - it('uses description as title when name exists', async () => { - const { root } = await newSpecPage({ - components: [TransactionAccountName], - html: ` - - `, - }); - - const element = root?.querySelector('div'); - expect(element?.getAttribute('title')).toBe("Dave's Savings"); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.scss b/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.scss deleted file mode 100644 index ff1190ee..00000000 --- a/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.tsx b/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.tsx deleted file mode 100644 index 928a6c13..00000000 --- a/src/components/controlled/transactions-table/components/transaction-account/components/transaction-account-name/transaction-account-name.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import classNames from 'classnames'; - -// prettier-ignore -const styles = { - transactionAccountName: 'transaction-account-name mvx:w-max' -} satisfies Record; -@Component({ - tag: 'mvx-transaction-account-name', - styleUrl: 'transaction-account-name.scss', -}) -export class TransactionAccountName { - @Prop() address: string; - @Prop() class?: string; - @Prop() dataTestId?: string; - @Prop() description: string; - @Prop() name?: string; - - render() { - if (this.name) { - return ( -
- {this.name} -
- ); - } - - return ( - - ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-account/tests/transaction-account.spec.tsx b/src/components/controlled/transactions-table/components/transaction-account/tests/transaction-account.spec.tsx deleted file mode 100644 index e247d4cb..00000000 --- a/src/components/controlled/transactions-table/components/transaction-account/tests/transaction-account.spec.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; - -import type { TransactionAccountType } from '../../../transactions-table.type'; -import { TransactionAccount } from '../transaction-account'; - -describe('TransactionAccount Component', () => { - const baseAccount: TransactionAccountType = { - address: '0x1234567890123456789012345678901234567890', - name: 'John Doe', - description: 'Test Account', - isContract: false, - isTokenLocked: false, - link: 'https://example.com/account/0x1234567890123456789012345678901234567890', - showLink: false, - }; - - it('should render basic account information', async () => { - const page = await newSpecPage({ - components: [TransactionAccount], - template: () => , - }); - - const transactionAccountName = page.root.querySelector('mvx-transaction-account-name'); - expect(transactionAccountName).not.toBeNull(); - expect(transactionAccountName.getAttribute('name')).toBe('John Doe'); - expect(transactionAccountName.getAttribute('description')).toBe('Test Account'); - }); - - it('should render locked account icon when showLockedAccounts is true and account is locked', async () => { - const lockedAccount: TransactionAccountType = { ...baseAccount, isTokenLocked: true }; - - const page = await newSpecPage({ - components: [TransactionAccount], - template: () => , - }); - - const lockedIcon = page.root.querySelector('svg'); - expect(lockedIcon).not.toBeNull(); - }); - - it('should render contract icon when account is a contract', async () => { - const contractAccount: TransactionAccountType = { ...baseAccount, isContract: true }; - - const page = await newSpecPage({ - components: [TransactionAccount], - template: () => , - }); - - const contractIcon = page.root.querySelector('svg'); - expect(contractIcon).not.toBeNull(); - }); - - it('should render explorer link when showLink is true', async () => { - const linkedAccount: TransactionAccountType = { ...baseAccount, showLink: true }; - - const page = await newSpecPage({ - components: [TransactionAccount], - template: () => , - }); - - const explorerLink = page.root.querySelector('mvx-explorer-link'); - expect(explorerLink).not.toBeNull(); - expect(explorerLink.getAttribute('link')).toBe(linkedAccount.link); - expect(explorerLink.getAttribute('data-testid')).toBe('receiverLink'); - }); - - it('should apply custom class and data-testid', async () => { - const page = await newSpecPage({ - components: [TransactionAccount], - template: () => ( - - ), - }); - - const div = page.root.querySelector('div'); - expect(div.className).toBe('transaction-account mvx:flex mvx:items-center mvx:gap-2 custom-class'); - expect(div.getAttribute('data-testid')).toBe('test-id'); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-account/transaction-account.scss b/src/components/controlled/transactions-table/components/transaction-account/transaction-account.scss deleted file mode 100644 index 21b0cbc1..00000000 --- a/src/components/controlled/transactions-table/components/transaction-account/transaction-account.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. diff --git a/src/components/controlled/transactions-table/components/transaction-account/transaction-account.tsx b/src/components/controlled/transactions-table/components/transaction-account/transaction-account.tsx deleted file mode 100644 index 47a99ba2..00000000 --- a/src/components/controlled/transactions-table/components/transaction-account/transaction-account.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import { Icon } from 'common/Icon'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import type { TransactionAccountType } from '../../transactions-table.type'; - -// prettier-ignore -const styles = { - transactionAccount: 'transaction-account mvx:flex mvx:items-center mvx:gap-2', - transactionAccountExplorerLink: 'transaction-account-explorer-link mvx:text-primary!' -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-account', - styleUrl: 'transaction-account.scss', -}) -export class TransactionAccount { - @Prop() account: TransactionAccountType; - @Prop() class?: string; - @Prop() dataTestId?: string; - @Prop() scope: 'receiver' | 'sender'; - @Prop() showLockedAccounts: boolean = false; - - render() { - const explorerLinkDataTestId = - this.scope === 'receiver' ? DataTestIdsEnum.receiverLink : DataTestIdsEnum.senderLink; - - return ( -
- {this.showLockedAccounts && this.account.isTokenLocked && } - {this.account.isContract && } - - {this.account.showLink ? ( - - {this.account.address} - - ) : ( - - )} -
- ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-age/tests/transaction-age.spec.ts b/src/components/controlled/transactions-table/components/transaction-age/tests/transaction-age.spec.ts deleted file mode 100644 index 69fb6817..00000000 --- a/src/components/controlled/transactions-table/components/transaction-age/tests/transaction-age.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import { TransactionAge } from '../transaction-age'; - -describe('TransactionAge', () => { - it('renders with age prop', async () => { - const page = await newSpecPage({ - components: [TransactionAge], - html: '', - }); - - const ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan).not.toBeNull(); - expect(ageSpan.textContent).toBe('2 days ago'); - }); - - it('renders without tooltip when not provided', async () => { - const page = await newSpecPage({ - components: [TransactionAge], - html: '', - }); - - const ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan).not.toBeNull(); - expect(ageSpan.getAttribute('title')).toBeNull(); - }); - - it('renders with tooltip when provided', async () => { - const page = await newSpecPage({ - components: [TransactionAge], - html: '', - }); - - const ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan).not.toBeNull(); - expect(ageSpan.getAttribute('title')).toBe('2023-05-17 10:30:00 UTC'); - }); - - it('updates when age prop changes', async () => { - const page = await newSpecPage({ - components: [TransactionAge], - html: '', - }); - - let ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan.textContent).toBe('5 minutes ago'); - - page.root.age = '10 minutes ago'; - await page.waitForChanges(); - - ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan.textContent).toBe('10 minutes ago'); - }); - - it('updates when tooltip prop changes', async () => { - const page = await newSpecPage({ - components: [TransactionAge], - html: '', - }); - - let ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan.getAttribute('title')).toBe('2023-05-17 09:30:00 UTC'); - - page.root.tooltip = '2023-05-17 10:30:00 UTC'; - await page.waitForChanges(); - - ageSpan = page.root.querySelector(`[data-testid="${DataTestIdsEnum.transactionAge}"]`); - expect(ageSpan.getAttribute('title')).toBe('2023-05-17 10:30:00 UTC'); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-age/transaction-age.scss b/src/components/controlled/transactions-table/components/transaction-age/transaction-age.scss deleted file mode 100644 index ff1190ee..00000000 --- a/src/components/controlled/transactions-table/components/transaction-age/transaction-age.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-age/transaction-age.tsx b/src/components/controlled/transactions-table/components/transaction-age/transaction-age.tsx deleted file mode 100644 index 6c6c352a..00000000 --- a/src/components/controlled/transactions-table/components/transaction-age/transaction-age.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -// prettier-ignore -const styles = { - transactionAge: 'transaction-age mvx:w-max' -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-age', - styleUrl: 'transaction-age.scss', -}) -export class TransactionAge { - @Prop() age: string; - @Prop() class?: string; - @Prop() tooltip?: string; - - render() { - const component = this.tooltip ? ( -
- {this.age} -
- ) : ( -
- {this.age} -
- ); - - return
{component}
; - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-direction-badge/tests/transaction-direction-badge.spec.ts b/src/components/controlled/transactions-table/components/transaction-direction-badge/tests/transaction-direction-badge.spec.ts deleted file mode 100644 index 5477c0e4..00000000 --- a/src/components/controlled/transactions-table/components/transaction-direction-badge/tests/transaction-direction-badge.spec.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { newSpecPage } from '@stencil/core/testing'; - -import { TransactionDirectionBadge } from '../transaction-direction-badge'; - -describe('TransactionDirectionBadge', () => { - it('renders with "in" direction', async () => { - const page = await newSpecPage({ - components: [TransactionDirectionBadge], - html: '', - }); - expect(page.root).toEqualHtml(` - -
- - IN - -
-
- `); - }); - - it('renders with "out" direction', async () => { - const page = await newSpecPage({ - components: [TransactionDirectionBadge], - html: '', - }); - expect(page.root).toEqualHtml(` - -
- - OUT - -
-
- `); - }); - - it('renders with custom direction', async () => { - const page = await newSpecPage({ - components: [TransactionDirectionBadge], - html: '', - }); - expect(page.root).toEqualHtml(` - -
- - CUSTOM - -
-
- `); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.scss b/src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.scss deleted file mode 100644 index ff1190ee..00000000 --- a/src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.tsx b/src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.tsx deleted file mode 100644 index 3d578c3a..00000000 --- a/src/components/controlled/transactions-table/components/transaction-direction-badge/transaction-direction-badge.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; - -// prettier-ignore -const styles = { - transactionDirectionBadge: 'transaction-direction-badge mvx:flex' -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-direction-badge', - styleUrl: 'transaction-direction-badge.scss', -}) -export class TransactionDirectionBadge { - @Prop() class?: string; - @Prop() direction: string; - - render() { - return ( -
- - {this.direction.toUpperCase()} - -
- ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx b/src/components/controlled/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx deleted file mode 100644 index 301a0e71..00000000 --- a/src/components/controlled/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx +++ /dev/null @@ -1,142 +0,0 @@ -import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import type { TransactionAccountType, TransactionRowType } from '../../../transactions-table.type'; -import { TransactionHash } from '../transaction-hash'; - -const account: TransactionAccountType = { - address: 'erd...', - name: 'test', - description: 'test', - isContract: false, - isTokenLocked: false, - link: '/test', - showLink: false, - shard: '0', - shardLink: '/shard/0', -}; - -describe('TransactionHash', () => { - it('renders with transaction data', async () => { - const transaction: TransactionRowType = { - age: { - timeAgo: '1h', - tooltip: '1 hour ago', - }, - direction: 'in', - iconInfo: { icon: 'circle-info', tooltip: 'Test' }, - link: 'https://example.com/tx/123', - method: { - name: 'Smart Contract', - actionDescription: 'Contract call', - }, - receiver: account, - sender: account, - txHash: '0x123456789abcdef', - value: { - egldLabel: 'xEGLD', - valueDecimal: '0', - valueInteger: '100', - }, - }; - - const page = await newSpecPage({ - components: [TransactionHash], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- - -
-
- `); - }); - - it('updates when transaction prop changes', async () => { - const initialTransactionData: TransactionRowType = { - age: { - timeAgo: '1h', - tooltip: '1 hour ago', - }, - direction: 'in', - iconInfo: { icon: 'circle-Info', tooltip: 'Initial' }, - link: 'https://example.com/tx/initial', - method: { - name: 'Smart Contract', - actionDescription: 'Initial call', - }, - receiver: account, - sender: account, - txHash: '0xInitialHash', - value: { - egldLabel: 'xEGLD', - valueDecimal: '0', - valueInteger: '100', - }, - }; - - const page = await newSpecPage({ - components: [TransactionHash], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- - -
-
- `); - - const updatedTransactionData: TransactionRowType = { - age: { - timeAgo: '2h', - tooltip: '2 hours ago', - }, - direction: 'out', - iconInfo: { icon: 'circle-check', tooltip: 'Updated' }, - link: 'https://example.com/tx/updated', - method: { - name: 'Transfer', - actionDescription: 'Token transfer', - }, - receiver: account, - sender: account, - txHash: '0xUpdatedHash', - value: { - egldLabel: 'xEGLD', - valueDecimal: '1', - valueInteger: '200', - }, - }; - - page.root.transaction = updatedTransactionData; - await page.waitForChanges(); - - expect(page.root).toEqualHtml(` - -
- - -
-
- `); - }); - - it('renders null when transaction is not provided', async () => { - const page = await newSpecPage({ - components: [TransactionHash], - template: () => , - }); - - expect(page.root).toEqualHtml(` - - - `); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.scss b/src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.scss deleted file mode 100644 index ff1190ee..00000000 --- a/src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.tsx b/src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.tsx deleted file mode 100644 index bd8e05b7..00000000 --- a/src/components/controlled/transactions-table/components/transaction-hash/transaction-hash.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import type { TransactionRowType } from '../../transactions-table.type'; - -// prettier-ignore -const styles = { - transactionHash: 'transaction-hash mvx:flex mvx:gap-1 mvx:items-center mvx:justify-center', - transactionHashExplorerLink: 'transaction-hash-explorer-link mvx:text-primary!', - transactionHashIcon: 'transaction-hash-icon mvx:flex mvx:items-center mvx:justify-center', -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-hash', - styleUrl: 'transaction-hash.scss', -}) -export class TransactionHash { - @Prop() class?: string; - @Prop() transaction: TransactionRowType; - - render() { - if (!this.transaction) { - return null; - } - - return ( -
- - - - - -
- ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.scss b/src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.scss deleted file mode 100644 index ff1190ee..00000000 --- a/src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.tsx b/src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.tsx deleted file mode 100644 index 8e335271..00000000 --- a/src/components/controlled/transactions-table/components/transaction-icon/transaction-icon.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; - -import type { TransactionIconInfoType } from '../../transactions-table.type'; -import { Icon } from 'common/Icon'; -import { IconNameEnum } from 'common/Icon/icon.types'; - -// prettier-ignore -const styles = { - transactionIconError: 'transaction-icon-error mvx:text-error', - transactionIconPending: 'transaction-icon-pending mvx:text-pending' -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-icon', -}) -export class TransactionIcon { - @Prop() class?: string; - @Prop() iconInfo: TransactionIconInfoType; - - render() { - if (!this.iconInfo) { - return null; - } - - return ( - - ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-method/tests/transaction-method.spec.ts b/src/components/controlled/transactions-table/components/transaction-method/tests/transaction-method.spec.ts deleted file mode 100644 index 9df0aaf2..00000000 --- a/src/components/controlled/transactions-table/components/transaction-method/tests/transaction-method.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import { TransactionMethod } from '../transaction-method'; - -describe('transaction-method', () => { - const createPage = async (props: { method?: string; actionDescription?: string }) => { - const page = await newSpecPage({ - components: [TransactionMethod], - html: '', - }); - - const component = page.rootInstance as TransactionMethod; - component.method = props.method; - component.actionDescription = props.actionDescription; - await page.waitForChanges(); - return page; - }; - - describe('rendering', () => { - it('renders with default props', async () => { - const page = await newSpecPage({ - components: [TransactionMethod], - html: '', - }); - - expect(page.root).toBeTruthy(); - }); - - it('has correct data-testid', async () => { - const page = await newSpecPage({ - components: [TransactionMethod], - html: '', - }); - - const spanElement = page.root.querySelector(`[data-testid="${DataTestIdsEnum.method}"]`); - expect(spanElement).toBeTruthy(); - }); - }); - - describe('method display', () => { - it('displays the transaction method', async () => { - const page = await createPage({ method: 'testMethod' }); - const methodElement = page.root.querySelector('.transaction-method-text'); - expect(methodElement.textContent).toBe('testMethod'); - }); - - it('handles empty method', async () => { - const page = await createPage({ method: '' }); - const methodElement = page.root.querySelector('.transaction-method-text'); - expect(methodElement.textContent).toBe(''); - }); - - it('handles undefined method', async () => { - const page = await createPage({ method: undefined }); - const methodElement = page.root.querySelector('.transaction-method-text'); - expect(methodElement.textContent).toBe(''); - }); - }); - - describe('action description', () => { - it('sets the action description as title', async () => { - const page = await createPage({ actionDescription: 'Test Description' }); - const spanElement = page.root.querySelector(`[data-testid="${DataTestIdsEnum.method}"]`); - expect(spanElement.getAttribute('title')).toBe('Test Description'); - }); - - it('handles empty action description', async () => { - const page = await createPage({ actionDescription: '' }); - const spanElement = page.root.querySelector(`[data-testid="${DataTestIdsEnum.method}"]`); - expect(spanElement.getAttribute('title')).toBe(''); - }); - - it('handles undefined action description', async () => { - const page = await createPage({ actionDescription: undefined }); - const spanElement = page.root.querySelector(`[data-testid="${DataTestIdsEnum.method}"]`); - expect(spanElement.getAttribute('title')).toBeNull(); - }); - }); - - describe('styling', () => { - it('applies correct CSS classes to outer span', async () => { - const page = await newSpecPage({ - components: [TransactionMethod], - html: '', - }); - - const outerSpan = page.root.querySelector('span'); - expect(outerSpan).toHaveClass('transaction-method-badge'); - }); - - it('applies correct CSS classes to inner div', async () => { - const page = await newSpecPage({ - components: [TransactionMethod], - html: '', - }); - - const innerDiv = page.root.querySelector('span > div'); - expect(innerDiv).toHaveClass('transaction-method-text'); - }); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-method/transaction-method.scss b/src/components/controlled/transactions-table/components/transaction-method/transaction-method.scss deleted file mode 100644 index 4525d97d..00000000 --- a/src/components/controlled/transactions-table/components/transaction-method/transaction-method.scss +++ /dev/null @@ -1,2 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. - diff --git a/src/components/controlled/transactions-table/components/transaction-method/transaction-method.tsx b/src/components/controlled/transactions-table/components/transaction-method/transaction-method.tsx deleted file mode 100644 index a61dff9b..00000000 --- a/src/components/controlled/transactions-table/components/transaction-method/transaction-method.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -// prettier-ignore -const styles = { - transactionMethodBadge: 'transaction-method-badge mvx:inline-block mvx:py-1 mvx:px-1.5 mvx:font-normal mvx:text-center mvx:whitespace-pre-wrap mvx:text-xs mvx:leading-none mvx:break-all mvx:align-baseline mvx:rounded-sm mvx:transition-colors mvx:duration-200 mvx:ease-in-out mvx:motion-reduce:transition-none mvx:text-transaction-method mvx:border-1 mvx:border-transaction-method mvx:bg-transparent mvx:font-light', - transactionMethodBadgeEmpty: 'transaction-method-badge-empty mvx:hidden', - transactionMethodText: 'transaction-method-text mvx:truncate mvx:capitalize' - -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-method', - styleUrl: 'transaction-method.scss', -}) -export class TransactionMethod { - @Prop() class?: string; - @Prop() actionDescription: string; - @Prop() method: string; - - render() { - return ( - -
{this.method}
-
- ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-shards/tests/transaction-shards.spec.tsx b/src/components/controlled/transactions-table/components/transaction-shards/tests/transaction-shards.spec.tsx deleted file mode 100644 index 8fd2c8a2..00000000 --- a/src/components/controlled/transactions-table/components/transaction-shards/tests/transaction-shards.spec.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import type { TransactionRowType } from '../../../transactions-table.type'; -import { TransactionShards } from '../transaction-shards'; - -describe('TransactionShards', () => { - const createMockTransaction = (senderShard: string, receiverShard: string): TransactionRowType => ({ - age: { timeAgo: '1 min ago', tooltip: '1 minute ago' }, - method: { name: 'transfer' }, - iconInfo: { tooltip: 'Transfer' }, - link: '/tx/123', - receiver: { - address: 'erd1receiver...', - description: 'Receiver', - isContract: false, - isTokenLocked: false, - link: '/address/erd1receiver...', - name: 'Receiver', - shard: receiverShard, - shardLink: `/blocks?shard=${receiverShard}`, - showLink: true, - }, - sender: { - address: 'erd1sender...', - description: 'Sender', - isContract: false, - isTokenLocked: false, - link: '/address/erd1sender...', - name: 'Sender', - shard: senderShard, - shardLink: `/blocks?shard=${senderShard}`, - showLink: true, - }, - txHash: 'hash123', - value: { - egldLabel: 'xEGLD', - valueDecimal: '0', - valueInteger: '100', - }, - direction: 'in', - }); - - it('renders with default props', async () => { - const transaction = createMockTransaction('0', '1'); - - const page = await newSpecPage({ - components: [TransactionShards], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- - 0 - - - - 1 - -
-
- `); - }); - - it('renders with custom class', async () => { - const transaction = createMockTransaction('0', '1'); - - const page = await newSpecPage({ - components: [TransactionShards], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- - 0 - - - - 1 - -
-
- `); - }); - - it('renders with different shard values', async () => { - const transaction = createMockTransaction('2', '3'); - - const page = await newSpecPage({ - components: [TransactionShards], - template: () => , - }); - - const senderShard = page.root.querySelector(`[data-testid="${DataTestIdsEnum.senderShard}"]`); - const receiverShard = page.root.querySelector(`[data-testid="${DataTestIdsEnum.receiverShard}"]`); - - expect(senderShard.textContent).toBe('2'); - expect(receiverShard.textContent).toBe('3'); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.scss b/src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.scss deleted file mode 100644 index ff1190ee..00000000 --- a/src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. \ No newline at end of file diff --git a/src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.tsx b/src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.tsx deleted file mode 100644 index bb76e8de..00000000 --- a/src/components/controlled/transactions-table/components/transaction-shards/transaction-shards.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import type { TransactionRowType } from '../../transactions-table.type'; - -// prettier-ignore -const styles = { - transactionShards: 'transaction-shards mvx:items-center mvx:flex mvx:gap-2 mvx:w-max mvx:fill-label', - transactionShardsArrowIcon: 'transaction-shards-arrow-icon mvx:w-4 mvx:h-4', - explorerLink: 'explorer-link mvx:text-primary!' -} satisfies Record; - -@Component({ - tag: 'mvx-transaction-shards', - styleUrl: 'transaction-shards.scss', -}) -export class TransactionShards { - @Prop() class?: string; - @Prop() transaction: TransactionRowType; - - render() { - return ( -
- - {this.transaction.sender.shard} - - - - - - {this.transaction.receiver.shard} - -
- ); - } -} diff --git a/src/components/controlled/transactions-table/components/transaction-value/tests/transaction-value.spec.tsx b/src/components/controlled/transactions-table/components/transaction-value/tests/transaction-value.spec.tsx deleted file mode 100644 index 514ce048..00000000 --- a/src/components/controlled/transactions-table/components/transaction-value/tests/transaction-value.spec.tsx +++ /dev/null @@ -1,210 +0,0 @@ -import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import type { TransactionValueType } from 'components/controlled/transactions-table/transactions-table.type'; - -import { TransactionValue } from '../transaction-value'; - -describe('TransactionValue', () => { - it('renders with minimal props', async () => { - const value: TransactionValueType = { - egldLabel: '', - link: '', - linkText: '', - name: '', - ticker: '', - valueDecimal: '', - valueInteger: '', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
-
- `); - }); - - it('renders with badge', async () => { - const value: TransactionValueType = { - badge: 'NFT', - egldLabel: '', - link: '', - linkText: '', - name: '', - ticker: '', - valueDecimal: '', - valueInteger: '', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
-
- NFT -
-
-
- `); - }); - - it('renders with formatted amount', async () => { - const value: TransactionValueType = { - showFormattedAmount: true, - egldLabel: 'xEGLD', - valueDecimal: '123', - valueInteger: '123', - link: '', - linkText: '', - name: '', - ticker: '', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
-
- - -
-
-
- `); - }); - - it('renders with explorer link', async () => { - const value: TransactionValueType = { - egldLabel: '', - link: 'https://example.com', - linkText: 'Example Link', - name: 'Example', - ticker: 'EX', - valueDecimal: '', - valueInteger: '', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- -
- Example Link -
-
-
-
- `); - }); - - it('renders with SVG icon', async () => { - const value: TransactionValueType = { - egldLabel: '', - link: 'https://example.com', - linkText: 'Example Link', - svgUrl: 'https://example.com/icon.svg', - name: 'Example Icon', - ticker: 'EX', - valueDecimal: '', - valueInteger: '', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- -
- Example Icon - Example Link -
-
-
-
- `); - }); - - it('renders with truncated text', async () => { - const value: TransactionValueType = { - egldLabel: '', - link: 'https://example.com', - linkText: 'Example Link', - ticker: 'EXM', - collection: 'EXM', - name: 'Example', - valueDecimal: '', - valueInteger: '', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- -
- Example Link -
-
-
-
- `); - }); - - it('renders with titleText', async () => { - const value: TransactionValueType = { - egldLabel: '', - link: 'https://example.com', - linkText: 'Example Link', - name: 'Example', - ticker: 'EX', - valueDecimal: '', - valueInteger: '', - titleText: 'Title Text', - }; - - const page = await newSpecPage({ - components: [TransactionValue], - template: () => , - }); - - expect(page.root).toEqualHtml(` - -
- -
- Example Link -
-
- - Title Text - -
-
- `); - }); -}); diff --git a/src/components/controlled/transactions-table/components/transaction-value/transaction-value.scss b/src/components/controlled/transactions-table/components/transaction-value/transaction-value.scss deleted file mode 100644 index 21b0cbc1..00000000 --- a/src/components/controlled/transactions-table/components/transaction-value/transaction-value.scss +++ /dev/null @@ -1 +0,0 @@ -// This is needed to trigger the Stecil Tailwind compilation for inline Tailwind classes. diff --git a/src/components/controlled/transactions-table/components/transaction-value/transaction-value.tsx b/src/components/controlled/transactions-table/components/transaction-value/transaction-value.tsx deleted file mode 100644 index f80a80d6..00000000 --- a/src/components/controlled/transactions-table/components/transaction-value/transaction-value.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; -import { Icon } from 'common/Icon'; -import type { TransactionValueType } from 'components/controlled/transactions-table/transactions-table.type'; -import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; - -import styles from './transaction-value.styles'; -import classNames from 'classnames'; - -@Component({ - tag: 'mvx-transaction-value', - styleUrl: 'transaction-value.scss', -}) -export class TransactionValue { - @Prop() class?: string; - @Prop() value: TransactionValueType; - - render() { - return ( -
- {this.value.badge && ( -
- {this.value.badge} -
- )} - - {this.value.showFormattedAmount && ( -
- {this.value.egldLabel && } - - -
- )} - - {this.value.link && ( - -
- {this.value.svgUrl && ( - {this.value.name - )} - - {this.value.linkText && ( - - {this.value.linkText} - - )} -
-
- )} - - {this.value.titleText && ( - }> - {this.value.titleText} - - )} -
- ); - } -} diff --git a/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx b/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx index 0021f875..6f2e33a9 100644 --- a/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx +++ b/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx @@ -126,20 +126,13 @@ describe('TransactionsTable', () => { const rows = page.root.querySelectorAll('tbody tr'); expect(rows.length).toBe(2); - rows.forEach((row, index) => { - expect(row.querySelector('mvx-transaction-hash')).toBeTruthy(); - expect(row.querySelector('mvx-transaction-age')).toBeTruthy(); - expect(row.querySelector('mvx-transaction-shards')).toBeTruthy(); - expect(row.querySelector('mvx-transaction-account[scope="sender"]')).toBeTruthy(); - expect(row.querySelector('mvx-transaction-account[scope="receiver"]')).toBeTruthy(); - expect(row.querySelector('mvx-transaction-method')).toBeTruthy(); - expect(row.querySelector('mvx-transaction-value')).toBeTruthy(); + const cells = rows[0].querySelectorAll('td'); + expect(cells.length).toBe(7); - // Check some specific values - expect(row.querySelector('mvx-transaction-age').getAttribute('age')).toBe(mockTransactions[index].age.timeAgo); - expect(row.querySelector('mvx-transaction-method').getAttribute('method')).toBe( - mockTransactions[index].method.name, - ); - }); + // Check some specific values + const ageCell = cells[1]; + expect(ageCell.textContent).toContain('5 minutes ago'); + const methodCell = cells[5]; + expect(methodCell.textContent).toContain('transfer'); }); }); diff --git a/src/components/controlled/transactions-table/transactions-table.tsx b/src/components/controlled/transactions-table/transactions-table.tsx index 7b72b6ec..04cd0ca9 100644 --- a/src/components/controlled/transactions-table/transactions-table.tsx +++ b/src/components/controlled/transactions-table/transactions-table.tsx @@ -3,6 +3,7 @@ import { Component, h, Prop } from '@stencil/core'; import { DataTestIdsEnum } from '../../../constants/dataTestIds.enum'; import type { TransactionRowType } from './transactions-table.type'; import styles from './transactions-table.styles' +import { TransactionAccount, TransactionAge, TransactionHash, TransactionMethod, TransactionShards, TransactionValue } from './components'; const COLUMNS = ['Txn Hash', 'Age', 'Shard', 'From', 'To', 'Method', 'Value']; @@ -30,45 +31,45 @@ export class TransactionsTable { {this.transactions.map(transaction => ( - + - + /> - + - + /> - + /> - + /> - + ))} From 15c8b891315af2b5553f8b60c7e11a611aa8251b Mon Sep 17 00:00:00 2001 From: Iulia Cimpeanu <72752718+iuliacimpeanu@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:41:42 +0300 Subject: [PATCH 3/4] Updated icons type (#250) * Fixed icon name * Fixed name * Updated truncate * Updated changelog * Updated icons * Fixed tests * Fixes * Fixed casts * Fixed errors --- CHANGELOG.md | 2 ++ src/assets/notification.js | 4 ++-- src/common/Icon/Icon.tsx | 4 ++++ src/common/Icon/icon.types.ts | 4 ++-- .../TransactionAssetIcon/TransactionAssetIcon.tsx | 3 +-- .../tests/transaction-hash.spec.tsx | 10 +++++++--- .../TransactionIcon/TransactionIcon.tsx | 10 ++++------ .../TransactionIcon/transactionIcon.helpers.ts | 15 --------------- .../tests/transactions-table.spec.tsx | 5 +++-- .../transactions-table/transactions-table.type.ts | 4 +++- .../components/simple-toast/simple-toast.tsx | 3 +-- .../transaction-toast-content.scss | 6 +++--- .../transaction-toast-content.tsx | 5 ++--- .../components/transaction-toast-details-body.tsx | 12 ++++++------ .../transaction-toast/transaction-toast.type.ts | 5 +++-- .../tests/transaction-list-item.spec.tsx | 3 ++- .../transaction-list-item.types.ts | 4 +++- 17 files changed, 48 insertions(+), 51 deletions(-) delete mode 100644 src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a74ca8e..4eaeac26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- [Updated icons type](https://github.com/multiversx/mx-sdk-dapp-ui/pull/250) + - [Added the Storybook as a live server deployment](https://github.com/multiversx/mx-sdk-dapp-ui/pull/248) - [Refactor components in transactions table](https://github.com/multiversx/mx-sdk-dapp-ui/pull/243) diff --git a/src/assets/notification.js b/src/assets/notification.js index fc2614b7..28442f91 100644 --- a/src/assets/notification.js +++ b/src/assets/notification.js @@ -18,7 +18,7 @@ function showNotification() { }, fail: { id: notificationId, - icon: 'times', + icon: 'close', title: 'Transaction failed', hasCloseButton: true, iconClassName: 'danger', @@ -32,7 +32,7 @@ function showNotification() { }, timedOut: { id: notificationId, - icon: 'times', + icon: 'close', title: 'Transaction timed out', hasCloseButton: true, iconClassName: 'warning', diff --git a/src/common/Icon/Icon.tsx b/src/common/Icon/Icon.tsx index d193048c..1e30699e 100644 --- a/src/common/Icon/Icon.tsx +++ b/src/common/Icon/Icon.tsx @@ -27,6 +27,10 @@ import { CoinsIcon } from './components/CoinsIcon'; import { ArrowsRotateIcon } from './components/ArrowsRotateIcon'; export const Icon = ({ name, ...properties }: IconPropsType) => { + if (!name) { + return; + } + switch (name) { case 'contract': return ; diff --git a/src/common/Icon/icon.types.ts b/src/common/Icon/icon.types.ts index 89325ba1..34c5f645 100644 --- a/src/common/Icon/icon.types.ts +++ b/src/common/Icon/icon.types.ts @@ -1,6 +1,6 @@ import type { JSXBase } from '@stencil/core/internal'; -export enum IconNameEnum { +export enum IconNamesEnum { contract = 'contract', layers = 'layers', lock = 'lock', @@ -28,5 +28,5 @@ export enum IconNameEnum { } export type IconPropsType = JSXBase.IntrinsicElements['svg'] & { - name: `${IconNameEnum}`; + name: `${IconNamesEnum}`; }; diff --git a/src/common/TransactionAssetIcon/TransactionAssetIcon.tsx b/src/common/TransactionAssetIcon/TransactionAssetIcon.tsx index 594d4d0b..27d801da 100644 --- a/src/common/TransactionAssetIcon/TransactionAssetIcon.tsx +++ b/src/common/TransactionAssetIcon/TransactionAssetIcon.tsx @@ -1,6 +1,5 @@ import { h } from '@stencil/core'; import { Icon } from 'common/Icon'; -import { IconNameEnum } from 'common/Icon/icon.types'; import type { ITransactionListItem } from 'components/visual/transaction-list-item/transaction-list-item.types'; export enum IconSizeEnumType { @@ -34,7 +33,7 @@ export function TransactionAssetIcon({ transaction, iconSize }: ITransactionAsse } if (transaction.asset.icon) { - return ; + return ; } if (transaction.asset.text) { diff --git a/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx b/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx index 3e72b346..017890c6 100644 --- a/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx +++ b/src/components/controlled/transactions-table/components/TransactionHash/tests/transaction-hash.spec.tsx @@ -4,6 +4,7 @@ import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; import type { TransactionAccountType, TransactionRowType } from '../../../transactions-table.type'; import { TransactionHash } from '../TransactionHash'; +import { IconNamesEnum } from 'common/Icon/icon.types'; const account: TransactionAccountType = { address: 'erd...', @@ -25,7 +26,7 @@ describe('TransactionHash tests', () => { tooltip: '1 hour ago', }, direction: 'in', - iconInfo: { icon: 'circle-info', tooltip: 'Test' }, + iconInfo: { icon: IconNamesEnum.circleInfo, tooltip: 'Test' }, link: 'https://example.com/tx/123', method: { name: 'Smart Contract', @@ -63,7 +64,7 @@ describe('TransactionHash tests', () => { tooltip: '1 hour ago', }, direction: 'in', - iconInfo: { icon: 'circle-Info', tooltip: 'Initial' }, + iconInfo: { icon: IconNamesEnum.circleInfo, tooltip: 'Initial' }, link: 'https://example.com/tx/initial', method: { name: 'Smart Contract', @@ -86,6 +87,9 @@ describe('TransactionHash tests', () => { expect(page.root).toEqualHtml(`
+ + +
`); @@ -98,7 +102,7 @@ describe('TransactionHash tests', () => { tooltip: '2 hours ago', }, direction: 'out', - iconInfo: { icon: 'circle-check', tooltip: 'Updated' }, + iconInfo: { icon: IconNamesEnum.circleCheck, tooltip: 'Updated' }, link: 'https://example.com/tx/updated', method: { name: 'Transfer', diff --git a/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx b/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx index 9a82d123..1899a081 100644 --- a/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx +++ b/src/components/controlled/transactions-table/components/TransactionIcon/TransactionIcon.tsx @@ -2,7 +2,7 @@ import { h } from '@stencil/core'; import type { TransactionIconInfoType } from '../../transactions-table.type'; import { Icon } from 'common/Icon'; -import { getValidIcon } from './transactionIcon.helpers'; +import { IconNamesEnum } from 'common/Icon/icon.types'; // prettier-ignore const styles = { @@ -20,16 +20,14 @@ export function TransactionIcon({ iconInfo, class: className }: TransactionIconP return null; } - const iconName = getValidIcon(iconInfo.icon); - return ( ); diff --git a/src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts b/src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts deleted file mode 100644 index 5a0d60c7..00000000 --- a/src/components/controlled/transactions-table/components/TransactionIcon/transactionIcon.helpers.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IconNameEnum } from "common/Icon/icon.types"; - -const iconMap: Record = Object.values(IconNameEnum).reduce((acc, icon) => { - acc[icon] = true; - return acc; -}, {} as Record); - -function isValidIcon(value: string): value is IconNameEnum { - return value in iconMap; -} - -export function getValidIcon(icon: string): IconNameEnum { - return isValidIcon(icon) ? icon : null; -} - diff --git a/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx b/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx index 6f2e33a9..bba69e8e 100644 --- a/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx +++ b/src/components/controlled/transactions-table/tests/transactions-table.spec.tsx @@ -3,6 +3,7 @@ import { newSpecPage } from '@stencil/core/testing'; import { TransactionsTable } from '../transactions-table'; import type { TransactionRowType } from '../transactions-table.type'; +import { IconNamesEnum } from 'common/Icon/icon.types'; describe('TransactionsTable', () => { const mockTransactions: TransactionRowType[] = [ @@ -10,7 +11,7 @@ describe('TransactionsTable', () => { age: { timeAgo: '5 minutes ago', tooltip: 'Feb 7, 2025, 4:55 PM' }, direction: 'in', method: { name: 'transfer', actionDescription: 'Token transfer' }, - iconInfo: { icon: 'check', tooltip: 'Successful transaction' }, + iconInfo: { icon: IconNamesEnum.check, tooltip: 'Successful transaction' }, link: '/transactions/hash1', receiver: { address: 'erd1qqqqqqqqqqqqqpgqp699jngundfqw07d8jzkepucvpzush6k3wvqyc44rx', @@ -54,7 +55,7 @@ describe('TransactionsTable', () => { age: { timeAgo: '10 minutes ago', tooltip: 'Feb 7, 2025, 4:50 PM' }, direction: 'out', method: { name: 'esdt_transfer', actionDescription: 'ESDT Token transfer' }, - iconInfo: { icon: 'check', tooltip: 'Successful transaction' }, + iconInfo: { icon: IconNamesEnum.check, tooltip: 'Successful transaction' }, link: '/transactions/hash2', receiver: { address: 'erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th', diff --git a/src/components/controlled/transactions-table/transactions-table.type.ts b/src/components/controlled/transactions-table/transactions-table.type.ts index 15083041..a08cf547 100644 --- a/src/components/controlled/transactions-table/transactions-table.type.ts +++ b/src/components/controlled/transactions-table/transactions-table.type.ts @@ -1,3 +1,5 @@ +import { IconNamesEnum } from "common/Icon/icon.types"; + export type TransactionRowType = { age: TransactionAgeType; direction?: string; @@ -16,7 +18,7 @@ type TransactionAgeType = { }; export type TransactionIconInfoType = { - icon?: string; + icon?: `${IconNamesEnum}`; tooltip: string; }; diff --git a/src/components/functional/toasts-list/components/custom-toast/components/simple-toast/simple-toast.tsx b/src/components/functional/toasts-list/components/custom-toast/components/simple-toast/simple-toast.tsx index bf08c924..7747512e 100644 --- a/src/components/functional/toasts-list/components/custom-toast/components/simple-toast/simple-toast.tsx +++ b/src/components/functional/toasts-list/components/custom-toast/components/simple-toast/simple-toast.tsx @@ -2,7 +2,6 @@ import type { EventEmitter } from '@stencil/core'; import { Component, Event, h, Prop } from '@stencil/core'; import classNames from 'classnames'; import { Icon } from 'common/Icon'; -import { IconNameEnum } from 'common/Icon/icon.types'; import type { ISimpleToast } from 'components/functional/toasts-list/components/transaction-toast/transaction-toast.type'; import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; @@ -28,7 +27,7 @@ export class SimpleToast { [iconClassName]: Boolean(iconClassName), }} > - + ); } diff --git a/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.scss b/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.scss index 39b335f6..1394c812 100644 --- a/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.scss +++ b/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.scss @@ -56,8 +56,8 @@ @apply mvx:max-w-40; } -.truncate { - @apply mvx:truncate mvx:!max-w-25 mvx:shrink-0; +.truncate-toast-title { + @apply mvx:truncate mvx:shrink-0; } .transaction-toast-amount { @@ -116,4 +116,4 @@ @apply mvx:text-center mvx:h-4 mvx:w-4; color: var(--mvx-text-color-primary); } -} +} \ No newline at end of file diff --git a/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.tsx b/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.tsx index d3a18df4..bf345192 100644 --- a/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.tsx +++ b/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-content/transaction-toast-content.tsx @@ -8,7 +8,6 @@ import type { ITransactionListItem } from 'components/visual/transaction-list-it import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; import type { IToastDataState } from '../../transaction-toast.type'; -import { IconNameEnum } from 'common/Icon/icon.types'; // prettier-ignore const styles = { @@ -51,7 +50,7 @@ export class TransactionToastContent {
{!showPrimaryIcon && this.toastDataState.icon ? ( ) : ( @@ -70,7 +69,7 @@ export class TransactionToastContent { class={{ 'transaction-toast-title': true, 'transaction-toast-title-short': Boolean(showAmount), - 'truncate': showTooltip, + 'truncate-toast-title': showTooltip, }} > {title} diff --git a/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-details/components/transaction-toast-details-body.tsx b/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-details/components/transaction-toast-details-body.tsx index b59ecefa..4a6b3939 100644 --- a/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-details/components/transaction-toast-details-body.tsx +++ b/src/components/functional/toasts-list/components/transaction-toast/components/transaction-toast-details/components/transaction-toast-details-body.tsx @@ -1,13 +1,13 @@ import { Component, h, Prop } from '@stencil/core'; import { Icon } from 'common/Icon/Icon'; -import { IconNameEnum } from 'common/Icon/icon.types'; +import { IconNamesEnum } from 'common/Icon/icon.types'; import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; -const iconData: Record = { - pending: IconNameEnum.hourglass, - success: IconNameEnum.check, - fail: IconNameEnum.close, - invalid: IconNameEnum.close, +const iconData: Record = { + pending: IconNamesEnum.hourglass, + success: IconNamesEnum.check, + fail: IconNamesEnum.close, + invalid: IconNamesEnum.close, }; const transactionToastDetailsBodyClasses: Record = { diff --git a/src/components/functional/toasts-list/components/transaction-toast/transaction-toast.type.ts b/src/components/functional/toasts-list/components/transaction-toast/transaction-toast.type.ts index 23739261..3f346b09 100644 --- a/src/components/functional/toasts-list/components/transaction-toast/transaction-toast.type.ts +++ b/src/components/functional/toasts-list/components/transaction-toast/transaction-toast.type.ts @@ -1,5 +1,6 @@ // match these interfaces with src/path-to-file.type.ts from sdk-dapp import type { JSX } from '@stencil/core'; +import { IconNamesEnum } from 'common/Icon/icon.types'; import type { ITransactionListItem } from 'components/visual/transaction-list-item/transaction-list-item.types'; export interface ITransactionProgressState { progressClass?: string; @@ -10,7 +11,7 @@ export interface ITransactionProgressState { export interface IToastDataState { title: string; - icon?: string; + icon?: `${IconNamesEnum}`; iconClassName?: string; hasCloseButton?: boolean; } @@ -32,7 +33,7 @@ interface ISharedCustomToast { } export interface ISimpleToast extends ISharedCustomToast { - icon: string | JSX.Element; + icon: `${IconNamesEnum}`; iconClassName?: string; title?: string; message?: string; diff --git a/src/components/visual/transaction-list-item/tests/transaction-list-item.spec.tsx b/src/components/visual/transaction-list-item/tests/transaction-list-item.spec.tsx index dbf1f4e8..a0fcdc27 100644 --- a/src/components/visual/transaction-list-item/tests/transaction-list-item.spec.tsx +++ b/src/components/visual/transaction-list-item/tests/transaction-list-item.spec.tsx @@ -4,6 +4,7 @@ import { FormatAmount } from 'components/controlled/format-amount/format-amount' import { TransactionListItem } from '../transaction-list-item'; import type { ITransactionListItem } from '../transaction-list-item.types'; +import { IconNamesEnum } from 'common/Icon/icon.types'; describe('transaction-list-item', () => { const createPage = async (transaction: ITransactionListItem) => { @@ -58,7 +59,7 @@ describe('transaction-list-item', () => { }); it('renders with asset icon', async () => { - const transaction = { ...baseTransaction, asset: { icon: 'arrows-rotate' } }; + const transaction = { ...baseTransaction, asset: { icon: IconNamesEnum.arrowsRotate } }; const page = await createPage(transaction); const iconComponent = page.root.querySelector('svg'); expect(iconComponent).not.toBeNull(); diff --git a/src/components/visual/transaction-list-item/transaction-list-item.types.ts b/src/components/visual/transaction-list-item/transaction-list-item.types.ts index b12a1fa1..bd3e3b75 100644 --- a/src/components/visual/transaction-list-item/transaction-list-item.types.ts +++ b/src/components/visual/transaction-list-item/transaction-list-item.types.ts @@ -1,7 +1,9 @@ +import { IconNamesEnum } from "common/Icon/icon.types"; + export interface ITransactionListItemAsset { imageUrl?: string; text?: string; - icon?: string; + icon?: `${IconNamesEnum}`; } export interface ITransactionListItemAction { From 6135a2ea20e269ae472a6a851a0016d5490e590d Mon Sep 17 00:00:00 2001 From: Iulia Cimpeanu Date: Wed, 15 Oct 2025 17:47:01 +0300 Subject: [PATCH 4/4] v0.0.36 --- CHANGELOG.md | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eaeac26..59b9869c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [[0.0.36](https://github.com/multiversx/mx-sdk-dapp-ui/pull/251)] - 2025-10-15 + - [Updated icons type](https://github.com/multiversx/mx-sdk-dapp-ui/pull/250) - [Added the Storybook as a live server deployment](https://github.com/multiversx/mx-sdk-dapp-ui/pull/248) diff --git a/package.json b/package.json index e14b7ab0..9a9ad382 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-dapp-ui", - "version": "0.0.35", + "version": "0.0.36", "description": "A library to hold UI components for a dApp on the MultiversX blockchain", "author": "MultiversX", "license": "MIT",