From 02145bd819187601df2147547ecdf6e317464c3f Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Fri, 26 Apr 2024 22:09:11 +0800 Subject: [PATCH 01/74] monorepo --- .eslintignore | 5 - .eslintrc.js | 7 + .eslintrc.json | 24 - .github/workflows/publish-package.yml | 6 +- .gitignore | 43 +- README.md | 122 +- examples/next-app/.eslintrc.js | 9 + examples/next-app/app/page.tsx | 14 +- examples/next-app/components/HomePage.tsx | 29 +- examples/next-app/components/Providers.tsx | 14 - examples/next-app/next.config.mjs | 4 +- examples/next-app/package.json | 9 + examples/next-app/pnpm-lock.yaml | 96 +- examples/next-app/tsconfig.json | 36 +- package.json | 130 +- packages/config-eslint/README.md | 3 + packages/config-eslint/library.js | 34 + packages/config-eslint/next.js | 35 + packages/config-eslint/package.json | 19 + packages/config-eslint/react-internal.js | 58 + .../config-prettier/index.json | 0 packages/config-prettier/package.json | 13 + packages/config-typescript/base.json | 20 + packages/config-typescript/nextjs.json | 21 + packages/config-typescript/package.json | 9 + packages/config-typescript/react-library.json | 13 + packages/storykit/.eslintrc.cjs | 13 + packages/storykit/.gitignore | 30 + .../.storybook}/assets/story-logo.png | Bin .../storykit/.storybook}/main.ts | 0 .../storykit/.storybook}/manager-head.html | 0 .../storykit/.storybook}/manager.ts | 0 .../storykit/.storybook}/preview.ts | 0 .../storykit/.storybook}/theme.ts | 0 .../storykit/components.json | 0 packages/storykit/package.json | 105 + .../storykit/postcss.config.mjs | 0 .../storykit/rollup.config.js | 1 - .../src}/components/Button/Button.tsx | 0 .../components/Button/__docs__/Button.mdx | 2 +- .../Button/__docs__/Button.stories.tsx | 0 .../Button/__tests__/Button.test.tsx | 0 .../storykit/src}/components/Button/index.ts | 0 .../src}/components/IPAGraph/IPAGraph.tsx | 0 .../components/IPAGraph/__docs__/Example.tsx | 0 .../components/IPAGraph/__docs__/IPAGraph.mdx | 4 +- .../IPAGraph/__docs__/IPAGraph.stories.tsx | 0 .../src}/components/IPAGraph/index.ts | 0 .../IPAPolicyList/IPAPolicyList.tsx | 0 .../IPAPolicyList/__docs__/Example.tsx | 0 .../IPAPolicyList/__docs__/IPAPolicyList.mdx | 4 +- .../__docs__/IPAPolicyList.stories.tsx | 0 .../src}/components/IPAPolicyList/index.tsx | 0 .../IPARoyaltyChart/IPARoyaltyChart.tsx | 0 .../IPARoyaltyChart/__docs__/Example.tsx | 0 .../__docs__/IPARoyaltyChart.mdx | 4 +- .../__docs__/IPARoyaltyChart.stories.tsx | 0 .../src}/components/IPARoyaltyChart/index.tsx | 0 .../IPAssetWidget/IPAssetWidget.tsx | 0 .../IPAssetWidget/__docs__/Example.tsx | 0 .../IPAssetWidget/__docs__/IPAssetWidget.mdx | 2 +- .../__docs__/IPAssetWidget.stories.tsx | 0 .../__tests__/IPAssetWidget.test.tsx | 0 .../src}/components/IPAssetWidget/index.ts | 0 .../storykit/src}/components/index.ts | 0 .../storykit/src}/components/ui/accordion.tsx | 0 {src => packages/storykit/src}/global.css | 0 packages/storykit/src/index.ts | 2 + {src => packages/storykit/src}/lib/api.ts | 5 + {src => packages/storykit/src}/lib/graph.ts | 3 +- .../storykit/src}/lib/simplehash/index.ts | 0 .../src}/lib/simplehash/types/simplehash.d.ts | 0 {src => packages/storykit/src}/lib/types.ts | 0 {src => packages/storykit/src}/lib/utils.ts | 0 .../IPAssetProvider/IPAssetProvider.tsx | 2 +- .../IPAssetProvider/__docs__/Example.tsx | 0 .../__docs__/IPAssetProvider.mdx | 4 +- .../__docs__/IPAssetProvider.stories.tsx | 0 .../src}/providers/IPAssetProvider/index.tsx | 0 .../storykit/src}/providers/index.ts | 0 .../storykit/src}/stories/Introduction.mdx | 0 .../storykit/tailwind.config.js | 9 +- packages/storykit/tsconfig.json | 10 + pnpm-lock.yaml | 4903 +++++++++++------ pnpm-workspace.yaml | 3 + setupTests.ts | 5 - src/index.ts | 2 - tsconfig.json | 25 - turbo.json | 16 + 89 files changed, 4048 insertions(+), 1879 deletions(-) delete mode 100644 .eslintignore create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json create mode 100644 examples/next-app/.eslintrc.js delete mode 100644 examples/next-app/components/Providers.tsx create mode 100644 packages/config-eslint/README.md create mode 100644 packages/config-eslint/library.js create mode 100644 packages/config-eslint/next.js create mode 100644 packages/config-eslint/package.json create mode 100644 packages/config-eslint/react-internal.js rename .prettierrc.json => packages/config-prettier/index.json (100%) create mode 100644 packages/config-prettier/package.json create mode 100644 packages/config-typescript/base.json create mode 100644 packages/config-typescript/nextjs.json create mode 100644 packages/config-typescript/package.json create mode 100644 packages/config-typescript/react-library.json create mode 100644 packages/storykit/.eslintrc.cjs create mode 100644 packages/storykit/.gitignore rename {.storybook => packages/storykit/.storybook}/assets/story-logo.png (100%) rename {.storybook => packages/storykit/.storybook}/main.ts (100%) rename {.storybook => packages/storykit/.storybook}/manager-head.html (100%) rename {.storybook => packages/storykit/.storybook}/manager.ts (100%) rename {.storybook => packages/storykit/.storybook}/preview.ts (100%) rename {.storybook => packages/storykit/.storybook}/theme.ts (100%) rename components.json => packages/storykit/components.json (100%) create mode 100644 packages/storykit/package.json rename postcss.config.mjs => packages/storykit/postcss.config.mjs (100%) rename rollup.config.mjs => packages/storykit/rollup.config.js (93%) rename {src => packages/storykit/src}/components/Button/Button.tsx (100%) rename {src => packages/storykit/src}/components/Button/__docs__/Button.mdx (94%) rename {src => packages/storykit/src}/components/Button/__docs__/Button.stories.tsx (100%) rename {src => packages/storykit/src}/components/Button/__tests__/Button.test.tsx (100%) rename {src => packages/storykit/src}/components/Button/index.ts (100%) rename {src => packages/storykit/src}/components/IPAGraph/IPAGraph.tsx (100%) rename {src => packages/storykit/src}/components/IPAGraph/__docs__/Example.tsx (100%) rename {src => packages/storykit/src}/components/IPAGraph/__docs__/IPAGraph.mdx (84%) rename {src => packages/storykit/src}/components/IPAGraph/__docs__/IPAGraph.stories.tsx (100%) rename {src => packages/storykit/src}/components/IPAGraph/index.ts (100%) rename {src => packages/storykit/src}/components/IPAPolicyList/IPAPolicyList.tsx (100%) rename {src => packages/storykit/src}/components/IPAPolicyList/__docs__/Example.tsx (100%) rename {src => packages/storykit/src}/components/IPAPolicyList/__docs__/IPAPolicyList.mdx (81%) rename {src => packages/storykit/src}/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx (100%) rename {src => packages/storykit/src}/components/IPAPolicyList/index.tsx (100%) rename {src => packages/storykit/src}/components/IPARoyaltyChart/IPARoyaltyChart.tsx (100%) rename {src => packages/storykit/src}/components/IPARoyaltyChart/__docs__/Example.tsx (100%) rename {src => packages/storykit/src}/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx (81%) rename {src => packages/storykit/src}/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx (100%) rename {src => packages/storykit/src}/components/IPARoyaltyChart/index.tsx (100%) rename {src => packages/storykit/src}/components/IPAssetWidget/IPAssetWidget.tsx (100%) rename {src => packages/storykit/src}/components/IPAssetWidget/__docs__/Example.tsx (100%) rename {src => packages/storykit/src}/components/IPAssetWidget/__docs__/IPAssetWidget.mdx (91%) rename {src => packages/storykit/src}/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx (100%) rename {src => packages/storykit/src}/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx (100%) rename {src => packages/storykit/src}/components/IPAssetWidget/index.ts (100%) rename {src => packages/storykit/src}/components/index.ts (100%) rename {src => packages/storykit/src}/components/ui/accordion.tsx (100%) rename {src => packages/storykit/src}/global.css (100%) create mode 100644 packages/storykit/src/index.ts rename {src => packages/storykit/src}/lib/api.ts (82%) rename {src => packages/storykit/src}/lib/graph.ts (98%) rename {src => packages/storykit/src}/lib/simplehash/index.ts (100%) rename {src => packages/storykit/src}/lib/simplehash/types/simplehash.d.ts (100%) rename {src => packages/storykit/src}/lib/types.ts (100%) rename {src => packages/storykit/src}/lib/utils.ts (100%) rename {src => packages/storykit/src}/providers/IPAssetProvider/IPAssetProvider.tsx (98%) rename {src => packages/storykit/src}/providers/IPAssetProvider/__docs__/Example.tsx (100%) rename {src => packages/storykit/src}/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx (90%) rename {src => packages/storykit/src}/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx (100%) rename {src => packages/storykit/src}/providers/IPAssetProvider/index.tsx (100%) rename {src => packages/storykit/src}/providers/index.ts (100%) rename {src => packages/storykit/src}/stories/Introduction.mdx (100%) rename tailwind.config.js => packages/storykit/tailwind.config.js (93%) create mode 100644 packages/storykit/tsconfig.json create mode 100644 pnpm-workspace.yaml delete mode 100644 setupTests.ts delete mode 100644 src/index.ts delete mode 100644 tsconfig.json create mode 100644 turbo.json diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9ce6769..0000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -dist -node_modules -coverage -.next -build \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..696cd38 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,7 @@ +// This configuration only applies to the package manager root. +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/library.js"], + ignorePattern: ["apps/**", "packages/**"], +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7d2a258..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "env": { - "browser": true, - "node": true, - "es6": true - }, - "root": true, - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint"], - "extends": [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/eslint-recommended", - "prettier", - "plugin:prettier/recommended", - "plugin:react-hooks/recommended", - "plugin:storybook/recommended" - ], - "rules": { - "react/react-in-jsx-scope": "off", - "react/prop-types": "off" - } -} diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 5252078..32adefe 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - main + - feature/monorepo-refactor jobs: publish-gpr: @@ -29,6 +29,8 @@ jobs: run: pnpm build - name: Publish to npm - run: npm publish + run: | + cd packages/storykit + npm publish env: NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index 694a99f..279be58 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,43 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# dependencies +# Dependencies node_modules -/.pnp +.pnp .pnp.js -# testing -/coverage - -# production -build -dist - -# misc -.DS_Store +# Local env files +.env .env.local .env.development.local .env.test.local .env.production.local +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug npm-debug.log* yarn-debug.log* yarn-error.log* -*storybook.log -storybook-static +# Misc +.DS_Store +*.pem -.yalc -yalc.lock \ No newline at end of file +__archive + +*storybook.log +storybook-static \ No newline at end of file diff --git a/README.md b/README.md index e1ad9ee..fb889fa 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,80 @@ -# Storykit +# Turborepo starter with Rollup -Plug-and-play React components for Story Protocol. +This is an official starter Turborepo, showing how Turborepo can be used with Rollup for bundling a `ui` package. -## Installation (tbc) +## Using this example -#### Install the package in your React app +Run the following command: -```bash -pnpm install @storyprotocol/storykit @tanstack/react-query +```sh +npx create-turbo@latest -e with-rollup ``` -#### Import the css +## What's inside? -```typescript -import "@storyprotocol/storykit/dist/build.css" -``` - -#### Use the components +This Turborepo includes the following packages/apps: -```typescript -import { Button } from "@storyprotocol/storykit" +### Apps and Packages -function Home() { - return ( -
- -
- ) -} +- `web`: a [Next.js](https://nextjs.org) app +- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo +- `@repo/ui`: a React component library used by the `web` application, compiled with Rollup -``` +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). -See [the example app](/examples/next-app/app/page.tsx). +### Utilities -## Contributing +This Turborepo has some additional tools already setup for you: -#### Installation - -```bash -pnpm install -``` +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting -#### Run Storybook +### Build -Build components within the Storybook workshop environment. +To build all apps and packages, run the following command: -```bash -pnpm storybook ``` - -#### Formatting w\ prettier, linting w\ eslint & running tests - -```bash -pnpm format -pnpm lint -pnpm test +cd my-turborepo +pnpm run build ``` -#### Bundle `/dist` package +### Develop -```bash -pnpm build +To develop all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm run dev ``` -## Installing as a private package +### Remote Caching -1. Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) +Turborepo can use a technique known as [Remote Caching](https://turborepo.org/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. -2. Login with Story Protocol scope: +By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup), then enter the following commands: -```bash -npm login --scope=@storyprotocol --registry=https://npm.pkg.github.com ``` - -3. Use your github username and personal access token to login - -4. Install the package as normal - -```bash -npm install @storyprotocol/storykit +cd my-turborepo +npx turbo login ``` -## Running examples +This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). -From the root, build a package +Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: -```bash -pnpm build ``` - -Link `storykit` for use locally - -```bash -pnpm link --global +npx turbo link ``` -Install the example app +## Useful Links -```bash -cd examples/next-app -pnpm install -``` - -Link the `storykit` package and start the app - -```bash -pnpm link --global @storyprotocol/storykit -pnpm dev -``` +Learn more about the power of Turborepo: -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +- [Pipelines](https://turborepo.org/docs/core-concepts/pipelines) +- [Caching](https://turborepo.org/docs/core-concepts/caching) +- [Remote Caching](https://turborepo.org/docs/core-concepts/remote-caching) +- [Scoped Tasks](https://turborepo.org/docs/core-concepts/scopes) +- [Configuration Options](https://turborepo.org/docs/reference/configuration) +- [CLI Usage](https://turborepo.org/docs/reference/command-line-reference) diff --git a/examples/next-app/.eslintrc.js b/examples/next-app/.eslintrc.js new file mode 100644 index 0000000..044ac2f --- /dev/null +++ b/examples/next-app/.eslintrc.js @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/next.js"], + parser: "@typescript-eslint/parser", + // parserOptions: { + // project: true, + // }, +} diff --git a/examples/next-app/app/page.tsx b/examples/next-app/app/page.tsx index bdf941c..f816599 100644 --- a/examples/next-app/app/page.tsx +++ b/examples/next-app/app/page.tsx @@ -1,22 +1,20 @@ -import dynamic from "next/dynamic" -import Providers from '@/components/Providers' +import "@story-protocol/storykit/dist/build.css" +import dynamic from "next/dynamic" const DynamicHomePage = dynamic( () => { - return import("@/components/HomePage") + return import("../components/HomePage") }, { ssr: false } - ) +) + -import '@storyprotocol/storykit/dist/build.css' export default function Home() { return (
- - - +
) } diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index b4e793a..5631b02 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,31 +1,36 @@ "use client" -// import { Button, IPAssetProvider, IPAssetWidget, useIPAssetContext } from "@storyprotocol/storykit" -import { Button, IPAssetProvider, useIPAssetContext } from "@storyprotocol/storykit" +import { Button, IPAssetProvider, IPAssetWidget, useIPAssetContext } from "@story-protocol/storykit" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" import styles from "./home.module.css" +const queryClient = new QueryClient() + const ExampleComponent = () => { const { nftData, isNftDataLoading } = useIPAssetContext() return ( <> {isNftDataLoading &&
Fetching Asset...
} - {nftData && !isNftDataLoading ? ( -

nft_id: {nftData.nft_id}

- ) : null} + {nftData && !isNftDataLoading ?

nft_id: {nftData?.nft_id}

: null} ) } export default function Home() { return ( -
- - - - - -
+ <> + +
+ + + + + + +
+
+ ) } diff --git a/examples/next-app/components/Providers.tsx b/examples/next-app/components/Providers.tsx deleted file mode 100644 index aba4f4b..0000000 --- a/examples/next-app/components/Providers.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client" - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React from "react" - -const queryClient = new QueryClient() - -export default function Providers({children}: {children: React.ReactNode }) { - return ( - - {children} - - ) -} diff --git a/examples/next-app/next.config.mjs b/examples/next-app/next.config.mjs index 1d61478..0e7209c 100644 --- a/examples/next-app/next.config.mjs +++ b/examples/next-app/next.config.mjs @@ -1,4 +1,6 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {} +const nextConfig = { + // transpilePackages: ["@story-protocol/storykit"], +} export default nextConfig diff --git a/examples/next-app/package.json b/examples/next-app/package.json index b5ebe72..4ca7f66 100644 --- a/examples/next-app/package.json +++ b/examples/next-app/package.json @@ -8,16 +8,25 @@ "start": "next start", "lint": "next lint" }, + "prettier": "@storykit/prettier-config", "dependencies": { + "@story-protocol/storykit": "workspace:*", "@tanstack/react-query": "^5.28.9", "next": "14.1.4", "react": "^18", "react-dom": "^18" }, "devDependencies": { + "@next/eslint-plugin-next": "^14.1.1", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "eslint": "^8.57.0", + "eslint-config-next": "14.2.1", + "prettier": "^3.2.5", "typescript": "^5" } } diff --git a/examples/next-app/pnpm-lock.yaml b/examples/next-app/pnpm-lock.yaml index efb2f45..a2794b7 100644 --- a/examples/next-app/pnpm-lock.yaml +++ b/examples/next-app/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: react-dom: specifier: ^18 version: 18.2.0(react@18.2.0) + viem: + specifier: ^2.7.19 + version: 2.9.6(typescript@5.4.3) devDependencies: '@types/node': @@ -34,6 +37,10 @@ devDependencies: packages: + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + /@next/env@14.1.4: resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} dev: false @@ -119,6 +126,36 @@ packages: dev: false optional: true + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + + /@scure/base@1.1.6: + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + dev: false + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.6 + dev: false + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.6 + dev: false + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: @@ -161,6 +198,20 @@ packages: csstype: 3.1.3 dev: true + /abitype@1.0.0(typescript@5.4.3): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.4.3 + dev: false + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -184,6 +235,14 @@ packages: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: false + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: false @@ -311,8 +370,43 @@ packages: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true - dev: true /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true + + /viem@2.9.6(typescript@5.4.3): + resolution: {integrity: sha512-VVFWjGQei2wnWTvAB/xrIf22m6flCwxeBr8LnwejXMTSSi1EORWEswrw2lfKTmw3TlRPSG4uSiQMa/d0l0DKRg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 1.0.0(typescript@5.4.3) + isows: 1.0.3(ws@8.13.0) + typescript: 5.4.3 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false diff --git a/examples/next-app/tsconfig.json b/examples/next-app/tsconfig.json index e7ff90f..01d27bc 100644 --- a/examples/next-app/tsconfig.json +++ b/examples/next-app/tsconfig.json @@ -1,26 +1,30 @@ { + "extends": "@storykit/typescript-config/nextjs.json", "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, "plugins": [ { "name": "next" } ], "paths": { - "@/*": ["./*"] - } + "@/*": [ + "./*" + ] + }, + "allowJs": true, + "noEmit": true, + "incremental": true, + "resolveJsonModule": true, + "jsx": "preserve" }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "next.config.js" + ], + "exclude": [ + "node_modules" + ] } diff --git a/package.json b/package.json index a0219d1..df895a4 100644 --- a/package.json +++ b/package.json @@ -1,126 +1,26 @@ { - "name": "@storyprotocol/storykit", - "author": "storyprotocol engineering ", - "version": "0.1.2", - "type": "module", - "main": "dist/storyprotocol-storykit.cjs.js", - "module": "dist/storyprotocol-storykit.esm.js", - "exports": { - ".": { - "module": "./dist/storyprotocol-storykit.esm.js", - "default": "./dist/storyprotocol-storykit.cjs.js" - }, - "./package.json": "./package.json", - "./dist/build.css": "./dist/build.css" - }, - "types": "dist/types.d.ts", - "files": [ - "dist" - ], - "publishConfig": { - "registry": "https://npm.pkg.github.com/@storyprotocol" - }, + "private": true, "scripts": { - "test": "react-scripts test", - "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", - "lint": "eslint . --ext .ts,.tsx --ignore-path .gitignore --fix", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build", - "build-tailwind": "pnpm exec tailwindcss -o dist/build.css --minify", - "build": "rollup -c --bundleConfigAsCjs && pnpm build-tailwind", + "build": "turbo run build --filter @story-protocol/storykit", + "dev": "turbo run dev --filter @story-protocol/storykit", + "lint": "turbo run lint --filter @story-protocol/storykit", + "lint-all": "turbo run lint", + "format": "prettier --write \"**/*.{ts,tsx,md}\"", "prepare": "husky" }, - "lint-staged": { - "*.{ts,tsx}": [ - "npm run format", - "npm run lint" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "dependencies": { - "@emotion/is-prop-valid": "^1.2.2", - "@emotion/react": "^11.11.4", - "@headlessui/react": "^1.7.18", - "@radix-ui/react-accordion": "^1.1.2", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", - "lucide-react": "^0.364.0", - "react-apexcharts": "^1.4.1", - "react-force-graph-2d": "^1.25.4", - "react-icons": "^5.0.1", - "tailwind-merge": "^2.2.2", - "tailwindcss": "^3.4.1", - "tailwindcss-animate": "^1.0.7", - "viem": "^2.7.19" - }, "devDependencies": { - "@chromatic-com/storybook": "^1.2.25", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^11.1.6", - "@storybook/addon-essentials": "^8.0.4", - "@storybook/addon-interactions": "^8.0.4", - "@storybook/addon-links": "^8.0.4", - "@storybook/addon-onboarding": "^8.0.4", - "@storybook/addon-styling-webpack": "^1.0.0", - "@storybook/addon-themes": "^8.0.4", - "@storybook/blocks": "^8.0.4", - "@storybook/manager-api": "^8.0.4", - "@storybook/preset-create-react-app": "^8.0.4", - "@storybook/react": "^8.0.4", - "@storybook/react-webpack5": "^8.0.4", - "@storybook/test": "^8.0.4", - "@storybook/theming": "^8.0.4", - "@tanstack/react-query": "^5.25.0", - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "@types/jest": "^29.5.12", - "@types/node": "^16.18.91", - "@types/react": "^18.2.70", - "@types/react-dom": "^18.2.22", - "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", + "@storykit/eslint-config": "workspace:*", "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-storybook": "^0.8.0", "husky": "^9.0.11", "lint-staged": "^15.2.2", - "postcss": "^8.4.38", "prettier": "^3.2.5", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "5.0.1", - "rollup": "^4.13.1", - "rollup-plugin-dts": "^6.1.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-postcss": "^4.0.2", - "storybook": "^8.0.4", - "typescript": "^5.4.3", - "viem": "^2.7.19", - "webpack": "^5.91.0" + "turbo": "^1.12.2" + }, + "lint-staged": { + "packages/*.{ts,tsx}": [ + "pnpm format", + "pnpm lint" + ] }, - "peerDependencies": { - "@tanstack/react-query": "^5.25.0", - "react": ">=18.2.0", - "react-dom": ">=18.2.0", - "typescript": "^5.4.3" - } + "packageManager": "pnpm@8.9.0" } diff --git a/packages/config-eslint/README.md b/packages/config-eslint/README.md new file mode 100644 index 0000000..d521cce --- /dev/null +++ b/packages/config-eslint/README.md @@ -0,0 +1,3 @@ +# `@storykit/eslint-config` + +Collection of internal eslint configurations. diff --git a/packages/config-eslint/library.js b/packages/config-eslint/library.js new file mode 100644 index 0000000..b93219d --- /dev/null +++ b/packages/config-eslint/library.js @@ -0,0 +1,34 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], + plugins: ["only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + { + files: ["*.js?(x)", "*.cjs?(x)", "*.mjs?(x)", "*.ts?(x)"], + }, + ], +}; diff --git a/packages/config-eslint/next.js b/packages/config-eslint/next.js new file mode 100644 index 0000000..4c5c2d9 --- /dev/null +++ b/packages/config-eslint/next.js @@ -0,0 +1,35 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + // extends: [ + // "eslint:recommended", + // "prettier", + // require.resolve("@vercel/style-guide/eslint/next"), + // "eslint-config-turbo", + // ], + extends: ["next/core-web-vitals", "prettier"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + plugins: ["only-warn"], + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + ], + overrides: [{ files: ["*.js?(x)", "*.ts?(x)"] }], +}; diff --git a/packages/config-eslint/package.json b/packages/config-eslint/package.json new file mode 100644 index 0000000..ba694b5 --- /dev/null +++ b/packages/config-eslint/package.json @@ -0,0 +1,19 @@ +{ + "name": "@storykit/eslint-config", + "version": "0.0.0", + "private": true, + "files": [ + "library.js", + "next.js", + "react-internal.js" + ], + "devDependencies": { + "@vercel/style-guide": "^5.2.0", + "eslint-config-turbo": "^1.12.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-only-warn": "^1.1.0", + "@typescript-eslint/parser": "^7.1.0", + "@typescript-eslint/eslint-plugin": "^7.1.0", + "typescript": "^5.3.3" + } +} diff --git a/packages/config-eslint/react-internal.js b/packages/config-eslint/react-internal.js new file mode 100644 index 0000000..2639034 --- /dev/null +++ b/packages/config-eslint/react-internal.js @@ -0,0 +1,58 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/* + * This is a custom ESLint configuration for use with + * internal (bundled by their consumer) libraries + * that utilize React. + * + * This config extends the Vercel Engineering Style Guide. + * For more information, see https://github.com/vercel/style-guide + * + */ + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/eslint-recommended", + "prettier", + "plugin:prettier/recommended", + "plugin:react-hooks/recommended", + "plugin:storybook/recommended", + ], + // extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], + plugins: ["@typescript-eslint", "only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + browser: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + ".*.cjs", + "node_modules/", + "dist/", + ], + overrides: [ + // Force ESLint to detect .tsx files + { files: ["*.js?(x)", "*.ts?(x)"] }, + ], + rules: { + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + }, +}; diff --git a/.prettierrc.json b/packages/config-prettier/index.json similarity index 100% rename from .prettierrc.json rename to packages/config-prettier/index.json diff --git a/packages/config-prettier/package.json b/packages/config-prettier/package.json new file mode 100644 index 0000000..85a26b5 --- /dev/null +++ b/packages/config-prettier/package.json @@ -0,0 +1,13 @@ +{ + "name": "@storykit/prettier-config", + "version": "0.1.0", + "private": true, + "main": "./index.json", + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "prettier": "^3.2.5" + }, + "peerDependencies": { + "prettier": "^3.2.5" + } +} diff --git a/packages/config-typescript/base.json b/packages/config-typescript/base.json new file mode 100644 index 0000000..2c7114f --- /dev/null +++ b/packages/config-typescript/base.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "compilerOptions": { + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "moduleResolution": "Bundler", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true + }, + "exclude": ["node_modules"] +} diff --git a/packages/config-typescript/nextjs.json b/packages/config-typescript/nextjs.json new file mode 100644 index 0000000..242e6c9 --- /dev/null +++ b/packages/config-typescript/nextjs.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Next.js", + "extends": "./base.json", + "compilerOptions": { + "plugins": [{ "name": "next" }], + + "declaration": false, + "declarationMap": false, + "incremental": true, + "jsx": "preserve", + "module": "esnext", + "noEmit": true, + "resolveJsonModule": true, + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "moduleResolution": "node" + }, + "include": ["src", "next-env.d.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/config-typescript/package.json b/packages/config-typescript/package.json new file mode 100644 index 0000000..2f09e5a --- /dev/null +++ b/packages/config-typescript/package.json @@ -0,0 +1,9 @@ +{ + "name": "@storykit/typescript-config", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/config-typescript/react-library.json b/packages/config-typescript/react-library.json new file mode 100644 index 0000000..6d2a3bb --- /dev/null +++ b/packages/config-typescript/react-library.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "React Library", + "extends": "./base.json", + "compilerOptions": { + "jsx": "react-jsx", + "module": "ESNext", + "outDir": "dist", + "declaration": true, + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"] + } +} diff --git a/packages/storykit/.eslintrc.cjs b/packages/storykit/.eslintrc.cjs new file mode 100644 index 0000000..fc3bf2f --- /dev/null +++ b/packages/storykit/.eslintrc.cjs @@ -0,0 +1,13 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/react-internal.js"], + parser: "@typescript-eslint/parser", + // parserOptions: { + // project: true, + // }, + // parserOptions: { + // project: "./tsconfig.json", + // tsconfigRootDir: __dirname, + // }, +} diff --git a/packages/storykit/.gitignore b/packages/storykit/.gitignore new file mode 100644 index 0000000..694a99f --- /dev/null +++ b/packages/storykit/.gitignore @@ -0,0 +1,30 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +build +dist + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +*storybook.log +storybook-static + +.yalc +yalc.lock \ No newline at end of file diff --git a/.storybook/assets/story-logo.png b/packages/storykit/.storybook/assets/story-logo.png similarity index 100% rename from .storybook/assets/story-logo.png rename to packages/storykit/.storybook/assets/story-logo.png diff --git a/.storybook/main.ts b/packages/storykit/.storybook/main.ts similarity index 100% rename from .storybook/main.ts rename to packages/storykit/.storybook/main.ts diff --git a/.storybook/manager-head.html b/packages/storykit/.storybook/manager-head.html similarity index 100% rename from .storybook/manager-head.html rename to packages/storykit/.storybook/manager-head.html diff --git a/.storybook/manager.ts b/packages/storykit/.storybook/manager.ts similarity index 100% rename from .storybook/manager.ts rename to packages/storykit/.storybook/manager.ts diff --git a/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts similarity index 100% rename from .storybook/preview.ts rename to packages/storykit/.storybook/preview.ts diff --git a/.storybook/theme.ts b/packages/storykit/.storybook/theme.ts similarity index 100% rename from .storybook/theme.ts rename to packages/storykit/.storybook/theme.ts diff --git a/components.json b/packages/storykit/components.json similarity index 100% rename from components.json rename to packages/storykit/components.json diff --git a/packages/storykit/package.json b/packages/storykit/package.json new file mode 100644 index 0000000..58aac4a --- /dev/null +++ b/packages/storykit/package.json @@ -0,0 +1,105 @@ +{ + "name": "@story-protocol/storykit", + "author": "storyprotocol engineering ", + "version": "0.1.2", + "type": "module", + "main": "dist/storyprotocol-storykit.cjs.js", + "module": "dist/storyprotocol-storykit.esm.js", + "exports": { + ".": { + "module": "./dist/storyprotocol-storykit.esm.js", + "default": "./dist/storyprotocol-storykit.cjs.js" + }, + "./package.json": "./package.json", + "./dist/build.css": "./dist/build.css" + }, + "types": "dist/types.d.ts", + "files": [ + "dist" + ], + "publishConfig": { + "registry": "https://npm.pkg.github.com/@storyprotocol" + }, + "scripts": { + "test": "react-scripts test", + "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", + "dev": "storybook dev -p 6006", + "build-tailwind": "pnpm exec tailwindcss -o dist/build.css --minify", + "build": "rollup -c --bundleConfigAsCjs && pnpm build-tailwind" + }, + "prettier": "@storykit/prettier-config", + "dependencies": { + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/react": "^11.11.4", + "@headlessui/react": "^1.7.18", + "@radix-ui/react-accordion": "^1.1.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "lucide-react": "^0.364.0", + "react-apexcharts": "^1.4.1", + "react-force-graph-2d": "^1.25.4", + "react-icons": "^5.0.1", + "tailwind-merge": "^2.2.2", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", + "viem": "^2.7.19" + }, + "devDependencies": { + "@chromatic-com/storybook": "^1.2.25", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@storybook/addon-essentials": "^8.0.4", + "@storybook/addon-interactions": "^8.0.4", + "@storybook/addon-links": "^8.0.4", + "@storybook/addon-onboarding": "^8.0.4", + "@storybook/addon-styling-webpack": "^1.0.0", + "@storybook/addon-themes": "^8.0.4", + "@storybook/blocks": "^8.0.4", + "@storybook/manager-api": "^8.0.4", + "@storybook/preset-create-react-app": "^8.0.4", + "@storybook/react": "^8.0.4", + "@storybook/react-webpack5": "^8.0.4", + "@storybook/test": "^8.0.4", + "@storybook/theming": "^8.0.4", + "@tanstack/react-query": "^5.25.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@turbo/gen": "^1.12.4", + "@types/jest": "^29.5.12", + "@types/node": "^20.11.24", + "@types/eslint": "^8.56.5", + "@types/react": "^18.2.61", + "@types/react-dom": "^18.2.19", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-storybook": "^0.8.0", + "postcss": "^8.4.38", + "prettier": "^3.2.5", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "rollup": "^4.13.1", + "rollup-plugin-dts": "^6.1.0", + "rollup-plugin-peer-deps-external": "^2.2.4", + "rollup-plugin-postcss": "^4.0.2", + "storybook": "^8.0.4", + "typescript": "^5.3.3", + "webpack": "^5.91.0" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.25.0", + "react": ">=18.2.0", + "react-dom": ">=18.2.0", + "typescript": "^5.4.3" + } +} diff --git a/postcss.config.mjs b/packages/storykit/postcss.config.mjs similarity index 100% rename from postcss.config.mjs rename to packages/storykit/postcss.config.mjs diff --git a/rollup.config.mjs b/packages/storykit/rollup.config.js similarity index 93% rename from rollup.config.mjs rename to packages/storykit/rollup.config.js index 88713d6..5ea9e6c 100644 --- a/rollup.config.mjs +++ b/packages/storykit/rollup.config.js @@ -6,7 +6,6 @@ import dts from "rollup-plugin-dts" import peerDepsExternal from "rollup-plugin-peer-deps-external" import postcss from "rollup-plugin-postcss" -// eslint-disable-next-line @typescript-eslint/no-var-requires const packageJson = require("./package.json") const config = [ diff --git a/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx similarity index 100% rename from src/components/Button/Button.tsx rename to packages/storykit/src/components/Button/Button.tsx diff --git a/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx similarity index 94% rename from src/components/Button/__docs__/Button.mdx rename to packages/storykit/src/components/Button/__docs__/Button.mdx index d204fc3..56555c5 100644 --- a/src/components/Button/__docs__/Button.mdx +++ b/packages/storykit/src/components/Button/__docs__/Button.mdx @@ -14,7 +14,7 @@ Button component with different props. ## Usage ```ts -import { Button } from "@storyprotocol/storykit"; +import { Button } from "@story-protocol/storykit"; const Example = () => { return ( diff --git a/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx similarity index 100% rename from src/components/Button/__docs__/Button.stories.tsx rename to packages/storykit/src/components/Button/__docs__/Button.stories.tsx diff --git a/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx similarity index 100% rename from src/components/Button/__tests__/Button.test.tsx rename to packages/storykit/src/components/Button/__tests__/Button.test.tsx diff --git a/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts similarity index 100% rename from src/components/Button/index.ts rename to packages/storykit/src/components/Button/index.ts diff --git a/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx similarity index 100% rename from src/components/IPAGraph/IPAGraph.tsx rename to packages/storykit/src/components/IPAGraph/IPAGraph.tsx diff --git a/src/components/IPAGraph/__docs__/Example.tsx b/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx similarity index 100% rename from src/components/IPAGraph/__docs__/Example.tsx rename to packages/storykit/src/components/IPAGraph/__docs__/Example.tsx diff --git a/src/components/IPAGraph/__docs__/IPAGraph.mdx b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx similarity index 84% rename from src/components/IPAGraph/__docs__/IPAGraph.mdx rename to packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx index 166f3ff..8c93c72 100644 --- a/src/components/IPAGraph/__docs__/IPAGraph.mdx +++ b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx @@ -17,8 +17,8 @@ Show Asset derivatives graph ## Usage ```ts -import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPAGraph } from "@storyprotocol/storykit" +import { IPAssetProvider } from "@story-protocol/storykit" +import { IPAGraph } from "@story-protocol/storykit" const ExamplePage = () => { return ( diff --git a/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx similarity index 100% rename from src/components/IPAGraph/__docs__/IPAGraph.stories.tsx rename to packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx diff --git a/src/components/IPAGraph/index.ts b/packages/storykit/src/components/IPAGraph/index.ts similarity index 100% rename from src/components/IPAGraph/index.ts rename to packages/storykit/src/components/IPAGraph/index.ts diff --git a/src/components/IPAPolicyList/IPAPolicyList.tsx b/packages/storykit/src/components/IPAPolicyList/IPAPolicyList.tsx similarity index 100% rename from src/components/IPAPolicyList/IPAPolicyList.tsx rename to packages/storykit/src/components/IPAPolicyList/IPAPolicyList.tsx diff --git a/src/components/IPAPolicyList/__docs__/Example.tsx b/packages/storykit/src/components/IPAPolicyList/__docs__/Example.tsx similarity index 100% rename from src/components/IPAPolicyList/__docs__/Example.tsx rename to packages/storykit/src/components/IPAPolicyList/__docs__/Example.tsx diff --git a/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx b/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx similarity index 81% rename from src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx rename to packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx index 170b339..c0a10ae 100644 --- a/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx +++ b/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx @@ -17,8 +17,8 @@ Show Asset derivatives graph ## Usage ```ts -import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPAPolicyList } from "@storyprotocol/storykit" +import { IPAssetProvider } from "@story-protocol/storykit" +import { IPAPolicyList } from "@story-protocol/storykit" const ExamplePage = () => { return ( diff --git a/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx b/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx similarity index 100% rename from src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx rename to packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx diff --git a/src/components/IPAPolicyList/index.tsx b/packages/storykit/src/components/IPAPolicyList/index.tsx similarity index 100% rename from src/components/IPAPolicyList/index.tsx rename to packages/storykit/src/components/IPAPolicyList/index.tsx diff --git a/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx similarity index 100% rename from src/components/IPARoyaltyChart/IPARoyaltyChart.tsx rename to packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx diff --git a/src/components/IPARoyaltyChart/__docs__/Example.tsx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx similarity index 100% rename from src/components/IPARoyaltyChart/__docs__/Example.tsx rename to packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx diff --git a/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx similarity index 81% rename from src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx rename to packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx index adfb32d..e3e0fa7 100644 --- a/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx +++ b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx @@ -17,8 +17,8 @@ Show Asset derivatives graph ## Usage ```ts -import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPARoyaltyChart } from "@storyprotocol/storykit" +import { IPAssetProvider } from "@story-protocol/storykit" +import { IPARoyaltyChart } from "@story-protocol/storykit" const ExamplePage = () => { return ( diff --git a/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx similarity index 100% rename from src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx rename to packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx diff --git a/src/components/IPARoyaltyChart/index.tsx b/packages/storykit/src/components/IPARoyaltyChart/index.tsx similarity index 100% rename from src/components/IPARoyaltyChart/index.tsx rename to packages/storykit/src/components/IPARoyaltyChart/index.tsx diff --git a/src/components/IPAssetWidget/IPAssetWidget.tsx b/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx similarity index 100% rename from src/components/IPAssetWidget/IPAssetWidget.tsx rename to packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx diff --git a/src/components/IPAssetWidget/__docs__/Example.tsx b/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx similarity index 100% rename from src/components/IPAssetWidget/__docs__/Example.tsx rename to packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx diff --git a/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx similarity index 91% rename from src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx rename to packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx index 3b2f904..168331a 100644 --- a/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx +++ b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx @@ -17,7 +17,7 @@ Button component with different props. ## Usage ```ts -import { IPAssetWidget } from "@storyprotocol/storykit" +import { IPAssetWidget } from "@story-protocol/storykit" const ExamplePage = () => { return ( diff --git a/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx similarity index 100% rename from src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx rename to packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx diff --git a/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx similarity index 100% rename from src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx rename to packages/storykit/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx diff --git a/src/components/IPAssetWidget/index.ts b/packages/storykit/src/components/IPAssetWidget/index.ts similarity index 100% rename from src/components/IPAssetWidget/index.ts rename to packages/storykit/src/components/IPAssetWidget/index.ts diff --git a/src/components/index.ts b/packages/storykit/src/components/index.ts similarity index 100% rename from src/components/index.ts rename to packages/storykit/src/components/index.ts diff --git a/src/components/ui/accordion.tsx b/packages/storykit/src/components/ui/accordion.tsx similarity index 100% rename from src/components/ui/accordion.tsx rename to packages/storykit/src/components/ui/accordion.tsx diff --git a/src/global.css b/packages/storykit/src/global.css similarity index 100% rename from src/global.css rename to packages/storykit/src/global.css diff --git a/packages/storykit/src/index.ts b/packages/storykit/src/index.ts new file mode 100644 index 0000000..1762f40 --- /dev/null +++ b/packages/storykit/src/index.ts @@ -0,0 +1,2 @@ +export * from "./components"; +export * from "./providers"; diff --git a/src/lib/api.ts b/packages/storykit/src/lib/api.ts similarity index 82% rename from src/lib/api.ts rename to packages/storykit/src/lib/api.ts index 562f0cb..7ba1d71 100644 --- a/src/lib/api.ts +++ b/packages/storykit/src/lib/api.ts @@ -8,6 +8,11 @@ const API_KEY = process.env.STORY_PROTOCOL_X_API_KEY || "" +console.log("API_BASE_URL", API_BASE_URL) +console.log("process.env.STORYBOOK_API_BASE_URL", process.env.STORYBOOK_API_BASE_URL) +console.log("process.env.NEXT_PUBLIC_API_BASE_URL", process.env.NEXT_PUBLIC_API_BASE_URL) +console.log("process.env.API_BASE_URL", process.env.API_BASE_URL) + export async function getResource(resourceName: ResourceType, resourceId: string) { try { const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { diff --git a/src/lib/graph.ts b/packages/storykit/src/lib/graph.ts similarity index 98% rename from src/lib/graph.ts rename to packages/storykit/src/lib/graph.ts index 56f30b2..a1031a6 100644 --- a/src/lib/graph.ts +++ b/packages/storykit/src/lib/graph.ts @@ -1,6 +1,7 @@ -import { Asset } from "@/lib/types" import { Address } from "viem" +import { Asset } from "./types" + export interface GraphNode { id: string name: string diff --git a/src/lib/simplehash/index.ts b/packages/storykit/src/lib/simplehash/index.ts similarity index 100% rename from src/lib/simplehash/index.ts rename to packages/storykit/src/lib/simplehash/index.ts diff --git a/src/lib/simplehash/types/simplehash.d.ts b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts similarity index 100% rename from src/lib/simplehash/types/simplehash.d.ts rename to packages/storykit/src/lib/simplehash/types/simplehash.d.ts diff --git a/src/lib/types.ts b/packages/storykit/src/lib/types.ts similarity index 100% rename from src/lib/types.ts rename to packages/storykit/src/lib/types.ts diff --git a/src/lib/utils.ts b/packages/storykit/src/lib/utils.ts similarity index 100% rename from src/lib/utils.ts rename to packages/storykit/src/lib/utils.ts diff --git a/src/providers/IPAssetProvider/IPAssetProvider.tsx b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx similarity index 98% rename from src/providers/IPAssetProvider/IPAssetProvider.tsx rename to packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx index e16ed3b..ac3fd20 100644 --- a/src/providers/IPAssetProvider/IPAssetProvider.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx @@ -33,7 +33,7 @@ export const IPA_CARD_TABS = [ ] export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { - const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) + const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0]?.id) // Fetch asset data const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ queryKey: [RESOURCE_TYPE.ASSET, ipId], diff --git a/src/providers/IPAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx similarity index 100% rename from src/providers/IPAssetProvider/__docs__/Example.tsx rename to packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx diff --git a/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx similarity index 90% rename from src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx rename to packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx index 28ae64c..31d264d 100644 --- a/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx +++ b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx @@ -19,7 +19,7 @@ Provides IP Asset data to children components. ```ts // wrap your component with the IPAssetProvider -import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPAssetProvider } from "@story-protocol/storykit" import ExampleComponent from './ExampleComponent' const ExamplePage = () => { @@ -36,7 +36,7 @@ export default ExamplePage; ```ts // in your component file, context provides IP asset state -import { useIPAssetContext } from "@storyprotocol/storykit" +import { useIPAssetContext } from "@story-protocol/storykit" const ExampleComponent = () => { diff --git a/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx similarity index 100% rename from src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx rename to packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx diff --git a/src/providers/IPAssetProvider/index.tsx b/packages/storykit/src/providers/IPAssetProvider/index.tsx similarity index 100% rename from src/providers/IPAssetProvider/index.tsx rename to packages/storykit/src/providers/IPAssetProvider/index.tsx diff --git a/src/providers/index.ts b/packages/storykit/src/providers/index.ts similarity index 100% rename from src/providers/index.ts rename to packages/storykit/src/providers/index.ts diff --git a/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx similarity index 100% rename from src/stories/Introduction.mdx rename to packages/storykit/src/stories/Introduction.mdx diff --git a/tailwind.config.js b/packages/storykit/tailwind.config.js similarity index 93% rename from tailwind.config.js rename to packages/storykit/tailwind.config.js index 7cb7e37..d790af4 100644 --- a/tailwind.config.js +++ b/packages/storykit/tailwind.config.js @@ -1,12 +1,7 @@ /** @type {import('tailwindcss').Config} */ module.exports = { darkMode: ["class"], - content: [ - './pages/**/*.{ts,tsx}', - './components/**/*.{ts,tsx}', - './app/**/*.{ts,tsx}', - './src/**/*.{ts,tsx}', - ], + content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], prefix: "", theme: { container: { @@ -74,4 +69,4 @@ module.exports = { }, }, plugins: [require("tailwindcss-animate")], -} \ No newline at end of file +} diff --git a/packages/storykit/tsconfig.json b/packages/storykit/tsconfig.json new file mode 100644 index 0000000..ca92804 --- /dev/null +++ b/packages/storykit/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@storykit/typescript-config/react-library.json", + "include": ["src"], + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["dist", "build", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80e6c50..ca7dbbe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,201 +4,311 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@emotion/is-prop-valid': - specifier: ^1.2.2 - version: 1.2.2 - '@emotion/react': - specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.73)(react@18.2.0) - '@headlessui/react': - specifier: ^1.7.18 - version: 1.7.18(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-accordion': - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - class-variance-authority: - specifier: ^0.7.0 - version: 0.7.0 - clsx: - specifier: ^2.1.0 - version: 2.1.0 - lucide-react: - specifier: ^0.364.0 - version: 0.364.0(react@18.2.0) - react-apexcharts: - specifier: ^1.4.1 - version: 1.4.1(apexcharts@3.48.0)(react@18.2.0) - react-force-graph-2d: - specifier: ^1.25.4 - version: 1.25.4(react@18.2.0) - react-icons: - specifier: ^5.0.1 - version: 5.0.1(react@18.2.0) - tailwind-merge: - specifier: ^2.2.2 - version: 2.2.2 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.3 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.3) - viem: - specifier: ^2.7.19 - version: 2.9.6(typescript@5.4.3) - -devDependencies: - '@chromatic-com/storybook': - specifier: ^1.2.25 - version: 1.2.25(react@18.2.0) - '@rollup/plugin-commonjs': - specifier: ^25.0.7 - version: 25.0.7(rollup@4.13.2) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.13.2) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@4.13.2) - '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.13.2)(typescript@5.4.3) - '@storybook/addon-essentials': - specifier: ^8.0.4 - version: 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-interactions': - specifier: ^8.0.4 - version: 8.0.5(@types/jest@29.5.12)(jest@27.5.1) - '@storybook/addon-links': - specifier: ^8.0.4 - version: 8.0.5(react@18.2.0) - '@storybook/addon-onboarding': - specifier: ^8.0.4 - version: 8.0.5 - '@storybook/addon-styling-webpack': - specifier: ^1.0.0 - version: 1.0.0(webpack@5.91.0) - '@storybook/addon-themes': - specifier: ^8.0.4 - version: 8.0.5 - '@storybook/blocks': - specifier: ^8.0.4 - version: 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': - specifier: ^8.0.4 - version: 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/preset-create-react-app': - specifier: ^8.0.4 - version: 8.0.5(react-refresh@0.14.0)(react-scripts@5.0.1)(typescript@5.4.3)(webpack@5.91.0) - '@storybook/react': - specifier: ^8.0.4 - version: 8.0.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@storybook/react-webpack5': - specifier: ^8.0.4 - version: 8.0.5(esbuild@0.20.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@storybook/test': - specifier: ^8.0.4 - version: 8.0.5(@types/jest@29.5.12)(jest@27.5.1) - '@storybook/theming': - specifier: ^8.0.4 - version: 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@tanstack/react-query': - specifier: ^5.25.0 - version: 5.28.9(react@18.2.0) - '@testing-library/jest-dom': - specifier: ^5.17.0 - version: 5.17.0 - '@testing-library/react': - specifier: ^13.4.0 - version: 13.4.0(react-dom@18.2.0)(react@18.2.0) - '@testing-library/user-event': - specifier: ^13.5.0 - version: 13.5.0(@testing-library/dom@9.3.4) - '@trivago/prettier-plugin-sort-imports': - specifier: ^4.3.0 - version: 4.3.0(prettier@3.2.5) - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 - '@types/node': - specifier: ^16.18.91 - version: 16.18.93 - '@types/react': - specifier: ^18.2.70 - version: 18.2.73 - '@types/react-dom': - specifier: ^18.2.22 - version: 18.2.23 - '@typescript-eslint/eslint-plugin': - specifier: ^7.4.0 - version: 7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/parser': - specifier: ^7.4.0 - version: 7.4.0(eslint@8.57.0)(typescript@5.4.3) - eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-plugin-prettier: - specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) - eslint-plugin-react: - specifier: ^7.34.1 - version: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.57.0) - eslint-plugin-storybook: - specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.0)(typescript@5.4.3) - husky: - specifier: ^9.0.11 - version: 9.0.11 - lint-staged: - specifier: ^15.2.2 - version: 15.2.2 - postcss: - specifier: ^8.4.38 - version: 8.4.38 - prettier: - specifier: ^3.2.5 - version: 3.2.5 - prop-types: - specifier: ^15.8.1 - version: 15.8.1 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-scripts: - specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.2.0)(typescript@5.4.3) - rollup: - specifier: ^4.13.1 - version: 4.13.2 - rollup-plugin-dts: - specifier: ^6.1.0 - version: 6.1.0(rollup@4.13.2)(typescript@5.4.3) - rollup-plugin-peer-deps-external: - specifier: ^2.2.4 - version: 2.2.4(rollup@4.13.2) - rollup-plugin-postcss: - specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.38) - storybook: - specifier: ^8.0.4 - version: 8.0.5(react-dom@18.2.0)(react@18.2.0) - typescript: - specifier: ^5.4.3 - version: 5.4.3 - webpack: - specifier: ^5.91.0 - version: 5.91.0(esbuild@0.20.2) +importers: + + .: + devDependencies: + '@storykit/eslint-config': + specifier: workspace:* + version: link:packages/config-eslint + eslint: + specifier: ^8.57.0 + version: 8.57.0 + husky: + specifier: ^9.0.11 + version: 9.0.11 + lint-staged: + specifier: ^15.2.2 + version: 15.2.2 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + turbo: + specifier: ^1.12.2 + version: 1.13.3 + + examples/next-app: + dependencies: + '@story-protocol/storykit': + specifier: workspace:* + version: link:../../packages/storykit + '@tanstack/react-query': + specifier: ^5.28.9 + version: 5.32.0(react@18.3.0) + next: + specifier: 14.1.4 + version: 14.1.4(react-dom@18.3.0)(react@18.3.0) + react: + specifier: ^18 + version: 18.3.0 + react-dom: + specifier: ^18 + version: 18.3.0(react@18.3.0) + devDependencies: + '@next/eslint-plugin-next': + specifier: ^14.1.1 + version: 14.2.3 + '@storykit/eslint-config': + specifier: workspace:* + version: link:../../packages/config-eslint + '@storykit/prettier-config': + specifier: workspace:* + version: link:../../packages/config-prettier + '@storykit/typescript-config': + specifier: workspace:* + version: link:../../packages/config-typescript + '@types/node': + specifier: ^20 + version: 20.12.7 + '@types/react': + specifier: ^18 + version: 18.3.0 + '@types/react-dom': + specifier: ^18 + version: 18.3.0 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-next: + specifier: 14.2.1 + version: 14.2.1(eslint@8.57.0)(typescript@5.4.5) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + typescript: + specifier: ^5 + version: 5.4.5 + + packages/config-eslint: + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^7.1.0 + version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^7.1.0 + version: 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@vercel/style-guide': + specifier: ^5.2.0 + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-config-turbo: + specifier: ^1.12.4 + version: 1.13.3(eslint@8.57.0) + eslint-plugin-only-warn: + specifier: ^1.1.0 + version: 1.1.0 + typescript: + specifier: ^5.3.3 + version: 5.4.5 + + packages/config-prettier: + devDependencies: + '@trivago/prettier-plugin-sort-imports': + specifier: ^4.3.0 + version: 4.3.0(prettier@3.2.5) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + + packages/config-typescript: {} + + packages/storykit: + dependencies: + '@emotion/is-prop-valid': + specifier: ^1.2.2 + version: 1.2.2 + '@emotion/react': + specifier: ^11.11.4 + version: 11.11.4(@types/react@18.3.0)(react@18.3.0) + '@headlessui/react': + specifier: ^1.7.18 + version: 1.7.19(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-accordion': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.1 + lucide-react: + specifier: ^0.364.0 + version: 0.364.0(react@18.3.0) + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) + react-icons: + specifier: ^5.0.1 + version: 5.1.0(react@18.3.0) + tailwind-merge: + specifier: ^2.2.2 + version: 2.3.0 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.3 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.3) + viem: + specifier: ^2.7.19 + version: 2.9.27(typescript@5.4.5) + devDependencies: + '@chromatic-com/storybook': + specifier: ^1.2.25 + version: 1.3.3(react@18.3.0) + '@rollup/plugin-commonjs': + specifier: ^25.0.7 + version: 25.0.7(rollup@4.16.4) + '@rollup/plugin-node-resolve': + specifier: ^15.2.3 + version: 15.2.3(rollup@4.16.4) + '@rollup/plugin-terser': + specifier: ^0.4.4 + version: 0.4.4(rollup@4.16.4) + '@rollup/plugin-typescript': + specifier: ^11.1.6 + version: 11.1.6(rollup@4.16.4)(typescript@5.4.5) + '@storybook/addon-essentials': + specifier: ^8.0.4 + version: 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/addon-interactions': + specifier: ^8.0.4 + version: 8.0.9(@types/jest@29.5.12)(jest@27.5.1) + '@storybook/addon-links': + specifier: ^8.0.4 + version: 8.0.9(react@18.3.0) + '@storybook/addon-onboarding': + specifier: ^8.0.4 + version: 8.0.9 + '@storybook/addon-styling-webpack': + specifier: ^1.0.0 + version: 1.0.0(webpack@5.91.0) + '@storybook/addon-themes': + specifier: ^8.0.4 + version: 8.0.9 + '@storybook/blocks': + specifier: ^8.0.4 + version: 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/manager-api': + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/preset-create-react-app': + specifier: ^8.0.4 + version: 8.0.9(react-refresh@0.14.1)(react-scripts@5.0.1)(typescript@5.4.5)(webpack@5.91.0) + '@storybook/react': + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/react-webpack5': + specifier: ^8.0.4 + version: 8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/test': + specifier: ^8.0.4 + version: 8.0.9(@types/jest@29.5.12)(jest@27.5.1) + '@storybook/theming': + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storykit/eslint-config': + specifier: workspace:* + version: link:../config-eslint + '@storykit/prettier-config': + specifier: workspace:* + version: link:../config-prettier + '@storykit/typescript-config': + specifier: workspace:* + version: link:../config-typescript + '@tanstack/react-query': + specifier: ^5.25.0 + version: 5.32.0(react@18.3.0) + '@testing-library/jest-dom': + specifier: ^5.17.0 + version: 5.17.0 + '@testing-library/react': + specifier: ^13.4.0 + version: 13.4.0(react-dom@18.3.0)(react@18.3.0) + '@testing-library/user-event': + specifier: ^13.5.0 + version: 13.5.0(@testing-library/dom@10.0.0) + '@turbo/gen': + specifier: ^1.12.4 + version: 1.13.3(@types/node@20.12.7)(typescript@5.4.5) + '@types/eslint': + specifier: ^8.56.5 + version: 8.56.10 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + '@types/node': + specifier: ^20.11.24 + version: 20.12.7 + '@types/react': + specifier: ^18.2.61 + version: 18.3.0 + '@types/react-dom': + specifier: ^18.2.19 + version: 18.3.0 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + eslint-plugin-react: + specifier: ^7.34.1 + version: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.1(eslint@8.57.0) + eslint-plugin-storybook: + specifier: ^0.8.0 + version: 0.8.0(eslint@8.57.0)(typescript@5.4.5) + postcss: + specifier: ^8.4.38 + version: 8.4.38 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + react: + specifier: ^18.2.0 + version: 18.3.0 + react-dom: + specifier: ^18.2.0 + version: 18.3.0(react@18.3.0) + react-scripts: + specifier: 5.0.1 + version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) + rollup: + specifier: ^4.13.1 + version: 4.16.4 + rollup-plugin-dts: + specifier: ^6.1.0 + version: 6.1.0(rollup@4.16.4)(typescript@5.4.5) + rollup-plugin-peer-deps-external: + specifier: ^2.2.4 + version: 2.2.4(rollup@4.16.4) + rollup-plugin-postcss: + specifier: ^4.0.2 + version: 4.0.2(postcss@8.4.38) + storybook: + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0) + typescript: + specifier: ^5.3.3 + version: 5.4.5 + webpack: + specifier: ^5.91.0 + version: 5.91.0(esbuild@0.20.2) packages: @@ -253,22 +363,22 @@ packages: '@babel/highlight': 7.24.2 picocolors: 1.0.0 - /@babel/compat-data@7.24.1: - resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.24.3: - resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) - '@babel/helpers': 7.24.1 - '@babel/parser': 7.24.1 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 '@babel/template': 7.24.0 '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 @@ -281,14 +391,14 @@ packages: - supports-color dev: true - /@babel/eslint-parser@7.24.1(@babel/core@7.24.3)(eslint@8.57.0): + /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@8.57.0): resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.0 eslint-visitor-keys: 2.1.0 @@ -304,8 +414,8 @@ packages: source-map: 0.5.7 dev: true - /@babel/generator@7.24.1: - resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 @@ -332,49 +442,49 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.1 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.24.3): - resolution: {integrity: sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==} + /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.3) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.3): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.3): - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.4): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4 @@ -417,13 +527,13 @@ packages: dependencies: '@babel/types': 7.24.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 @@ -443,25 +553,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.3): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.3): + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -510,8 +620,8 @@ packages: '@babel/types': 7.24.0 dev: true - /@babel/helpers@7.24.1: - resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 @@ -524,1145 +634,1156 @@ packages: /@babel/highlight@7.24.2: resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} - requiresBuild: true dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - /@babel/parser@7.24.1: - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.24.0 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.3): + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.3): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.3): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.3): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.3): + /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.3): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.3): + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.3): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.4): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.3): + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.3): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.3): + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.4): resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.3): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.3): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.3): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.3): + /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.3): + /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.3): + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.3): + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.3): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.3): + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.3): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.3): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.3): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.3): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.3): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.3): + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.3): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.3): + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.3) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.3) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-block-scoping@7.24.1(@babel/core@7.24.3): - resolution: {integrity: sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==} + /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-class-static-block@7.24.1(@babel/core@7.24.3): - resolution: {integrity: sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==} + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.3) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/template': 7.24.0 dev: true - /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.3): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.3) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.3): + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.4): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.3): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) '@babel/types': 7.24.0 dev: true - /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.3): + /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4): resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.3) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.3) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.3) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typescript@7.24.1(@babel/core@7.24.3): - resolution: {integrity: sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==} + /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.3): + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/preset-env@7.24.3(@babel/core@7.24.3): - resolution: {integrity: sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==} + /@babel/preset-env@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.24.1 - '@babel/core': 7.24.3 + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.3) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.3) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.3) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.3) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.3) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-block-scoping': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.3) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.3) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.3) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.3) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.3) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.3) - core-js-compat: 3.36.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) + core-js-compat: 3.37.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-flow@7.24.1(@babel/core@7.24.3): + /@babel/preset-flow@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.3): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/types': 7.24.0 esutils: 2.0.3 dev: true - /@babel/preset-react@7.24.1(@babel/core@7.24.3): + /@babel/preset-react@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.3) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/preset-typescript@7.24.1(@babel/core@7.24.3): + /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) dev: true - /@babel/register@7.23.7(@babel/core@7.24.3): + /@babel/register@7.23.7(@babel/core@7.24.4): resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -1674,8 +1795,16 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.24.1: - resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} + /@babel/runtime-corejs3@7.24.4: + resolution: {integrity: sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.37.0 + regenerator-runtime: 0.14.1 + dev: true + + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -1685,7 +1814,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 dev: true @@ -1694,12 +1823,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 @@ -1712,12 +1841,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 @@ -1749,14 +1878,14 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@chromatic-com/storybook@1.2.25(react@18.2.0): - resolution: {integrity: sha512-3ga2sWa39PeFZxV6gqJoFQh1c60v2rCh92TPE8KrBg+WwEdcrKijDIq+BILGCSg0oVUVplx8siQOrknBL5af6g==} + /@chromatic-com/storybook@1.3.3(react@18.3.0): + resolution: {integrity: sha512-1y9r691T5vVGDZ0HY3YrCXUnvtrT2YrhDuvDZSvYSNUVpM/Imz6i1dnNMKb3eoI1qRsH55mI4zCt+Iq94NLedQ==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} dependencies: chromatic: 11.3.0 filesize: 10.1.1 jsonfile: 6.1.0 - react-confetti: 6.1.0(react@18.2.0) + react-confetti: 6.1.0(react@18.3.0) strip-ansi: 7.1.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -1771,6 +1900,13 @@ packages: dev: true optional: true + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@csstools/normalize.css@12.1.1: resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} dev: true @@ -1937,7 +2073,7 @@ packages: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.4 @@ -1973,7 +2109,7 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.11.4(@types/react@18.2.73)(react@18.2.0): + /@emotion/react@11.11.4(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} peerDependencies: '@types/react': '*' @@ -1982,16 +2118,16 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.73 + '@types/react': 18.3.0 hoist-non-react-statics: 3.3.2 - react: 18.2.0 + react: 18.3.0 dev: false /@emotion/serialize@1.1.4: @@ -2012,12 +2148,12 @@ packages: resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} dev: false - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.0): resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' dependencies: - react: 18.2.0 + react: 18.3.0 /@emotion/utils@1.2.1: resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} @@ -2275,24 +2411,24 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true - /@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==} + /@headlessui/react@1.7.19(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.2.0(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-virtual': 3.4.0(react-dom@18.3.0)(react@18.3.0) client-only: 0.0.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -2304,8 +2440,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true /@isaacs/cliui@8.0.2: @@ -2340,7 +2476,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -2352,7 +2488,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -2373,7 +2509,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -2410,7 +2546,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 jest-mock: 27.5.1 dev: true @@ -2427,7 +2563,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 16.18.93 + '@types/node': 20.12.7 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -2456,7 +2592,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2539,7 +2675,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -2564,7 +2700,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.93 + '@types/node': 20.12.7 '@types/yargs': 16.0.9 chalk: 4.1.2 dev: true @@ -2576,7 +2712,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.93 + '@types/node': 20.12.7 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2588,7 +2724,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.93 + '@types/node': 20.12.7 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2625,19 +2761,39 @@ packages: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@leichtgewicht/ip-codec@2.0.5: resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} dev: true - /@mdx-js/react@3.0.1(@types/react@18.2.73)(react@18.2.0): + /@mdx-js/react@3.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} peerDependencies: '@types/react': '>=16' react: '>=16' dependencies: - '@types/mdx': 2.0.12 - '@types/react': 18.2.73 - react: 18.2.0 + '@types/mdx': 2.0.13 + '@types/react': 18.3.0 + react: 18.3.0 + dev: true + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true /@ndelangen/get-tarball@3.0.9: @@ -2648,6 +2804,103 @@ packages: tar-fs: 2.1.1 dev: true + /@next/env@14.1.4: + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} + dev: false + + /@next/eslint-plugin-next@14.2.1: + resolution: {integrity: sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==} + dependencies: + glob: 10.3.10 + dev: true + + /@next/eslint-plugin-next@14.2.3: + resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} + dependencies: + glob: 10.3.10 + dev: true + + /@next/swc-darwin-arm64@14.1.4: + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@14.1.4: + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@14.1.4: + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@14.1.4: + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@14.1.4: + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@14.1.4: + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@14.1.4: + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@14.1.4: + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@14.1.4: + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: @@ -2722,7 +2975,7 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.36.1 + core-js-pure: 3.37.0 error-stack-parser: 2.1.4 find-up: 5.0.0 html-entities: 2.5.2 @@ -2734,7 +2987,7 @@ packages: webpack-dev-server: 4.15.2(webpack@5.91.0) dev: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack@5.91.0): + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.1)(webpack@5.91.0): resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} engines: {node: '>= 10.13'} peerDependencies: @@ -2762,12 +3015,12 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.36.1 + core-js-pure: 3.37.0 error-stack-parser: 2.1.4 find-up: 5.0.0 html-entities: 2.5.2 loader-utils: 2.0.4 - react-refresh: 0.14.0 + react-refresh: 0.14.1 schema-utils: 3.3.0 source-map: 0.7.4 webpack: 5.91.0(esbuild@0.20.2) @@ -2776,10 +3029,10 @@ packages: /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 dev: false - /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} peerDependencies: '@types/react': '*' @@ -2792,23 +3045,23 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - '@types/react-dom': 18.2.23 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false - /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: '@types/react': '*' @@ -2821,22 +3074,22 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - '@types/react-dom': 18.2.23 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -2849,18 +3102,18 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - '@types/react-dom': 18.2.23 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -2869,11 +3122,11 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 - /@radix-ui/react-context@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -2882,12 +3135,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -2896,12 +3149,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -2910,13 +3163,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + react: 18.3.0 dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -2929,16 +3182,16 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - '@types/react-dom': 18.2.23 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -2951,15 +3204,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - '@types/react-dom': 18.2.23 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@babel/runtime': 7.24.4 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -2968,12 +3221,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + react: 18.3.0 - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -2982,12 +3235,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -2996,13 +3249,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.73)(react@18.2.0) - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + react: 18.3.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.73)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.0)(react@18.3.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -3011,12 +3264,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.73 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 dev: false - /@rollup/plugin-babel@5.3.1(@babel/core@7.24.3)(rollup@2.79.1): + /@rollup/plugin-babel@5.3.1(@babel/core@7.24.4)(rollup@2.79.1): resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -3027,13 +3280,13 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.24.3 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 dev: true - /@rollup/plugin-commonjs@25.0.7(rollup@4.13.2): + /@rollup/plugin-commonjs@25.0.7(rollup@4.16.4): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -3042,13 +3295,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.13.2) + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 - magic-string: 0.30.8 - rollup: 4.13.2 + magic-string: 0.30.10 + rollup: 4.16.4 dev: true /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): @@ -3066,7 +3319,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@4.13.2): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.16.4): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -3075,13 +3328,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.13.2) + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.13.2 + rollup: 4.16.4 dev: true /@rollup/plugin-replace@2.4.2(rollup@2.79.1): @@ -3094,7 +3347,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-terser@0.4.4(rollup@4.13.2): + /@rollup/plugin-terser@0.4.4(rollup@4.16.4): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -3103,13 +3356,13 @@ packages: rollup: optional: true dependencies: - rollup: 4.13.2 + rollup: 4.16.4 serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.30.0 + terser: 5.30.4 dev: true - /@rollup/plugin-typescript@11.1.6(rollup@4.13.2)(typescript@5.4.3): + /@rollup/plugin-typescript@11.1.6(rollup@4.16.4)(typescript@5.4.5): resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -3122,10 +3375,10 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.13.2) + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) resolve: 1.22.8 - rollup: 4.13.2 - typescript: 5.4.3 + rollup: 4.16.4 + typescript: 5.4.5 dev: true /@rollup/pluginutils@3.1.0(rollup@2.79.1): @@ -3140,7 +3393,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils@5.1.0(rollup@4.13.2): + /@rollup/pluginutils@5.1.0(rollup@4.16.4): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -3152,131 +3405,139 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.13.2 + rollup: 4.16.4 dev: true - /@rollup/rollup-android-arm-eabi@4.13.2: - resolution: {integrity: sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==} + /@rollup/rollup-android-arm-eabi@4.16.4: + resolution: {integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.13.2: - resolution: {integrity: sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==} + /@rollup/rollup-android-arm64@4.16.4: + resolution: {integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.13.2: - resolution: {integrity: sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==} + /@rollup/rollup-darwin-arm64@4.16.4: + resolution: {integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.13.2: - resolution: {integrity: sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==} + /@rollup/rollup-darwin-x64@4.16.4: + resolution: {integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.13.2: - resolution: {integrity: sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.16.4: + resolution: {integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.16.4: + resolution: {integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.13.2: - resolution: {integrity: sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==} + /@rollup/rollup-linux-arm64-gnu@4.16.4: + resolution: {integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.13.2: - resolution: {integrity: sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==} + /@rollup/rollup-linux-arm64-musl@4.16.4: + resolution: {integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.13.2: - resolution: {integrity: sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==} - cpu: [ppc64le] + /@rollup/rollup-linux-powerpc64le-gnu@4.16.4: + resolution: {integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==} + cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.13.2: - resolution: {integrity: sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==} + /@rollup/rollup-linux-riscv64-gnu@4.16.4: + resolution: {integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.13.2: - resolution: {integrity: sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==} + /@rollup/rollup-linux-s390x-gnu@4.16.4: + resolution: {integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.13.2: - resolution: {integrity: sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==} + /@rollup/rollup-linux-x64-gnu@4.16.4: + resolution: {integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.13.2: - resolution: {integrity: sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==} + /@rollup/rollup-linux-x64-musl@4.16.4: + resolution: {integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.13.2: - resolution: {integrity: sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==} + /@rollup/rollup-win32-arm64-msvc@4.16.4: + resolution: {integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.13.2: - resolution: {integrity: sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==} + /@rollup/rollup-win32-ia32-msvc@4.16.4: + resolution: {integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.13.2: - resolution: {integrity: sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==} + /@rollup/rollup-win32-x64-msvc@4.16.4: + resolution: {integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /@rushstack/eslint-patch@1.10.1: - resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} + /@rushstack/eslint-patch@1.10.2: + resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} dev: true /@scure/base@1.1.6: @@ -3318,10 +3579,10 @@ packages: '@sinonjs/commons': 1.8.6 dev: true - /@storybook/addon-actions@8.0.5: - resolution: {integrity: sha512-l1UBvD61DRcfuBTkdqMp2K+60M1QpvhNpYxMmJ/JEYQjzWTg/s9gLmX8eSjgA5bi0sjjJ5i1ddr9d8nHrmwfPA==} + /@storybook/addon-actions@8.0.9: + resolution: {integrity: sha512-+I3VTvlKdj8puHeS2tyaOVv9syDiNLneVZbTfqN+UDOK2i42NwvZr8PVwjTzMlEj9eePJdCZgiipz55xwts5bw==} dependencies: - '@storybook/core-events': 8.0.5 + '@storybook/core-events': 8.0.9 '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 @@ -3329,18 +3590,18 @@ packages: uuid: 9.0.1 dev: true - /@storybook/addon-backgrounds@8.0.5: - resolution: {integrity: sha512-XKSnJm6bGVkG9hv6VSK+djz7ZbxEHwVpsSEUKtOEt/ScLFxU0mlsH8dd5aMy9/MAYuB93Y+bJ2SR5kyOjmi1zQ==} + /@storybook/addon-backgrounds@8.0.9: + resolution: {integrity: sha512-pCDecACrVyxPaJKEWS0sHsRb8xw+IPCSxDM1TkjaAQ6zZ468A/dcUnqW+LVK8bSXgQwWzn23wqnqPFSy5yptuQ==} dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 dev: true - /@storybook/addon-controls@8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-iUL89OJQse9DlZkwY8jhyl12L/qziUkwbdSgQJxRIEceW6vrHAmc5VGwneS7N3pBuiOIKQQmMhAQ660JXHM7eQ==} + /@storybook/addon-controls@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-wWdmd62UP/sfPm8M7aJjEA+kEXTUIR/QsYi9PoYBhBZcXiikZ4kNan7oD7GfsnzGGKHrBVfwQhO+TqaENGYytA==} dependencies: - '@storybook/blocks': 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -3351,26 +3612,26 @@ packages: - supports-color dev: true - /@storybook/addon-docs@8.0.5: - resolution: {integrity: sha512-FMlJLPjyNpqY68/9SJH7350/ncySKMGBQQAQnPrMtGVBld8eeOo3DB+GSffOSbmitomq+t16HOprvPSekTMlPw==} + /@storybook/addon-docs@8.0.9: + resolution: {integrity: sha512-x7hX7UuzJtClu6XwU3SfpyFhuckVcgqgD6BU6Ihxl0zs+i4xp6iKVXYSnHFMRM1sgoeT8TjPxab35Ke8w8BVRw==} dependencies: - '@babel/core': 7.24.3 - '@mdx-js/react': 3.0.1(@types/react@18.2.73)(react@18.2.0) - '@storybook/blocks': 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 8.0.5 - '@storybook/components': 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-plugin': 8.0.5 - '@storybook/csf-tools': 8.0.5 + '@babel/core': 7.24.4 + '@mdx-js/react': 3.0.1(@types/react@18.3.0)(react@18.3.0) + '@storybook/blocks': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/client-logger': 8.0.9 + '@storybook/components': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/csf-plugin': 8.0.9 + '@storybook/csf-tools': 8.0.9 '@storybook/global': 5.0.0 - '@storybook/node-logger': 8.0.5 - '@storybook/preview-api': 8.0.5 - '@storybook/react-dom-shim': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 8.0.5 - '@types/react': 18.2.73 + '@storybook/node-logger': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@storybook/react-dom-shim': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 + '@types/react': 18.3.0 fs-extra: 11.2.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) rehype-external-links: 3.0.0 rehype-slug: 6.0.0 ts-dedent: 2.2.0 @@ -3379,22 +3640,22 @@ packages: - supports-color dev: true - /@storybook/addon-essentials@8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1yjwf9ibKn2rVqv+fqxACoIjsaUsimSEx8QwjIl2krDNhMULXzFeVubTQ09gXSVEnHUR1nKX3X9qOXJQ2bOFlQ==} - dependencies: - '@storybook/addon-actions': 8.0.5 - '@storybook/addon-backgrounds': 8.0.5 - '@storybook/addon-controls': 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 8.0.5 - '@storybook/addon-highlight': 8.0.5 - '@storybook/addon-measure': 8.0.5 - '@storybook/addon-outline': 8.0.5 - '@storybook/addon-toolbars': 8.0.5 - '@storybook/addon-viewport': 8.0.5 - '@storybook/core-common': 8.0.5 - '@storybook/manager-api': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 8.0.5 - '@storybook/preview-api': 8.0.5 + /@storybook/addon-essentials@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-mwAgdfrOsTuTDcagvM7veBh+iayZIWmKOazzkhrIWbhYcrXOsweigD2UOVeHgAiAzJK49znr4FXTCKcE1hOWcw==} + dependencies: + '@storybook/addon-actions': 8.0.9 + '@storybook/addon-backgrounds': 8.0.9 + '@storybook/addon-controls': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/addon-docs': 8.0.9 + '@storybook/addon-highlight': 8.0.9 + '@storybook/addon-measure': 8.0.9 + '@storybook/addon-outline': 8.0.9 + '@storybook/addon-toolbars': 8.0.9 + '@storybook/addon-viewport': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/node-logger': 8.0.9 + '@storybook/preview-api': 8.0.9 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -3404,19 +3665,19 @@ packages: - supports-color dev: true - /@storybook/addon-highlight@8.0.5: - resolution: {integrity: sha512-z4Aad6Dcf9gQIEPkR8WVIdRj/5RARI6SeIX3JRJoZ4l6fu7AvTZKDWPRpwLXSpEQqdeOb7l7FrZHISmXdrPoiQ==} + /@storybook/addon-highlight@8.0.9: + resolution: {integrity: sha512-vaRHGDbx7dpNpQECAHk5wczlZO3ntstprGlqnZt0o7ylz6xB5+pTQwTuIFty0hwKv+3TPcskzzifATUyEOEmyg==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/addon-interactions@8.0.5(@types/jest@29.5.12)(jest@27.5.1): - resolution: {integrity: sha512-o0wcWAeQR8pN5T1l87i+CH/xSp70/0uyQAmJ9xPxg/60dHbDgjTvn/pwg+hhKu+olrFVpt85yQPzQ4pNhAFlUw==} + /@storybook/addon-interactions@8.0.9(@types/jest@29.5.12)(jest@27.5.1): + resolution: {integrity: sha512-AMIdNcyM6DDAWvMitBJMqp1iPZND8AXB4QT4VZHGMKG2ngHNKktriEKpTfcRkfKPGTJs9T+71dWfm6/R4tticw==} dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.0.5 - '@storybook/test': 8.0.5(@types/jest@29.5.12)(jest@27.5.1) - '@storybook/types': 8.0.5 + '@storybook/instrumenter': 8.0.9 + '@storybook/test': 8.0.9(@types/jest@29.5.12)(jest@27.5.1) + '@storybook/types': 8.0.9 polished: 4.3.1 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -3427,33 +3688,33 @@ packages: - vitest dev: true - /@storybook/addon-links@8.0.5(react@18.2.0): - resolution: {integrity: sha512-B5EAs0+LxgYH59GSVVAfgW8rAzGUmzdAAR3XJKbTXp3/d9e27uXwpLVYhi/VQHKLIsshDQRbc0s109APHs/SjQ==} + /@storybook/addon-links@8.0.9(react@18.3.0): + resolution: {integrity: sha512-FVt+AdW3JFSqbJzkKiqKsMRWqHXqEvCBqFs7lNfk3OW0w0jfv1iREtrxE0dVdJoUFQC9V/2Im/EpJ7UB3C2bNQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true dependencies: - '@storybook/csf': 0.1.3 + '@storybook/csf': 0.1.5 '@storybook/global': 5.0.0 - react: 18.2.0 + react: 18.3.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure@8.0.5: - resolution: {integrity: sha512-B5c33aREHbTA+An7Q5Q1yEXUB0ETE5yPnGgsXuxVl6LyYqyqjai1qE48vcmkA7S+vt5MR6Sf9Lmy3UL+kkyYzQ==} + /@storybook/addon-measure@8.0.9: + resolution: {integrity: sha512-91svOOGEXmGG4USglwXLE3wtlUVgtbKJVxTKX7xRI+AC5JEEaKByVzP17/X8Qn/8HilUL7AfSQ0kCoqtPSJ5cA==} dependencies: '@storybook/global': 5.0.0 tiny-invariant: 1.3.3 dev: true - /@storybook/addon-onboarding@8.0.5: - resolution: {integrity: sha512-EZknQHmQfm/jmQu6u97Tb6FXuhOexLUOQ/onsHeZ5yNIFa+m1mXg8StZXzCXNm2xUGsC5ISwTi9NMQ6e7Cg+nQ==} + /@storybook/addon-onboarding@8.0.9: + resolution: {integrity: sha512-gRPn8ooxTmdamfJgdkQR48pza67S83l2DDlZ3C1kuus19UO+eIFUEVZJbud9qQojq7jc8ztaYXiNObWdxKu29A==} dev: true - /@storybook/addon-outline@8.0.5: - resolution: {integrity: sha512-ouQ4IOBw7AAyukkaQwNe2MRTpDbCv+j4z76BRE7qvu9PckifsWsm00pTQwvbNdjiogS8c3EPMV5aBGIPoK/zAQ==} + /@storybook/addon-outline@8.0.9: + resolution: {integrity: sha512-fQ+jm356TgUnz81IxsC99/aOesbLw3N5OQRJpo/A6kqbLMzlq3ybVzuXYCKC3f0ArgQRNh4NoMeJBMRFMtaWRw==} dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 @@ -3464,28 +3725,28 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - '@storybook/node-logger': 8.0.5 + '@storybook/node-logger': 8.0.9 webpack: 5.91.0(esbuild@0.20.2) dev: true - /@storybook/addon-themes@8.0.5: - resolution: {integrity: sha512-NIqjpdU3XwuaUYMp0woE8d8S6d2nlddTU/Q727VqrBJIkMYyqSD1NmoafpHEXiLiPX0bfOxGyD5uhPQCyGUVAw==} + /@storybook/addon-themes@8.0.9: + resolution: {integrity: sha512-aAbKIT//bqKbMeRLKtVStwndi+XrYxeg94tDKTFrIv2W1It6QJlO/5FMjI+cgtHHBi6w/4ThKDYwjupasaBdlg==} dependencies: ts-dedent: 2.2.0 dev: true - /@storybook/addon-toolbars@8.0.5: - resolution: {integrity: sha512-1QrvHtsQI1RNzDrkTMUFaEzZRRKHYrkj/rYpf6B2QyFvaZ6XY4urxSrmssLENuPsoDF4ABU2j6j4BAUgWjIe4A==} + /@storybook/addon-toolbars@8.0.9: + resolution: {integrity: sha512-nNSBnnBOhQ+EJwkrIkK4ZBYPcozNmEH770CZ/6NK85SUJ6WEBZapE6ru33jIUokFGEvlOlNCeai0GUc++cQP8w==} dev: true - /@storybook/addon-viewport@8.0.5: - resolution: {integrity: sha512-Y2sTsNeQctfLBPQYuOjMGSQY4lUycZRZblToU0q6siJ030QjgpuEMcu1yDt654T6jnp/s4VwRS6yaZHnqZ97Mw==} + /@storybook/addon-viewport@8.0.9: + resolution: {integrity: sha512-Ao4+D56cO7biaw+iTlMU1FBec1idX0cmdosDeCFZin06MSawcPkeBlRBeruaSQYdLes8TBMdZPFgfuqI5yIk6g==} dependencies: memoizerific: 1.11.3 dev: true - /@storybook/blocks@8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zfcwJ0yE5HM28BxZeNU4SYF8zxq2PEqLP1aWCdRuZT9k8lgnBwAKzlvt50LtPzOfGtKuGnvIEriELx/i+Qh4Sw==} + /@storybook/blocks@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-F2zSrfSwzTFN7qW3zB80tG+EXtmfmCDC6Ird0F7tolszb6tOqJcAcBOwQbE2O0wI63sLu21qxzXgaKBMkiWvJg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3495,30 +3756,30 @@ packages: react-dom: optional: true dependencies: - '@storybook/channels': 8.0.5 - '@storybook/client-logger': 8.0.5 - '@storybook/components': 8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 8.0.5 - '@storybook/csf': 0.1.3 - '@storybook/docs-tools': 8.0.5 + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/components': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/docs-tools': 8.0.9 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) - '@storybook/manager-api': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 8.0.5 - '@storybook/theming': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 8.0.5 + '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/preview-api': 8.0.9 + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 '@types/lodash': 4.17.0 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 - markdown-to-jsx: 7.3.2(react@18.2.0) + markdown-to-jsx: 7.3.2(react@18.3.0) memoizerific: 1.11.3 polished: 4.3.1 - react: 18.2.0 - react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-colorful: 5.6.1(react-dom@18.3.0)(react@18.3.0) + react-dom: 18.3.0(react@18.3.0) telejson: 7.2.0 - tocbot: 4.25.0 + tocbot: 4.27.13 ts-dedent: 2.2.0 util-deprecate: 1.0.2 transitivePeerDependencies: @@ -3527,17 +3788,17 @@ packages: - supports-color dev: true - /@storybook/builder-manager@8.0.5: - resolution: {integrity: sha512-63gIHfgdhpL3rcHkOcGm29PbIkgx2bLRxi2RYa0osGMtfBIePFXJh7nol+4KpaRkNR8RZg+N9omVGjyhLj7IWg==} + /@storybook/builder-manager@8.0.9: + resolution: {integrity: sha512-/PxDwZIfMc/PSRZcasb6SIdGr3azIlenzx7dBF7Imt8i4jLHiAf1t00GvghlfJsvsrn4DNp95rbRbXTDyTj7tQ==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.0.5 - '@storybook/manager': 8.0.5 - '@storybook/node-logger': 8.0.5 + '@storybook/core-common': 8.0.9 + '@storybook/manager': 8.0.9 + '@storybook/node-logger': 8.0.9 '@types/ejs': 3.1.5 '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) browser-assert: 1.2.1 - ejs: 3.1.9 + ejs: 3.1.10 esbuild: 0.20.2 esbuild-plugin-alias: 0.2.1 express: 4.19.2 @@ -3549,42 +3810,42 @@ packages: - supports-color dev: true - /@storybook/builder-webpack5@8.0.5(esbuild@0.20.2)(typescript@5.4.3): - resolution: {integrity: sha512-tt7ZrRscsg+AJayOLXYCsDleNzNy0UHjfs7FnDzh331Ulyt2WeGkcELTZmHnBg5WwVBgjGTYmxYKSgGXF0hKXQ==} + /@storybook/builder-webpack5@8.0.9(esbuild@0.20.2)(typescript@5.4.5): + resolution: {integrity: sha512-bFxlxOO2x8n3TmmA9ACxzhmHxtRd0e68dA0w4AYkvEwBf2wScRQdWJIeS5k4JgRwtcUyFYAt+VcKyE1WMgyaVg==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@storybook/channels': 8.0.5 - '@storybook/client-logger': 8.0.5 - '@storybook/core-common': 8.0.5 - '@storybook/core-events': 8.0.5 - '@storybook/core-webpack': 8.0.5 - '@storybook/node-logger': 8.0.5 - '@storybook/preview': 8.0.5 - '@storybook/preview-api': 8.0.5 - '@types/node': 18.19.28 + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/core-webpack': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/preview': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@types/node': 18.19.31 '@types/semver': 7.5.8 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.2.3 constants-browserify: 1.0.0 - css-loader: 6.10.0(webpack@5.91.0) + css-loader: 6.11.0(webpack@5.91.0) es-module-lexer: 1.5.0 express: 4.19.2 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.3)(webpack@5.91.0) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.5)(webpack@5.91.0) fs-extra: 11.2.0 html-webpack-plugin: 5.6.0(webpack@5.91.0) - magic-string: 0.30.8 + magic-string: 0.30.10 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.0 style-loader: 3.3.4(webpack@5.91.0) terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) ts-dedent: 2.2.0 - typescript: 5.4.3 + typescript: 5.4.5 url: 0.11.3 util: 0.12.5 util-deprecate: 1.0.2 @@ -3602,31 +3863,31 @@ packages: - webpack-cli dev: true - /@storybook/channels@8.0.5: - resolution: {integrity: sha512-UWzjt4STzBgg28Q6FxqyJWwXLWYM6oSz9gGKMUJbn2vRAlEJaG3XwvpT39YFVDUIuiFSHguV5cisXY5Be4nOZw==} + /@storybook/channels@8.0.9: + resolution: {integrity: sha512-7Lcfyy5CsLWWGhMPO9WG4jZ/Alzp0AjepFhEreYHRPtQrfttp6qMAjE/g1aHgun0qHCYWxwqIG4NLR/hqDNrXQ==} dependencies: - '@storybook/client-logger': 8.0.5 - '@storybook/core-events': 8.0.5 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 '@storybook/global': 5.0.0 telejson: 7.2.0 tiny-invariant: 1.3.3 dev: true - /@storybook/cli@8.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-6t0d2ILXonC7bsq6Dx6tFTls2a/JeOR7lr3UgoVaiFu5l1M5pOB6uI9JG14F+UmsCifXGJdvxR38CBwVSKtg/Q==} + /@storybook/cli@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-lilYTKn8F5YOePijqfRYFa5v2mHVIJxPCIgTn+OXAmAFbcizZ6P8P6niU4J/NXulgx68Ln1M7hYhFtTP25hVTw==} hasBin: true dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/types': 7.24.0 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 8.0.5 - '@storybook/core-common': 8.0.5 - '@storybook/core-events': 8.0.5 - '@storybook/core-server': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-tools': 8.0.5 - '@storybook/node-logger': 8.0.5 - '@storybook/telemetry': 8.0.5 - '@storybook/types': 8.0.5 + '@storybook/codemod': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/core-server': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/csf-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/telemetry': 8.0.9 + '@storybook/types': 8.0.9 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -3634,14 +3895,14 @@ packages: commander: 6.2.1 cross-spawn: 7.0.3 detect-indent: 6.1.0 - envinfo: 7.11.1 + envinfo: 7.12.0 execa: 5.1.1 find-up: 5.0.0 fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 giget: 1.2.3 globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.24.3) + jscodeshift: 0.15.2(@babel/preset-env@7.24.4) leven: 3.1.0 ora: 5.4.1 prettier: 3.2.5 @@ -3662,26 +3923,26 @@ packages: - utf-8-validate dev: true - /@storybook/client-logger@8.0.5: - resolution: {integrity: sha512-6D7zvPPnLuTVlBNpZSdzEbk5xfWKhEG0gejtPnhjG9R5YzC/dFckdUI0gtvwGWUVMWhL3H/0gjRjhKujUMRY1Q==} + /@storybook/client-logger@8.0.9: + resolution: {integrity: sha512-LzV/RHkbf07sRc1Jc0ff36RlapKf9Ul7/+9VMvVbI3hshH1CpmrZK4t/tsIdpX/EVOdJ1Gg5cES06PnleOAIPA==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/codemod@8.0.5: - resolution: {integrity: sha512-1ub3RRT+/ziJUdS2rz5UkQWu6teGULxHDMDRFhTrGYHVOgkc/lLnFuF0rgrLxsFdTmKIBTKN2xFfSE7z9Palsg==} + /@storybook/codemod@8.0.9: + resolution: {integrity: sha512-VBeGpSZSQpL6iyLLqceJSNGhdCqcNwv+xC/aWdDFOkmuE1YfbmNNwpa9QYv4ZFJ2QjUsm4iTWG60qK+9NXeSKA==} dependencies: - '@babel/core': 7.24.3 - '@babel/preset-env': 7.24.3(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) '@babel/types': 7.24.0 - '@storybook/csf': 0.1.3 - '@storybook/csf-tools': 8.0.5 - '@storybook/node-logger': 8.0.5 - '@storybook/types': 8.0.5 + '@storybook/csf': 0.1.5 + '@storybook/csf-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/types': 8.0.9 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.24.3) + jscodeshift: 0.15.2(@babel/preset-env@7.24.4) lodash: 4.17.21 prettier: 3.2.5 recast: 0.23.6 @@ -3690,34 +3951,34 @@ packages: - supports-color dev: true - /@storybook/components@8.0.5(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-trBWV9gc4YhFhMKUevkBY9Mdk9WmYmthpBfmF0Y2vgrJQidUqkkQqfAMQThSJ0KLpV8k3fB27s5d93rgrr50Rg==} + /@storybook/components@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-JcwBGADzIJs0PSzqykrrD2KHzNG9wtexUOKuidt+FSv9szpUhe3qBAXIHpdfBRl7mOJ9TRZ5rt+mukEnfncdzA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.73)(react@18.2.0) - '@storybook/client-logger': 8.0.5 - '@storybook/csf': 0.1.3 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) + '@storybook/client-logger': 8.0.9 + '@storybook/csf': 0.1.5 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 8.0.5 + '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-common@8.0.5: - resolution: {integrity: sha512-WCu2ZPMq1FuO33tYuCPb9joWaZGtJgfKvXXVGLYYg6LufpbWOI+IB7OWmHahtEdKuaNoIr3CEf1p3zm12NNiYA==} + /@storybook/core-common@8.0.9: + resolution: {integrity: sha512-Jmue+sfHFb4GTYBzyWYw1MygoJiQSfISIrKmNIzAmZ+oR9EOr+jpu/i/bH+uetZ2Hqg1AGhj1VB7OtJp9HQyWw==} dependencies: - '@storybook/core-events': 8.0.5 - '@storybook/csf-tools': 8.0.5 - '@storybook/node-logger': 8.0.5 - '@storybook/types': 8.0.5 + '@storybook/core-events': 8.0.9 + '@storybook/csf-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/types': 8.0.9 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 @@ -3729,7 +3990,7 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.3.12 + glob: 10.3.10 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -3747,34 +4008,34 @@ packages: - supports-color dev: true - /@storybook/core-events@8.0.5: - resolution: {integrity: sha512-26c0m7P7qt9zUKcD1noWLPJmZ+iS6MKXNngUgNBSxTtG20NFV3nxD0/tx9FzNfDVZDF6cHINkWj+FVBAaVuBVQ==} + /@storybook/core-events@8.0.9: + resolution: {integrity: sha512-DxSUx7wG9Qe3OFUBnv3OrYq48J8UWNo2DUR5/JecJCtp3n++L4fAEW3J0IF5FfxpQDMQSp1yTNjZ2PaWCMd2ag==} dependencies: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@8.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-aQGHRQZF4jbMqBT0sGptql+S3hiNksi4n6pPJPxGf6TE8TyRA1x7USjmvXHwv59vpmMm9HaRpGWzWCo4SqwNqw==} + /@storybook/core-server@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-BIe1T5YUBl0GYxEjRoTQsvXD2pyuzL8rPTUD41zlzSQM0R8U6Iant9SzRms4u0+rKUm2mGxxKuODlUo5ewqaGA==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.0.5 - '@storybook/channels': 8.0.5 - '@storybook/core-common': 8.0.5 - '@storybook/core-events': 8.0.5 - '@storybook/csf': 0.1.3 - '@storybook/csf-tools': 8.0.5 + '@storybook/builder-manager': 8.0.9 + '@storybook/channels': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/csf-tools': 8.0.9 '@storybook/docs-mdx': 3.0.0 '@storybook/global': 5.0.0 - '@storybook/manager': 8.0.5 - '@storybook/manager-api': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 8.0.5 - '@storybook/preview-api': 8.0.5 - '@storybook/telemetry': 8.0.5 - '@storybook/types': 8.0.5 + '@storybook/manager': 8.0.9 + '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/node-logger': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@storybook/telemetry': 8.0.9 + '@storybook/types': 8.0.9 '@types/detect-port': 1.3.5 - '@types/node': 18.19.28 + '@types/node': 18.19.31 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -3808,37 +4069,37 @@ packages: - utf-8-validate dev: true - /@storybook/core-webpack@8.0.5: - resolution: {integrity: sha512-xGjOgMFPEiQeofXyUM1rlnpqSJ3FVcuPkrbh8rDLC8mTzGeEqqhNH5hluywk1H8UqYlaNrVhPi6/iGWhRUvlgw==} + /@storybook/core-webpack@8.0.9: + resolution: {integrity: sha512-lehuuAmHt/p5z8lZkMW16Y/+uDEh+Z/tExItVadtjEY8jXDe2Ilr1Cts2lvzVNuuESEKd5bqsGJ1L4t9Bf25pg==} dependencies: - '@storybook/core-common': 8.0.5 - '@storybook/node-logger': 8.0.5 - '@storybook/types': 8.0.5 - '@types/node': 18.19.28 + '@storybook/core-common': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/types': 8.0.9 + '@types/node': 18.19.31 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding - supports-color dev: true - /@storybook/csf-plugin@8.0.5: - resolution: {integrity: sha512-R6VjQl+I9k4oc3OfOHOFzz5T20WROHOZ5/zkkFKM/1YUa6QNpMcuStOtr/qcAx+QizmQqmxgJwTFapFBP5yWjg==} + /@storybook/csf-plugin@8.0.9: + resolution: {integrity: sha512-pXaNCNi++kxKsqSWwvx215fPx8cNqvepLVxQ7B69qXLHj80DHn0Q3DFBO3sLXNiQMJ2JK4OYcTxMfuOiyzszKw==} dependencies: - '@storybook/csf-tools': 8.0.5 + '@storybook/csf-tools': 8.0.9 unplugin: 1.10.1 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@8.0.5: - resolution: {integrity: sha512-fW2hAO57ayq7eHjpS5jXy/AKm3oZxApngd9QU/bC800EyTWENwLPxFnHLAE86N57Dc3bcE4PTFCyqpxzE4Uc7g==} + /@storybook/csf-tools@8.0.9: + resolution: {integrity: sha512-PiNMhL97giLytTdQwuhsZ92buVk4gy9H/8DtrDhUc45/1OmF95gogm6T2Yap729SIFwgpOcuq/U3aVo6d6swVQ==} dependencies: - '@babel/generator': 7.24.1 - '@babel/parser': 7.24.1 + '@babel/generator': 7.24.4 + '@babel/parser': 7.24.4 '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 - '@storybook/csf': 0.1.3 - '@storybook/types': 8.0.5 + '@storybook/csf': 0.1.5 + '@storybook/types': 8.0.9 fs-extra: 11.2.0 recast: 0.23.6 ts-dedent: 2.2.0 @@ -3852,8 +4113,8 @@ packages: lodash: 4.17.21 dev: true - /@storybook/csf@0.1.3: - resolution: {integrity: sha512-IPZvXXo4b3G+gpmgBSBqVM81jbp2ePOKsvhgJdhyZJtkYQCII7rg9KKLQhvBQM5sLaF1eU6r0iuwmyynC9d9SA==} + /@storybook/csf@0.1.5: + resolution: {integrity: sha512-pW7Dtk/bE2JGrAe/KuBY4Io02NBe/2CLP2DkgVgWlSwvEVdm/rbQyiwy8RaL0lQlJCv9CsGBY+n9HQG8d4bZjQ==} dependencies: type-fest: 2.19.0 dev: true @@ -3862,12 +4123,13 @@ packages: resolution: {integrity: sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ==} dev: true - /@storybook/docs-tools@8.0.5: - resolution: {integrity: sha512-IzQMlsumiBgHAh5TTZTinNcedU98l0S0hczbTgjXQWgTp3//RHO36LYowAeFrB6V9SACYs/Q47iB15K4b2dqUg==} + /@storybook/docs-tools@8.0.9: + resolution: {integrity: sha512-OzogAeOmeHea/MxSPKRBWtOQVNSpoq+OOpimO9YRA5h5GBRJ2TUOGT44Gny6QT4ll5AvQA8fIiq9KezKcLekAg==} dependencies: - '@storybook/core-common': 8.0.5 - '@storybook/preview-api': 8.0.5 - '@storybook/types': 8.0.5 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@storybook/types': 8.0.9 '@types/doctrine': 0.0.3 assert: 2.1.0 doctrine: 3.0.0 @@ -3881,41 +4143,41 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true - /@storybook/icons@1.2.9(react-dom@18.2.0)(react@18.2.0): + /@storybook/icons@1.2.9(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==} engines: {node: '>=14.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: true - /@storybook/instrumenter@8.0.5: - resolution: {integrity: sha512-ccGFGSquIPZBcf3dP+I5kwSblAOlQNH7+4vunYJtUrlXN+VROS9LAf87W/btwxQVI1Zj17BUH9CoBrDxWbJ2VA==} + /@storybook/instrumenter@8.0.9: + resolution: {integrity: sha512-Gw74dgpTU/2p7FG0s7DuVdqCbJ2MEcSuRJjDo7HcXRYcvWp7I6Ly+C0v7N5VaoS+kbBVerAhLKIHZgG/LZf1og==} dependencies: - '@storybook/channels': 8.0.5 - '@storybook/client-logger': 8.0.5 - '@storybook/core-events': 8.0.5 + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.0.5 - '@vitest/utils': 1.4.0 + '@storybook/preview-api': 8.0.9 + '@vitest/utils': 1.5.2 util: 0.12.5 dev: true - /@storybook/manager-api@8.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2Q+DI9XU1U4EBrihnyfo+kuRK7T3Ce2eSlWEHHkTZ3OYSf+EhFxLUA6AOfMoA1B0nzNEr6SUkW8DBvMrtdTQMA==} + /@storybook/manager-api@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-99b3yKArDSvfabXL7QE3nA95e4DdW/5H/ZCcr6/E2qCQJayZ6G1v/WWamKXbiaTpkndulFmcb/+ZmnDXcweIIQ==} dependencies: - '@storybook/channels': 8.0.5 - '@storybook/client-logger': 8.0.5 - '@storybook/core-events': 8.0.5 - '@storybook/csf': 0.1.3 + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) - '@storybook/router': 8.0.5 - '@storybook/theming': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 8.0.5 + '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/router': 8.0.9 + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -3927,24 +4189,24 @@ packages: - react-dom dev: true - /@storybook/manager@8.0.5: - resolution: {integrity: sha512-eJtf2SaAzOmRV03zn/pFRTqBua8/qy+VDtgaaCFmAyrjsUHO/bcHpbu9vnwP8a+C8ojJnthooi3yz755UTDYYg==} + /@storybook/manager@8.0.9: + resolution: {integrity: sha512-+NnRo+5JQFGNqveKrLtC0b+Z08Tae4m44iq292bPeZMpr9OkFsIkU0PBPsHTHPkrqC/zZXRNsCsTEgvu3p2OIA==} dev: true - /@storybook/node-logger@8.0.5: - resolution: {integrity: sha512-ssT8YCcCqgc89ee+EeExCxcOpueOsU05iek2roR+NCZnoCL1DmzcUp8H9t0utLaK/ngPV8zatlzSDVgKTHSIJw==} + /@storybook/node-logger@8.0.9: + resolution: {integrity: sha512-5ajMdZFrYrjGLJOVDq7dlEQNFsgeLHymt4dCK9MulL/ciXykmXUZXE3Bye0wFy+I2qqDVvrvR8uzCvSFvm5MAQ==} dev: true - /@storybook/preset-create-react-app@8.0.5(react-refresh@0.14.0)(react-scripts@5.0.1)(typescript@5.4.3)(webpack@5.91.0): - resolution: {integrity: sha512-i8BkOhGM10EkeJW69Pfu7tOZUy1NQoFDz+aimWZRJ4msnGj0MyLj/1M5nN0ZqHh+Rdgwd0onAixn+uyH6hkTYg==} + /@storybook/preset-create-react-app@8.0.9(react-refresh@0.14.1)(react-scripts@5.0.1)(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-7IjDztstczSFoLlzhWt6MAE2IKVA1B2CLiXRVlw1aK9+dv5n0ctZQzRCwwvTQXdlI3ABSqB7Gn6khKJOBYUhlg==} peerDependencies: react-scripts: '>=5.0.0' dependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.91.0) - '@storybook/types': 8.0.5 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.1)(webpack@5.91.0) + '@storybook/types': 8.0.9 '@types/semver': 7.5.8 - pnp-webpack-plugin: 1.7.0(typescript@5.4.3) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.2.0)(typescript@5.4.3) + pnp-webpack-plugin: 1.7.0(typescript@5.4.5) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) semver: 7.6.0 transitivePeerDependencies: - '@types/webpack' @@ -3958,8 +4220,8 @@ packages: - webpack-plugin-serve dev: true - /@storybook/preset-react-webpack@8.0.5(esbuild@0.20.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): - resolution: {integrity: sha512-+V4eEtbsaDcSgRFP6/8ZAUcmyEyF2o6iBVZ72prs2GO4rInrYFMUZZRIXRSvH92x8BurJck2ap9EGjFt08o0Ag==} + /@storybook/preset-react-webpack@8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-kkJG03ZOJXM8fhYJuvAX9+3QVwoOMnz1tj75M/45c9i6XafPrBi2imGZWjXzuKXMxg/KO9fS/Y0JZmDh7vPM9g==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3969,23 +4231,23 @@ packages: typescript: optional: true dependencies: - '@storybook/core-webpack': 8.0.5 - '@storybook/docs-tools': 8.0.5 - '@storybook/node-logger': 8.0.5 - '@storybook/react': 8.0.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0) - '@types/node': 18.19.28 + '@storybook/core-webpack': 8.0.9 + '@storybook/docs-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/react': 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0) + '@types/node': 18.19.31 '@types/semver': 7.5.8 find-up: 5.0.0 fs-extra: 11.2.0 - magic-string: 0.30.8 - react: 18.2.0 + magic-string: 0.30.10 + react: 18.3.0 react-docgen: 7.0.3 - react-dom: 18.2.0(react@18.2.0) + react-dom: 18.3.0(react@18.3.0) resolve: 1.22.8 semver: 7.6.0 tsconfig-paths: 4.2.0 - typescript: 5.4.3 + typescript: 5.4.5 webpack: 5.91.0(esbuild@0.20.2) transitivePeerDependencies: - '@swc/core' @@ -3996,30 +4258,30 @@ packages: - webpack-cli dev: true - /@storybook/preview-api@8.0.5: - resolution: {integrity: sha512-BSDVTR9/X6DHVA4rIhN6d/SB6PiaRdns8ky/TKTzwFEyO3NOASHe8051O+uNtXzgCtMUj/8imNrTdMTYgUm1LA==} + /@storybook/preview-api@8.0.9: + resolution: {integrity: sha512-zHfX34bkAMzzmE7vbDzaqFwSW6ExiBD0HiO1L/IsHF55f0f7xV7IH8uJyFRrDTvAoW3ReSxZDMvvPpeydFPKGA==} dependencies: - '@storybook/channels': 8.0.5 - '@storybook/client-logger': 8.0.5 - '@storybook/core-events': 8.0.5 - '@storybook/csf': 0.1.3 + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 '@storybook/global': 5.0.0 - '@storybook/types': 8.0.5 - '@types/qs': 6.9.14 + '@storybook/types': 8.0.9 + '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.0 + qs: 6.12.1 tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true - /@storybook/preview@8.0.5: - resolution: {integrity: sha512-D2uY0LTjkGbpNwJJeqtv1NieBTtvt0IEEKH+srMNXOOM+KascTYGbBlEPkYSf5bZdMft5c1GXglVIhJIqTZntg==} + /@storybook/preview@8.0.9: + resolution: {integrity: sha512-tFsR8xc8AYBZZrZw8enklFbSQt7ZAV+rv20BoxwDhd3q7fjXyK7O4moGPqUwBZ7rukTG13nPoISxr+VXAk/HYA==} dev: true - /@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0): + /@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} peerDependencies: typescript: '>= 4.x' @@ -4030,26 +4292,26 @@ packages: find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.5 - react-docgen-typescript: 2.2.2(typescript@5.4.3) + react-docgen-typescript: 2.2.2(typescript@5.4.5) tslib: 2.6.2 - typescript: 5.4.3 + typescript: 5.4.5 webpack: 5.91.0(esbuild@0.20.2) transitivePeerDependencies: - supports-color dev: true - /@storybook/react-dom-shim@8.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-KIcLkCml5dIiVeChMyudz8Q/pZ/T86Y1LrHZvYD/t3iXH+HOOvg6KNsY6TZFM93Rqhk10AIEUNCgYzj2/QjddA==} + /@storybook/react-dom-shim@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-8011KlRuG3obr5pZZ7bcEyYYNWF3tR596YadoMd267NPoHKvwAbKL1L/DNgb6kiYjZDUf9QfaKSCWW31k0kcRQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: true - /@storybook/react-webpack5@8.0.5(esbuild@0.20.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): - resolution: {integrity: sha512-EFhCxt2oEH69glk5CXMipO/my/EzqF8c4uqriKyiTCQr7wPAFRkEJT3+HaRrjiOiuafwtvxfDQHgTC2fg1DNwA==} + /@storybook/react-webpack5@8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-JJIEL7fXrSurzc/pUhvZMjwVZpKuWNwjq3N9jTjwy0GxN2lDEu6glHCyMglvij/GURWvm4eXsATHUfNf47B1AA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4059,13 +4321,13 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack5': 8.0.5(esbuild@0.20.2)(typescript@5.4.3) - '@storybook/preset-react-webpack': 8.0.5(esbuild@0.20.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@storybook/react': 8.0.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@types/node': 18.19.28 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - typescript: 5.4.3 + '@storybook/builder-webpack5': 8.0.9(esbuild@0.20.2)(typescript@5.4.5) + '@storybook/preset-react-webpack': 8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/react': 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@types/node': 18.19.31 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + typescript: 5.4.5 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -4076,8 +4338,8 @@ packages: - webpack-cli dev: true - /@storybook/react@8.0.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): - resolution: {integrity: sha512-Vwq4xt8eSKE/PLPvunOFDlzBki6L3mP7LNVWCLkQba7vzuCOPjSZ0+95v/K8XQn3jVRXAMUnlPW1SKg21aKJdw==} + /@storybook/react@8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-NeQ6suZG3HKikwe3Tx9cAIaRx7uP8FKCmlVvIiBg4LTTI5orCt94PPakvuZukZcbkqvcCnEBkebAzwUpn8PiJw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4087,15 +4349,15 @@ packages: typescript: optional: true dependencies: - '@storybook/client-logger': 8.0.5 - '@storybook/docs-tools': 8.0.5 + '@storybook/client-logger': 8.0.9 + '@storybook/docs-tools': 8.0.9 '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.0.5 - '@storybook/react-dom-shim': 8.0.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 8.0.5 + '@storybook/preview-api': 8.0.9 + '@storybook/react-dom-shim': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.28 + '@types/node': 18.19.31 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -4103,33 +4365,33 @@ packages: html-tags: 3.3.1 lodash: 4.17.21 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + react-element-to-jsx-string: 15.0.0(react-dom@18.3.0)(react@18.3.0) semver: 7.6.0 ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 5.4.3 + typescript: 5.4.5 util-deprecate: 1.0.2 transitivePeerDependencies: - encoding - supports-color dev: true - /@storybook/router@8.0.5: - resolution: {integrity: sha512-1d4CqNJB5sA25HCd7jZ4eVqMsdlD4r4SuFA/eR6fas0lk7yjVCpG1zWfvSSk5tKoVcNLSptc/TYBiSr2rcGRvw==} + /@storybook/router@8.0.9: + resolution: {integrity: sha512-aAOWxbM9J4mt+cp4o88T2PB29mgBBTOzU37/pUsTHYnKnR9XI4npXEXdN8Gv+ryqM0kj0AbBpz/llFlnR2MNNA==} dependencies: - '@storybook/client-logger': 8.0.5 + '@storybook/client-logger': 8.0.9 memoizerific: 1.11.3 - qs: 6.12.0 + qs: 6.12.1 dev: true - /@storybook/telemetry@8.0.5: - resolution: {integrity: sha512-KTt6wP78dn9hfsc0sR2CcFT/DWJgYqYuFBhc3NDgtT41ATLGgGniCQW9PtKLQc+FMofKejz1S+XXk0W322Pjxg==} + /@storybook/telemetry@8.0.9: + resolution: {integrity: sha512-AGGfcup06t+wxhBIkHd0iybieOh9PDVZQJ9oPct5JGB39+ni9wvs0WOD+MYlHbsjp8id7+aGkh6mYuYOvfck+Q==} dependencies: - '@storybook/client-logger': 8.0.5 - '@storybook/core-common': 8.0.5 - '@storybook/csf-tools': 8.0.5 + '@storybook/client-logger': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/csf-tools': 8.0.9 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 @@ -4140,19 +4402,18 @@ packages: - supports-color dev: true - /@storybook/test@8.0.5(@types/jest@29.5.12)(jest@27.5.1): - resolution: {integrity: sha512-XpiRLsmZlkjoAGf3d7zcInByR25evYIzm3W4ST8+EPoI4Tcd/U+dGUQ9A6aNUuC6fJQ8Jh0M+EqNAZtcDT8lrA==} + /@storybook/test@8.0.9(@types/jest@29.5.12)(jest@27.5.1): + resolution: {integrity: sha512-bRd5tBJnPzR6UKbDXONWnFWtdkNOY99HMLDUWe5fTRo50GwkrpFBVqPflhdkruEeof0kAbBUbnoN2CIYgtnAFw==} dependencies: - '@storybook/client-logger': 8.0.5 - '@storybook/core-events': 8.0.5 - '@storybook/instrumenter': 8.0.5 - '@storybook/preview-api': 8.0.5 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/instrumenter': 8.0.9 + '@storybook/preview-api': 8.0.9 '@testing-library/dom': 9.3.4 '@testing-library/jest-dom': 6.4.2(@types/jest@29.5.12)(jest@27.5.1) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 - '@vitest/spy': 1.4.0 - chai: 4.4.1 + '@vitest/spy': 1.5.2 util: 0.12.5 transitivePeerDependencies: - '@jest/globals' @@ -4162,8 +4423,8 @@ packages: - vitest dev: true - /@storybook/theming@8.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Hy4hJaKg6UUyivkUM77nCHccv4/lO++ZG9F88qBFVPdBlCwMHHnUrR7Hgje5cCVAy0jK6LyYlD3cWO6nS9OR8w==} + /@storybook/theming@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-jgfDuYoiNMMirQiASN3Eg0hGDXsEtpdAcMxyShqYGwu9elxgD9yUnYC2nSckYsM74a3ZQ3JaViZ9ZFSe2FHmeQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4173,18 +4434,18 @@ packages: react-dom: optional: true dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@storybook/client-logger': 8.0.5 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.0) + '@storybook/client-logger': 8.0.9 '@storybook/global': 5.0.0 memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: true - /@storybook/types@8.0.5: - resolution: {integrity: sha512-lYXwYF9qooQhYJkg3HWr6PD/vnQK+iO8fSKS8jtntwgJUKJvTbGZKAhNnS8WzNEI9jIp5QXFsSA367NjIDPaeQ==} + /@storybook/types@8.0.9: + resolution: {integrity: sha512-ew0EXzk9k4B557P1qIWYrnvUcgaE0WWA5qQS0AU8l+fRTp5nvl9O3SP/zNIB0SN1qDFO7dXr3idTNTyIikTcEQ==} dependencies: - '@storybook/channels': 8.0.5 + '@storybook/channels': 8.0.9 '@types/express': 4.17.21 file-system-cache: 2.3.0 dev: true @@ -4192,7 +4453,7 @@ packages: /@surma/rollup-plugin-off-main-thread@2.2.3: resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: - ejs: 3.1.9 + ejs: 3.1.10 json5: 2.2.3 magic-string: 0.25.9 string.prototype.matchall: 4.0.11 @@ -4274,7 +4535,7 @@ packages: resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@svgr/babel-preset': 5.5.0 '@svgr/hast-util-to-babel-ast': 5.5.0 svg-parser: 2.0.4 @@ -4295,10 +4556,10 @@ packages: resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.3) - '@babel/preset-env': 7.24.3(@babel/core@7.24.3) - '@babel/preset-react': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-react': 7.24.1(@babel/core@7.24.4) '@svgr/core': 5.5.0 '@svgr/plugin-jsx': 5.5.0 '@svgr/plugin-svgo': 5.5.0 @@ -4307,40 +4568,58 @@ packages: - supports-color dev: true - /@tanstack/query-core@5.28.9: - resolution: {integrity: sha512-hNlfCiqZevr3GRVPXS3MhaGW5hjcxvCsIQ4q6ff7EPlvFwYZaS+0d9EIIgofnegDaU2BbCDlyURoYfRl5rmzow==} - dev: true + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@tanstack/query-core@5.32.0: + resolution: {integrity: sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw==} - /@tanstack/react-query@5.28.9(react@18.2.0): - resolution: {integrity: sha512-vwifBkGXsydsLxFOBMe3+f8kvtDoqDRDwUNjPHVDDt+FoBetCbOWAUHgZn4k+CVeZgLmy7bx6aKeDbe3e8koOQ==} + /@tanstack/react-query@5.32.0(react@18.3.0): + resolution: {integrity: sha512-+E3UudQtarnx9A6xhpgMZapyF+aJfNBGFMgI459FnduEZqT/9KhOWnMOneZahLRt52yzskSA0AuOyLkXHK0yBA==} peerDependencies: react: ^18.0.0 dependencies: - '@tanstack/query-core': 5.28.9 - react: 18.2.0 - dev: true + '@tanstack/query-core': 5.32.0 + react: 18.3.0 - /@tanstack/react-virtual@3.2.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg==} + /@tanstack/react-virtual@3.4.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-GZN4xn/Tg5w7gvYeVcMVCeL4pEyUhvg+Cp6KX2Z01C4FRNxIWMgIQ9ibgMarNQfo+gt0PVLcEER4A9sNv/jlow==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/virtual-core': 3.2.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@tanstack/virtual-core': 3.4.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: false - /@tanstack/virtual-core@3.2.0: - resolution: {integrity: sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ==} + /@tanstack/virtual-core@3.4.0: + resolution: {integrity: sha512-75jXqXxqq5M5Veb9KP1STi8kA5u408uOOAefk2ftHDGCpUk3RP6zX++QqfbmHJTBiU72NQ+ghgCZVts/Wocz8Q==} dev: false + /@testing-library/dom@10.0.0: + resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} + engines: {node: '>=18'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.4 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/dom@8.20.1: resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -4354,7 +4633,7 @@ packages: engines: {node: '>=14'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -4368,7 +4647,7 @@ packages: engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/testing-library__jest-dom': 5.14.9 aria-query: 5.3.0 chalk: 3.0.0 @@ -4400,7 +4679,7 @@ packages: optional: true dependencies: '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/jest': 29.5.12 aria-query: 5.3.0 chalk: 3.0.0 @@ -4411,28 +4690,28 @@ packages: redent: 3.0.0 dev: true - /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): + /@testing-library/react@13.4.0(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} engines: {node: '>=12'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@testing-library/dom': 8.20.1 - '@types/react-dom': 18.2.23 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: true - /@testing-library/user-event@13.5.0(@testing-library/dom@9.3.4): + /@testing-library/user-event@13.5.0(@testing-library/dom@10.0.0): resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} engines: {node: '>=10', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' dependencies: - '@babel/runtime': 7.24.1 - '@testing-library/dom': 9.3.4 + '@babel/runtime': 7.24.4 + '@testing-library/dom': 10.0.0 dev: true /@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4): @@ -4449,6 +4728,10 @@ packages: engines: {node: '>= 6'} dev: true + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true + /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5): resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} peerDependencies: @@ -4459,7 +4742,7 @@ packages: optional: true dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/traverse': 7.23.2 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 @@ -4474,6 +4757,63 @@ packages: engines: {node: '>=10.13.0'} dev: true + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@turbo/gen@1.13.3(@types/node@20.12.7)(typescript@5.4.5): + resolution: {integrity: sha512-l+EM1gGzckFMaaVQyj3BVRa0QJ+tpp8HfiHOhGpBWW3Vc0Hfj92AY87Di/7HGABa+HVY7ueatMi7DJG+zkJBYg==} + hasBin: true + dependencies: + '@turbo/workspaces': 1.13.3 + chalk: 2.4.2 + commander: 10.0.1 + fs-extra: 10.1.0 + inquirer: 8.2.6 + minimatch: 9.0.4 + node-plop: 0.26.3 + proxy-agent: 6.4.0 + ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + update-check: 1.5.4 + validate-npm-package-name: 5.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - supports-color + - typescript + dev: true + + /@turbo/workspaces@1.13.3: + resolution: {integrity: sha512-QYZ8g3IVQebqNM8IsBlWYOWmOKjBZY55e6lx4EDOLuch1iWmyk+U8CLAI9UomMrSaKTs1Sx+PDkt63EgakvhUw==} + hasBin: true + dependencies: + chalk: 2.4.2 + commander: 10.0.1 + execa: 5.1.1 + fast-glob: 3.3.2 + fs-extra: 10.1.0 + gradient-string: 2.0.2 + inquirer: 8.2.6 + js-yaml: 4.1.0 + ora: 4.1.1 + rimraf: 3.0.2 + semver: 7.6.0 + update-check: 1.5.4 + dev: true + /@tweenjs/tween.js@23.1.1: resolution: {integrity: sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw==} dev: false @@ -4485,7 +4825,7 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -4501,7 +4841,7 @@ packages: /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 dev: true @@ -4515,32 +4855,32 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.17.43 - '@types/node': 16.18.93 + '@types/express-serve-static-core': 4.19.0 + '@types/node': 20.12.7 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/cross-spawn@6.0.6: resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/detect-port@1.3.5: @@ -4570,12 +4910,12 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.6 + '@types/eslint': 8.56.10 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.56.6: - resolution: {integrity: sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==} + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -4593,11 +4933,11 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.17.43: - resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + /@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: - '@types/node': 16.18.93 - '@types/qs': 6.9.14 + '@types/node': 20.12.7 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -4606,15 +4946,22 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.14 - '@types/serve-static': 1.15.5 + '@types/express-serve-static-core': 4.19.0 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.12.7 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/hast@3.0.4: @@ -4634,7 +4981,14 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 + dev: true + + /@types/inquirer@6.5.0: + resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + dependencies: + '@types/through': 0.0.33 + rxjs: 6.6.7 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -4672,33 +5026,32 @@ packages: resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} dev: true - /@types/mdx@2.0.12: - resolution: {integrity: sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==} + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} dev: true /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true - /@types/mime@4.0.0: - resolution: {integrity: sha512-5eEkJZ/BLvTE3vXGKkWlyTSUVZuzj23Wj8PoyOq2lt5I3CYbiLBOPb3XmCW6QcuOibIUE6emHXHt9E/F/rCa6w==} - deprecated: This is a stub types definition. mime provides its own type definitions, so you do not need this installed. - dependencies: - mime: 4.0.1 + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true - /@types/node@16.18.93: - resolution: {integrity: sha512-epWuohp6c0bQt0j3RYCiP9x52axHVn+CjS1Rx1VjPwF+ySg8lrigH3yXGs88XqnA+jGM2qnSMuFTsBxft+hO1Q==} + /@types/node@18.19.31: + resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} + dependencies: + undici-types: 5.26.5 dev: true - /@types/node@18.19.28: - resolution: {integrity: sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} dependencies: undici-types: 5.26.5 dev: true @@ -4725,21 +5078,21 @@ packages: resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} dev: true - /@types/qs@6.9.14: - resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} dev: true - /@types/react-dom@18.2.23: - resolution: {integrity: sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==} + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: - '@types/react': 18.2.73 + '@types/react': 18.3.0 - /@types/react@18.2.73: - resolution: {integrity: sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==} + /@types/react@18.3.0: + resolution: {integrity: sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -4747,7 +5100,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/resolve@1.20.2: @@ -4770,7 +5123,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/serve-index@1.9.4: @@ -4779,18 +5132,18 @@ packages: '@types/express': 4.17.21 dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 4.0.0 - '@types/node': 16.18.93 + '@types/node': 20.12.7 + '@types/send': 0.17.4 dev: true /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/stack-utils@2.0.3: @@ -4803,6 +5156,16 @@ packages: '@types/jest': 29.5.12 dev: true + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/tinycolor2@1.4.6: + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + dev: true + /@types/trusted-types@2.0.7: resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: true @@ -4818,7 +5181,7 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /@types/yargs-parser@21.0.3: @@ -4837,7 +5200,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4849,24 +5212,53 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==} + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -4877,37 +5269,37 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.4.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/scope-manager': 7.4.0 - '@typescript-eslint/type-utils': 7.4.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.4.0 + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4919,16 +5311,58 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.4.0(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==} + /@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -4937,13 +5371,13 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.4.0 - '@typescript-eslint/types': 7.4.0 - '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.4.0 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -4956,15 +5390,31 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@7.4.0: - resolution: {integrity: sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true + + /@typescript-eslint/scope-manager@7.2.0: + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + dev: true + + /@typescript-eslint/scope-manager@7.7.1: + resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.4.0 - '@typescript-eslint/visitor-keys': 7.4.0 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4974,47 +5424,77 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.4.0(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==} - engines: {node: ^18.18.0 || >=20.0.0} + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) - '@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@7.4.0: - resolution: {integrity: sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==} + /@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.3): + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@7.2.0: + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@7.7.1: + resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -5029,35 +5509,79 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.3) - typescript: 5.4.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.4.0(typescript@5.4.3): - resolution: {integrity: sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==} - engines: {node: ^18.18.0 || >=20.0.0} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.4.0 - '@typescript-eslint/visitor-keys': 7.4.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.3): + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5): + resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -5068,7 +5592,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -5077,8 +5601,27 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.4.0(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==} + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -5086,9 +5629,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.4.0 - '@typescript-eslint/types': 7.4.0 - '@typescript-eslint/typescript-estree': 7.4.0(typescript@5.4.3) + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -5104,11 +5647,27 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@7.4.0: - resolution: {integrity: sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.2.0: + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.7.1: + resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.4.0 + '@typescript-eslint/types': 7.7.1 eslint-visitor-keys: 3.4.3 dev: true @@ -5116,6 +5675,53 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.24.4 + '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) + prettier: 3.2.5 + prettier-plugin-packagejson: 2.5.0(prettier@3.2.5) + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + /@vitest/expect@1.3.1: resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} dependencies: @@ -5130,8 +5736,8 @@ packages: tinyspy: 2.2.1 dev: true - /@vitest/spy@1.4.0: - resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} + /@vitest/spy@1.5.2: + resolution: {integrity: sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==} dependencies: tinyspy: 2.2.1 dev: true @@ -5145,8 +5751,8 @@ packages: pretty-format: 29.7.0 dev: true - /@vitest/utils@1.4.0: - resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} + /@vitest/utils@1.5.2: + resolution: {integrity: sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==} dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 @@ -5303,7 +5909,7 @@ packages: deprecated: Use your platform's native atob() and btoa() methods instead dev: true - /abitype@1.0.0(typescript@5.4.3): + /abitype@1.0.0(typescript@5.4.5): resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} peerDependencies: typescript: '>=5.0.4' @@ -5314,7 +5920,7 @@ packages: zod: optional: true dependencies: - typescript: 5.4.3 + typescript: 5.4.5 dev: false /accepts@1.3.8: @@ -5366,6 +5972,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} @@ -5400,6 +6011,15 @@ packages: - supports-color dev: true + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -5483,7 +6103,6 @@ packages: /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} - requiresBuild: true dependencies: color-convert: 1.9.3 @@ -5512,8 +6131,8 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 - /apexcharts@3.48.0: - resolution: {integrity: sha512-Lhpj1Ij6lKlrUke8gf+P+SE6uGUn+Pe1TnCJ+zqrY0YMvbqM3LMb1lY+eybbTczUyk0RmMZomlTa2NgX2EUs4Q==} + /apexcharts@3.49.0: + resolution: {integrity: sha512-2T9HnbQFLCuYRPndQLmh+bEQFoz0meUbvASaGgiSKDuYhWcLBodJtIpKql2aOtMx4B/sHrWW0dm90HsW4+h2PQ==} dependencies: '@yr/monotone-cubic-spline': 1.0.3 svg.draggable.js: 2.2.2 @@ -5528,6 +6147,10 @@ packages: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} dev: true + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -5694,6 +6317,13 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: true + /ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} @@ -5722,7 +6352,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001603 + caniuse-lite: 1.0.30001612 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -5748,26 +6378,26 @@ packages: dequal: 2.0.3 dev: true - /babel-core@7.0.0-bridge.0(@babel/core@7.24.3): + /babel-core@7.0.0-bridge.0(@babel/core@7.24.4): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 dev: true - /babel-jest@27.5.1(@babel/core@7.24.3): + /babel-jest@27.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.24.3) + babel-preset-jest: 27.5.1(@babel/core@7.24.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -5775,14 +6405,14 @@ packages: - supports-color dev: true - /babel-loader@8.3.0(@babel/core@7.24.3)(webpack@5.91.0): + /babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 webpack: '>=2' dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 @@ -5817,50 +6447,50 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 cosmiconfig: 7.1.0 resolve: 1.22.8 - /babel-plugin-named-asset-import@0.3.8(@babel/core@7.24.3): + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.24.4): resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} peerDependencies: '@babel/core': ^7.1.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 dev: true - /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.3): - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.4): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.24.1 - '@babel/core': 7.24.3 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.3) + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.3): + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.3) - core-js-compat: 3.36.1 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) + core-js-compat: 3.37.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.3): - resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.4): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) transitivePeerDependencies: - supports-color dev: true @@ -5869,55 +6499,55 @@ packages: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.3): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.3) - dev: true - - /babel-preset-jest@27.5.1(@babel/core@7.24.3): + '@babel/core': 7.24.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + dev: true + + /babel-preset-jest@27.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) dev: true /babel-preset-react-app@10.0.1: resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.3) - '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.3) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.3) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.3) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.3) - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.3) - '@babel/preset-env': 7.24.3(@babel/core@7.24.3) - '@babel/preset-react': 7.24.1(@babel/core@7.24.3) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.3) - '@babel/runtime': 7.24.1 + '@babel/core': 7.24.4 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.4) + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-react': 7.24.1(@babel/core@7.24.4) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/runtime': 7.24.4 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -5931,6 +6561,11 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true + /basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + dev: true + /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true @@ -6057,8 +6692,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001603 - electron-to-chromium: 1.4.722 + caniuse-lite: 1.0.30001612 + electron-to-chromium: 1.4.749 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true @@ -6085,6 +6720,19 @@ packages: engines: {node: '>=6'} dev: true + /builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + dependencies: + semver: 7.6.0 + dev: true + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -6110,6 +6758,13 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: @@ -6135,14 +6790,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001603 + caniuse-lite: 1.0.30001612 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001603: - resolution: {integrity: sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q==} - dev: true + /caniuse-lite@1.0.30001612: + resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==} /canvas-color-tracker@1.2.1: resolution: {integrity: sha512-i5clg2pEdaWqHuEM/B74NZNLkHh5+OkXbA/T4iaBiaNDagkOCXkLNrhqUfdUugsRwuaNRU20e/OygzxWRor3yg==} @@ -6198,6 +6852,29 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /change-case@3.1.0: + resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + dependencies: + camel-case: 3.0.0 + constant-case: 2.0.0 + dot-case: 2.1.1 + header-case: 1.0.1 + is-lower-case: 1.1.3 + is-upper-case: 1.1.2 + lower-case: 1.1.4 + lower-case-first: 1.0.2 + no-case: 2.3.2 + param-case: 2.1.1 + pascal-case: 2.0.1 + path-case: 2.1.1 + sentence-case: 2.1.1 + snake-case: 2.1.0 + swap-case: 1.1.2 + title-case: 2.1.1 + upper-case: 1.1.3 + upper-case-first: 1.1.2 + dev: true + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -6208,6 +6885,10 @@ packages: engines: {node: '>=12.20'} dev: true + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -6287,6 +6968,13 @@ packages: source-map: 0.6.1 dev: true + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -6328,6 +7016,11 @@ packages: string-width: 7.1.0 dev: true + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -6359,8 +7052,8 @@ packages: engines: {node: '>=6'} dev: false - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} dev: false @@ -6384,7 +7077,6 @@ packages: /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - requiresBuild: true dependencies: color-name: 1.1.3 @@ -6396,7 +7088,6 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - requiresBuild: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -6416,6 +7107,11 @@ packages: delayed-stream: 1.0.0 dev: true + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + /commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -6503,6 +7199,13 @@ packages: engines: {node: ^14.18.0 || >=16.10.0} dev: true + /constant-case@2.0.0: + resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + dependencies: + snake-case: 2.1.0 + upper-case: 1.1.3 + dev: true + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true @@ -6535,19 +7238,19 @@ packages: engines: {node: '>= 0.6'} dev: true - /core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + /core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} dependencies: browserslist: 4.23.0 dev: true - /core-js-pure@3.36.1: - resolution: {integrity: sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==} + /core-js-pure@3.37.0: + resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==} requiresBuild: true dev: true - /core-js@3.36.1: - resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} + /core-js@3.37.0: + resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==} requiresBuild: true dev: true @@ -6576,6 +7279,10 @@ packages: path-type: 4.0.0 yaml: 1.10.2 + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -6620,8 +7327,8 @@ packages: postcss-selector-parser: 6.0.16 dev: true - /css-loader@6.10.0(webpack@5.91.0): - resolution: {integrity: sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==} + /css-loader@6.11.0(webpack@5.91.0): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} engines: {node: '>= 12.13.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -6634,9 +7341,9 @@ packages: dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.38) - postcss-modules-scope: 3.1.1(postcss@8.4.38) + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 @@ -6966,6 +7673,11 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + dev: true + /data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -7075,6 +7787,11 @@ packages: which-typed-array: 1.1.15 dev: true + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -7132,6 +7849,29 @@ packages: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dev: true + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: true + + /del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + /del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} @@ -7176,11 +7916,21 @@ packages: engines: {node: '>=8'} dev: true + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true @@ -7226,6 +7976,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -7324,6 +8079,12 @@ packages: domhandler: 4.3.1 dev: true + /dot-case@2.1.1: + resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + dependencies: + no-case: 2.3.2 + dev: true + /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: @@ -7345,8 +8106,8 @@ packages: engines: {node: '>=10'} dev: true - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} dev: true @@ -7370,16 +8131,16 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true dependencies: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.722: - resolution: {integrity: sha512-5nLE0TWFFpZ80Crhtp4pIp8LXCztjYX41yUcV6b+bKR2PqzjskTMOOlBi1VjBHlvHwS+4gar7kNKOrsbsewEZQ==} + /electron-to-chromium@1.4.749: + resolution: {integrity: sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q==} dev: true /emittery@0.10.2: @@ -7438,8 +8199,8 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true - /envinfo@7.11.1: - resolution: {integrity: sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==} + /envinfo@7.12.0: + resolution: {integrity: sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==} engines: {node: '>=4'} hasBin: true dev: true @@ -7537,8 +8298,8 @@ packages: stop-iteration-iterator: 1.0.0 dev: true - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -7650,7 +8411,6 @@ packages: /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - requiresBuild: true /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} @@ -7686,6 +8446,31 @@ packages: source-map: 0.6.1 dev: true + /eslint-config-next@14.2.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 14.2.1 + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -7695,7 +8480,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.3): + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5): resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -7705,22 +8490,22 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.24.3 - '@babel/eslint-parser': 7.24.1(@babel/core@7.24.3)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@babel/core': 7.24.4 + '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 8.57.0 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.3) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.4.3) - typescript: 5.4.3 + eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -7730,6 +8515,24 @@ packages: - supports-color dev: true + /eslint-config-turbo@1.13.3(eslint@8.57.0): + resolution: {integrity: sha512-if/QtwEiWZ5b7Bg8yZBPSvS0TeCG2Zvfa/+XBYANS7uSYucjmW+BBC8enJB0PqpB/YLGGOumeo3x7h1Nuba9iw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + eslint: 8.57.0 + eslint-plugin-turbo: 1.13.3(eslint@8.57.0) + dev: true + + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) + dev: true + /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: @@ -7740,6 +8543,52 @@ packages: - supports-color dev: true + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.16.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.16.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} @@ -7752,39 +8601,209 @@ packages: peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.57.0 + ignore: 5.3.1 + dev: true + + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0): + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + eslint: 8.57.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 + doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0): - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.3) - eslint: 8.57.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -7794,7 +8813,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7803,7 +8822,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7819,7 +8838,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.3): + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5): resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -7832,8 +8851,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 jest: 27.5.1 transitivePeerDependencies: @@ -7841,13 +8860,34 @@ packages: - typescript dev: true + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -7856,7 +8896,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.57.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7866,7 +8906,25 @@ packages: object.fromentries: 2.0.8 dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + dependencies: + eslint: 8.57.0 + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + dev: true + + /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -7880,6 +8938,7 @@ packages: eslint-config-prettier: optional: true dependencies: + '@types/eslint': 8.56.10 eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.2.5 @@ -7887,8 +8946,8 @@ packages: synckit: 0.8.8 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + /eslint-plugin-react-hooks@4.6.1(eslint@8.57.0): + resolution: {integrity: sha512-Ck77j8hF7l9N4S/rzSLOWEKpn994YH6iwUK8fr9mXIaQvGpQYmOnQLbiue1u5kI5T1y+gdgqosnEAO9NCz0DBg==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 @@ -7908,7 +8967,7 @@ packages: array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -7923,14 +8982,14 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.4.3): + /eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} engines: {node: '>= 18'} peerDependencies: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -7939,19 +8998,72 @@ packages: - typescript dev: true - /eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.4.3): + /eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript dev: true + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + dev: true + + /eslint-plugin-turbo@1.13.3(eslint@8.57.0): + resolution: {integrity: sha512-RjmlnqYsEqnJ+U3M3IS5jLJDjWv5NsvReCpsC61n5pJ4JMHTZ/lU0EIoL1ccuL1L5wP0APzdXdByBxERcPQ+Nw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.57.0 + dev: true + + /eslint-plugin-unicorn@48.0.1(eslint@8.57.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.57.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.0 + strip-indent: 3.0.0 + dev: true + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -7985,7 +9097,7 @@ packages: eslint: ^7.0.0 || ^8.0.0 webpack: ^5.0.0 dependencies: - '@types/eslint': 8.56.6 + '@types/eslint': 8.56.10 eslint: 8.57.0 jest-worker: 28.1.3 micromatch: 4.0.5 @@ -8222,6 +9334,15 @@ packages: - supports-color dev: true + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -8274,6 +9395,13 @@ packages: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} dev: true + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -8394,8 +9522,8 @@ packages: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /flow-parser@0.232.0: - resolution: {integrity: sha512-U8vcKyYdM+Kb0tPzfPJ5JyPMU0uXKwHxp0L6BcEc+wBlbTW9qRhOqV5DeGXclgclVvtqQNGEG8Strj/b6c/IxA==} + /flow-parser@0.235.1: + resolution: {integrity: sha512-s04193L4JE+ntEcQXbD6jxRRlyj9QXcgEl2W6xSjH4l9x4b0eHoCHfbYHjqf9LdZFUiM5LhgpiqsvLj/AyOyYQ==} engines: {node: '>=0.4.0'} dev: true @@ -8442,7 +9570,7 @@ packages: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.3)(webpack@5.91.0): + /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -8470,11 +9598,11 @@ packages: schema-utils: 2.7.0 semver: 7.6.0 tapable: 1.1.3 - typescript: 5.4.3 + typescript: 5.4.5 webpack: 5.91.0(esbuild@0.20.2) dev: true - /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.3)(webpack@5.91.0): + /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} peerDependencies: @@ -8493,7 +9621,7 @@ packages: schema-utils: 3.3.0 semver: 7.6.0 tapable: 2.2.1 - typescript: 5.4.3 + typescript: 5.4.5 webpack: 5.91.0(esbuild@0.20.2) dev: true @@ -8654,6 +9782,11 @@ packages: engines: {node: '>=8.0.0'} dev: true + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -8673,6 +9806,24 @@ packages: get-intrinsic: 1.2.4 dev: true + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.4 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} hasBin: true @@ -8687,6 +9838,10 @@ packages: tar: 6.2.1 dev: true + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + /github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} dev: true @@ -8707,8 +9862,8 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: @@ -8775,6 +9930,20 @@ packages: define-properties: 1.2.1 dev: true + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -8787,6 +9956,17 @@ packages: slash: 3.0.0 dev: true + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -8795,6 +9975,13 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /gradient-string@2.0.2: + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + tinygradient: 1.1.5 dev: true /graphemer@1.4.0: @@ -8848,7 +10035,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - requiresBuild: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -8907,6 +10093,13 @@ packages: hasBin: true dev: true + /header-case@1.0.1: + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -8957,7 +10150,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.30.0 + terser: 5.30.4 dev: true /html-tags@3.3.1: @@ -9034,6 +10227,16 @@ packages: - supports-color dev: true + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /http-proxy-middleware@2.0.6(@types/express@4.17.21): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} @@ -9074,6 +10277,16 @@ packages: - supports-color dev: true + /https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -9205,6 +10418,46 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + dev: true + + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + dev: true + /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -9219,6 +10472,14 @@ packages: engines: {node: '>=12'} dev: false + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true + /ip@2.0.1: resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} dev: true @@ -9228,8 +10489,8 @@ packages: engines: {node: '>= 0.10'} dev: true - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + /ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} dev: true @@ -9379,6 +10640,12 @@ packages: engines: {node: '>=8'} dev: true + /is-lower-case@1.1.3: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + dependencies: + lower-case: 1.1.4 + dev: true + /is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -9432,6 +10699,11 @@ packages: engines: {node: '>=10'} dev: true + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -9524,6 +10796,12 @@ packages: engines: {node: '>=10'} dev: true + /is-upper-case@1.1.2: + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + dependencies: + upper-case: 1.1.3 + dev: true + /is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -9558,6 +10836,11 @@ packages: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true + /isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -9583,8 +10866,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.3 - '@babel/parser': 7.24.1 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -9674,7 +10957,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -9733,10 +11016,10 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.24.3) + babel-jest: 27.5.1(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -9809,7 +11092,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -9827,7 +11110,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -9848,7 +11131,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.93 + '@types/node': 20.12.7 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -9870,7 +11153,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -9965,7 +11248,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 dev: true /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -10026,7 +11309,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -10083,7 +11366,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 graceful-fs: 4.2.11 dev: true @@ -10091,16 +11374,16 @@ packages: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.24.3 - '@babel/generator': 7.24.1 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.20.5 '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -10122,7 +11405,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10134,7 +11417,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10146,7 +11429,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.93 + '@types/node': 20.12.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10187,7 +11470,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.93 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -10200,7 +11483,7 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 16.18.93 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -10212,7 +11495,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -10221,7 +11504,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -10230,7 +11513,7 @@ packages: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 16.18.93 + '@types/node': 20.12.7 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -10260,6 +11543,10 @@ packages: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -10278,7 +11565,11 @@ packages: argparse: 2.0.1 dev: true - /jscodeshift@0.15.2(@babel/preset-env@7.24.3): + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true + + /jscodeshift@0.15.2(@babel/preset-env@7.24.4): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} hasBin: true peerDependencies: @@ -10287,20 +11578,20 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/core': 7.24.3 - '@babel/parser': 7.24.1 - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.3) - '@babel/preset-env': 7.24.3(@babel/core@7.24.3) - '@babel/preset-flow': 7.24.1(@babel/core@7.24.3) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.3) - '@babel/register': 7.23.7(@babel/core@7.24.3) - babel-core: 7.0.0-bridge.0(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-flow': 7.24.1(@babel/core@7.24.4) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/register': 7.23.7(@babel/core@7.24.4) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.4) chalk: 4.1.2 - flow-parser: 0.232.0 + flow-parser: 0.235.1 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 @@ -10335,7 +11626,7 @@ packages: http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 @@ -10365,6 +11656,12 @@ packages: hasBin: true dev: true + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true @@ -10483,7 +11780,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: app-root-dir: 1.0.2 - dotenv: 16.4.5 + dotenv: 16.0.3 dotenv-expand: 10.0.0 dev: true @@ -10608,6 +11905,10 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -10628,6 +11929,13 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + dependencies: + chalk: 2.4.2 + dev: true + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -10659,14 +11967,24 @@ packages: get-func-name: 2.0.2 dev: true + /lower-case-first@1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.6.2 dev: true - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.2.1: + resolution: {integrity: sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==} engines: {node: 14 || >=16.14} /lru-cache@5.1.1: @@ -10682,12 +12000,17 @@ packages: yallist: 4.0.0 dev: true - /lucide-react@0.364.0(react@18.2.0): + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + + /lucide-react@0.364.0(react@18.3.0): resolution: {integrity: sha512-eHfdbJExWtTaZ0tBMGtI7PA/MbqV5wt+o4/yitDce17tadH/75Gq3Tq8jSteb3LhLr0eay/j5YUuN4yXjnI3aw==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.0 dev: false /lz-string@1.5.0: @@ -10701,9 +12024,8 @@ packages: sourcemap-codec: 1.4.8 dev: true - /magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: true @@ -10730,6 +12052,10 @@ packages: semver: 7.6.0 dev: true + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: @@ -10740,13 +12066,13 @@ packages: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} dev: true - /markdown-to-jsx@7.3.2(react@18.2.0): + /markdown-to-jsx@7.3.2(react@18.3.0): resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' dependencies: - react: 18.2.0 + react: 18.3.0 dev: true /mdn-data@2.0.14: @@ -10817,12 +12143,6 @@ packages: hasBin: true dev: true - /mime@4.0.1: - resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==} - engines: {node: '>=16'} - hasBin: true - dev: true - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -10838,8 +12158,8 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin@2.8.1(webpack@5.91.0): - resolution: {integrity: sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==} + /mini-css-extract-plugin@2.9.0(webpack@5.91.0): + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -10944,6 +12264,10 @@ packages: thunky: 1.1.0 dev: true + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -10969,8 +12293,58 @@ packages: engines: {node: '>= 0.6'} dev: true - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: true + + /next@14.1.4(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.1.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001612 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + styled-jsx: 5.1.1(react@18.3.0) + optionalDependencies: + '@next/swc-darwin-arm64': 14.1.4 + '@next/swc-darwin-x64': 14.1.4 + '@next/swc-linux-arm64-gnu': 14.1.4 + '@next/swc-linux-arm64-musl': 14.1.4 + '@next/swc-linux-x64-gnu': 14.1.4 + '@next/swc-linux-x64-musl': 14.1.4 + '@next/swc-win32-arm64-msvc': 14.1.4 + '@next/swc-win32-ia32-msvc': 14.1.4 + '@next/swc-win32-x64-msvc': 14.1.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 dev: true /no-case@3.0.4: @@ -11016,6 +12390,23 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true + /node-plop@0.26.3: + resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} + engines: {node: '>=8.9.4'} + dependencies: + '@babel/runtime-corejs3': 7.24.4 + '@types/inquirer': 6.5.0 + change-case: 3.1.0 + del: 5.1.0 + globby: 10.0.2 + handlebars: 4.7.8 + inquirer: 7.3.3 + isbinaryfile: 4.0.10 + lodash.get: 4.4.2 + mkdirp: 0.5.6 + resolve: 1.22.8 + dev: true + /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true @@ -11069,8 +12460,8 @@ packages: boolbase: 1.0.0 dev: true - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} dev: true /nypm@0.3.8: @@ -11256,6 +12647,20 @@ packages: type-check: 0.4.0 dev: true + /ora@4.1.1: + resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} + engines: {node: '>=8'} + dependencies: + chalk: 3.0.0 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + log-symbols: 3.0.0 + mute-stream: 0.0.8 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -11271,6 +12676,11 @@ packages: wcwidth: 1.0.1 dev: true + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -11311,6 +12721,13 @@ packages: p-limit: 3.1.0 dev: true + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -11346,10 +12763,40 @@ packages: engines: {node: '>=6'} dev: true + /pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.4 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + dev: true + /pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} dev: true + /param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + dependencies: + no-case: 2.3.2 + dev: true + /param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: @@ -11381,6 +12828,13 @@ packages: engines: {node: '>= 0.8'} dev: true + /pascal-case@2.0.1: + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + dependencies: + camel-case: 3.0.0 + upper-case-first: 1.1.2 + dev: true + /pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: @@ -11392,6 +12846,12 @@ packages: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true + /path-case@2.1.1: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + dependencies: + no-case: 2.3.2 + dev: true + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -11423,7 +12883,7 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.1 minipass: 7.0.4 /path-to-regexp@0.1.7: @@ -11517,11 +12977,16 @@ packages: find-up: 3.0.0 dev: true - /pnp-webpack-plugin@1.7.0(typescript@5.4.3): + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /pnp-webpack-plugin@1.7.0(typescript@5.4.5): resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} engines: {node: '>=6'} dependencies: - ts-pnp: 1.2.0(typescript@5.4.3) + ts-pnp: 1.2.0(typescript@5.4.5) transitivePeerDependencies: - typescript dev: true @@ -11530,7 +12995,7 @@ packages: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 dev: true /possible-typed-array-names@1.0.0: @@ -11957,8 +13422,8 @@ packages: postcss-selector-parser: 6.0.16 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.38): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -11966,8 +13431,8 @@ packages: postcss: 8.4.38 dev: true - /postcss-modules-local-by-default@4.0.4(postcss@8.4.38): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -11978,8 +13443,8 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.1(postcss@8.4.38): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -12007,9 +13472,9 @@ packages: icss-replace-symbols: 1.1.0 lodash.camelcase: 4.3.0 postcss: 8.4.38 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.38) - postcss-modules-scope: 3.1.1(postcss@8.4.38) + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) postcss-modules-values: 4.0.0(postcss@8.4.38) string-hash: 1.1.3 dev: true @@ -12333,6 +13798,15 @@ packages: source-map: 0.6.1 dev: true + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: false + /postcss@8.4.38: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} @@ -12358,6 +13832,19 @@ packages: fast-diff: 1.3.0 dev: true + /prettier-plugin-packagejson@2.5.0(prettier@3.2.5): + resolution: {integrity: sha512-6XkH3rpin5QEQodBSVNg+rBo4r91g/1mCaRwS1YGdQJZ6jwqrg2UchBsIG9tpS1yK1kNBvOt84OILsX8uHzBGg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + dependencies: + prettier: 3.2.5 + sort-package-json: 2.10.0 + synckit: 0.9.0 + dev: true + /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} @@ -12392,7 +13879,7 @@ packages: '@jest/schemas': 28.1.3 ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.0 dev: true /pretty-format@29.7.0: @@ -12401,7 +13888,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.0 dev: true /pretty-hrtime@1.0.3: @@ -12452,6 +13939,26 @@ packages: ipaddr.js: 1.9.1 dev: true + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true @@ -12499,8 +14006,8 @@ packages: side-channel: 1.0.6 dev: true - /qs@6.12.0: - resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} + /qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -12544,22 +14051,32 @@ packages: unpipe: 1.0.0 dev: true - /react-apexcharts@1.4.1(apexcharts@3.48.0)(react@18.2.0): + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: true + + /react-apexcharts@1.4.1(apexcharts@3.49.0)(react@18.3.0): resolution: {integrity: sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==} peerDependencies: apexcharts: ^3.41.0 react: '>=0.13' dependencies: - apexcharts: 3.48.0 + apexcharts: 3.49.0 prop-types: 15.8.1 - react: 18.2.0 + react: 18.3.0 dev: false /react-app-polyfill@3.0.0: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} engines: {node: '>=14'} dependencies: - core-js: 3.36.1 + core-js: 3.37.0 object-assign: 4.1.1 promise: 8.3.0 raf: 3.4.1 @@ -12567,27 +14084,27 @@ packages: whatwg-fetch: 3.6.20 dev: true - /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0): + /react-colorful@5.6.1(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) dev: true - /react-confetti@6.1.0(react@18.2.0): + /react-confetti@6.1.0(react@18.3.0): resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} engines: {node: '>=10.18'} peerDependencies: react: ^16.3.0 || ^17.0.1 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.0 tween-functions: 1.2.0 dev: true - /react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.4.3)(webpack@5.91.0): + /react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -12606,7 +14123,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.3)(webpack@5.91.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -12621,7 +14138,7 @@ packages: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - typescript: 5.4.3 + typescript: 5.4.5 webpack: 5.91.0(esbuild@0.20.2) transitivePeerDependencies: - eslint @@ -12629,19 +14146,19 @@ packages: - vue-template-compiler dev: true - /react-docgen-typescript@2.2.2(typescript@5.4.3): + /react-docgen-typescript@2.2.2(typescript@5.4.5): resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' dependencies: - typescript: 5.4.3 + typescript: 5.4.5 dev: true /react-docgen@7.0.3: resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} engines: {node: '>=16.14.0'} dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 @@ -12655,16 +14172,16 @@ packages: - supports-color dev: true - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + /react-dom@18.3.0(react@18.3.0): + resolution: {integrity: sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==} peerDependencies: - react: ^18.2.0 + react: ^18.3.0 dependencies: loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + react: 18.3.0 + scheduler: 0.23.1 - /react-element-to-jsx-string@15.0.0(react-dom@18.2.0)(react@18.2.0): + /react-element-to-jsx-string@15.0.0(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} peerDependencies: react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 @@ -12672,8 +14189,8 @@ packages: dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) react-is: 18.1.0 dev: true @@ -12681,7 +14198,7 @@ packages: resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} dev: true - /react-force-graph-2d@1.25.4(react@18.2.0): + /react-force-graph-2d@1.25.4(react@18.3.0): resolution: {integrity: sha512-Y1xwa79PHVZUedfa/TO+Cboq2hIc1flA1z4o1oraOu6qMS0r421vNpfjWhJPR6qJonNme3tzeVt5boEA7Ue8sg==} engines: {node: '>=12'} peerDependencies: @@ -12689,16 +14206,16 @@ packages: dependencies: force-graph: 1.43.5 prop-types: 15.8.1 - react: 18.2.0 - react-kapsule: 2.4.0(react@18.2.0) + react: 18.3.0 + react-kapsule: 2.4.0(react@18.3.0) dev: false - /react-icons@5.0.1(react@18.2.0): - resolution: {integrity: sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==} + /react-icons@5.1.0(react@18.3.0): + resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} peerDependencies: react: '*' dependencies: - react: 18.2.0 + react: 18.3.0 dev: false /react-is@16.13.1: @@ -12712,11 +14229,11 @@ packages: resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.0: + resolution: {integrity: sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ==} dev: true - /react-kapsule@2.4.0(react@18.2.0): + /react-kapsule@2.4.0(react@18.3.0): resolution: {integrity: sha512-w4Yv9CgWdj8kWGQEPNWFGJJ08dYEZHZpiaFR/DgZjCMBNqv9wus2Gy1qvHVJmJbzvAZbq6jdvFC+NYzEqAlNhQ==} engines: {node: '>=12'} peerDependencies: @@ -12724,7 +14241,7 @@ packages: dependencies: fromentries: 1.3.2 jerrypick: 1.1.1 - react: 18.2.0 + react: 18.3.0 dev: false /react-refresh@0.11.0: @@ -12732,12 +14249,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + /react-refresh@0.14.1: + resolution: {integrity: sha512-iZiRCtNGY3QYP3pYOSSBOvQmBpQTcJccr/VcK2blpJrpPTUDjeN51mxm5nsrkCzBwsbGUj+TN9q2oPz5E13FLg==} engines: {node: '>=0.10.0'} dev: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.2.0)(typescript@5.4.3): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -12749,23 +14266,23 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0) '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1(@babel/core@7.24.3) - babel-loader: 8.3.0(@babel/core@7.24.3)(webpack@5.91.0) - babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.3) + babel-jest: 27.5.1(@babel/core@7.24.4) + babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0) + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.4) babel-preset-react-app: 10.0.1 bfj: 7.1.0 browserslist: 4.23.0 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.10.0(webpack@5.91.0) + css-loader: 6.11.0(webpack@5.91.0) css-minimizer-webpack-plugin: 3.4.1(esbuild@0.20.2)(webpack@5.91.0) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.3) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5) eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.91.0) file-loader: 6.2.0(webpack@5.91.0) fs-extra: 10.1.0 @@ -12774,16 +14291,16 @@ packages: jest: 27.5.1 jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0(jest@27.5.1) - mini-css-extract-plugin: 2.8.1(webpack@5.91.0) + mini-css-extract-plugin: 2.9.0(webpack@5.91.0) postcss: 8.4.38 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.38) postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.91.0) postcss-normalize: 10.0.1(browserslist@4.23.0)(postcss@8.4.38) postcss-preset-env: 7.8.3(postcss@8.4.38) prompts: 2.4.2 - react: 18.2.0 + react: 18.3.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.4.3)(webpack@5.91.0) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0) react-refresh: 0.11.0 resolve: 1.22.8 resolve-url-loader: 4.0.0 @@ -12793,7 +14310,7 @@ packages: style-loader: 3.3.4(webpack@5.91.0) tailwindcss: 3.4.3 terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) - typescript: 5.4.3 + typescript: 5.4.5 webpack: 5.91.0(esbuild@0.20.2) webpack-dev-server: 4.15.2(webpack@5.91.0) webpack-manifest-plugin: 4.1.1(webpack@5.91.0) @@ -12835,8 +14352,8 @@ packages: - webpack-plugin-serve dev: true - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + /react@18.3.0: + resolution: {integrity: sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 @@ -12952,13 +14469,18 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 dev: true /regex-parser@2.3.0: resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} dev: true + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -12981,6 +14503,27 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true + /registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + dev: true + + /registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + dependencies: + rc: 1.2.8 + dev: true + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true @@ -13059,6 +14602,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve-url-loader@4.0.0: resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} engines: {node: '>=8.9'} @@ -13083,6 +14630,13 @@ packages: engines: {node: '>=10'} dev: true + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -13143,26 +14697,26 @@ packages: glob: 7.2.3 dev: true - /rollup-plugin-dts@6.1.0(rollup@4.13.2)(typescript@5.4.3): + /rollup-plugin-dts@6.1.0(rollup@4.16.4)(typescript@5.4.5): resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} engines: {node: '>=16'} peerDependencies: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 dependencies: - magic-string: 0.30.8 - rollup: 4.13.2 - typescript: 5.4.3 + magic-string: 0.30.10 + rollup: 4.16.4 + typescript: 5.4.5 optionalDependencies: '@babel/code-frame': 7.24.2 dev: true - /rollup-plugin-peer-deps-external@2.2.4(rollup@4.13.2): + /rollup-plugin-peer-deps-external@2.2.4(rollup@4.16.4): resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} peerDependencies: rollup: '*' dependencies: - rollup: 4.13.2 + rollup: 4.16.4 dev: true /rollup-plugin-postcss@4.0.2(postcss@8.4.38): @@ -13199,7 +14753,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.30.0 + terser: 5.30.4 dev: true /rollup-pluginutils@2.8.2: @@ -13216,36 +14770,55 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.13.2: - resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} + /rollup@4.16.4: + resolution: {integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.2 - '@rollup/rollup-android-arm64': 4.13.2 - '@rollup/rollup-darwin-arm64': 4.13.2 - '@rollup/rollup-darwin-x64': 4.13.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.2 - '@rollup/rollup-linux-arm64-gnu': 4.13.2 - '@rollup/rollup-linux-arm64-musl': 4.13.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.13.2 - '@rollup/rollup-linux-riscv64-gnu': 4.13.2 - '@rollup/rollup-linux-s390x-gnu': 4.13.2 - '@rollup/rollup-linux-x64-gnu': 4.13.2 - '@rollup/rollup-linux-x64-musl': 4.13.2 - '@rollup/rollup-win32-arm64-msvc': 4.13.2 - '@rollup/rollup-win32-ia32-msvc': 4.13.2 - '@rollup/rollup-win32-x64-msvc': 4.13.2 + '@rollup/rollup-android-arm-eabi': 4.16.4 + '@rollup/rollup-android-arm64': 4.16.4 + '@rollup/rollup-darwin-arm64': 4.16.4 + '@rollup/rollup-darwin-x64': 4.16.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.16.4 + '@rollup/rollup-linux-arm-musleabihf': 4.16.4 + '@rollup/rollup-linux-arm64-gnu': 4.16.4 + '@rollup/rollup-linux-arm64-musl': 4.16.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4 + '@rollup/rollup-linux-riscv64-gnu': 4.16.4 + '@rollup/rollup-linux-s390x-gnu': 4.16.4 + '@rollup/rollup-linux-x64-gnu': 4.16.4 + '@rollup/rollup-linux-x64-musl': 4.16.4 + '@rollup/rollup-win32-arm64-msvc': 4.16.4 + '@rollup/rollup-win32-ia32-msvc': 4.16.4 + '@rollup/rollup-win32-x64-msvc': 4.16.4 fsevents: 2.3.3 dev: true + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + /safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -13320,8 +14893,8 @@ packages: xmlchars: 2.2.0 dev: true - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + /scheduler@0.23.1: + resolution: {integrity: sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==} dependencies: loose-envify: 1.4.0 @@ -13413,6 +14986,13 @@ packages: - supports-color dev: true + /sentence-case@2.1.1: + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + dependencies: + no-case: 2.3.2 + upper-case-first: 1.1.2 + dev: true + /serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -13551,10 +15131,21 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + /smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} dev: true + /snake-case@2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + dependencies: + no-case: 2.3.2 + dev: true + /sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: @@ -13563,6 +15154,43 @@ packages: websocket-driver: 0.7.4 dev: true + /socks-proxy-agent@8.0.3: + resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: true + + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-package-json@2.10.0: + resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} + hasBin: true + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + semver: 7.6.0 + sort-object-keys: 1.1.3 + dev: true + /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true @@ -13672,6 +15300,10 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' @@ -13715,11 +15347,11 @@ packages: resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} dev: true - /storybook@8.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-rdxfjkED5CBKj6T01NKr9MRakyXkffV8dvLXj5bWN4AlQ1OOm5Sw9B1z+rQ/FN7RYIU5b63xiX2pu3gy5t6nRQ==} + /storybook@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-/Mvij0Br5bUwJpCvqAUZMEDIWmdRxEyllvVj8Ukw5lIWJePxfpSsz4px5jg9+R6B9tO8sQSqjg4HJvQ/pZk8Tg==} hasBin: true dependencies: - '@storybook/cli': 8.0.5(react-dom@18.2.0)(react@18.2.0) + '@storybook/cli': 8.0.9(react-dom@18.3.0)(react@18.3.0) transitivePeerDependencies: - '@babel/preset-env' - bufferutil @@ -13734,6 +15366,11 @@ packages: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} dev: true + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -13905,6 +15542,11 @@ packages: min-indent: 1.0.1 dev: true + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -13923,6 +15565,23 @@ packages: webpack: 5.91.0(esbuild@0.20.2) dev: true + /styled-jsx@5.1.1(react@18.3.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.3.0 + dev: false + /stylehacks@5.1.1(postcss@8.4.38): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} @@ -13945,7 +15604,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.12 + glob: 10.3.10 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -13954,7 +15613,6 @@ packages: /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - requiresBuild: true dependencies: has-flag: 3.0.0 @@ -14077,6 +15735,13 @@ packages: stable: 0.1.8 dev: true + /swap-case@1.1.2: + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + dependencies: + lower-case: 1.1.4 + upper-case: 1.1.3 + dev: true + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true @@ -14089,10 +15754,18 @@ packages: tslib: 2.6.2 dev: true - /tailwind-merge@2.2.2: - resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==} + /synckit@0.9.0: + resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + dev: true + + /tailwind-merge@2.3.0: + resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 dev: false /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): @@ -14243,12 +15916,12 @@ packages: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.30.0 + terser: 5.30.4 webpack: 5.91.0(esbuild@0.20.2) dev: true - /terser@5.30.0: - resolution: {integrity: sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw==} + /terser@5.30.4: + resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -14293,6 +15966,10 @@ packages: xtend: 4.0.2 dev: true + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true @@ -14303,13 +15980,33 @@ packages: /tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: false + + /tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + dependencies: + '@types/tinycolor2': 1.4.6 + tinycolor2: 1.6.0 + dev: true /tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} dev: true + /title-case@2.1.1: + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -14324,8 +16021,8 @@ packages: dependencies: is-number: 7.0.0 - /tocbot@4.25.0: - resolution: {integrity: sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==} + /tocbot@4.27.13: + resolution: {integrity: sha512-zS8GVVg14x/KBTxbvF6s3BNLltfMNZxTPaBpj+FjuwmnSv+ZK0trNN4uV5Ptw64NLFi2E30gt33+/a1Fkt3cWQ==} dev: true /toidentifier@1.0.1: @@ -14364,13 +16061,13 @@ packages: resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} dev: true - /ts-api-utils@1.3.0(typescript@5.4.3): + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.3 + typescript: 5.4.5 dev: true /ts-dedent@2.2.0: @@ -14381,7 +16078,38 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-pnp@1.2.0(typescript@5.4.3): + /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.12.7 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-pnp@1.2.0(typescript@5.4.5): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} peerDependencies: @@ -14390,7 +16118,7 @@ packages: typescript: optional: true dependencies: - typescript: 5.4.3 + typescript: 5.4.5 dev: true /tsconfig-paths@3.15.0: @@ -14417,16 +16145,75 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - /tsutils@3.21.0(typescript@5.4.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.3 + typescript: 5.4.5 + dev: true + + /turbo-darwin-64@1.13.3: + resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-arm64@1.13.3: + resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-64@1.13.3: + resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm64@1.13.3: + resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-64@1.13.3: + resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-arm64@1.13.3: + resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo@1.13.3: + resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} + hasBin: true + optionalDependencies: + turbo-darwin-64: 1.13.3 + turbo-darwin-arm64: 1.13.3 + turbo-linux-64: 1.13.3 + turbo-linux-arm64: 1.13.3 + turbo-windows-64: 1.13.3 + turbo-windows-arm64: 1.13.3 dev: true /tween-functions@1.2.0: @@ -14540,8 +16327,8 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -14675,6 +16462,23 @@ packages: picocolors: 1.0.0 dev: true + /update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + dev: true + + /upper-case-first@1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + dependencies: + upper-case: 1.1.3 + dev: true + + /upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -14692,7 +16496,7 @@ packages: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.12.0 + qs: 6.12.1 dev: true /util-deprecate@1.0.2: @@ -14736,6 +16540,10 @@ packages: hasBin: true dev: true + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /v8-to-istanbul@8.1.1: resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} engines: {node: '>=10.12.0'} @@ -14752,13 +16560,20 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /validate-npm-package-name@5.0.0: + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + builtins: 5.1.0 + dev: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true - /viem@2.9.6(typescript@5.4.3): - resolution: {integrity: sha512-VVFWjGQei2wnWTvAB/xrIf22m6flCwxeBr8LnwejXMTSSi1EORWEswrw2lfKTmw3TlRPSG4uSiQMa/d0l0DKRg==} + /viem@2.9.27(typescript@5.4.5): + resolution: {integrity: sha512-C+5tispAKzUywf+G5fxNVxThtKrNtvDRvvF34hC10LeSsrd5l4tlKpf0B4xYVcpL0YYZd+YEordLzlWToPjUnQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -14770,9 +16585,9 @@ packages: '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.4.3) + abitype: 1.0.0(typescript@5.4.5) isows: 1.0.3(ws@8.13.0) - typescript: 5.4.3 + typescript: 5.4.5 ws: 8.13.0 transitivePeerDependencies: - bufferutil @@ -14886,7 +16701,7 @@ packages: '@types/connect-history-api-fallback': 1.5.4 '@types/express': 4.17.21 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.5 + '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 '@types/ws': 8.5.10 ansi-html-community: 0.0.8 @@ -14900,7 +16715,7 @@ packages: graceful-fs: 4.2.11 html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 + ipaddr.js: 2.2.0 launch-editor: 2.6.1 open: 8.4.2 p-retry: 4.6.2 @@ -15149,10 +16964,10 @@ packages: engines: {node: '>=10.0.0'} dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.24.3 - '@babel/preset-env': 7.24.3(@babel/core@7.24.3) - '@babel/runtime': 7.24.1 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.3)(rollup@2.79.1) + '@babel/core': 7.24.4 + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/runtime': 7.24.4 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.4)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@surma/rollup-plugin-off-main-thread': 2.2.3 @@ -15295,6 +17110,15 @@ packages: workbox-core: 6.6.0 dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -15438,6 +17262,11 @@ packages: yargs-parser: 20.2.9 dev: true + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..091d6e4 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "examples/*" + - "packages/*" diff --git a/setupTests.ts b/setupTests.ts deleted file mode 100644 index 6a0fd12..0000000 --- a/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import "@testing-library/jest-dom" diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 6efd0b2..0000000 --- a/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./components" -export * from "./providers" diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index b484cec..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "outDir": "dist", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["src"], - "exclude": ["node_modules", "examples"] -} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..2af2af8 --- /dev/null +++ b/turbo.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "pipeline": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**", ".next/**", "!.next/cache/**"] + }, + "lint": { + "outputs": [] + }, + "dev": { + "cache": false, + "persistent": true + } + } +} From 8f913774b58faf568cb3c2489f4fd982de3d0b92 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Fri, 26 Apr 2024 22:24:46 +0800 Subject: [PATCH 02/74] revert package name --- examples/next-app/app/page.tsx | 2 +- examples/next-app/components/HomePage.tsx | 2 +- examples/next-app/next.config.mjs | 2 +- examples/next-app/package.json | 2 +- package.json | 6 +++--- packages/storykit/package.json | 2 +- .../storykit/src/components/Button/__docs__/Button.mdx | 9 ++++++--- .../src/components/IPAGraph/__docs__/IPAGraph.mdx | 4 ++-- .../components/IPAPolicyList/__docs__/IPAPolicyList.mdx | 4 ++-- .../IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx | 4 ++-- .../components/IPAssetWidget/__docs__/IPAssetWidget.mdx | 2 +- .../IPAssetProvider/__docs__/IPAssetProvider.mdx | 4 ++-- pnpm-lock.yaml | 2 +- 13 files changed, 24 insertions(+), 21 deletions(-) diff --git a/examples/next-app/app/page.tsx b/examples/next-app/app/page.tsx index f816599..aa1b034 100644 --- a/examples/next-app/app/page.tsx +++ b/examples/next-app/app/page.tsx @@ -1,5 +1,5 @@ -import "@story-protocol/storykit/dist/build.css" +import "@storyprotocol/storykit/dist/build.css" import dynamic from "next/dynamic" const DynamicHomePage = dynamic( diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index 5631b02..d8a9b7f 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,6 +1,6 @@ "use client" -import { Button, IPAssetProvider, IPAssetWidget, useIPAssetContext } from "@story-protocol/storykit" +import { Button, IPAssetProvider, IPAssetWidget, useIPAssetContext } from "@storyprotocol/storykit" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" diff --git a/examples/next-app/next.config.mjs b/examples/next-app/next.config.mjs index 0e7209c..96254fc 100644 --- a/examples/next-app/next.config.mjs +++ b/examples/next-app/next.config.mjs @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - // transpilePackages: ["@story-protocol/storykit"], + // transpilePackages: ["@storyprotocol/storykit"], } export default nextConfig diff --git a/examples/next-app/package.json b/examples/next-app/package.json index 4ca7f66..be037af 100644 --- a/examples/next-app/package.json +++ b/examples/next-app/package.json @@ -10,7 +10,7 @@ }, "prettier": "@storykit/prettier-config", "dependencies": { - "@story-protocol/storykit": "workspace:*", + "@storyprotocol/storykit": "workspace:*", "@tanstack/react-query": "^5.28.9", "next": "14.1.4", "react": "^18", diff --git a/package.json b/package.json index df895a4..87ca045 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "private": true, "scripts": { - "build": "turbo run build --filter @story-protocol/storykit", - "dev": "turbo run dev --filter @story-protocol/storykit", - "lint": "turbo run lint --filter @story-protocol/storykit", + "build": "turbo run build --filter @storyprotocol/storykit", + "dev": "turbo run dev --filter @storyprotocol/storykit", + "lint": "turbo run lint --filter @storyprotocol/storykit", "lint-all": "turbo run lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "prepare": "husky" diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 58aac4a..5f71dff 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,5 +1,5 @@ { - "name": "@story-protocol/storykit", + "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", "version": "0.1.2", "type": "module", diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx index 56555c5..6610aea 100644 --- a/packages/storykit/src/components/Button/__docs__/Button.mdx +++ b/packages/storykit/src/components/Button/__docs__/Button.mdx @@ -1,6 +1,7 @@ -import * as ButtonStory from "./Button.stories" import { Canvas, Meta } from "@storybook/blocks" +import * as ButtonStory from "./Button.stories" + # Button @@ -14,7 +15,7 @@ Button component with different props. ## Usage ```ts -import { Button } from "@story-protocol/storykit"; +import { Button } from "@storyprotocol/storykit"; const Example = () => { return ( @@ -22,7 +23,9 @@ const Example = () => { size="small" variant="primary" onClick={()=> console.log("Clicked")} - >hello + > + hello + ); }; diff --git a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx index 8c93c72..166f3ff 100644 --- a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx +++ b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx @@ -17,8 +17,8 @@ Show Asset derivatives graph ## Usage ```ts -import { IPAssetProvider } from "@story-protocol/storykit" -import { IPAGraph } from "@story-protocol/storykit" +import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPAGraph } from "@storyprotocol/storykit" const ExamplePage = () => { return ( diff --git a/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx b/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx index c0a10ae..170b339 100644 --- a/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx +++ b/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx @@ -17,8 +17,8 @@ Show Asset derivatives graph ## Usage ```ts -import { IPAssetProvider } from "@story-protocol/storykit" -import { IPAPolicyList } from "@story-protocol/storykit" +import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPAPolicyList } from "@storyprotocol/storykit" const ExamplePage = () => { return ( diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx index e3e0fa7..adfb32d 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx +++ b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx @@ -17,8 +17,8 @@ Show Asset derivatives graph ## Usage ```ts -import { IPAssetProvider } from "@story-protocol/storykit" -import { IPARoyaltyChart } from "@story-protocol/storykit" +import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPARoyaltyChart } from "@storyprotocol/storykit" const ExamplePage = () => { return ( diff --git a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx index 168331a..3b2f904 100644 --- a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx +++ b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx @@ -17,7 +17,7 @@ Button component with different props. ## Usage ```ts -import { IPAssetWidget } from "@story-protocol/storykit" +import { IPAssetWidget } from "@storyprotocol/storykit" const ExamplePage = () => { return ( diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx index 31d264d..28ae64c 100644 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx +++ b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx @@ -19,7 +19,7 @@ Provides IP Asset data to children components. ```ts // wrap your component with the IPAssetProvider -import { IPAssetProvider } from "@story-protocol/storykit" +import { IPAssetProvider } from "@storyprotocol/storykit" import ExampleComponent from './ExampleComponent' const ExamplePage = () => { @@ -36,7 +36,7 @@ export default ExamplePage; ```ts // in your component file, context provides IP asset state -import { useIPAssetContext } from "@story-protocol/storykit" +import { useIPAssetContext } from "@storyprotocol/storykit" const ExampleComponent = () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca7dbbe..cefe433 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ importers: examples/next-app: dependencies: - '@story-protocol/storykit': + '@storyprotocol/storykit': specifier: workspace:* version: link:../../packages/storykit '@tanstack/react-query': From 4bd74b8c2675a0582e990f12ce65bd73f64fccda Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Fri, 26 Apr 2024 22:25:03 +0800 Subject: [PATCH 03/74] add turbo format --- package.json | 2 +- packages/storykit/package.json | 1 + packages/storykit/src/index.ts | 4 ++-- turbo.json | 3 +++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 87ca045..40b2d72 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "dev": "turbo run dev --filter @storyprotocol/storykit", "lint": "turbo run lint --filter @storyprotocol/storykit", "lint-all": "turbo run lint", - "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "format": "turbo run format --filter @storyprotocol/storykit", "prepare": "husky" }, "devDependencies": { diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 5f71dff..7d36ad3 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -23,6 +23,7 @@ "scripts": { "test": "react-scripts test", "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", + "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", "dev": "storybook dev -p 6006", "build-tailwind": "pnpm exec tailwindcss -o dist/build.css --minify", "build": "rollup -c --bundleConfigAsCjs && pnpm build-tailwind" diff --git a/packages/storykit/src/index.ts b/packages/storykit/src/index.ts index 1762f40..6efd0b2 100644 --- a/packages/storykit/src/index.ts +++ b/packages/storykit/src/index.ts @@ -1,2 +1,2 @@ -export * from "./components"; -export * from "./providers"; +export * from "./components" +export * from "./providers" diff --git a/turbo.json b/turbo.json index 2af2af8..284b70d 100644 --- a/turbo.json +++ b/turbo.json @@ -11,6 +11,9 @@ "dev": { "cache": false, "persistent": true + }, + "format": { + "cache": false } } } From 87a7c722074c5aebb5338dae92ca70b313fbeb50 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Fri, 26 Apr 2024 22:36:36 +0800 Subject: [PATCH 04/74] Update publish-package.yml --- .github/workflows/publish-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 32adefe..5fb5cd2 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - feature/monorepo-refactor + - main jobs: publish-gpr: From a461905e1aa15c2c857b35f0ab2d31685125bee1 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sat, 4 May 2024 19:32:20 -0700 Subject: [PATCH 05/74] update storykit --- packages/storykit/components.json | 17 --- .../src/components/Button/__docs__/Button.mdx | 7 +- .../components/IPAGraph/__docs__/Example.tsx | 3 +- .../IPAGraph/__docs__/IPAGraph.stories.tsx | 15 +-- .../components/IPAPolicies/IPAPolicies.tsx | 126 ++++++++++++++++++ .../__docs__/Example.tsx | 9 +- .../__docs__/IPAPolicies.mdx} | 12 +- .../__docs__/IPAPolicies.stories.tsx | 38 ++++++ .../src/components/IPAPolicies/index.tsx | 1 + .../IPAPolicyList/IPAPolicyList.tsx | 93 ------------- .../__docs__/IPAPolicyList.stories.tsx | 45 ------- .../src/components/IPAPolicyList/index.tsx | 1 - .../IPARoyaltyChart/IPARoyaltyChart.tsx | 2 +- .../IPARoyaltyChart/__docs__/Example.tsx | 3 +- .../__docs__/IPARoyaltyChart.mdx | 2 +- .../__docs__/IPARoyaltyChart.stories.tsx | 11 +- .../IPAssetWidget/IPAssetWidget.tsx | 41 ++++-- .../IPAssetWidget/__docs__/Example.tsx | 3 +- .../__docs__/IPAssetWidget.stories.tsx | 15 +-- packages/storykit/src/components/index.ts | 2 +- .../storykit/src/components/ui/accordion.tsx | 51 ------- packages/storykit/src/lib/api.ts | 5 - packages/storykit/src/lib/graph.ts | 25 ++-- packages/storykit/src/lib/types.ts | 85 ++++++------ packages/storykit/src/lib/utils.ts | 38 ++++-- .../IPAssetProvider/IPAssetProvider.tsx | 54 +++++--- .../__docs__/IPAssetProvider.stories.tsx | 15 +-- .../storykit/src/stories/Introduction.mdx | 124 +++++++++++++++-- packages/storykit/src/stories/data/index.ts | 9 ++ 29 files changed, 460 insertions(+), 392 deletions(-) delete mode 100644 packages/storykit/components.json create mode 100644 packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx rename packages/storykit/src/components/{IPAPolicyList => IPAPolicies}/__docs__/Example.tsx (60%) rename packages/storykit/src/components/{IPAPolicyList/__docs__/IPAPolicyList.mdx => IPAPolicies/__docs__/IPAPolicies.mdx} (58%) create mode 100644 packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx create mode 100644 packages/storykit/src/components/IPAPolicies/index.tsx delete mode 100644 packages/storykit/src/components/IPAPolicyList/IPAPolicyList.tsx delete mode 100644 packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx delete mode 100644 packages/storykit/src/components/IPAPolicyList/index.tsx delete mode 100644 packages/storykit/src/components/ui/accordion.tsx create mode 100644 packages/storykit/src/stories/data/index.ts diff --git a/packages/storykit/components.json b/packages/storykit/components.json deleted file mode 100644 index 46f4379..0000000 --- a/packages/storykit/components.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "default", - "rsc": false, - "tsx": true, - "tailwind": { - "config": "tailwind.config.js", - "css": "src/global.css", - "baseColor": "slate", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils" - } -} \ No newline at end of file diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx index 6610aea..d204fc3 100644 --- a/packages/storykit/src/components/Button/__docs__/Button.mdx +++ b/packages/storykit/src/components/Button/__docs__/Button.mdx @@ -1,6 +1,5 @@ -import { Canvas, Meta } from "@storybook/blocks" - import * as ButtonStory from "./Button.stories" +import { Canvas, Meta } from "@storybook/blocks" @@ -23,9 +22,7 @@ const Example = () => { size="small" variant="primary" onClick={()=> console.log("Clicked")} - > - hello - + >hello ); }; diff --git a/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx b/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx index 87c2988..a1242c3 100644 --- a/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx +++ b/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx @@ -1,3 +1,4 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" @@ -6,7 +7,7 @@ import { IPAssetProvider } from "../../../providers" import IPAGraph from "../IPAGraph" const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ - ipId = "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47" as `0x${string}`, + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, width = 400, height = 300, }) => { diff --git a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx index a92c8c3..86255ff 100644 --- a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx +++ b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx @@ -1,3 +1,4 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" @@ -20,19 +21,11 @@ type Story = StoryObj export const Select: Story = { argTypes: { ipId: { - options: [ - "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47", - "0x0a41f1e37cef4add1c973b1e21cf8e3bec1bbe79", - "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - "0xd1c4ad68dcd9339158e5d3958c3c0ecf8cc7e24c", - "0x740a26ddf291d2e65d917fb6bc342f686b7cdcec", - ], + options: PREVIEW_IP_ASSETS, }, }, args: { - ipId: "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47", + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, }, } export const Input: Story = { @@ -40,6 +33,6 @@ export const Input: Story = { ipId: { control: "text" }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, }, } diff --git a/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx b/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx new file mode 100644 index 0000000..093f370 --- /dev/null +++ b/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx @@ -0,0 +1,126 @@ +import { POLICY_TYPE } from "@/lib/types" +import { cn, getPolicyTypeByPILData } from "@/lib/utils" +import { useIPAssetContext } from "@/providers" +import { CircleCheck, CircleMinus } from "lucide-react" +import { useState } from "react" +import { FaCaretDown, FaCaretUp } from "react-icons/fa6" + +import "../../global.css" + +const CANS = { + REMIX: "Remix this work", + INCLUDE: "Include this work in their own work(s)", + CREDIT: "Credit you appropriately", + DISTRIBUTE: "Distribute their remix anywhere", + PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", + CREATOR_CREDIT: "Credit you as the creator", + PUBLISH: "Display / publish the work in any medium", +} + +const ShowCans = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] + break + default: + return [] + break + } +} + +const CANNOTS = { + RESELL: "Resell your original work", + COMMERCIALIZE: "Commercialize the remix", + CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", + CLAIM: "Claim your work as their own", + REMIX: "Create remixes of the commercial use.", +} + +const ShowCannots = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] + break + default: + return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] + break + } +} + +function IPAPolicies() { + const { policyData } = useIPAssetContext() + const [expanded, setExpanded] = useState(0) + + return policyData?.length ? ( +
+ {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {(policyData as unknown as any[])?.map((policy, index) => ( +
+
setExpanded(expanded === index ? null : index)} + > + {getPolicyTypeByPILData(policy.licenseTerms)} + {expanded === index ? : } +
+ +
+
+ {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( + <> +
Others Can
+
+ {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( +
+ + {can} +
+ ))} +
+ + ) : null} +
Others Cannot
+
+ {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( +
+ + {can} +
+ ))} +
+
+
+ + {index < policyData.length - 1 &&
} +
+ ))} +
+ ) : ( +
No Policy
+ ) +} + +export default IPAPolicies diff --git a/packages/storykit/src/components/IPAPolicyList/__docs__/Example.tsx b/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx similarity index 60% rename from packages/storykit/src/components/IPAPolicyList/__docs__/Example.tsx rename to packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx index 6240d9b..0841dc5 100644 --- a/packages/storykit/src/components/IPAPolicyList/__docs__/Example.tsx +++ b/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx @@ -1,17 +1,18 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" import { IPAssetProvider } from "../../../providers" -import IPAPolicyList from "../IPAPolicyList" +import IPAPolicies from "../IPAPolicies" -const Example: FC<{ ipId: Address }> = ({ ipId = "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47" as `0x${string}` }) => { +const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[0] as `0x${string}` }) => { const queryClient = new QueryClient() return ( -
+
- +
diff --git a/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx similarity index 58% rename from packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx rename to packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx index 170b339..4b6db76 100644 --- a/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.mdx +++ b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx @@ -1,16 +1,16 @@ import { Canvas, Controls, Meta } from "@storybook/blocks" -import * as IPAPolicyListStory from "./IPAPolicyList.stories" +import * as IPAPoliciesStory from "./IPAPolicies.stories" - + -# IPA Graph +# IPA Policy List Show Asset derivatives graph #### Example - + @@ -18,12 +18,12 @@ Show Asset derivatives graph ```ts import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPAPolicyList } from "@storyprotocol/storykit" +import { IPAPolicies } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - + ); }; diff --git a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx new file mode 100644 index 0000000..e83d342 --- /dev/null +++ b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Components/IPAPolicies", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IPAPolicies/index.tsx b/packages/storykit/src/components/IPAPolicies/index.tsx new file mode 100644 index 0000000..c4bb6eb --- /dev/null +++ b/packages/storykit/src/components/IPAPolicies/index.tsx @@ -0,0 +1 @@ +export { default as IPAPolicies } from "./IPAPolicies" diff --git a/packages/storykit/src/components/IPAPolicyList/IPAPolicyList.tsx b/packages/storykit/src/components/IPAPolicyList/IPAPolicyList.tsx deleted file mode 100644 index 4781237..0000000 --- a/packages/storykit/src/components/IPAPolicyList/IPAPolicyList.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion" -import { POLICY_TYPE } from "@/lib/types" -// import { Asset } from "@/lib/types" -import { getPolicyTypeByPILData } from "@/lib/utils" -import { useIPAssetContext } from "@/providers" -import { Check, X } from "lucide-react" - -import "../../global.css" - -function PILLabel({ type }: { type: string }) { - if (type === POLICY_TYPE.OPEN_DOMAIN) { - return ( - - attribution - commercial use - derivatives - all content - - ) - } else if (type === POLICY_TYPE.FREE_ATTRIBUTION) { - return ( - - attribution - commercial use - derivatives - all content - - ) - } else if (type === POLICY_TYPE.PAID_ATTRIBUTION) { - return ( - - attribution - commercial use - derivatives - all content - - ) - } else if (type === POLICY_TYPE.PAID_NO_ATTRIBUTION) { - return ( - - attribution - commercial use - derivatives - all content - - ) - } else if (type === POLICY_TYPE.NO_DERIVATIVE) { - return ( - - attribution - commercial use - derivatives - all content - - ) - } - return <> -} - -function IPAPolicyList() { - const { policyData } = useIPAssetContext() - - return policyData?.length ? ( - - {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {(policyData as unknown as any[])?.map((policy) => ( - - -
-

Policy ID {policy.id}

-

{getPolicyTypeByPILData(policy.pil)}

- -
-
- -
- {Object.entries(policy?.pil).map(([key, value]) => ( -
-
{key}
-
{value?.toString()}
-
- ))} -
-
-
- ))} -
- ) : ( -
No Policy
- ) -} - -export default IPAPolicyList diff --git a/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx b/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx deleted file mode 100644 index 555dfb5..0000000 --- a/packages/storykit/src/components/IPAPolicyList/__docs__/IPAPolicyList.stories.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "Components/IPAPolicyList", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Select: Story = { - argTypes: { - ipId: { - options: [ - "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47", - "0x0a41f1e37cef4add1c973b1e21cf8e3bec1bbe79", - "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - "0xd1c4ad68dcd9339158e5d3958c3c0ecf8cc7e24c", - "0x740a26ddf291d2e65d917fb6bc342f686b7cdcec", - ], - }, - }, - args: { - ipId: "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47", - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - }, -} diff --git a/packages/storykit/src/components/IPAPolicyList/index.tsx b/packages/storykit/src/components/IPAPolicyList/index.tsx deleted file mode 100644 index abfd6ee..0000000 --- a/packages/storykit/src/components/IPAPolicyList/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IPAPolicyList } from "./IPAPolicyList" diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx index 5d89cbd..84e646a 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -10,7 +10,7 @@ function IPARoyaltyChart() { const { royaltyData } = useIPAssetContext() - if (royaltyData) { + if (royaltyData?.targetAncestors) { const chart = { options: { chart: { diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx index 39f2d17..1528c00 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx @@ -1,3 +1,4 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" @@ -5,7 +6,7 @@ import { Address } from "viem" import { IPAssetProvider } from "../../../providers" import IPARoyaltyChart from "../IPARoyaltyChart" -const Example: FC<{ ipId: Address }> = ({ ipId = "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47" as `0x${string}` }) => { +const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { const queryClient = new QueryClient() return ( diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx index adfb32d..90771c2 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx +++ b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx @@ -4,7 +4,7 @@ import * as IPARoyaltyChartStory from "./IPARoyaltyChart.stories" -# IPA Graph +# IPA Royalty Chart Show Asset derivatives graph diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx index b4cdda7..0e0d7e6 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx @@ -1,3 +1,4 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" @@ -20,15 +21,11 @@ type Story = StoryObj export const Select: Story = { argTypes: { ipId: { - options: [ - "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - ], + options: PREVIEW_IP_ASSETS, }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, }, } export const Input: Story = { @@ -36,6 +33,6 @@ export const Input: Story = { ipId: { control: "text" }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, }, } diff --git a/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx b/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx index f33c3e7..86f7350 100644 --- a/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx +++ b/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx @@ -1,5 +1,5 @@ import { Menu, Transition } from "@headlessui/react" -import React, { Fragment } from "react" +import React, { Fragment, useState } from "react" import { FaWandMagicSparkles } from "react-icons/fa6" import { IoIosShareAlt } from "react-icons/io" import { SiOpensea } from "react-icons/si" @@ -8,9 +8,9 @@ import { Address } from "viem" import "../../global.css" import { cn, shortenAddress } from "../../lib/utils" -import { IPA_CARD_TABS, IPAssetProvider, useIPAssetContext } from "../../providers" +import { IPAssetProvider, useIPAssetContext } from "../../providers" import { IPAGraph } from "../IPAGraph" -import { IPAPolicyList } from "../IPAPolicyList" +import { IPAPolicies } from "../IPAPolicies" import { IPARoyaltyChart } from "../IPARoyaltyChart" export type IPAssetWidgetProps = { @@ -18,20 +18,29 @@ export type IPAssetWidgetProps = { isBottomNav?: boolean } +export const IPA_CARD_TABS = [ + { id: "overview", label: "Overview" }, + { id: "licensing", label: "Licensing" }, + { id: "derivatives", label: "IP Graph" }, + { id: "royalty", label: "Royalty" }, +] + const IPAssetWidget = ({ ipId, isBottomNav, ...rest }: IPAssetWidgetProps) => { return } function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { + const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) + const _Tabs = () => (
- +
) const _Card = () => (
- +
) @@ -236,7 +245,7 @@ function IPAssetHeader({ hideImage }: { hideImage?: boolean }) {
-

{assetData?.metadata.name || nftData?.name || "Untitled"}

+

{assetData?.nftMetadata.name || nftData?.name || "Untitled"}

Owned by{" "} {shortenAddress(nftData?.owners[0].owner_address as string)} @@ -249,9 +258,15 @@ function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { ) } -function Tabs({ ipId }: { ipId: Address }) { - const { activeTab, setActiveTab } = useIPAssetContext() - +function Tabs({ + ipId, + activeTab, + setActiveTab, +}: { + ipId: Address + activeTab: string + setActiveTab: (tab: string) => void +}) { return (
@@ -305,16 +320,16 @@ function Tabs({ ipId }: { ipId: Address }) { ) } -function IPAssetCard({ isBottomNav }: { isBottomNav?: boolean }) { - const { activeTab } = useIPAssetContext() - +function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { switch (activeTab) { case "overview": return case "licensing": return ( - +
+ +
) case "derivatives": diff --git a/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx b/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx index dd4c338..1dd0c12 100644 --- a/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx +++ b/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx @@ -1,3 +1,4 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" @@ -5,7 +6,7 @@ import { Address } from "viem" import IPAssetWidget from "../IPAssetWidget" const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ - ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", isBottomNav = false, }) => { const queryClient = new QueryClient() diff --git a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx index 2bc4f56..fa72f35 100644 --- a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx +++ b/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx @@ -1,3 +1,4 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" @@ -21,19 +22,11 @@ type Story = StoryObj export const Select: Story = { argTypes: { ipId: { - options: [ - "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47", - "0x0a41f1e37cef4add1c973b1e21cf8e3bec1bbe79", - "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - "0xd1c4ad68dcd9339158e5d3958c3c0ecf8cc7e24c", - "0x740a26ddf291d2e65d917fb6bc342f686b7cdcec", - ], + options: PREVIEW_IP_ASSETS, }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, isBottomNav: true, }, } @@ -42,7 +35,7 @@ export const Input: Story = { ipId: { control: "text" }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, isBottomNav: true, }, } diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 034490d..aa5a038 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -1,5 +1,5 @@ export * from "./Button" export * from "./IPAssetWidget" export * from "./IPAGraph" -// export * from "./IPAPolicyList" +export * from "./IPAPolicies" export * from "./IPARoyaltyChart" diff --git a/packages/storykit/src/components/ui/accordion.tsx b/packages/storykit/src/components/ui/accordion.tsx deleted file mode 100644 index ba0b95a..0000000 --- a/packages/storykit/src/components/ui/accordion.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { cn } from "@/lib/utils" -import * as AccordionPrimitive from "@radix-ui/react-accordion" -import { ChevronDown } from "lucide-react" -import * as React from "react" - -const Accordion = AccordionPrimitive.Root - -const AccordionItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AccordionItem.displayName = "AccordionItem" - -const AccordionTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - svg]:rotate-180", - className - )} - {...props} - > - {children} - - - -)) -AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName - -const AccordionContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - -
{children}
-
-)) - -AccordionContent.displayName = AccordionPrimitive.Content.displayName - -export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/packages/storykit/src/lib/api.ts b/packages/storykit/src/lib/api.ts index 7ba1d71..562f0cb 100644 --- a/packages/storykit/src/lib/api.ts +++ b/packages/storykit/src/lib/api.ts @@ -8,11 +8,6 @@ const API_KEY = process.env.STORY_PROTOCOL_X_API_KEY || "" -console.log("API_BASE_URL", API_BASE_URL) -console.log("process.env.STORYBOOK_API_BASE_URL", process.env.STORYBOOK_API_BASE_URL) -console.log("process.env.NEXT_PUBLIC_API_BASE_URL", process.env.NEXT_PUBLIC_API_BASE_URL) -console.log("process.env.API_BASE_URL", process.env.API_BASE_URL) - export async function getResource(resourceName: ResourceType, resourceId: string) { try { const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { diff --git a/packages/storykit/src/lib/graph.ts b/packages/storykit/src/lib/graph.ts index a1031a6..09852aa 100644 --- a/packages/storykit/src/lib/graph.ts +++ b/packages/storykit/src/lib/graph.ts @@ -1,7 +1,6 @@ +import { Asset } from "@/lib/types" import { Address } from "viem" -import { Asset } from "./types" - export interface GraphNode { id: string name: string @@ -34,12 +33,12 @@ export function convertJsonToGraphFormat(ipAssets: Asset[]): GraphData { // Create nodes for (const asset of ipAssets) { - const nodeName = asset.metadata.name || "Untitled" + const nodeName = asset.nftMetadata.name || "Untitled" const node: GraphNode = { id: asset.id, name: nodeName, val: 1, - tokenContract: asset.tokenContract, + tokenContract: asset.nftMetadata.tokenContract, } nodes.push(node) @@ -70,9 +69,9 @@ export function convertAssetToGraphFormat(jsonData: Asset): GraphData { // Create node for the main object const mainNode: GraphNode = { id: jsonData.id, - name: jsonData.metadata.name || "Untitled", - tokenContract: jsonData.tokenContract, - tokenId: jsonData.tokenId, + name: jsonData.nftMetadata.name || "Untitled", + tokenContract: jsonData.nftMetadata.tokenContract, + tokenId: jsonData.nftMetadata.tokenId, val: 1, level: 0, isRoot: rootIpId === undefined, @@ -84,9 +83,9 @@ export function convertAssetToGraphFormat(jsonData: Asset): GraphData { for (const child of jsonData.childIpIds) { const childNode: GraphNode = { id: child.id, - name: child.metadata.name || "Untitled", - tokenContract: child.tokenContract, - tokenId: child.tokenId, + name: child.nftMetadata.name || "Untitled", + tokenContract: child.nftMetadata.tokenContract, + tokenId: child.nftMetadata.tokenId, val: 1, level: 1, } @@ -104,9 +103,9 @@ export function convertAssetToGraphFormat(jsonData: Asset): GraphData { for (const parent of jsonData.parentIpIds) { const parentNode: GraphNode = { id: parent.id, - name: parent.metadata.name || "Untitled", - tokenContract: parent.tokenContract, - tokenId: parent.tokenId, + name: parent.nftMetadata.name || "Untitled", + tokenContract: parent.nftMetadata.tokenContract, + tokenId: parent.nftMetadata.tokenId, val: 1, level: -1, // assuming parent is one level up isRoot: parent.id === rootIpId, diff --git a/packages/storykit/src/lib/types.ts b/packages/storykit/src/lib/types.ts index 57b8748..c5d6b4a 100644 --- a/packages/storykit/src/lib/types.ts +++ b/packages/storykit/src/lib/types.ts @@ -1,10 +1,10 @@ -import { Address, Hash } from "viem" +import { Address } from "viem" export const POLICY_TYPE = { + NON_COMMERCIAL_SOCIAL_REMIXING: "Non-Commercial Social Remixing", + COMMERCIAL_USE: "Commercial Use", + COMMERCIAL_REMIX: "Commercial Remix", OPEN_DOMAIN: "Open Domain", - FREE_ATTRIBUTION: "Free with Attribution", - PAID_ATTRIBUTION: "Paid with Attribution", - PAID_NO_ATTRIBUTION: "Paid, no attribution", NO_DERIVATIVE: "No Derivative", } @@ -12,14 +12,14 @@ export enum RESOURCE_TYPE { ASSET = "assets", COLLECTION = "collections", DISPUTE = "disputes", - IPA_POLICY = "ipapolicies", - LICENSE = "licenses", + IPA_POLICY = "licenses/ip/terms", + LICENSE = "licenses/tokens", LICENSE_MINT_FEES = "licenses/mintingfees", LICENSE_OWNER = "licenses/owners", MODULE = "modules", PERMISSION = "permissions", - POLICY = "policies", - POLICY_FRAMEWORK = "policies/frameworks", + POLICY = "licenses/terms", + POLICY_FRAMEWORK = "licenses/templates", ROYALTY = "royalties", ROYALTY_PAY = "royalties/payments", ROYALTY_POLICY = "royalties/policies", @@ -158,19 +158,16 @@ export type Transaction = { export type Asset = { id: Address - chainId: string - childIpIds: Asset[] | null parentIpIds: Asset[] | null + childIpIds: Asset[] | null rootIpIds: Asset[] | null - tokenContract: Address - tokenId: string - metadataResolverAddress: string - metadata: { + nftMetadata: { name: string - hash: string - registrationDate: string - registrant: string - uri: string + chainId: string + tokenContract: Address + tokenId: string + tokenUri: string + imageUrl: string } blockNumber: string blockTimestamp: string @@ -188,20 +185,24 @@ export type Permission = { export type License = { id: string - policyId: string licensorIpId: Address - amount: string + licenseTemplate: string + licenseTermsId: string transferable: boolean + owner: Address + mintedAt: string + expiresAt: string + burntAt: string blockNumber: string - blockTimestamp: string + blockTime: string } export type PolicyFramework = { id: string - address: Address name: string + metadataUri: string blockNumber: string - blockTimestamp: string + blockTime: string } export type Module = { @@ -226,12 +227,10 @@ export type Tag = { export type IPAPolicy = { id: string ipId: Address - policyId: Address - index: string - active: boolean - inherited: boolean + licenseTemplate: string + licenseTermsId: string blockNumber: string - blockTimestamp: string + blockTime: string } export type RoyaltyPay = { @@ -292,32 +291,26 @@ export type Collection = { export type Policy = { id: string - policyFrameworkManager: Address - frameworkData: string - royaltyPolicy: Address - royaltyData: string - mintingFee: string - mintingFeeToken: Address + json: string + licenseTemplate: Address blockNumber: string - blockTimestamp: string - pil: PILType + blockTime: string } export type PILType = { - id: Hash - attribution: boolean - commercialUse: boolean commercialAttribution: boolean - commercializerChecker: Address - commercializerCheckerData: string - commercialRevShare: string + commercialRevenueCelling: number + commercialRevenueShare: number + commercialUse: boolean + commercializerCheck: Address + currency: Address derivativesAllowed: boolean - derivativesAttribution: boolean derivativesApproval: boolean + derivativesAttribution: boolean derivativesReciprocal: boolean - territories: string[] - distributionChannels: string[] - contentRestrictions: string[] + derivativesRevenueCelling: number + expiration: string + URI: string } export type RoyaltySplit = { diff --git a/packages/storykit/src/lib/utils.ts b/packages/storykit/src/lib/utils.ts index 5252e12..4d6d29e 100644 --- a/packages/storykit/src/lib/utils.ts +++ b/packages/storykit/src/lib/utils.ts @@ -21,19 +21,31 @@ export function shortenAddress(address: string, length = 4): string { return `${start}...${end}` } -export function getPolicyTypeByPILData(pilData: PILType) { - const { attribution, derivativesAllowed, commercialUse, commercialRevShare, contentRestrictions } = pilData - - if (derivativesAllowed && commercialUse && contentRestrictions.length === 0) { - if (attribution) return POLICY_TYPE.FREE_ATTRIBUTION - if (!attribution && commercialRevShare !== "0") return POLICY_TYPE.PAID_NO_ATTRIBUTION - if (!attribution && commercialRevShare === "0") return POLICY_TYPE.OPEN_DOMAIN - } +export function camelize(str: string) { + return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) { + if (+match === 0) return "" // or if (/\s+/.test(match)) for white spaces + return index === 0 ? match.toLowerCase() : match.toUpperCase() + }) +} - if (attribution && !commercialUse && !derivativesAllowed && contentRestrictions.length > 0) { - return POLICY_TYPE.NO_DERIVATIVE +export function getPolicyTypeByPILData(pilData: PILType) { + const { derivativesAttribution, derivativesAllowed, commercialUse, derivativesReciprocal } = pilData + + if (commercialUse) { + if (!derivativesReciprocal) { + return POLICY_TYPE.COMMERCIAL_USE + } else { + return POLICY_TYPE.COMMERCIAL_REMIX + } + } else { + if (!derivativesAllowed) { + return POLICY_TYPE.NO_DERIVATIVE + } else { + if (derivativesAttribution) { + return POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING + } else { + return POLICY_TYPE.OPEN_DOMAIN + } + } } - - // default - return POLICY_TYPE.OPEN_DOMAIN } diff --git a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx index ac3fd20..4b6b11e 100644 --- a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx @@ -6,10 +6,11 @@ import { getResource, listResource } from "../../lib/api" import { getNFTByTokenId } from "../../lib/simplehash" import { NFTMetadata } from "../../lib/simplehash/types/simplehash" import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" +import { camelize } from "../../lib/utils" const IPAssetContext = React.createContext<{ - activeTab: string - setActiveTab: React.Dispatch> + // activeTab: string + // setActiveTab: React.Dispatch> assetData: Asset | undefined nftData: NFTMetadata | undefined isNftDataLoading: boolean @@ -24,16 +25,7 @@ const IPAssetContext = React.createContext<{ isRoyaltyDataLoading: boolean } | null>(null) -export const IPA_CARD_TABS = [ - { id: "overview", label: "Overview" }, - { id: "licensing", label: "Licensing" }, - { id: "derivatives", label: "IP Graph" }, - { id: "royalty", label: "Royalty" }, - // { id: "derivatives", label: "Derivatives" }, -] - export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { - const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0]?.id) // Fetch asset data const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ queryKey: [RESOURCE_TYPE.ASSET, ipId], @@ -56,12 +48,24 @@ export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; }) async function fetchPolicyDetails(data: IPAPolicy[]) { - const requests = data.map((item) => getResource(RESOURCE_TYPE.POLICY, item.policyId)) + const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) + + const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) const results = await Promise.all(requests) - return results.reduce((acc, result) => { - acc.push(result.data) - return acc - }, []) + + return results.map((result) => { + return { + ...result.data, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { + return { + ...acc, + [camelize(option.trait_type)]: + option.value === "true" ? true : option.value === "false" ? false : option.value, + } + }, {}), + } + }) } const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ @@ -102,17 +106,25 @@ export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), }) + // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], + // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), + // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + // }) const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], - queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), - enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], + queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), + enabled: + Boolean(assetData) && + Boolean(assetData.data.nftMetadata.tokenContract) && + Boolean(assetData.data.nftMetadata.tokenId), }) return ( export const Select: Story = { argTypes: { ipId: { - options: [ - "0xbc4d580f9f2121c485e63a9d67c6ef0451baab47", - "0x0a41f1e37cef4add1c973b1e21cf8e3bec1bbe79", - "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - "0xd1c4ad68dcd9339158e5d3958c3c0ecf8cc7e24c", - "0x740a26ddf291d2e65d917fb6bc342f686b7cdcec", - ], + options: PREVIEW_IP_ASSETS, }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, }, } export const Input: Story = { @@ -51,6 +44,6 @@ export const Input: Story = { ipId: { control: "text" }, }, args: { - ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, }, } diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index 0dd3670..f2c1c75 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -2,38 +2,136 @@ import { Meta } from "@storybook/blocks" -# Introducing Storykit +# Storykit Plug-and-play React components for Story Protocol. -## Installation (tbc) +## Installation -#### Install the package in your React app +_Storykit is a private package so you need repo access and a personal access token to use_ + +1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) + +2 . Login with Story Protocol scope: + +```bash +npm login --scope=@storyprotocol --registry=https://npm.pkg.github.com +``` + +3 . Use your github username and personal access token (for password) to login + +4 . Install the package and the required react-query dependencies ```bash -pnpm install storykit @tanstack/react-query viem +npm install @storyprotocol/storykit @tanstack/react-query ``` -#### Import the css +## Usage + +Using Storykit in your React app + +### Import the css ```typescript -import "storykit/dist/build.css" +import "@storyprotocol/storykit/dist/build.css" ``` -#### Use the components +### Include React Query + +Don't forget that react query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, you can do this once at the root of the app. ```typescript -import { Button } from "storykit" +import Providers from "./Providers" + +import "@storyprotocol/storykit/dist/build.css" + +export default function Layout({children}) { + return ( + + + {children} + + + ) +} +``` + +```typescript +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export default function Providers({ children }) { + return ( + + {children} + + ) +} + +``` + +### The IPAssetProvider + +The IPAssetProvider provides IP Asset data to child components. + +```typescript +import { IPAssetProvider, useIPAssetContext } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + + + + ); +}; + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIPAssetContext() -function Home() { return (
- + {isNftDataLoading &&
Fetching Asset...
} + + {nftData && !isNftDataLoading ? ( +
nft id: {nftData.nft_id}
+ ) : null}
+ ); +}; +``` + +### The IPAGraph + +Some components require the IPAssetProvider to supply asset data + +```typescript +import { IPAssetProvider, IPAGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + + + + ); +}; +``` + +### The IPAssetWidget + +The IPAssetProvider is already included in the IPAssetWidget + +```typescript +import { IPAssetWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + ) } - ``` + +See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/packages/storykit/src/stories/data/index.ts b/packages/storykit/src/stories/data/index.ts new file mode 100644 index 0000000..484d782 --- /dev/null +++ b/packages/storykit/src/stories/data/index.ts @@ -0,0 +1,9 @@ +export const PREVIEW_IP_ASSETS = [ + "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", + "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", + "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", + + "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", + "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", + "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", +] From 2f7a7d1a1fd7f7f4869cffb8fccb1700179a2ddc Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 11:56:30 -0700 Subject: [PATCH 06/74] export types --- packages/storykit/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 7d36ad3..3dadb0b 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -8,7 +8,8 @@ "exports": { ".": { "module": "./dist/storyprotocol-storykit.esm.js", - "default": "./dist/storyprotocol-storykit.cjs.js" + "default": "./dist/storyprotocol-storykit.cjs.js", + "types": "./dist/types.d.ts" }, "./package.json": "./package.json", "./dist/build.css": "./dist/build.css" From f9cd8484b1249043b459f4703070e6b2093c9725 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 12:04:49 -0700 Subject: [PATCH 07/74] remove main & module from package (use export) --- packages/storykit/package.json | 2 -- packages/storykit/rollup.config.js | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 3dadb0b..5319e96 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -3,8 +3,6 @@ "author": "storyprotocol engineering ", "version": "0.1.2", "type": "module", - "main": "dist/storyprotocol-storykit.cjs.js", - "module": "dist/storyprotocol-storykit.esm.js", "exports": { ".": { "module": "./dist/storyprotocol-storykit.esm.js", diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index 5ea9e6c..f7f9c30 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -13,12 +13,13 @@ const config = [ input: "src/index.ts", output: [ { - file: packageJson.main, + // file: packageJson.main, + file: packageJson.exports["."].default, format: "cjs", sourcemap: true, }, { - file: packageJson.module, + file: packageJson.exports["."].module, format: "esm", sourcemap: true, }, From 3560ee4fbcbd15225728b843bcf43a36635a1b31 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 12:05:24 -0700 Subject: [PATCH 08/74] export providers separately --- packages/storykit/package.json | 5 +++++ packages/storykit/rollup.config.js | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 5319e96..b0c66c0 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -9,6 +9,11 @@ "default": "./dist/storyprotocol-storykit.cjs.js", "types": "./dist/types.d.ts" }, + "./providers": { + "module": "./dist/storyprotocol-storykit-providers.esm.js", + "default": "./dist/storyprotocol-storykit-providers.cjs.js", + "types": "./dist/types.d.ts" + }, "./package.json": "./package.json", "./dist/build.css": "./dist/build.css" }, diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index f7f9c30..6dfe7af 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -27,6 +27,23 @@ const config = [ plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], external: ["react/jsx-runtime"], }, + { + input: "src/providers/index.ts", + output: [ + { + file: packageJson.exports["./providers"].default, + format: "cjs", + sourcemap: true, + }, + { + file: packageJson.exports["./providers"].module, + format: "esm", + sourcemap: true, + }, + ], + plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], + external: ["react/jsx-runtime"], + }, { input: "src/index.ts", output: [{ file: "dist/types.d.ts", format: "es" }], From cb2d9041e6aecdb783aa948762ae93a5f25917db Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 12:05:54 -0700 Subject: [PATCH 09/74] update version --- packages/storykit/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index b0c66c0..71dc516 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.2", + "version": "0.1.6-mrtest.0", "type": "module", "exports": { ".": { From 5293698e0e0c1bd28494ee60f6b1e660c849f78e Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 12:06:31 -0700 Subject: [PATCH 10/74] deploy test branch --- .github/workflows/publish-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 5fb5cd2..de3f8c9 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - main + - feature/package-export jobs: publish-gpr: From 18d8b9abb80c67a258b03c564dc06141768866ad Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 12:13:52 -0700 Subject: [PATCH 11/74] disable components --- packages/storykit/package.json | 2 +- packages/storykit/src/components/index.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 71dc516..ba2a9ba 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.0", + "version": "0.1.6-mrtest.1", "type": "module", "exports": { ".": { diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index aa5a038..59af050 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -1,5 +1,5 @@ export * from "./Button" -export * from "./IPAssetWidget" -export * from "./IPAGraph" +// export * from "./IPAssetWidget" +// export * from "./IPAGraph" export * from "./IPAPolicies" -export * from "./IPARoyaltyChart" +// export * from "./IPARoyaltyChart" From b31f54e337203bb9bd7a84d3bff7e04de07f7970 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 12:46:47 -0700 Subject: [PATCH 12/74] lazy load forcegraph --- packages/storykit/package.json | 12 +++++----- .../src/components/IPAGraph/IPAGraph.tsx | 23 +++++++++++++++++-- .../src/components/IPAGraph/forceGraph2d.ts | 3 +++ packages/storykit/src/components/index.ts | 2 +- 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 packages/storykit/src/components/IPAGraph/forceGraph2d.ts diff --git a/packages/storykit/package.json b/packages/storykit/package.json index ba2a9ba..efd6d2c 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.1", + "version": "0.1.6-mrtest.2", "type": "module", "exports": { ".": { @@ -30,7 +30,7 @@ "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", "dev": "storybook dev -p 6006", "build-tailwind": "pnpm exec tailwindcss -o dist/build.css --minify", - "build": "rollup -c --bundleConfigAsCjs && pnpm build-tailwind" + "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports && pnpm build-tailwind" }, "prettier": "@storykit/prettier-config", "dependencies": { @@ -51,9 +51,6 @@ }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", - "@storykit/eslint-config": "workspace:*", - "@storykit/prettier-config": "workspace:*", - "@storykit/typescript-config": "workspace:*", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", @@ -71,14 +68,17 @@ "@storybook/react-webpack5": "^8.0.4", "@storybook/test": "^8.0.4", "@storybook/theming": "^8.0.4", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", "@tanstack/react-query": "^5.25.0", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@turbo/gen": "^1.12.4", + "@types/eslint": "^8.56.5", "@types/jest": "^29.5.12", "@types/node": "^20.11.24", - "@types/eslint": "^8.56.5", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", diff --git a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx index e1cd9d2..ab9aaed 100644 --- a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx +++ b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx @@ -1,12 +1,22 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +// let ForceGraph2D: any +// if (typeof window !== "undefined") { +// ForceGraph2D = require("react-force-graph-2d") +// } +// import loadable from "@loadable/component" import { useMemo } from "react" -import ForceGraph2D from "react-force-graph-2d" +import React, { Suspense } from "react" +// import ForceGraph2D from "react-force-graph-2d" import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" import { useIPAssetContext } from "../../providers" +// const ForceGraph2D = loadable(() => import("./forceGraph2d")) +const ForceGraph2D = React.lazy(() => import("./forceGraph2d")) + export type IPAGraphProps = { width?: number height?: number @@ -67,7 +77,16 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { return (
- + {/* {typeof window === "undefined" ? null : ( */} + + + + {/* )} */}
) } diff --git a/packages/storykit/src/components/IPAGraph/forceGraph2d.ts b/packages/storykit/src/components/IPAGraph/forceGraph2d.ts new file mode 100644 index 0000000..35353f5 --- /dev/null +++ b/packages/storykit/src/components/IPAGraph/forceGraph2d.ts @@ -0,0 +1,3 @@ +import ForceGraph2D from "react-force-graph-2d" + +export default ForceGraph2D diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 59af050..86eb281 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -1,5 +1,5 @@ export * from "./Button" // export * from "./IPAssetWidget" -// export * from "./IPAGraph" +export * from "./IPAGraph" export * from "./IPAPolicies" // export * from "./IPARoyaltyChart" From e370b6673e1b8e411988e8c376a8fd42ccca7f96 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 13:43:13 -0700 Subject: [PATCH 13/74] test disable ForceGraph2D --- packages/storykit/package.json | 2 +- packages/storykit/src/components/IPAGraph/IPAGraph.tsx | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index efd6d2c..f23246e 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.2", + "version": "0.1.6-mrtest.3", "type": "module", "exports": { ".": { diff --git a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx index ab9aaed..70080c1 100644 --- a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx +++ b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx @@ -15,7 +15,7 @@ import { Asset } from "../../lib/types" import { useIPAssetContext } from "../../providers" // const ForceGraph2D = loadable(() => import("./forceGraph2d")) -const ForceGraph2D = React.lazy(() => import("./forceGraph2d")) +// const ForceGraph2D = React.lazy(() => import("./forceGraph2d")) export type IPAGraphProps = { width?: number @@ -79,12 +79,13 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) {
{/* {typeof window === "undefined" ? null : ( */} - + /> */} +

hi

{/* )} */}
From f8f8c1032c29992f13fdfd1fcdf1d29a3ac4d9f8 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 14:14:41 -0700 Subject: [PATCH 14/74] charts peer dep --- packages/storykit/package.json | 8 +- .../src/components/IPAGraph/IPAGraph.tsx | 7 +- pnpm-lock.yaml | 101 +++++++++--------- 3 files changed, 60 insertions(+), 56 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index f23246e..bd2ef8a 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.3", + "version": "0.1.6-mrtest.4", "type": "module", "exports": { ".": { @@ -41,8 +41,6 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.364.0", - "react-apexcharts": "^1.4.1", - "react-force-graph-2d": "^1.25.4", "react-icons": "^5.0.1", "tailwind-merge": "^2.2.2", "tailwindcss": "^3.4.1", @@ -91,7 +89,9 @@ "prettier": "^3.2.5", "prop-types": "^15.8.1", "react": "^18.2.0", + "react-apexcharts": "^1.4.1", "react-dom": "^18.2.0", + "react-force-graph-2d": "^1.25.4", "react-scripts": "5.0.1", "rollup": "^4.13.1", "rollup-plugin-dts": "^6.1.0", @@ -104,7 +104,9 @@ "peerDependencies": { "@tanstack/react-query": "^5.25.0", "react": ">=18.2.0", + "react-apexcharts": "^1.4.1", "react-dom": ">=18.2.0", + "react-force-graph-2d": "^1.25.4", "typescript": "^5.4.3" } } diff --git a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx index 70080c1..3029d30 100644 --- a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx +++ b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx @@ -7,8 +7,8 @@ // import loadable from "@loadable/component" import { useMemo } from "react" import React, { Suspense } from "react" +import ForceGraph2D from "react-force-graph-2d" -// import ForceGraph2D from "react-force-graph-2d" import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" @@ -79,13 +79,12 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) {
{/* {typeof window === "undefined" ? null : ( */} - {/* */} -

hi

+ />
{/* )} */}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cefe433..aee3aeb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,12 +137,6 @@ importers: lucide-react: specifier: ^0.364.0 version: 0.364.0(react@18.3.0) - react-apexcharts: - specifier: ^1.4.1 - version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) - react-force-graph-2d: - specifier: ^1.25.4 - version: 1.25.4(react@18.3.0) react-icons: specifier: ^5.0.1 version: 5.1.0(react@18.3.0) @@ -282,9 +276,15 @@ importers: react: specifier: ^18.2.0 version: 18.3.0 + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) react-dom: specifier: ^18.2.0 version: 18.3.0(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) react-scripts: specifier: 5.0.1 version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) @@ -634,6 +634,7 @@ packages: /@babel/highlight@7.24.2: resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} + requiresBuild: true dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 @@ -4816,7 +4817,7 @@ packages: /@tweenjs/tween.js@23.1.1: resolution: {integrity: sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw==} - dev: false + dev: true /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -5902,7 +5903,7 @@ packages: /@yr/monotone-cubic-spline@1.0.3: resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - dev: false + dev: true /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -5934,7 +5935,7 @@ packages: /accessor-fn@1.5.0: resolution: {integrity: sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==} engines: {node: '>=12'} - dev: false + dev: true /acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -6141,7 +6142,7 @@ packages: svg.pathmorphing.js: 0.1.3 svg.resize.js: 1.4.3 svg.select.js: 3.0.1 - dev: false + dev: true /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} @@ -6579,7 +6580,7 @@ packages: /bezier-js@6.1.4: resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} - dev: false + dev: true /bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} @@ -6803,7 +6804,7 @@ packages: engines: {node: '>=12'} dependencies: tinycolor2: 1.6.0 - dev: false + dev: true /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -7540,21 +7541,21 @@ packages: engines: {node: '>=12'} dependencies: internmap: 2.0.3 - dev: false + dev: true /d3-binarytree@1.0.2: resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} - dev: false + dev: true /d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} - dev: false + dev: true /d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} - dev: false + dev: true /d3-drag@3.0.0: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} @@ -7562,12 +7563,12 @@ packages: dependencies: d3-dispatch: 3.0.1 d3-selection: 3.0.0 - dev: false + dev: true /d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} - dev: false + dev: true /d3-force-3d@3.0.5: resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} @@ -7578,28 +7579,28 @@ packages: d3-octree: 1.0.2 d3-quadtree: 3.0.1 d3-timer: 3.0.1 - dev: false + dev: true /d3-format@3.1.0: resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} - dev: false + dev: true /d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} dependencies: d3-color: 3.1.0 - dev: false + dev: true /d3-octree@1.0.2: resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} - dev: false + dev: true /d3-quadtree@3.0.1: resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} engines: {node: '>=12'} - dev: false + dev: true /d3-scale-chromatic@3.1.0: resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} @@ -7607,7 +7608,7 @@ packages: dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 - dev: false + dev: true /d3-scale@4.0.2: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} @@ -7618,31 +7619,31 @@ packages: d3-interpolate: 3.0.1 d3-time: 3.1.0 d3-time-format: 4.1.0 - dev: false + dev: true /d3-selection@3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} - dev: false + dev: true /d3-time-format@4.1.0: resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} dependencies: d3-time: 3.1.0 - dev: false + dev: true /d3-time@3.1.0: resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} dependencies: d3-array: 3.2.4 - dev: false + dev: true /d3-timer@3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - dev: false + dev: true /d3-transition@3.0.1(d3-selection@3.0.0): resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} @@ -7656,7 +7657,7 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-timer: 3.0.1 - dev: false + dev: true /d3-zoom@3.0.0: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} @@ -7667,7 +7668,7 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - dev: false + dev: true /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -9561,7 +9562,7 @@ packages: index-array-by: 1.4.1 kapsule: 1.14.5 lodash-es: 4.17.21 - dev: false + dev: true /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -9650,7 +9651,7 @@ packages: /fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - dev: false + dev: true /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -10397,7 +10398,7 @@ packages: /index-array-by@1.4.1: resolution: {integrity: sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==} engines: {node: '>=12'} - dev: false + dev: true /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -10470,7 +10471,7 @@ packages: /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - dev: false + dev: true /ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} @@ -10939,7 +10940,7 @@ packages: /jerrypick@1.1.1: resolution: {integrity: sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==} engines: {node: '>=12'} - dev: false + dev: true /jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} @@ -11734,7 +11735,7 @@ packages: engines: {node: '>=12'} dependencies: lodash-es: 4.17.21 - dev: false + dev: true /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -11895,7 +11896,7 @@ packages: /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: false + dev: true /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -13930,6 +13931,7 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + dev: true /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -14070,7 +14072,7 @@ packages: apexcharts: 3.49.0 prop-types: 15.8.1 react: 18.3.0 - dev: false + dev: true /react-app-polyfill@3.0.0: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} @@ -14208,7 +14210,7 @@ packages: prop-types: 15.8.1 react: 18.3.0 react-kapsule: 2.4.0(react@18.3.0) - dev: false + dev: true /react-icons@5.1.0(react@18.3.0): resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} @@ -14242,7 +14244,7 @@ packages: fromentries: 1.3.2 jerrypick: 1.1.1 react: 18.3.0 - dev: false + dev: true /react-refresh@0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -15651,32 +15653,32 @@ packages: engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false + dev: true /svg.easing.js@2.0.0: resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false + dev: true /svg.filter.js@2.0.2: resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false + dev: true /svg.js@2.7.1: resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} - dev: false + dev: true /svg.pathmorphing.js@0.1.3: resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false + dev: true /svg.resize.js@1.4.3: resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} @@ -15684,21 +15686,21 @@ packages: dependencies: svg.js: 2.7.1 svg.select.js: 2.1.2 - dev: false + dev: true /svg.select.js@2.1.2: resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false + dev: true /svg.select.js@3.0.1: resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false + dev: true /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} @@ -15980,6 +15982,7 @@ packages: /tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + dev: true /tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} From b8797b7c9ef869488262676c35f76a7a1991249e Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 14:47:55 -0700 Subject: [PATCH 15/74] load forcegraph async --- packages/storykit/package.json | 2 +- .../src/components/IPAGraph/IPAGraph.tsx | 30 +++++----- .../IPAssetProvider/IPAssetProvider.tsx | 2 +- pnpm-lock.yaml | 57 +++---------------- 4 files changed, 28 insertions(+), 63 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index bd2ef8a..9e6df0f 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.4", + "version": "0.1.6-mrtest.5", "type": "module", "exports": { ".": { diff --git a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx index 3029d30..24f3c3e 100644 --- a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx +++ b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx @@ -5,10 +5,9 @@ // ForceGraph2D = require("react-force-graph-2d") // } // import loadable from "@loadable/component" -import { useMemo } from "react" -import React, { Suspense } from "react" -import ForceGraph2D from "react-force-graph-2d" +import React, { Suspense, useEffect, useMemo, useState } from "react" +// import ForceGraph2D from "react-force-graph-2d" import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" @@ -26,6 +25,18 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { const { assetData } = useIPAssetContext() const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [ForceGraph, setForceGraph] = useState(null) + + useEffect(() => { + // ForceGraph will break SSR, and needs to be loaded dynamically + async function importForceGraphModule() { + const fg = await import("react-force-graph-2d") + setForceGraph(fg.default) + } + importForceGraphModule() + }, []) + // eslint-disable-next-line @typescript-eslint/no-explicit-any const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { const isParent = node.level < 0 @@ -77,16 +88,9 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { return (
- {/* {typeof window === "undefined" ? null : ( */} - - - - {/* )} */} + {ForceGraph && ( + + )}
) } diff --git a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx index 4b6b11e..9631ebf 100644 --- a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx @@ -1,5 +1,5 @@ import { useQuery } from "@tanstack/react-query" -import React, { useState } from "react" +import React from "react" import { Address } from "viem" import { getResource, listResource } from "../../lib/api" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aee3aeb..e6f4d06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,9 +41,15 @@ importers: react: specifier: ^18 version: 18.3.0 + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) react-dom: specifier: ^18 version: 18.3.0(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) devDependencies: '@next/eslint-plugin-next': specifier: ^14.1.1 @@ -4815,9 +4821,8 @@ packages: update-check: 1.5.4 dev: true - /@tweenjs/tween.js@23.1.1: - resolution: {integrity: sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw==} - dev: true + /@tweenjs/tween.js@23.1.2: + resolution: {integrity: sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==} /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -5903,7 +5908,6 @@ packages: /@yr/monotone-cubic-spline@1.0.3: resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - dev: true /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -5935,7 +5939,6 @@ packages: /accessor-fn@1.5.0: resolution: {integrity: sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==} engines: {node: '>=12'} - dev: true /acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -6142,7 +6145,6 @@ packages: svg.pathmorphing.js: 0.1.3 svg.resize.js: 1.4.3 svg.select.js: 3.0.1 - dev: true /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} @@ -6580,7 +6582,6 @@ packages: /bezier-js@6.1.4: resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} - dev: true /bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} @@ -6804,7 +6805,6 @@ packages: engines: {node: '>=12'} dependencies: tinycolor2: 1.6.0 - dev: true /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -7541,21 +7541,17 @@ packages: engines: {node: '>=12'} dependencies: internmap: 2.0.3 - dev: true /d3-binarytree@1.0.2: resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} - dev: true /d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} - dev: true /d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} - dev: true /d3-drag@3.0.0: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} @@ -7563,12 +7559,10 @@ packages: dependencies: d3-dispatch: 3.0.1 d3-selection: 3.0.0 - dev: true /d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} - dev: true /d3-force-3d@3.0.5: resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} @@ -7579,28 +7573,23 @@ packages: d3-octree: 1.0.2 d3-quadtree: 3.0.1 d3-timer: 3.0.1 - dev: true /d3-format@3.1.0: resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} - dev: true /d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} dependencies: d3-color: 3.1.0 - dev: true /d3-octree@1.0.2: resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} - dev: true /d3-quadtree@3.0.1: resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} engines: {node: '>=12'} - dev: true /d3-scale-chromatic@3.1.0: resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} @@ -7608,7 +7597,6 @@ packages: dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 - dev: true /d3-scale@4.0.2: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} @@ -7619,31 +7607,26 @@ packages: d3-interpolate: 3.0.1 d3-time: 3.1.0 d3-time-format: 4.1.0 - dev: true /d3-selection@3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} - dev: true /d3-time-format@4.1.0: resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} dependencies: d3-time: 3.1.0 - dev: true /d3-time@3.1.0: resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} dependencies: d3-array: 3.2.4 - dev: true /d3-timer@3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - dev: true /d3-transition@3.0.1(d3-selection@3.0.0): resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} @@ -7657,7 +7640,6 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-timer: 3.0.1 - dev: true /d3-zoom@3.0.0: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} @@ -7668,7 +7650,6 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - dev: true /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -9548,7 +9529,7 @@ packages: resolution: {integrity: sha512-HveLELh9yhZXO/QOfaFS38vlwJZ/3sKu+jarfXzRmbmihSOH/BbRWnUvmg8wLFiYy6h4HlH4lkRfZRccHYmXgA==} engines: {node: '>=12'} dependencies: - '@tweenjs/tween.js': 23.1.1 + '@tweenjs/tween.js': 23.1.2 accessor-fn: 1.5.0 bezier-js: 6.1.4 canvas-color-tracker: 1.2.1 @@ -9562,7 +9543,6 @@ packages: index-array-by: 1.4.1 kapsule: 1.14.5 lodash-es: 4.17.21 - dev: true /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -9651,7 +9631,6 @@ packages: /fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - dev: true /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -10398,7 +10377,6 @@ packages: /index-array-by@1.4.1: resolution: {integrity: sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==} engines: {node: '>=12'} - dev: true /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -10471,7 +10449,6 @@ packages: /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - dev: true /ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} @@ -10940,7 +10917,6 @@ packages: /jerrypick@1.1.1: resolution: {integrity: sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==} engines: {node: '>=12'} - dev: true /jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} @@ -11735,7 +11711,6 @@ packages: engines: {node: '>=12'} dependencies: lodash-es: 4.17.21 - dev: true /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -11896,7 +11871,6 @@ packages: /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: true /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -13931,7 +13905,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -14072,7 +14045,6 @@ packages: apexcharts: 3.49.0 prop-types: 15.8.1 react: 18.3.0 - dev: true /react-app-polyfill@3.0.0: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} @@ -14210,7 +14182,6 @@ packages: prop-types: 15.8.1 react: 18.3.0 react-kapsule: 2.4.0(react@18.3.0) - dev: true /react-icons@5.1.0(react@18.3.0): resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} @@ -14244,7 +14215,6 @@ packages: fromentries: 1.3.2 jerrypick: 1.1.1 react: 18.3.0 - dev: true /react-refresh@0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -15653,32 +15623,27 @@ packages: engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: true /svg.easing.js@2.0.0: resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: true /svg.filter.js@2.0.2: resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: true /svg.js@2.7.1: resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} - dev: true /svg.pathmorphing.js@0.1.3: resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: true /svg.resize.js@1.4.3: resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} @@ -15686,21 +15651,18 @@ packages: dependencies: svg.js: 2.7.1 svg.select.js: 2.1.2 - dev: true /svg.select.js@2.1.2: resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: true /svg.select.js@3.0.1: resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: true /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} @@ -15982,7 +15944,6 @@ packages: /tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: true /tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} From 400847cb3121b4e7d69bc9486a2e72f92ad50bdb Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 14:51:42 -0700 Subject: [PATCH 16/74] update example package --- examples/next-app/package.json | 4 +- examples/next-app/pnpm-lock.yaml | 412 ------------------------------- 2 files changed, 3 insertions(+), 413 deletions(-) delete mode 100644 examples/next-app/pnpm-lock.yaml diff --git a/examples/next-app/package.json b/examples/next-app/package.json index be037af..8215bf4 100644 --- a/examples/next-app/package.json +++ b/examples/next-app/package.json @@ -14,7 +14,9 @@ "@tanstack/react-query": "^5.28.9", "next": "14.1.4", "react": "^18", - "react-dom": "^18" + "react-apexcharts": "^1.4.1", + "react-dom": "^18", + "react-force-graph-2d": "^1.25.4" }, "devDependencies": { "@next/eslint-plugin-next": "^14.1.1", diff --git a/examples/next-app/pnpm-lock.yaml b/examples/next-app/pnpm-lock.yaml deleted file mode 100644 index a2794b7..0000000 --- a/examples/next-app/pnpm-lock.yaml +++ /dev/null @@ -1,412 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@tanstack/react-query': - specifier: ^5.28.9 - version: 5.28.9(react@18.2.0) - next: - specifier: 14.1.4 - version: 14.1.4(react-dom@18.2.0)(react@18.2.0) - react: - specifier: ^18 - version: 18.2.0 - react-dom: - specifier: ^18 - version: 18.2.0(react@18.2.0) - viem: - specifier: ^2.7.19 - version: 2.9.6(typescript@5.4.3) - -devDependencies: - '@types/node': - specifier: ^20 - version: 20.11.30 - '@types/react': - specifier: ^18 - version: 18.2.72 - '@types/react-dom': - specifier: ^18 - version: 18.2.22 - typescript: - specifier: ^5 - version: 5.4.3 - -packages: - - /@adraffy/ens-normalize@1.10.0: - resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} - dev: false - - /@next/env@14.1.4: - resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} - dev: false - - /@next/swc-darwin-arm64@14.1.4: - resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-x64@14.1.4: - resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu@14.1.4: - resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-musl@14.1.4: - resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-gnu@14.1.4: - resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-musl@14.1.4: - resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-arm64-msvc@14.1.4: - resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-ia32-msvc@14.1.4: - resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-x64-msvc@14.1.4: - resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - dependencies: - '@noble/hashes': 1.3.2 - dev: false - - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} - dev: false - - /@scure/base@1.1.6: - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - dev: false - - /@scure/bip32@1.3.2: - resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} - dependencies: - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.6 - dev: false - - /@scure/bip39@1.2.1: - resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} - dependencies: - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.6 - dev: false - - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} - dependencies: - tslib: 2.6.2 - dev: false - - /@tanstack/query-core@5.28.9: - resolution: {integrity: sha512-hNlfCiqZevr3GRVPXS3MhaGW5hjcxvCsIQ4q6ff7EPlvFwYZaS+0d9EIIgofnegDaU2BbCDlyURoYfRl5rmzow==} - dev: false - - /@tanstack/react-query@5.28.9(react@18.2.0): - resolution: {integrity: sha512-vwifBkGXsydsLxFOBMe3+f8kvtDoqDRDwUNjPHVDDt+FoBetCbOWAUHgZn4k+CVeZgLmy7bx6aKeDbe3e8koOQ==} - peerDependencies: - react: ^18.0.0 - dependencies: - '@tanstack/query-core': 5.28.9 - react: 18.2.0 - dev: false - - /@types/node@20.11.30: - resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: true - - /@types/react-dom@18.2.22: - resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} - dependencies: - '@types/react': 18.2.72 - dev: true - - /@types/react@18.2.72: - resolution: {integrity: sha512-/e7GWxGzXQF7OJAua7UAYqYi/4VpXEfbGtmYQcAQwP3SjjjAXfybTf/JK5S+SaetB/ChXl8Y2g1hCsj7jDXxcg==} - dependencies: - '@types/prop-types': 15.7.12 - csstype: 3.1.3 - dev: true - - /abitype@1.0.0(typescript@5.4.3): - resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - dependencies: - typescript: 5.4.3 - dev: false - - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: false - - /caniuse-lite@1.0.30001600: - resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} - dev: false - - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false - - /isows@1.0.3(ws@8.13.0): - resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} - peerDependencies: - ws: '*' - dependencies: - ws: 8.13.0 - dev: false - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - - /next@14.1.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - dependencies: - '@next/env': 14.1.4 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001600 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) - optionalDependencies: - '@next/swc-darwin-arm64': 14.1.4 - '@next/swc-darwin-x64': 14.1.4 - '@next/swc-linux-arm64-gnu': 14.1.4 - '@next/swc-linux-arm64-musl': 14.1.4 - '@next/swc-linux-x64-gnu': 14.1.4 - '@next/swc-linux-x64-musl': 14.1.4 - '@next/swc-win32-arm64-msvc': 14.1.4 - '@next/swc-win32-ia32-msvc': 14.1.4 - '@next/swc-win32-x64-msvc': 14.1.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false - - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - dev: false - - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: false - - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false - - /styled-jsx@5.1.1(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - client-only: 0.0.1 - react: 18.2.0 - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} - engines: {node: '>=14.17'} - hasBin: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - - /viem@2.9.6(typescript@5.4.3): - resolution: {integrity: sha512-VVFWjGQei2wnWTvAB/xrIf22m6flCwxeBr8LnwejXMTSSi1EORWEswrw2lfKTmw3TlRPSG4uSiQMa/d0l0DKRg==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.4.3) - isows: 1.0.3(ws@8.13.0) - typescript: 5.4.3 - ws: 8.13.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - dev: false - - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false From 24b1856e6aeaa32b95217ccb7e5f5593bcddd026 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 16:46:34 -0700 Subject: [PATCH 17/74] add chart --- packages/storykit/package.json | 2 +- .../IPARoyaltyChart/IPARoyaltyChart.tsx | 224 ++++++++++++------ packages/storykit/src/components/index.ts | 2 +- 3 files changed, 150 insertions(+), 78 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 9e6df0f..f9584c9 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.5", + "version": "0.1.6-mrtest.6", "type": "module", "exports": { ".": { diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx index 84e646a..ad1db52 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -1,92 +1,164 @@ import { shortenAddress } from "@/lib/utils" import { useIPAssetContext } from "@/providers" -import Chart from "react-apexcharts" +import { useEffect, useRef, useState } from "react" +import type { Props as ReactApexChartsProps } from "react-apexcharts" import { Address } from "viem" import "../../global.css" -function IPARoyaltyChart() { - // const Chart = dynamic(() => import("react-apexcharts"), { ssr: false }) +// import { useLoadReactApexCharts } from "./useLoadApexChart" +function IPARoyaltyChart() { const { royaltyData } = useIPAssetContext() - if (royaltyData?.targetAncestors) { - const chart = { - options: { - chart: { - width: 300, - type: "pie" as `pie`, - }, - dataLabels: { - style: { - fontSize: "20px", - // fontFamily: "Inter, ui-sans-serif", - fontWeight: "400", - colors: ["#fff", "#fff", "#1f2937"], - }, - dropShadow: { - enabled: false, - }, - formatter: (value: number) => `${value.toFixed(1)} %`, - }, - // labels: ["Direct", "Organic search"], - plotOptions: { - pie: { - dataLabels: { - offset: -20, - }, - }, - }, - colors: ["#5f6060", "#494848"], - tooltip: { - enabled: true, - y: { - title: { - formatter: (value: Address) => shortenAddress(value), - }, - }, - }, - legend: { - show: false, - }, - labels: royaltyData?.targetAncestors, - responsive: [ - { - breakpoint: 480, - options: { - chart: { - width: 300, - }, - legend: { - position: "bottom", - }, - }, - }, - ], + const ApexChart = useLoadReactApexCharts() + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + // const [Chart, setChart] = useState(null) + + // useEffect(() => { + // // ForceGraph will break SSR, and needs to be loaded dynamically + // async function importChartsModule() { + // const ch = await import("react-apexcharts") + // console.log(ch) + // setChart(ch) + // // setChart(fg.default) + // } + // importChartsModule() + // }, []) + + if (!ApexChart) return null + + // const ChartComponent = ApexChart.default + const ChartComponent = ApexChart.default + + // if (royaltyData?.targetAncestors) { + const chart = { + options: { + chart: { + id: "apexchart-example", }, - series: royaltyData?.targetRoyaltyAmount.map(Number), - } + xaxis: { + categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999], + }, + }, + series: [ + { + name: "series-1", + data: [30, 40, 35, 50, 49, 60, 70, 91, 125], + }, + ], - return ( -
-
- -
-
-
- {royaltyData?.targetAncestors.map((target, i) => ( -
-
{shortenAddress(target)}
-
{royaltyData.targetRoyaltyAmount[i]}
-
- ))} -
-
-
- ) + // chart: { + // width: 300, + // type: "pie" as `pie`, + // }, + // dataLabels: { + // style: { + // fontSize: "20px", + // // fontFamily: "Inter, ui-sans-serif", + // fontWeight: "400", + // colors: ["#fff", "#fff", "#1f2937"], + // }, + // dropShadow: { + // enabled: false, + // }, + // formatter: (value: number) => `${value.toFixed(1)} %`, + // }, + // // labels: ["Direct", "Organic search"], + // plotOptions: { + // pie: { + // dataLabels: { + // offset: -20, + // }, + // }, + // }, + // colors: ["#5f6060", "#494848"], + // tooltip: { + // enabled: true, + // y: { + // title: { + // formatter: (value: Address) => shortenAddress(value), + // }, + // }, + // }, + // legend: { + // show: false, + // }, + // labels: royaltyData?.targetAncestors, + // responsive: [ + // { + // breakpoint: 480, + // options: { + // chart: { + // width: 300, + // }, + // legend: { + // position: "bottom", + // }, + // }, + // }, + // ], + // }, + // series: royaltyData?.targetRoyaltyAmount.map(Number), } - return
No Royalty Data
+ return ( +
+
+ {/* */} + +
+
+
+ {royaltyData?.targetAncestors.map((target, i) => ( +
+
{shortenAddress(target)}
+
{royaltyData.targetRoyaltyAmount[i]}
+
+ ))} +
+
+
+ ) + // } + + // return
No Royalty Data
} export default IPARoyaltyChart + +type ReactApexChartsType = React.NamedExoticComponent + +type ReactApexChartModule = { + __esModule: true + default: ReactApexChartsType +} + +function useLoadReactApexCharts() { + const appexRef = useRef(false) + + const [apexChartModule, setApexChartModule] = useState(null) + + useEffect(() => { + async function loadAppex() { + const module = (await import("react-apexcharts")) as unknown as ReactApexChartModule + + /** + * For some reason, the type inference here is not working correctly. + * + * It assumes that the `default` property is the component itself, but + * when we console log it, it's another module. My gut feeling is that + * due the module transpilation, it converts to an object that contains the shape + * specified in the `ReactApexChartModule` type. + */ + setApexChartModule(module) + } + + if (appexRef.current === false) { + loadAppex() + } + }, [appexRef]) + + return apexChartModule +} diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 86eb281..3ce02dc 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -2,4 +2,4 @@ export * from "./Button" // export * from "./IPAssetWidget" export * from "./IPAGraph" export * from "./IPAPolicies" -// export * from "./IPARoyaltyChart" +export * from "./IPARoyaltyChart" From 10b59063a306df88ddc3a0f46fa179d9dad9d5b6 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 21:20:27 -0700 Subject: [PATCH 18/74] run example next-app cmd --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 40b2d72..d1ac415 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "scripts": { "build": "turbo run build --filter @storyprotocol/storykit", "dev": "turbo run dev --filter @storyprotocol/storykit", + "dev-example": "turbo run dev --filter next-app", "lint": "turbo run lint --filter @storyprotocol/storykit", "lint-all": "turbo run lint", "format": "turbo run format --filter @storyprotocol/storykit", From 6e85001a97950610d9944625cda393f207759713 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 21:21:26 -0700 Subject: [PATCH 19/74] tidy graph --- .../src/components/IPAGraph/IPAGraph.tsx | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx index 24f3c3e..02cc9ea 100644 --- a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx +++ b/packages/storykit/src/components/IPAGraph/IPAGraph.tsx @@ -1,21 +1,10 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -// let ForceGraph2D: any -// if (typeof window !== "undefined") { -// ForceGraph2D = require("react-force-graph-2d") -// } -// import loadable from "@loadable/component" -import React, { Suspense, useEffect, useMemo, useState } from "react" - -// import ForceGraph2D from "react-force-graph-2d" +import React, { useEffect, useMemo, useState } from "react" + import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" import { useIPAssetContext } from "../../providers" -// const ForceGraph2D = loadable(() => import("./forceGraph2d")) -// const ForceGraph2D = React.lazy(() => import("./forceGraph2d")) - export type IPAGraphProps = { width?: number height?: number @@ -88,9 +77,9 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { return (
- {ForceGraph && ( + {ForceGraph ? ( - )} + ) : null}
) } From a2f1e04782b19e2d726b30038e273f8013cad37e Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 21:21:46 -0700 Subject: [PATCH 20/74] disable build cache --- turbo.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/turbo.json b/turbo.json index 284b70d..063726e 100644 --- a/turbo.json +++ b/turbo.json @@ -3,7 +3,8 @@ "pipeline": { "build": { "dependsOn": ["^build"], - "outputs": ["dist/**", ".next/**", "!.next/cache/**"] + "outputs": ["dist/**", ".next/**", "!.next/cache/**"], + "cache": false }, "lint": { "outputs": [] From 2322c2c66250dbbc627cc033871c0d3dfc2861ee Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 21:25:50 -0700 Subject: [PATCH 21/74] tidy chart --- .../IPARoyaltyChart/IPARoyaltyChart.tsx | 222 ++++++------------ 1 file changed, 74 insertions(+), 148 deletions(-) diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx index ad1db52..7b75d09 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -1,164 +1,90 @@ import { shortenAddress } from "@/lib/utils" import { useIPAssetContext } from "@/providers" -import { useEffect, useRef, useState } from "react" -import type { Props as ReactApexChartsProps } from "react-apexcharts" +import Chart from "react-apexcharts" import { Address } from "viem" import "../../global.css" -// import { useLoadReactApexCharts } from "./useLoadApexChart" - function IPARoyaltyChart() { const { royaltyData } = useIPAssetContext() - const ApexChart = useLoadReactApexCharts() - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - // const [Chart, setChart] = useState(null) - - // useEffect(() => { - // // ForceGraph will break SSR, and needs to be loaded dynamically - // async function importChartsModule() { - // const ch = await import("react-apexcharts") - // console.log(ch) - // setChart(ch) - // // setChart(fg.default) - // } - // importChartsModule() - // }, []) - - if (!ApexChart) return null - - // const ChartComponent = ApexChart.default - const ChartComponent = ApexChart.default - - // if (royaltyData?.targetAncestors) { - const chart = { - options: { - chart: { - id: "apexchart-example", - }, - xaxis: { - categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999], + if (royaltyData?.targetAncestors) { + const chart = { + options: { + chart: { + width: 300, + type: "pie" as `pie`, + }, + dataLabels: { + style: { + fontSize: "20px", + // fontFamily: "Inter, ui-sans-serif", + fontWeight: "400", + colors: ["#fff", "#fff", "#1f2937"], + }, + dropShadow: { + enabled: false, + }, + formatter: (value: number) => `${value.toFixed(1)} %`, + }, + // labels: ["Direct", "Organic search"], + plotOptions: { + pie: { + dataLabels: { + offset: -20, + }, + }, + }, + colors: ["#5f6060", "#494848"], + tooltip: { + enabled: true, + y: { + title: { + formatter: (value: Address) => shortenAddress(value), + }, + }, + }, + legend: { + show: false, + }, + labels: royaltyData?.targetAncestors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 300, + }, + legend: { + position: "bottom", + }, + }, + }, + ], }, - }, - series: [ - { - name: "series-1", - data: [30, 40, 35, 50, 49, 60, 70, 91, 125], - }, - ], - - // chart: { - // width: 300, - // type: "pie" as `pie`, - // }, - // dataLabels: { - // style: { - // fontSize: "20px", - // // fontFamily: "Inter, ui-sans-serif", - // fontWeight: "400", - // colors: ["#fff", "#fff", "#1f2937"], - // }, - // dropShadow: { - // enabled: false, - // }, - // formatter: (value: number) => `${value.toFixed(1)} %`, - // }, - // // labels: ["Direct", "Organic search"], - // plotOptions: { - // pie: { - // dataLabels: { - // offset: -20, - // }, - // }, - // }, - // colors: ["#5f6060", "#494848"], - // tooltip: { - // enabled: true, - // y: { - // title: { - // formatter: (value: Address) => shortenAddress(value), - // }, - // }, - // }, - // legend: { - // show: false, - // }, - // labels: royaltyData?.targetAncestors, - // responsive: [ - // { - // breakpoint: 480, - // options: { - // chart: { - // width: 300, - // }, - // legend: { - // position: "bottom", - // }, - // }, - // }, - // ], - // }, - // series: royaltyData?.targetRoyaltyAmount.map(Number), - } + series: royaltyData?.targetRoyaltyAmount.map(Number), + } - return ( -
-
- {/* */} - -
-
-
- {royaltyData?.targetAncestors.map((target, i) => ( -
-
{shortenAddress(target)}
-
{royaltyData.targetRoyaltyAmount[i]}
-
- ))} -
+ return ( +
+
+ +
+
+
+ {royaltyData?.targetAncestors.map((target, i) => ( +
+
{shortenAddress(target)}
+
{royaltyData.targetRoyaltyAmount[i]}
+
+ ))} +
+
-
- ) - // } + ) + } - // return
No Royalty Data
+ return
No Royalty Data
} export default IPARoyaltyChart - -type ReactApexChartsType = React.NamedExoticComponent - -type ReactApexChartModule = { - __esModule: true - default: ReactApexChartsType -} - -function useLoadReactApexCharts() { - const appexRef = useRef(false) - - const [apexChartModule, setApexChartModule] = useState(null) - - useEffect(() => { - async function loadAppex() { - const module = (await import("react-apexcharts")) as unknown as ReactApexChartModule - - /** - * For some reason, the type inference here is not working correctly. - * - * It assumes that the `default` property is the component itself, but - * when we console log it, it's another module. My gut feeling is that - * due the module transpilation, it converts to an object that contains the shape - * specified in the `ReactApexChartModule` type. - */ - setApexChartModule(module) - } - - if (appexRef.current === false) { - loadAppex() - } - }, [appexRef]) - - return apexChartModule -} From d2b3f2174c5610b632457b939f267bdecef1b3ce Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 22:09:06 -0700 Subject: [PATCH 22/74] async chart import --- packages/storykit/package.json | 21 +++---- packages/storykit/rollup.config.js | 18 ------ .../IPARoyaltyChart/IPARoyaltyChart.tsx | 16 +++++- pnpm-lock.yaml | 55 +++++++++++++++++-- 4 files changed, 70 insertions(+), 40 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index f9584c9..bcd4d78 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.6", + "version": "0.1.6-mrtest.8", "type": "module", "exports": { ".": { @@ -9,11 +9,6 @@ "default": "./dist/storyprotocol-storykit.cjs.js", "types": "./dist/types.d.ts" }, - "./providers": { - "module": "./dist/storyprotocol-storykit-providers.esm.js", - "default": "./dist/storyprotocol-storykit-providers.cjs.js", - "types": "./dist/types.d.ts" - }, "./package.json": "./package.json", "./dist/build.css": "./dist/build.css" }, @@ -41,6 +36,8 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.364.0", + "react-apexcharts": "^1.4.1", + "react-force-graph-2d": "^1.25.4", "react-icons": "^5.0.1", "tailwind-merge": "^2.2.2", "tailwindcss": "^3.4.1", @@ -49,6 +46,9 @@ }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", @@ -66,17 +66,14 @@ "@storybook/react-webpack5": "^8.0.4", "@storybook/test": "^8.0.4", "@storybook/theming": "^8.0.4", - "@storykit/eslint-config": "workspace:*", - "@storykit/prettier-config": "workspace:*", - "@storykit/typescript-config": "workspace:*", "@tanstack/react-query": "^5.25.0", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@turbo/gen": "^1.12.4", - "@types/eslint": "^8.56.5", "@types/jest": "^29.5.12", "@types/node": "^20.11.24", + "@types/eslint": "^8.56.5", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", @@ -89,9 +86,7 @@ "prettier": "^3.2.5", "prop-types": "^15.8.1", "react": "^18.2.0", - "react-apexcharts": "^1.4.1", "react-dom": "^18.2.0", - "react-force-graph-2d": "^1.25.4", "react-scripts": "5.0.1", "rollup": "^4.13.1", "rollup-plugin-dts": "^6.1.0", @@ -104,9 +99,7 @@ "peerDependencies": { "@tanstack/react-query": "^5.25.0", "react": ">=18.2.0", - "react-apexcharts": "^1.4.1", "react-dom": ">=18.2.0", - "react-force-graph-2d": "^1.25.4", "typescript": "^5.4.3" } } diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index 6dfe7af..51ccd4d 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -13,7 +13,6 @@ const config = [ input: "src/index.ts", output: [ { - // file: packageJson.main, file: packageJson.exports["."].default, format: "cjs", sourcemap: true, @@ -27,23 +26,6 @@ const config = [ plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], external: ["react/jsx-runtime"], }, - { - input: "src/providers/index.ts", - output: [ - { - file: packageJson.exports["./providers"].default, - format: "cjs", - sourcemap: true, - }, - { - file: packageJson.exports["./providers"].module, - format: "esm", - sourcemap: true, - }, - ], - plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], - external: ["react/jsx-runtime"], - }, { input: "src/index.ts", output: [{ file: "dist/types.d.ts", format: "es" }], diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx index 7b75d09..295a858 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -1,6 +1,6 @@ import { shortenAddress } from "@/lib/utils" import { useIPAssetContext } from "@/providers" -import Chart from "react-apexcharts" +import { useEffect, useState } from "react" import { Address } from "viem" import "../../global.css" @@ -8,6 +8,16 @@ import "../../global.css" function IPARoyaltyChart() { const { royaltyData } = useIPAssetContext() + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [Chart, setChart] = useState(null) + useEffect(() => { + import("react-apexcharts").then((Component) => setChart(Component)) + }, []) + + let ApexChart = Chart + if (ApexChart?.default) ApexChart = ApexChart.default + if (ApexChart?.default) ApexChart = ApexChart.default + if (royaltyData?.targetAncestors) { const chart = { options: { @@ -68,7 +78,9 @@ function IPARoyaltyChart() { return (
- + {ApexChart ? ( + + ) : null}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6f4d06..2fb001a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -143,6 +143,12 @@ importers: lucide-react: specifier: ^0.364.0 version: 0.364.0(react@18.3.0) + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) react-icons: specifier: ^5.0.1 version: 5.1.0(react@18.3.0) @@ -282,15 +288,9 @@ importers: react: specifier: ^18.2.0 version: 18.3.0 - react-apexcharts: - specifier: ^1.4.1 - version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) react-dom: specifier: ^18.2.0 version: 18.3.0(react@18.3.0) - react-force-graph-2d: - specifier: ^1.25.4 - version: 1.25.4(react@18.3.0) react-scripts: specifier: 5.0.1 version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) @@ -4823,6 +4823,7 @@ packages: /@tweenjs/tween.js@23.1.2: resolution: {integrity: sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==} + dev: false /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -5908,6 +5909,7 @@ packages: /@yr/monotone-cubic-spline@1.0.3: resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -5939,6 +5941,7 @@ packages: /accessor-fn@1.5.0: resolution: {integrity: sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==} engines: {node: '>=12'} + dev: false /acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -6145,6 +6148,7 @@ packages: svg.pathmorphing.js: 0.1.3 svg.resize.js: 1.4.3 svg.select.js: 3.0.1 + dev: false /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} @@ -6582,6 +6586,7 @@ packages: /bezier-js@6.1.4: resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} + dev: false /bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} @@ -6805,6 +6810,7 @@ packages: engines: {node: '>=12'} dependencies: tinycolor2: 1.6.0 + dev: false /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -7541,17 +7547,21 @@ packages: engines: {node: '>=12'} dependencies: internmap: 2.0.3 + dev: false /d3-binarytree@1.0.2: resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} + dev: false /d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} + dev: false /d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} + dev: false /d3-drag@3.0.0: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} @@ -7559,10 +7569,12 @@ packages: dependencies: d3-dispatch: 3.0.1 d3-selection: 3.0.0 + dev: false /d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} + dev: false /d3-force-3d@3.0.5: resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} @@ -7573,23 +7585,28 @@ packages: d3-octree: 1.0.2 d3-quadtree: 3.0.1 d3-timer: 3.0.1 + dev: false /d3-format@3.1.0: resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} + dev: false /d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} dependencies: d3-color: 3.1.0 + dev: false /d3-octree@1.0.2: resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} + dev: false /d3-quadtree@3.0.1: resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} engines: {node: '>=12'} + dev: false /d3-scale-chromatic@3.1.0: resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} @@ -7597,6 +7614,7 @@ packages: dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 + dev: false /d3-scale@4.0.2: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} @@ -7607,26 +7625,31 @@ packages: d3-interpolate: 3.0.1 d3-time: 3.1.0 d3-time-format: 4.1.0 + dev: false /d3-selection@3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} + dev: false /d3-time-format@4.1.0: resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} dependencies: d3-time: 3.1.0 + dev: false /d3-time@3.1.0: resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} dependencies: d3-array: 3.2.4 + dev: false /d3-timer@3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} + dev: false /d3-transition@3.0.1(d3-selection@3.0.0): resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} @@ -7640,6 +7663,7 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-timer: 3.0.1 + dev: false /d3-zoom@3.0.0: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} @@ -7650,6 +7674,7 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) + dev: false /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -9543,6 +9568,7 @@ packages: index-array-by: 1.4.1 kapsule: 1.14.5 lodash-es: 4.17.21 + dev: false /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -9631,6 +9657,7 @@ packages: /fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + dev: false /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -10377,6 +10404,7 @@ packages: /index-array-by@1.4.1: resolution: {integrity: sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==} engines: {node: '>=12'} + dev: false /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -10449,6 +10477,7 @@ packages: /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} + dev: false /ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} @@ -10917,6 +10946,7 @@ packages: /jerrypick@1.1.1: resolution: {integrity: sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==} engines: {node: '>=12'} + dev: false /jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} @@ -11711,6 +11741,7 @@ packages: engines: {node: '>=12'} dependencies: lodash-es: 4.17.21 + dev: false /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -11871,6 +11902,7 @@ packages: /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -14045,6 +14077,7 @@ packages: apexcharts: 3.49.0 prop-types: 15.8.1 react: 18.3.0 + dev: false /react-app-polyfill@3.0.0: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} @@ -14182,6 +14215,7 @@ packages: prop-types: 15.8.1 react: 18.3.0 react-kapsule: 2.4.0(react@18.3.0) + dev: false /react-icons@5.1.0(react@18.3.0): resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} @@ -14215,6 +14249,7 @@ packages: fromentries: 1.3.2 jerrypick: 1.1.1 react: 18.3.0 + dev: false /react-refresh@0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -15623,27 +15658,32 @@ packages: engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 + dev: false /svg.easing.js@2.0.0: resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 + dev: false /svg.filter.js@2.0.2: resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 + dev: false /svg.js@2.7.1: resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false /svg.pathmorphing.js@0.1.3: resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 + dev: false /svg.resize.js@1.4.3: resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} @@ -15651,18 +15691,21 @@ packages: dependencies: svg.js: 2.7.1 svg.select.js: 2.1.2 + dev: false /svg.select.js@2.1.2: resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 + dev: false /svg.select.js@3.0.1: resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 + dev: false /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} From d780d7ba6912a3ac0740930ab6b643b20e6a8574 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 23:03:07 -0700 Subject: [PATCH 23/74] test graph --- packages/storykit/package.json | 2 +- packages/storykit/rollup.config.js | 9 +++++++++ .../storykit/src/components/IPAGraph/forceGraph2d.ts | 3 --- .../components/IPARoyaltyChart/IPARoyaltyChart.tsx | 12 +++++++++++- packages/storykit/src/components/index.ts | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) delete mode 100644 packages/storykit/src/components/IPAGraph/forceGraph2d.ts diff --git a/packages/storykit/package.json b/packages/storykit/package.json index bcd4d78..8120327 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.8", + "version": "0.1.6-mrtest.9", "type": "module", "exports": { ".": { diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index 51ccd4d..be1a84a 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -16,14 +16,23 @@ const config = [ file: packageJson.exports["."].default, format: "cjs", sourcemap: true, + // globals: { + // react: "React", + // "react-dom": "ReactDOM", + // "react-apexcharts": "ApexCharts", + // }, }, { file: packageJson.exports["."].module, format: "esm", sourcemap: true, + // globals: { + // "react-apexcharts": "ApexCharts", + // }, }, ], plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], + // external: ["react/jsx-runtime", "react-apexcharts"], external: ["react/jsx-runtime"], }, { diff --git a/packages/storykit/src/components/IPAGraph/forceGraph2d.ts b/packages/storykit/src/components/IPAGraph/forceGraph2d.ts deleted file mode 100644 index 35353f5..0000000 --- a/packages/storykit/src/components/IPAGraph/forceGraph2d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import ForceGraph2D from "react-force-graph-2d" - -export default ForceGraph2D diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx index 295a858..10dcae2 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -1,22 +1,32 @@ import { shortenAddress } from "@/lib/utils" import { useIPAssetContext } from "@/providers" import { useEffect, useState } from "react" +// import Chart from "react-apexcharts" import { Address } from "viem" import "../../global.css" function IPARoyaltyChart() { + // const Chart = dynamic(() => import("react-apexcharts"), { ssr: false }) + const { royaltyData } = useIPAssetContext() + // console.log("Chart", Chart) + // eslint-disable-next-line @typescript-eslint/no-explicit-any const [Chart, setChart] = useState(null) useEffect(() => { import("react-apexcharts").then((Component) => setChart(Component)) }, []) - + console.log("Chart", Chart) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + // let ApexChart = Chart ? (Chart as unknown as any)?.default || Chart : null let ApexChart = Chart + console.log("ApexChart 1", ApexChart) if (ApexChart?.default) ApexChart = ApexChart.default + console.log("ApexChart 2", ApexChart) if (ApexChart?.default) ApexChart = ApexChart.default + console.log("ApexChart 3", ApexChart) if (royaltyData?.targetAncestors) { const chart = { diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 3ce02dc..86eb281 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -2,4 +2,4 @@ export * from "./Button" // export * from "./IPAssetWidget" export * from "./IPAGraph" export * from "./IPAPolicies" -export * from "./IPARoyaltyChart" +// export * from "./IPARoyaltyChart" From 85bfee857238c719997d91381e0ab6566029fce0 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 23:33:03 -0700 Subject: [PATCH 24/74] make charts peer dep --- packages/storykit/package.json | 16 ++++--- packages/storykit/src/components/index.ts | 2 +- pnpm-lock.yaml | 55 +++-------------------- 3 files changed, 16 insertions(+), 57 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 8120327..0da69d8 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.9", + "version": "0.1.6-mrtest.10", "type": "module", "exports": { ".": { @@ -36,8 +36,6 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.364.0", - "react-apexcharts": "^1.4.1", - "react-force-graph-2d": "^1.25.4", "react-icons": "^5.0.1", "tailwind-merge": "^2.2.2", "tailwindcss": "^3.4.1", @@ -46,9 +44,6 @@ }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", - "@storykit/eslint-config": "workspace:*", - "@storykit/prettier-config": "workspace:*", - "@storykit/typescript-config": "workspace:*", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", @@ -66,14 +61,17 @@ "@storybook/react-webpack5": "^8.0.4", "@storybook/test": "^8.0.4", "@storybook/theming": "^8.0.4", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", "@tanstack/react-query": "^5.25.0", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@turbo/gen": "^1.12.4", + "@types/eslint": "^8.56.5", "@types/jest": "^29.5.12", "@types/node": "^20.11.24", - "@types/eslint": "^8.56.5", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", @@ -86,7 +84,9 @@ "prettier": "^3.2.5", "prop-types": "^15.8.1", "react": "^18.2.0", + "react-apexcharts": "^1.4.1", "react-dom": "^18.2.0", + "react-force-graph-2d": "^1.25.4", "react-scripts": "5.0.1", "rollup": "^4.13.1", "rollup-plugin-dts": "^6.1.0", @@ -99,7 +99,9 @@ "peerDependencies": { "@tanstack/react-query": "^5.25.0", "react": ">=18.2.0", + "react-apexcharts": "^1.4.1", "react-dom": ">=18.2.0", + "react-force-graph-2d": "^1.25.4", "typescript": "^5.4.3" } } diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 86eb281..3ce02dc 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -2,4 +2,4 @@ export * from "./Button" // export * from "./IPAssetWidget" export * from "./IPAGraph" export * from "./IPAPolicies" -// export * from "./IPARoyaltyChart" +export * from "./IPARoyaltyChart" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2fb001a..e6f4d06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -143,12 +143,6 @@ importers: lucide-react: specifier: ^0.364.0 version: 0.364.0(react@18.3.0) - react-apexcharts: - specifier: ^1.4.1 - version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) - react-force-graph-2d: - specifier: ^1.25.4 - version: 1.25.4(react@18.3.0) react-icons: specifier: ^5.0.1 version: 5.1.0(react@18.3.0) @@ -288,9 +282,15 @@ importers: react: specifier: ^18.2.0 version: 18.3.0 + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) react-dom: specifier: ^18.2.0 version: 18.3.0(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) react-scripts: specifier: 5.0.1 version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) @@ -4823,7 +4823,6 @@ packages: /@tweenjs/tween.js@23.1.2: resolution: {integrity: sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==} - dev: false /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -5909,7 +5908,6 @@ packages: /@yr/monotone-cubic-spline@1.0.3: resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - dev: false /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -5941,7 +5939,6 @@ packages: /accessor-fn@1.5.0: resolution: {integrity: sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==} engines: {node: '>=12'} - dev: false /acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -6148,7 +6145,6 @@ packages: svg.pathmorphing.js: 0.1.3 svg.resize.js: 1.4.3 svg.select.js: 3.0.1 - dev: false /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} @@ -6586,7 +6582,6 @@ packages: /bezier-js@6.1.4: resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} - dev: false /bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} @@ -6810,7 +6805,6 @@ packages: engines: {node: '>=12'} dependencies: tinycolor2: 1.6.0 - dev: false /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -7547,21 +7541,17 @@ packages: engines: {node: '>=12'} dependencies: internmap: 2.0.3 - dev: false /d3-binarytree@1.0.2: resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} - dev: false /d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} - dev: false /d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} - dev: false /d3-drag@3.0.0: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} @@ -7569,12 +7559,10 @@ packages: dependencies: d3-dispatch: 3.0.1 d3-selection: 3.0.0 - dev: false /d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} - dev: false /d3-force-3d@3.0.5: resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} @@ -7585,28 +7573,23 @@ packages: d3-octree: 1.0.2 d3-quadtree: 3.0.1 d3-timer: 3.0.1 - dev: false /d3-format@3.1.0: resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} - dev: false /d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} dependencies: d3-color: 3.1.0 - dev: false /d3-octree@1.0.2: resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} - dev: false /d3-quadtree@3.0.1: resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} engines: {node: '>=12'} - dev: false /d3-scale-chromatic@3.1.0: resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} @@ -7614,7 +7597,6 @@ packages: dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 - dev: false /d3-scale@4.0.2: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} @@ -7625,31 +7607,26 @@ packages: d3-interpolate: 3.0.1 d3-time: 3.1.0 d3-time-format: 4.1.0 - dev: false /d3-selection@3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} - dev: false /d3-time-format@4.1.0: resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} dependencies: d3-time: 3.1.0 - dev: false /d3-time@3.1.0: resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} dependencies: d3-array: 3.2.4 - dev: false /d3-timer@3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - dev: false /d3-transition@3.0.1(d3-selection@3.0.0): resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} @@ -7663,7 +7640,6 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-timer: 3.0.1 - dev: false /d3-zoom@3.0.0: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} @@ -7674,7 +7650,6 @@ packages: d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - dev: false /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -9568,7 +9543,6 @@ packages: index-array-by: 1.4.1 kapsule: 1.14.5 lodash-es: 4.17.21 - dev: false /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -9657,7 +9631,6 @@ packages: /fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - dev: false /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -10404,7 +10377,6 @@ packages: /index-array-by@1.4.1: resolution: {integrity: sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==} engines: {node: '>=12'} - dev: false /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -10477,7 +10449,6 @@ packages: /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - dev: false /ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} @@ -10946,7 +10917,6 @@ packages: /jerrypick@1.1.1: resolution: {integrity: sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==} engines: {node: '>=12'} - dev: false /jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} @@ -11741,7 +11711,6 @@ packages: engines: {node: '>=12'} dependencies: lodash-es: 4.17.21 - dev: false /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -11902,7 +11871,6 @@ packages: /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: false /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -14077,7 +14045,6 @@ packages: apexcharts: 3.49.0 prop-types: 15.8.1 react: 18.3.0 - dev: false /react-app-polyfill@3.0.0: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} @@ -14215,7 +14182,6 @@ packages: prop-types: 15.8.1 react: 18.3.0 react-kapsule: 2.4.0(react@18.3.0) - dev: false /react-icons@5.1.0(react@18.3.0): resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} @@ -14249,7 +14215,6 @@ packages: fromentries: 1.3.2 jerrypick: 1.1.1 react: 18.3.0 - dev: false /react-refresh@0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -15658,32 +15623,27 @@ packages: engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false /svg.easing.js@2.0.0: resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false /svg.filter.js@2.0.2: resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false /svg.js@2.7.1: resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} - dev: false /svg.pathmorphing.js@0.1.3: resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false /svg.resize.js@1.4.3: resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} @@ -15691,21 +15651,18 @@ packages: dependencies: svg.js: 2.7.1 svg.select.js: 2.1.2 - dev: false /svg.select.js@2.1.2: resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false /svg.select.js@3.0.1: resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} engines: {node: '>= 0.8.0'} dependencies: svg.js: 2.7.1 - dev: false /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} From 0de932baa0474116797f283ce9ea00675ae505e7 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 23:42:15 -0700 Subject: [PATCH 25/74] update example next app --- examples/next-app/app/page.tsx | 12 ++---------- examples/next-app/components/HomePage.tsx | 11 ++++++----- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/examples/next-app/app/page.tsx b/examples/next-app/app/page.tsx index aa1b034..322af1f 100644 --- a/examples/next-app/app/page.tsx +++ b/examples/next-app/app/page.tsx @@ -1,20 +1,12 @@ import "@storyprotocol/storykit/dist/build.css" -import dynamic from "next/dynamic" - -const DynamicHomePage = dynamic( - () => { - return import("../components/HomePage") - }, - { ssr: false } -) - +import HomePage from "../components/HomePage" export default function Home() { return (
- +
) } diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index d8a9b7f..e623f5d 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,6 +1,6 @@ "use client" -import { Button, IPAssetProvider, IPAssetWidget, useIPAssetContext } from "@storyprotocol/storykit" +import { IPAssetProvider, useIPAssetContext, IPAssetWidget } from "@storyprotocol/storykit" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" @@ -23,12 +23,13 @@ export default function Home() { <>
- - - + {/* */} + + {/* */} + {/* */} - +
From 331ede9d7217fb5ef926ee1b89af6d6eeb3b4065 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 23:42:27 -0700 Subject: [PATCH 26/74] tidy --- packages/storykit/rollup.config.js | 9 --------- .../components/IPARoyaltyChart/IPARoyaltyChart.tsx | 12 +----------- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index be1a84a..51ccd4d 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -16,23 +16,14 @@ const config = [ file: packageJson.exports["."].default, format: "cjs", sourcemap: true, - // globals: { - // react: "React", - // "react-dom": "ReactDOM", - // "react-apexcharts": "ApexCharts", - // }, }, { file: packageJson.exports["."].module, format: "esm", sourcemap: true, - // globals: { - // "react-apexcharts": "ApexCharts", - // }, }, ], plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], - // external: ["react/jsx-runtime", "react-apexcharts"], external: ["react/jsx-runtime"], }, { diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx index 10dcae2..295a858 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -1,32 +1,22 @@ import { shortenAddress } from "@/lib/utils" import { useIPAssetContext } from "@/providers" import { useEffect, useState } from "react" -// import Chart from "react-apexcharts" import { Address } from "viem" import "../../global.css" function IPARoyaltyChart() { - // const Chart = dynamic(() => import("react-apexcharts"), { ssr: false }) - const { royaltyData } = useIPAssetContext() - // console.log("Chart", Chart) - // eslint-disable-next-line @typescript-eslint/no-explicit-any const [Chart, setChart] = useState(null) useEffect(() => { import("react-apexcharts").then((Component) => setChart(Component)) }, []) - console.log("Chart", Chart) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - // let ApexChart = Chart ? (Chart as unknown as any)?.default || Chart : null + let ApexChart = Chart - console.log("ApexChart 1", ApexChart) if (ApexChart?.default) ApexChart = ApexChart.default - console.log("ApexChart 2", ApexChart) if (ApexChart?.default) ApexChart = ApexChart.default - console.log("ApexChart 3", ApexChart) if (royaltyData?.targetAncestors) { const chart = { From 58a074701017af4b678b3a7e1f7781db509bc7a1 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 23:42:41 -0700 Subject: [PATCH 27/74] reinstate ipAssetWidget --- packages/storykit/package.json | 2 +- packages/storykit/src/components/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 0da69d8..2c46930 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.10", + "version": "0.1.6-mrtest.11", "type": "module", "exports": { ".": { diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 3ce02dc..aa5a038 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -1,5 +1,5 @@ export * from "./Button" -// export * from "./IPAssetWidget" +export * from "./IPAssetWidget" export * from "./IPAGraph" export * from "./IPAPolicies" export * from "./IPARoyaltyChart" From 39960bb7251fbe61441956a825e10a65f3be386a Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Sun, 5 May 2024 23:57:16 -0700 Subject: [PATCH 28/74] Update publish-package.yml --- .github/workflows/publish-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index de3f8c9..5fb5cd2 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - feature/package-export + - main jobs: publish-gpr: From 859b6160b18a6738053563e2f7d8923f1e6c0dcf Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Mon, 6 May 2024 00:19:14 -0700 Subject: [PATCH 29/74] config --- packages/storykit/.storybook/preview.ts | 3 +++ packages/storykit/package.json | 1 + packages/storykit/rollup.config.js | 1 + 3 files changed, 5 insertions(+) diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts index a6319b8..5ce8caf 100644 --- a/packages/storykit/.storybook/preview.ts +++ b/packages/storykit/.storybook/preview.ts @@ -8,6 +8,9 @@ const preview: Preview = { parameters: { options: { theme, + storySort: { + order: ["Introduction", "*", "Example"], + }, }, backgrounds: { disable: true }, controls: { diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 2c46930..071a5b6 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -24,6 +24,7 @@ "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", "dev": "storybook dev -p 6006", + "build-storybook": "storybook build", "build-tailwind": "pnpm exec tailwindcss -o dist/build.css --minify", "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports && pnpm build-tailwind" }, diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index 51ccd4d..0f51061 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -6,6 +6,7 @@ import dts from "rollup-plugin-dts" import peerDepsExternal from "rollup-plugin-peer-deps-external" import postcss from "rollup-plugin-postcss" +// eslint-disable-next-line const packageJson = require("./package.json") const config = [ From 3d2c6e7140be39a17b76e62e571c843f41213b5f Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Mon, 6 May 2024 00:19:29 -0700 Subject: [PATCH 30/74] IPA Policies sizes --- .../components/IPAPolicies/IPAPolicies.tsx | 41 +++++++++++++++---- .../IPAPolicies/__docs__/Example.tsx | 9 +++- .../__docs__/IPAPolicies.stories.tsx | 2 + 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx b/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx index 093f370..a2347ca 100644 --- a/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx +++ b/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx @@ -1,6 +1,7 @@ import { POLICY_TYPE } from "@/lib/types" import { cn, getPolicyTypeByPILData } from "@/lib/utils" import { useIPAssetContext } from "@/providers" +import { cva } from "class-variance-authority" import { CircleCheck, CircleMinus } from "lucide-react" import { useState } from "react" import { FaCaretDown, FaCaretUp } from "react-icons/fa6" @@ -65,12 +66,38 @@ const ShowCannots = ({ type }: { type: string }) => { } } -function IPAPolicies() { +const policiesStyles = cva("flex flex-col w-full min-w-48", { + variants: { + size: { + small: "text-sm", + medium: "text-base", + large: "text-lg", + }, + }, +}) + +const listStyles = cva("flex flex-col", { + variants: { + size: { + small: "", + medium: "gap-1", + large: "gap-2", + }, + }, +}) + +export type IPAPoliciesProps = { + size?: "small" | "medium" | "large" +} + +function IPAPolicies({ size = "medium" }: IPAPoliciesProps) { const { policyData } = useIPAssetContext() const [expanded, setExpanded] = useState(0) + const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 + return policyData?.length ? ( -
+
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} {(policyData as unknown as any[])?.map((policy, index) => (
@@ -88,14 +115,14 @@ function IPAPolicies() { expanded === index ? "h-auto" : "h-0" )} > -
+
{ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( <>
Others Can
-
+
{ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => (
- + {can}
))} @@ -103,10 +130,10 @@ function IPAPolicies() { ) : null}
Others Cannot
-
+
{ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => (
- + {can}
))} diff --git a/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx b/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx index 0841dc5..fd9cfb5 100644 --- a/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx +++ b/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx @@ -6,13 +6,18 @@ import { Address } from "viem" import { IPAssetProvider } from "../../../providers" import IPAPolicies from "../IPAPolicies" -const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[0] as `0x${string}` }) => { +type Size = "small" | "medium" | "large" + +const Example: FC<{ ipId: Address; size: Size }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + size = "medium", +}) => { const queryClient = new QueryClient() return (
- +
diff --git a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx index e83d342..a538f05 100644 --- a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx +++ b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx @@ -26,6 +26,7 @@ export const Select: Story = { }, args: { ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", }, } export const Input: Story = { @@ -34,5 +35,6 @@ export const Input: Story = { }, args: { ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", }, } From 9b294190e0a55112e7c2b1f33b552424b506410e Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Mon, 6 May 2024 00:20:25 -0700 Subject: [PATCH 31/74] IPAssetWidget Policies size --- .../storykit/src/components/IPAssetWidget/IPAssetWidget.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx b/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx index 86f7350..3ff3c8b 100644 --- a/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx +++ b/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx @@ -328,7 +328,7 @@ function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; active return (
- +
) From 77fb93bdf7dc961e8de586f9d3c8bb883a7f9603 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Mon, 6 May 2024 00:38:44 -0700 Subject: [PATCH 32/74] merge --- src/components/IPAPolicies/IPAPolicies.tsx | 153 ------------------ .../__docs__/IPAPolicies.stories.tsx | 40 ----- src/components/IPAPolicies/index.tsx | 1 - src/stories/data/index.ts | 9 -- 4 files changed, 203 deletions(-) delete mode 100644 src/components/IPAPolicies/IPAPolicies.tsx delete mode 100644 src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx delete mode 100644 src/components/IPAPolicies/index.tsx delete mode 100644 src/stories/data/index.ts diff --git a/src/components/IPAPolicies/IPAPolicies.tsx b/src/components/IPAPolicies/IPAPolicies.tsx deleted file mode 100644 index a2347ca..0000000 --- a/src/components/IPAPolicies/IPAPolicies.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { POLICY_TYPE } from "@/lib/types" -import { cn, getPolicyTypeByPILData } from "@/lib/utils" -import { useIPAssetContext } from "@/providers" -import { cva } from "class-variance-authority" -import { CircleCheck, CircleMinus } from "lucide-react" -import { useState } from "react" -import { FaCaretDown, FaCaretUp } from "react-icons/fa6" - -import "../../global.css" - -const CANS = { - REMIX: "Remix this work", - INCLUDE: "Include this work in their own work(s)", - CREDIT: "Credit you appropriately", - DISTRIBUTE: "Distribute their remix anywhere", - PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", - CREATOR_CREDIT: "Credit you as the creator", - PUBLISH: "Display / publish the work in any medium", -} - -const ShowCans = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] - break - default: - return [] - break - } -} - -const CANNOTS = { - RESELL: "Resell your original work", - COMMERCIALIZE: "Commercialize the remix", - CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", - CLAIM: "Claim your work as their own", - REMIX: "Create remixes of the commercial use.", -} - -const ShowCannots = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] - break - default: - return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] - break - } -} - -const policiesStyles = cva("flex flex-col w-full min-w-48", { - variants: { - size: { - small: "text-sm", - medium: "text-base", - large: "text-lg", - }, - }, -}) - -const listStyles = cva("flex flex-col", { - variants: { - size: { - small: "", - medium: "gap-1", - large: "gap-2", - }, - }, -}) - -export type IPAPoliciesProps = { - size?: "small" | "medium" | "large" -} - -function IPAPolicies({ size = "medium" }: IPAPoliciesProps) { - const { policyData } = useIPAssetContext() - const [expanded, setExpanded] = useState(0) - - const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 - - return policyData?.length ? ( -
- {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {(policyData as unknown as any[])?.map((policy, index) => ( -
-
setExpanded(expanded === index ? null : index)} - > - {getPolicyTypeByPILData(policy.licenseTerms)} - {expanded === index ? : } -
- -
-
- {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( - <> -
Others Can
-
- {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( -
- - {can} -
- ))} -
- - ) : null} -
Others Cannot
-
- {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( -
- - {can} -
- ))} -
-
-
- - {index < policyData.length - 1 &&
} -
- ))} -
- ) : ( -
No Policy
- ) -} - -export default IPAPolicies diff --git a/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx b/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx deleted file mode 100644 index a538f05..0000000 --- a/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "Components/IPAPolicies", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} diff --git a/src/components/IPAPolicies/index.tsx b/src/components/IPAPolicies/index.tsx deleted file mode 100644 index c4bb6eb..0000000 --- a/src/components/IPAPolicies/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IPAPolicies } from "./IPAPolicies" diff --git a/src/stories/data/index.ts b/src/stories/data/index.ts deleted file mode 100644 index 484d782..0000000 --- a/src/stories/data/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const PREVIEW_IP_ASSETS = [ - "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", - "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", - "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", - - "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", - "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", - "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", -] From 66332145b2bbb166d5bd269840a387cef2ee51d9 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Mon, 6 May 2024 00:42:55 -0700 Subject: [PATCH 33/74] version --- .github/workflows/publish-package.yml | 2 +- packages/storykit/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 5fb5cd2..9c966cd 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - main + - feature/monorepo-merge jobs: publish-gpr: diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 071a5b6..a6e8751 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.11", + "version": "0.1.6-mrtest.12", "type": "module", "exports": { ".": { From facb767e50402ad90eca34c29d002f8e132e9a26 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Mon, 6 May 2024 00:49:37 -0700 Subject: [PATCH 34/74] version --- .github/workflows/publish-package.yml | 2 +- packages/storykit/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 9c966cd..5fb5cd2 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - feature/monorepo-merge + - main jobs: publish-gpr: diff --git a/packages/storykit/package.json b/packages/storykit/package.json index a6e8751..776610a 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering ", - "version": "0.1.6-mrtest.12", + "version": "0.1.7", "type": "module", "exports": { ".": { From aa5a132d9047a1ca9aa6e01743c5aa4820936eef Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 15:54:26 -0700 Subject: [PATCH 35/74] update component/group naming --- examples/next-app/components/HomePage.tsx | 16 ++++---- .../components/IPAGraph/__docs__/IPAGraph.mdx | 37 ------------------- .../storykit/src/components/IPAGraph/index.ts | 1 - .../IPAPolicies/__docs__/IPAPolicies.mdx | 32 ---------------- .../src/components/IPAPolicies/index.tsx | 1 - .../__docs__/IPARoyaltyChart.mdx | 32 ---------------- .../src/components/IPARoyaltyChart/index.tsx | 1 - .../__tests__/IPAssetWidget.test.tsx | 9 ----- .../src/components/IPAssetWidget/index.ts | 1 - .../IPAGraph.tsx => IpGraph/IpGraph.tsx} | 12 +++--- .../__docs__/Example.tsx | 10 ++--- .../components/IpGraph/__docs__/IpGraph.mdx | 37 +++++++++++++++++++ .../__docs__/IpGraph.stories.tsx} | 2 +- .../storykit/src/components/IpGraph/index.ts | 1 + .../IpPolicies.tsx} | 10 ++--- .../__docs__/Example.tsx | 10 ++--- .../IpPolicies/__docs__/IpPolicies.mdx | 32 ++++++++++++++++ .../__docs__/IpPolicies.stories.tsx} | 2 +- .../src/components/IpPolicies/index.tsx | 1 + .../IpRoyaltyPieChart.tsx} | 8 ++-- .../__docs__/Example.tsx | 10 ++--- .../__docs__/IpRoyaltyPieChart.mdx | 32 ++++++++++++++++ .../__docs__/IpRoyaltyPieChart.stories.tsx} | 2 +- .../components/IpRoyaltyPieChart/index.tsx | 1 + .../IpWidget.tsx} | 32 ++++++++-------- .../__docs__/Example.tsx | 4 +- .../__docs__/IpWidget.mdx} | 10 ++--- .../__docs__/IpWidget.stories.tsx} | 2 +- .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 +++++ .../storykit/src/components/IpWidget/index.ts | 1 + packages/storykit/src/components/index.ts | 8 ++-- .../IPAssetProvider/IPAssetProvider.tsx | 14 +++---- .../IPAssetProvider/__docs__/Example.tsx | 8 ++-- .../__docs__/IPAssetProvider.mdx | 20 +++++----- .../__docs__/IPAssetProvider.stories.tsx | 2 +- .../src/providers/IPAssetProvider/index.tsx | 2 +- packages/storykit/src/providers/index.ts | 2 +- .../storykit/src/stories/Introduction.mdx | 32 ++++++++-------- packages/storykit/src/stories/data/index.ts | 1 - 39 files changed, 223 insertions(+), 224 deletions(-) delete mode 100644 packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx delete mode 100644 packages/storykit/src/components/IPAGraph/index.ts delete mode 100644 packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx delete mode 100644 packages/storykit/src/components/IPAPolicies/index.tsx delete mode 100644 packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx delete mode 100644 packages/storykit/src/components/IPARoyaltyChart/index.tsx delete mode 100644 packages/storykit/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx delete mode 100644 packages/storykit/src/components/IPAssetWidget/index.ts rename packages/storykit/src/components/{IPAGraph/IPAGraph.tsx => IpGraph/IpGraph.tsx} (90%) rename packages/storykit/src/components/{IPAGraph => IpGraph}/__docs__/Example.tsx (73%) create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx rename packages/storykit/src/components/{IPAGraph/__docs__/IPAGraph.stories.tsx => IpGraph/__docs__/IpGraph.stories.tsx} (95%) create mode 100644 packages/storykit/src/components/IpGraph/index.ts rename packages/storykit/src/components/{IPAPolicies/IPAPolicies.tsx => IpPolicies/IpPolicies.tsx} (95%) rename packages/storykit/src/components/{IPAPolicies => IpPolicies}/__docs__/Example.tsx (75%) create mode 100644 packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx rename packages/storykit/src/components/{IPAPolicies/__docs__/IPAPolicies.stories.tsx => IpPolicies/__docs__/IpPolicies.stories.tsx} (95%) create mode 100644 packages/storykit/src/components/IpPolicies/index.tsx rename packages/storykit/src/components/{IPARoyaltyChart/IPARoyaltyChart.tsx => IpRoyaltyPieChart/IpRoyaltyPieChart.tsx} (94%) rename packages/storykit/src/components/{IPARoyaltyChart => IpRoyaltyPieChart}/__docs__/Example.tsx (71%) create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx rename packages/storykit/src/components/{IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx => IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx} (94%) create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx rename packages/storykit/src/components/{IPAssetWidget/IPAssetWidget.tsx => IpWidget/IpWidget.tsx} (95%) rename packages/storykit/src/components/{IPAssetWidget => IpWidget}/__docs__/Example.tsx (86%) rename packages/storykit/src/components/{IPAssetWidget/__docs__/IPAssetWidget.mdx => IpWidget/__docs__/IpWidget.mdx} (55%) rename packages/storykit/src/components/{IPAssetWidget/__docs__/IPAssetWidget.stories.tsx => IpWidget/__docs__/IpWidget.stories.tsx} (95%) create mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx create mode 100644 packages/storykit/src/components/IpWidget/index.ts diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index e623f5d..d4fcd43 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,6 +1,6 @@ "use client" -import { IPAssetProvider, useIPAssetContext, IPAssetWidget } from "@storyprotocol/storykit" +import { IpAssetProvider, useIpAssetContext, IpWidget } from "@storyprotocol/storykit" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" @@ -9,7 +9,7 @@ import styles from "./home.module.css" const queryClient = new QueryClient() const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIPAssetContext() + const { nftData, isNftDataLoading } = useIpAssetContext() return ( <> {isNftDataLoading &&
Fetching Asset...
} @@ -23,13 +23,13 @@ export default function Home() { <>
- {/* */} - + {/* */} + - {/* */} - {/* */} - - + {/* */} + {/* */} + +
diff --git a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx b/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx deleted file mode 100644 index 166f3ff..0000000 --- a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.mdx +++ /dev/null @@ -1,37 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IPAGraphStory from "./IPAGraph.stories" - - - -# IPA Graph - -Show Asset derivatives graph - -#### Example - - - - - -## Usage - -```ts -import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPAGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - - - - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **width**: _number_ - The width of the canvas -- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IPAGraph/index.ts b/packages/storykit/src/components/IPAGraph/index.ts deleted file mode 100644 index 64d2b1c..0000000 --- a/packages/storykit/src/components/IPAGraph/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IPAGraph } from "./IPAGraph" diff --git a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx b/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx deleted file mode 100644 index 4b6db76..0000000 --- a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IPAPoliciesStory from "./IPAPolicies.stories" - - - -# IPA Policy List - -Show Asset derivatives graph - -#### Example - - - - - -## Usage - -```ts -import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPAPolicies } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - - - - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IPAPolicies/index.tsx b/packages/storykit/src/components/IPAPolicies/index.tsx deleted file mode 100644 index c4bb6eb..0000000 --- a/packages/storykit/src/components/IPAPolicies/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IPAPolicies } from "./IPAPolicies" diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx b/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx deleted file mode 100644 index 90771c2..0000000 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IPARoyaltyChartStory from "./IPARoyaltyChart.stories" - - - -# IPA Royalty Chart - -Show Asset derivatives graph - -#### Example - - - - - -## Usage - -```ts -import { IPAssetProvider } from "@storyprotocol/storykit" -import { IPARoyaltyChart } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - - - - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IPARoyaltyChart/index.tsx b/packages/storykit/src/components/IPARoyaltyChart/index.tsx deleted file mode 100644 index da02f2b..0000000 --- a/packages/storykit/src/components/IPARoyaltyChart/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IPARoyaltyChart } from "./IPARoyaltyChart" diff --git a/packages/storykit/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx deleted file mode 100644 index c378014..0000000 --- a/packages/storykit/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import IPAssetWidget from "../IPAssetWidget" - -describe("IPAssetWidget", () => { - test("renders the IPAssetWidget component", () => { - render() - }) -}) diff --git a/packages/storykit/src/components/IPAssetWidget/index.ts b/packages/storykit/src/components/IPAssetWidget/index.ts deleted file mode 100644 index ae0aa99..0000000 --- a/packages/storykit/src/components/IPAssetWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IPAssetWidget } from "./IPAssetWidget" diff --git a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx similarity index 90% rename from packages/storykit/src/components/IPAGraph/IPAGraph.tsx rename to packages/storykit/src/components/IpGraph/IpGraph.tsx index 02cc9ea..80cf249 100644 --- a/packages/storykit/src/components/IPAGraph/IPAGraph.tsx +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -3,15 +3,15 @@ import React, { useEffect, useMemo, useState } from "react" import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" -import { useIPAssetContext } from "../../providers" +import { useIpAssetContext } from "../../providers" -export type IPAGraphProps = { +export type IpGraphProps = { width?: number height?: number } -function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { - const { assetData } = useIPAssetContext() +function IpGraph({ width = 500, height = 500 }: IpGraphProps) { + const { assetData } = useIpAssetContext() const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -84,6 +84,6 @@ function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { ) } -IPAGraph.displayName = "IPAGraph" +IpGraph.displayName = "IpGraph" -export default IPAGraph +export default IpGraph diff --git a/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx similarity index 73% rename from packages/storykit/src/components/IPAGraph/__docs__/Example.tsx rename to packages/storykit/src/components/IpGraph/__docs__/Example.tsx index a1242c3..6e98d12 100644 --- a/packages/storykit/src/components/IPAGraph/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx @@ -3,8 +3,8 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IPAssetProvider } from "../../../providers" -import IPAGraph from "../IPAGraph" +import { IpAssetProvider } from "../../../providers" +import IpGraph from "../IpGraph" const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, @@ -15,9 +15,9 @@ const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ return (
- - - + + +
) diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx new file mode 100644 index 0000000..6c4c138 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -0,0 +1,37 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpGraphStory from "./IpGraph.stories" + + + +# IPA Graph + +Show Asset derivatives graph + +#### Example + + + + + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + + + + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **width**: _number_ - The width of the canvas +- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx similarity index 95% rename from packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx rename to packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx index 86255ff..049a105 100644 --- a/packages/storykit/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "Components/IPAGraph", + title: "IP Assets/IpGraph", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts new file mode 100644 index 0000000..d038069 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/index.ts @@ -0,0 +1 @@ +export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx b/packages/storykit/src/components/IpPolicies/IpPolicies.tsx similarity index 95% rename from packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx rename to packages/storykit/src/components/IpPolicies/IpPolicies.tsx index a2347ca..441d808 100644 --- a/packages/storykit/src/components/IPAPolicies/IPAPolicies.tsx +++ b/packages/storykit/src/components/IpPolicies/IpPolicies.tsx @@ -1,6 +1,6 @@ import { POLICY_TYPE } from "@/lib/types" import { cn, getPolicyTypeByPILData } from "@/lib/utils" -import { useIPAssetContext } from "@/providers" +import { useIpAssetContext } from "@/providers" import { cva } from "class-variance-authority" import { CircleCheck, CircleMinus } from "lucide-react" import { useState } from "react" @@ -86,12 +86,12 @@ const listStyles = cva("flex flex-col", { }, }) -export type IPAPoliciesProps = { +export type IpPoliciesProps = { size?: "small" | "medium" | "large" } -function IPAPolicies({ size = "medium" }: IPAPoliciesProps) { - const { policyData } = useIPAssetContext() +function IpPolicies({ size = "medium" }: IpPoliciesProps) { + const { policyData } = useIpAssetContext() const [expanded, setExpanded] = useState(0) const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 @@ -150,4 +150,4 @@ function IPAPolicies({ size = "medium" }: IPAPoliciesProps) { ) } -export default IPAPolicies +export default IpPolicies diff --git a/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicies/__docs__/Example.tsx similarity index 75% rename from packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx rename to packages/storykit/src/components/IpPolicies/__docs__/Example.tsx index fd9cfb5..c0fb1d0 100644 --- a/packages/storykit/src/components/IPAPolicies/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpPolicies/__docs__/Example.tsx @@ -3,8 +3,8 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IPAssetProvider } from "../../../providers" -import IPAPolicies from "../IPAPolicies" +import { IpAssetProvider } from "../../../providers" +import IpPolicies from "../IpPolicies" type Size = "small" | "medium" | "large" @@ -16,9 +16,9 @@ const Example: FC<{ ipId: Address; size: Size }> = ({ return (
- - - + + +
) diff --git a/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx b/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx new file mode 100644 index 0000000..6080780 --- /dev/null +++ b/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpPoliciesStory from "./IpPolicies.stories" + + + +# IPA Policy List + +Show Asset derivatives graph + +#### Example + + + + + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpPolicies } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + + + + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx b/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.stories.tsx similarity index 95% rename from packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx rename to packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.stories.tsx index a538f05..6b3a14a 100644 --- a/packages/storykit/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx +++ b/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "Components/IPAPolicies", + title: "IP Assets/IpPolicies", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/components/IpPolicies/index.tsx b/packages/storykit/src/components/IpPolicies/index.tsx new file mode 100644 index 0000000..5775bb2 --- /dev/null +++ b/packages/storykit/src/components/IpPolicies/index.tsx @@ -0,0 +1 @@ +export { default as IpPolicies } from "./IpPolicies" diff --git a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx similarity index 94% rename from packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx rename to packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx index 295a858..88d4f93 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -1,12 +1,12 @@ import { shortenAddress } from "@/lib/utils" -import { useIPAssetContext } from "@/providers" +import { useIpAssetContext } from "@/providers" import { useEffect, useState } from "react" import { Address } from "viem" import "../../global.css" -function IPARoyaltyChart() { - const { royaltyData } = useIPAssetContext() +function IpRoyaltyPieChart() { + const { royaltyData } = useIpAssetContext() // eslint-disable-next-line @typescript-eslint/no-explicit-any const [Chart, setChart] = useState(null) @@ -99,4 +99,4 @@ function IPARoyaltyChart() { return
No Royalty Data
} -export default IPARoyaltyChart +export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx similarity index 71% rename from packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx rename to packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx index 1528c00..3719043 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx @@ -3,17 +3,17 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IPAssetProvider } from "../../../providers" -import IPARoyaltyChart from "../IPARoyaltyChart" +import { IpAssetProvider } from "../../../providers" +import IpRoyaltyPieChart from "../IpRoyaltyPieChart" const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { const queryClient = new QueryClient() return (
- - - + + +
) diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx new file mode 100644 index 0000000..7cfb091 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" + + + +# IPA Royalty Chart + +Show Asset derivatives graph + +#### Example + + + + + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpRoyaltyPieChart } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + + + + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx similarity index 94% rename from packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx rename to packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx index 0e0d7e6..c218f3f 100644 --- a/packages/storykit/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "Components/IPARoyaltyChart", + title: "IP Assets/IpRoyaltyPieChart", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx new file mode 100644 index 0000000..80b6af8 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx @@ -0,0 +1 @@ +export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx similarity index 95% rename from packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx rename to packages/storykit/src/components/IpWidget/IpWidget.tsx index 3ff3c8b..79072bc 100644 --- a/packages/storykit/src/components/IPAssetWidget/IPAssetWidget.tsx +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -8,12 +8,12 @@ import { Address } from "viem" import "../../global.css" import { cn, shortenAddress } from "../../lib/utils" -import { IPAssetProvider, useIPAssetContext } from "../../providers" -import { IPAGraph } from "../IPAGraph" -import { IPAPolicies } from "../IPAPolicies" -import { IPARoyaltyChart } from "../IPARoyaltyChart" +import { IpAssetProvider, useIpAssetContext } from "../../providers" +import { IpGraph } from "../IpGraph" +import { IpPolicies } from "../IpPolicies" +import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" -export type IPAssetWidgetProps = { +export type IpWidgetProps = { ipId: Address isBottomNav?: boolean } @@ -25,7 +25,7 @@ export const IPA_CARD_TABS = [ { id: "royalty", label: "Royalty" }, ] -const IPAssetWidget = ({ ipId, isBottomNav, ...rest }: IPAssetWidgetProps) => { +const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { return } @@ -45,12 +45,12 @@ function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBot ) return ( - +
{isBottomNav ? <_Card /> : <_Tabs />} {isBottomNav ? <_Tabs /> : <_Card />}
-
+
) } @@ -64,7 +64,7 @@ function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; i } function IPAssetDropdownMenu() { - const { assetData } = useIPAssetContext() + const { assetData } = useIpAssetContext() return (
@@ -236,7 +236,7 @@ function IPAssetDropdownMenu() { } function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { - const { nftData, assetData } = useIPAssetContext() + const { nftData, assetData } = useIpAssetContext() return (
@@ -328,20 +328,20 @@ function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; active return (
- +
) case "derivatives": return ( - + ) case "royalty": return ( - + ) default: @@ -350,7 +350,7 @@ function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; active } function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { - const { nftData, isAssetDataLoading, isNftDataLoading } = useIPAssetContext() + const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() const isLoading = isAssetDataLoading || isNftDataLoading @@ -400,6 +400,6 @@ function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { ) } -IPAssetWidget.displayName = "IPAssetWidget" +IpWidget.displayName = "IpWidget" -export default IPAssetWidget +export default IpWidget diff --git a/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx similarity index 86% rename from packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx rename to packages/storykit/src/components/IpWidget/__docs__/Example.tsx index 1dd0c12..c23faf9 100644 --- a/packages/storykit/src/components/IPAssetWidget/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx @@ -3,7 +3,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import IPAssetWidget from "../IPAssetWidget" +import IpWidget from "../IpWidget" const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", @@ -20,7 +20,7 @@ const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ height: "100%", }} > - +
) diff --git a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx similarity index 55% rename from packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx rename to packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx index 3b2f904..a41c254 100644 --- a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx @@ -1,8 +1,8 @@ import { Canvas, Controls, Meta } from "@storybook/blocks" -import * as IPAssetWidgetStory from "./IPAssetWidget.stories" +import * as IpWidgetStory from "./IpWidget.stories" - + # IP Asset Widget @@ -10,18 +10,18 @@ Button component with different props. #### Example - + ## Usage ```ts -import { IPAssetWidget } from "@storyprotocol/storykit" +import { IpWidget } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - + ); }; diff --git a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx similarity index 95% rename from packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx rename to packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx index fa72f35..0385ca9 100644 --- a/packages/storykit/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "Components/IPAssetWidget", + title: "IP Assets/IpWidget", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx new file mode 100644 index 0000000..86d2dd2 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import IpWidget from "../IpWidget" + +describe("IpWidget", () => { + test("renders the IpWidget component", () => { + render() + }) +}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts new file mode 100644 index 0000000..00d52ff --- /dev/null +++ b/packages/storykit/src/components/IpWidget/index.ts @@ -0,0 +1 @@ +export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index aa5a038..2e3405b 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -1,5 +1,5 @@ export * from "./Button" -export * from "./IPAssetWidget" -export * from "./IPAGraph" -export * from "./IPAPolicies" -export * from "./IPARoyaltyChart" +export * from "./IpWidget" +export * from "./IpGraph" +export * from "./IpPolicies" +export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx index 9631ebf..3375937 100644 --- a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx @@ -8,7 +8,7 @@ import { NFTMetadata } from "../../lib/simplehash/types/simplehash" import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" import { camelize } from "../../lib/utils" -const IPAssetContext = React.createContext<{ +const IpAssetContext = React.createContext<{ // activeTab: string // setActiveTab: React.Dispatch> assetData: Asset | undefined @@ -25,7 +25,7 @@ const IPAssetContext = React.createContext<{ isRoyaltyDataLoading: boolean } | null>(null) -export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { +export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { // Fetch asset data const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ queryKey: [RESOURCE_TYPE.ASSET, ipId], @@ -121,7 +121,7 @@ export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; }) return ( - {children} - + ) } -export const useIPAssetContext = () => { - const context = React.useContext(IPAssetContext) +export const useIpAssetContext = () => { + const context = React.useContext(IpAssetContext) if (!context) { - throw new Error("useAccount must be used within an IPAssetProvider") + throw new Error("useAccount must be used within an IpAssetProvider") } return context } diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx index 0135590..a84a01b 100644 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx @@ -2,7 +2,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IPAssetProvider, useIPAssetContext } from "../IPAssetProvider" +import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { const queryClient = new QueryClient() @@ -16,16 +16,16 @@ const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d height: "100%", }} > - + - +
) } const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIPAssetContext() + const { nftData, isNftDataLoading } = useIpAssetContext() return ( <> {isNftDataLoading &&
Fetching Asset...
} diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx index 28ae64c..e42fb0c 100644 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx +++ b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx @@ -1,32 +1,32 @@ import { Canvas, Controls, Meta } from "@storybook/blocks" -import * as IPAssetProviderStory from "./IPAssetProvider.stories" +import * as IpAssetProviderStory from "./IpAssetProvider.stories" - + -# IPAssetProvider +# IpAssetProvider Provides IP Asset data to children components. #### Example - + ## Usage ```ts -// wrap your component with the IPAssetProvider +// wrap your component with the IpAssetProvider -import { IPAssetProvider } from "@storyprotocol/storykit" +import { IpAssetProvider } from "@storyprotocol/storykit" import ExampleComponent from './ExampleComponent' const ExamplePage = () => { return ( - + - + ); }; @@ -36,11 +36,11 @@ export default ExamplePage; ```ts // in your component file, context provides IP asset state -import { useIPAssetContext } from "@storyprotocol/storykit" +import { useIpAssetContext } from "@storyprotocol/storykit" const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIPAssetContext() + const { nftData, isNftDataLoading } = useIpAssetContext() return (
diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx index 5722447..cd7231b 100644 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "Providers/IPAssetProvider", + title: "Providers/IpAssetProvider", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/providers/IPAssetProvider/index.tsx b/packages/storykit/src/providers/IPAssetProvider/index.tsx index aa0e865..fa172d4 100644 --- a/packages/storykit/src/providers/IPAssetProvider/index.tsx +++ b/packages/storykit/src/providers/IPAssetProvider/index.tsx @@ -1 +1 @@ -export * from "./IPAssetProvider" +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts index aa0e865..fa172d4 100644 --- a/packages/storykit/src/providers/index.ts +++ b/packages/storykit/src/providers/index.ts @@ -1 +1 @@ -export * from "./IPAssetProvider" +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index f2c1c75..7cab8ae 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -73,23 +73,23 @@ export default function Providers({ children }) { ``` -### The IPAssetProvider +### The IpAssetProvider -The IPAssetProvider provides IP Asset data to child components. +The IpAssetProvider provides IP Asset data to child components. ```typescript -import { IPAssetProvider, useIPAssetContext } from "@storyprotocol/storykit" +import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - + - + ); }; const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIPAssetContext() + const { nftData, isNftDataLoading } = useIpAssetContext() return (
@@ -103,32 +103,32 @@ const ExampleComponent = () => { }; ``` -### The IPAGraph +### The IpGraph -Some components require the IPAssetProvider to supply asset data +Some components require the IpAssetProvider to supply asset data ```typescript -import { IPAssetProvider, IPAGraph } from "@storyprotocol/storykit" +import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - - - + + + ); }; ``` -### The IPAssetWidget +### The IpWidget -The IPAssetProvider is already included in the IPAssetWidget +The IpAssetProvider is already included in the IpWidget ```typescript -import { IPAssetWidget } from "@storyprotocol/storykit" +import { IpWidget } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - + ) } diff --git a/packages/storykit/src/stories/data/index.ts b/packages/storykit/src/stories/data/index.ts index 484d782..ec9074b 100644 --- a/packages/storykit/src/stories/data/index.ts +++ b/packages/storykit/src/stories/data/index.ts @@ -2,7 +2,6 @@ export const PREVIEW_IP_ASSETS = [ "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", - "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", From 5068fcbff9aff81d9edbb9261c759daafc601534 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 16:22:05 -0700 Subject: [PATCH 36/74] update docs --- .../components/IpGraph/__docs__/IpGraph.mdx | 8 ++++++ .../__docs__/IpRoyaltyPieChart.mdx | 8 ++++++ .../storykit/src/stories/Introduction.mdx | 25 ++++++++++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx index 6c4c138..939b29c 100644 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -14,6 +14,14 @@ Show Asset derivatives graph +## Dependencies + +The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). + +```bash +npm install react-force-graph-2d +``` + ## Usage ```ts diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx index 7cfb091..9be0e54 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -14,6 +14,14 @@ Show Asset derivatives graph +## Dependencies + +The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). + +```bash +npm install react-apexcharts +``` + ## Usage ```ts diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index 7cab8ae..92afdfb 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -12,13 +12,18 @@ _Storykit is a private package so you need repo access and a personal access tok 1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) -2 . Login with Story Protocol scope: +2 . Create an `.npmrc` file in the root of your project and add the following: ```bash -npm login --scope=@storyprotocol --registry=https://npm.pkg.github.com +//npm.pkg.github.com/:_authToken=$NPM_TOKEN +@storyprotocol/storykit:registry=https://npm.pkg.github.com ``` -3 . Use your github username and personal access token (for password) to login +3 . Add your personal access token to your environment variables + +```bash +NPM_TOKEN=your_personal_access_token +``` 4 . Install the package and the required react-query dependencies @@ -26,6 +31,16 @@ npm login --scope=@storyprotocol --registry=https://npm.pkg.github.com npm install @storyprotocol/storykit @tanstack/react-query ``` +## Dependencies + +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. + +Some components have additional dependencies, see the individual component docs for more information or install them all at once with: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d +``` + ## Usage Using Storykit in your React app @@ -41,6 +56,8 @@ import "@storyprotocol/storykit/dist/build.css" Don't forget that react query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, you can do this once at the root of the app. ```typescript +// app/layout.tsx + import Providers from "./Providers" import "@storyprotocol/storykit/dist/build.css" @@ -57,6 +74,8 @@ export default function Layout({children}) { ``` ```typescript +// app/Providers.tsx + "use client" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" From c373392341282c5aa65c3a86b41f5f3e97f1a52e Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 16:33:16 -0700 Subject: [PATCH 37/74] update policies component name --- .../storykit/src/components/IpPolicies/index.tsx | 1 - .../IpPolicyAccordion.tsx} | 6 +++--- .../__docs__/Example.tsx | 4 ++-- .../__docs__/IpPolicyAccordion.mdx} | 14 +++++++------- .../__docs__/IpPolicyAccordion.stories.tsx} | 2 +- .../src/components/IpPolicyAccordion/index.tsx | 1 + .../storykit/src/components/IpWidget/IpWidget.tsx | 4 ++-- packages/storykit/src/components/index.ts | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 packages/storykit/src/components/IpPolicies/index.tsx rename packages/storykit/src/components/{IpPolicies/IpPolicies.tsx => IpPolicyAccordion/IpPolicyAccordion.tsx} (97%) rename packages/storykit/src/components/{IpPolicies => IpPolicyAccordion}/__docs__/Example.tsx (88%) rename packages/storykit/src/components/{IpPolicies/__docs__/IpPolicies.mdx => IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx} (51%) rename packages/storykit/src/components/{IpPolicies/__docs__/IpPolicies.stories.tsx => IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx} (94%) create mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx diff --git a/packages/storykit/src/components/IpPolicies/index.tsx b/packages/storykit/src/components/IpPolicies/index.tsx deleted file mode 100644 index 5775bb2..0000000 --- a/packages/storykit/src/components/IpPolicies/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpPolicies } from "./IpPolicies" diff --git a/packages/storykit/src/components/IpPolicies/IpPolicies.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx similarity index 97% rename from packages/storykit/src/components/IpPolicies/IpPolicies.tsx rename to packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx index 441d808..e034a01 100644 --- a/packages/storykit/src/components/IpPolicies/IpPolicies.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -86,11 +86,11 @@ const listStyles = cva("flex flex-col", { }, }) -export type IpPoliciesProps = { +export type IpPolicyAccordionProps = { size?: "small" | "medium" | "large" } -function IpPolicies({ size = "medium" }: IpPoliciesProps) { +function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { const { policyData } = useIpAssetContext() const [expanded, setExpanded] = useState(0) @@ -150,4 +150,4 @@ function IpPolicies({ size = "medium" }: IpPoliciesProps) { ) } -export default IpPolicies +export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicies/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx similarity index 88% rename from packages/storykit/src/components/IpPolicies/__docs__/Example.tsx rename to packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx index c0fb1d0..5a4a58f 100644 --- a/packages/storykit/src/components/IpPolicies/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx @@ -4,7 +4,7 @@ import React, { FC } from "react" import { Address } from "viem" import { IpAssetProvider } from "../../../providers" -import IpPolicies from "../IpPolicies" +import IpPolicyAccordion from "../IpPolicyAccordion" type Size = "small" | "medium" | "large" @@ -17,7 +17,7 @@ const Example: FC<{ ipId: Address; size: Size }> = ({
- +
diff --git a/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx similarity index 51% rename from packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx rename to packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx index 6080780..fa8a1c9 100644 --- a/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.mdx +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx @@ -1,16 +1,16 @@ import { Canvas, Controls, Meta } from "@storybook/blocks" -import * as IpPoliciesStory from "./IpPolicies.stories" +import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" - + -# IPA Policy List +# IpPolicyAccordion -Show Asset derivatives graph +Displays the IP Asset policies in a readable format (cans & cannots). #### Example - + @@ -18,12 +18,12 @@ Show Asset derivatives graph ```ts import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpPolicies } from "@storyprotocol/storykit" +import { IpPolicyAccordion } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - + ); }; diff --git a/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx similarity index 94% rename from packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.stories.tsx rename to packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx index 6b3a14a..00db34b 100644 --- a/packages/storykit/src/components/IpPolicies/__docs__/IpPolicies.stories.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "IP Assets/IpPolicies", + title: "IP Assets/IpPolicyAccordion", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx new file mode 100644 index 0000000..f05ad5a --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/index.tsx @@ -0,0 +1 @@ +export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx index 79072bc..7efcb60 100644 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -10,7 +10,7 @@ import "../../global.css" import { cn, shortenAddress } from "../../lib/utils" import { IpAssetProvider, useIpAssetContext } from "../../providers" import { IpGraph } from "../IpGraph" -import { IpPolicies } from "../IpPolicies" +import { IpPolicyAccordion } from "../IpPolicyAccordion" import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" export type IpWidgetProps = { @@ -328,7 +328,7 @@ function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; active return (
- +
) diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts index 2e3405b..db39fd2 100644 --- a/packages/storykit/src/components/index.ts +++ b/packages/storykit/src/components/index.ts @@ -1,5 +1,5 @@ export * from "./Button" export * from "./IpWidget" export * from "./IpGraph" -export * from "./IpPolicies" +export * from "./IpPolicyAccordion" export * from "./IpRoyaltyPieChart" From d881b515a8f4e88098067531fb012a168ef0b3f1 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 16:33:25 -0700 Subject: [PATCH 38/74] update documentation --- packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx | 4 ++-- .../IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx | 4 ++-- .../storykit/src/components/IpWidget/__docs__/IpWidget.mdx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx index 939b29c..ad8a772 100644 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -4,9 +4,9 @@ import * as IpGraphStory from "./IpGraph.stories" -# IPA Graph +# IpGraph -Show Asset derivatives graph +Show IP Asset derivatives graph. #### Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx index 9be0e54..7bb1ab0 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -4,9 +4,9 @@ import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" -# IPA Royalty Chart +# IpRoyaltyPieChart -Show Asset derivatives graph +Displays the divisions of royalties for an IP Asset in a pie chart. #### Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx index a41c254..e7797aa 100644 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx @@ -6,7 +6,7 @@ import * as IpWidgetStory from "./IpWidget.stories" # IP Asset Widget -Button component with different props. +IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. #### Example From 5b522b5a53f3a5cda0a40300f0f96faf8e63f680 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 20:18:16 -0700 Subject: [PATCH 39/74] embed styles with rollup --- packages/storykit/package.json | 8 ++-- packages/storykit/postcss.config.cjs | 7 ++++ packages/storykit/postcss.config.mjs | 6 --- packages/storykit/rollup.config.js | 18 ++++++++- pnpm-lock.yaml | 55 ++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 11 deletions(-) create mode 100644 packages/storykit/postcss.config.cjs delete mode 100644 packages/storykit/postcss.config.mjs diff --git a/packages/storykit/package.json b/packages/storykit/package.json index 776610a..ee29996 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -9,8 +9,7 @@ "default": "./dist/storyprotocol-storykit.cjs.js", "types": "./dist/types.d.ts" }, - "./package.json": "./package.json", - "./dist/build.css": "./dist/build.css" + "./package.json": "./package.json" }, "types": "dist/types.d.ts", "files": [ @@ -25,8 +24,7 @@ "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", "dev": "storybook dev -p 6006", "build-storybook": "storybook build", - "build-tailwind": "pnpm exec tailwindcss -o dist/build.css --minify", - "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports && pnpm build-tailwind" + "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports" }, "prettier": "@storykit/prettier-config", "dependencies": { @@ -65,6 +63,7 @@ "@storykit/eslint-config": "workspace:*", "@storykit/prettier-config": "workspace:*", "@storykit/typescript-config": "workspace:*", + "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", "@tanstack/react-query": "^5.25.0", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", @@ -82,6 +81,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-storybook": "^0.8.0", "postcss": "^8.4.38", + "postcss-nesting": "^12.1.2", "prettier": "^3.2.5", "prop-types": "^15.8.1", "react": "^18.2.0", diff --git a/packages/storykit/postcss.config.cjs b/packages/storykit/postcss.config.cjs new file mode 100644 index 0000000..9615734 --- /dev/null +++ b/packages/storykit/postcss.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + "@tailwindcss/nesting": "postcss-nesting", + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/storykit/postcss.config.mjs b/packages/storykit/postcss.config.mjs deleted file mode 100644 index 2e7af2b..0000000 --- a/packages/storykit/postcss.config.mjs +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js index 0f51061..45f453e 100644 --- a/packages/storykit/rollup.config.js +++ b/packages/storykit/rollup.config.js @@ -24,7 +24,23 @@ const config = [ sourcemap: true, }, ], - plugins: [peerDepsExternal(), resolve(), commonjs(), typescript(), terser(), postcss()], + plugins: [ + peerDepsExternal(), + resolve(), + commonjs(), + typescript(), + terser(), + postcss({ + config: { + path: "./postcss.config.cjs", + }, + extensions: [".css"], + minimize: true, + inject: { + insertAt: "top", + }, + }), + ], external: ["react/jsx-runtime"], }, { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6f4d06..779575b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -222,6 +222,9 @@ importers: '@storykit/typescript-config': specifier: workspace:* version: link:../config-typescript + '@tailwindcss/nesting': + specifier: 0.0.0-insiders.565cd3e + version: 0.0.0-insiders.565cd3e(postcss@8.4.38) '@tanstack/react-query': specifier: ^5.25.0 version: 5.32.0(react@18.3.0) @@ -273,6 +276,9 @@ importers: postcss: specifier: ^8.4.38 version: 8.4.38 + postcss-nesting: + specifier: ^12.1.2 + version: 12.1.2(postcss@8.4.38) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -2062,6 +2068,15 @@ packages: postcss: 8.4.38 dev: true + /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.16 + dev: true + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.16): resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} engines: {node: ^14 || ^16 || >=18} @@ -2071,6 +2086,15 @@ packages: postcss-selector-parser: 6.0.16 dev: true + /@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.16 + dev: true + /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -4581,6 +4605,15 @@ packages: tslib: 2.6.2 dev: false + /@tailwindcss/nesting@0.0.0-insiders.565cd3e(postcss@8.4.38): + resolution: {integrity: sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-nested: 5.0.6(postcss@8.4.38) + dev: true + /@tanstack/query-core@5.32.0: resolution: {integrity: sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw==} @@ -13454,6 +13487,16 @@ packages: string-hash: 1.1.3 dev: true + /postcss-nested@5.0.6(postcss@8.4.38): + resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + /postcss-nested@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} @@ -13474,6 +13517,18 @@ packages: postcss-selector-parser: 6.0.16 dev: true + /postcss-nesting@12.1.2(postcss@8.4.38): + resolution: {integrity: sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.16) + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.38): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} From 14e3da8d5e9a24beb5021cc869d208e656181da1 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 20:24:22 -0700 Subject: [PATCH 40/74] update documentation --- packages/storykit/src/stories/Introduction.mdx | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index 92afdfb..a1d44d0 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -35,7 +35,12 @@ npm install @storyprotocol/storykit @tanstack/react-query Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. -Some components have additional dependencies, see the individual component docs for more information or install them all at once with: +Some components have additional dependencies including: + +- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) +- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) + +See the individual component docs ro see if they require an additional dependency or install them all at once with: ```bash npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d @@ -45,23 +50,15 @@ npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react Using Storykit in your React app -### Import the css - -```typescript -import "@storyprotocol/storykit/dist/build.css" -``` - ### Include React Query -Don't forget that react query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, you can do this once at the root of the app. +React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. ```typescript // app/layout.tsx import Providers from "./Providers" -import "@storyprotocol/storykit/dist/build.css" - export default function Layout({children}) { return ( From 0434817be14b6c205a19442fb63eebea5abaf028 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 20:25:31 -0700 Subject: [PATCH 41/74] extract ip-policy-accordion styles --- .../IpPolicyAccordion/IpPolicyAccordion.tsx | 57 ++++++--------- .../components/IpPolicyAccordion/styles.css | 70 +++++++++++++++++++ 2 files changed, 90 insertions(+), 37 deletions(-) create mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx index e034a01..26eaf5d 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -7,6 +7,7 @@ import { useState } from "react" import { FaCaretDown, FaCaretUp } from "react-icons/fa6" import "../../global.css" +import "./styles.css" const CANS = { REMIX: "Remix this work", @@ -66,22 +67,12 @@ const ShowCannots = ({ type }: { type: string }) => { } } -const policiesStyles = cva("flex flex-col w-full min-w-48", { +const policiesStyles = cva("", { variants: { size: { - small: "text-sm", - medium: "text-base", - large: "text-lg", - }, - }, -}) - -const listStyles = cva("flex flex-col", { - variants: { - size: { - small: "", - medium: "gap-1", - large: "gap-2", + small: "small", + medium: "medium", + large: "large", }, }, }) @@ -97,43 +88,35 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 return policyData?.length ? ( -
+
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} {(policyData as unknown as any[])?.map((policy, index) => ( -
-
setExpanded(expanded === index ? null : index)} - > +
+
setExpanded(expanded === index ? null : index)}> {getPolicyTypeByPILData(policy.licenseTerms)} {expanded === index ? : }
-
-
+
+
{ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( <> -
Others Can
-
+
Others Can
+
{ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( -
- +
+ {can}
))}
) : null} -
Others Cannot
-
+
Others Cannot
+
{ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( -
- +
+ {can}
))} @@ -141,12 +124,12 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) {
- {index < policyData.length - 1 &&
} + {index < policyData.length - 1 &&
}
))}
) : ( -
No Policy
+
No Policy
) } diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css new file mode 100644 index 0000000..7916fc8 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -0,0 +1,70 @@ +.ip-policy-accordion { + @apply flex flex-col w-full min-w-48; + + .policy-item { + @apply flex flex-col w-full; + } + + .policy-item-header { + @apply flex w-full items-center justify-between cursor-pointer; + } + + .policy-item-list { + @apply flex w-full items-center justify-between overflow-hidden h-0; + + &.policy-item-list-expanded { + @apply h-auto; + } + } + + .policy-properties { + @apply flex flex-col pt-2 gap-2; + } + + .policy-item-list-title { + @apply font-bold; + } + + .policy-list { + @apply flex flex-col; + } + + .policy-property { + @apply flex w-full items-center gap-2; + + &.policy-property-can > svg { + @apply text-green-500; + } + + &.policy-property-cannot > svg { + @apply text-red-500; + } + } + + .policy-divider { + @apply border-b border-gray-200 w-full my-2; + } + + &.small { + @apply text-sm; + } + + &.medium { + @apply text-base; + + .policy-list { + @apply gap-1; + } + } + + &.large { + @apply text-lg; + .policy-list { + @apply gap-2; + } + } + + &.no-policy { + @apply text-slate-400; + } +} From 6aaa66e01317a3fc498964dee0c03e6b1234c56f Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 20:25:40 -0700 Subject: [PATCH 42/74] update example --- examples/next-app/app/page.tsx | 2 -- examples/next-app/components/HomePage.tsx | 23 +++++++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/examples/next-app/app/page.tsx b/examples/next-app/app/page.tsx index 322af1f..abb3363 100644 --- a/examples/next-app/app/page.tsx +++ b/examples/next-app/app/page.tsx @@ -1,8 +1,6 @@ -import "@storyprotocol/storykit/dist/build.css" import HomePage from "../components/HomePage" - export default function Home() { return (
diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index d4fcd43..f381ac9 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,6 +1,6 @@ "use client" -import { IpAssetProvider, useIpAssetContext, IpWidget } from "@storyprotocol/storykit" +import { IpAssetProvider, useIpAssetContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph } from "@storyprotocol/storykit" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" @@ -23,12 +23,23 @@ export default function Home() { <>
- {/* */} - - - {/* */} - {/* */} + + + + + {/* + + */} + + {/* + + */} + + {/* + + */} +
From e270593a304d9c2534281e98f0d5e71ddde31159 Mon Sep 17 00:00:00 2001 From: samfairbairn Date: Tue, 7 May 2024 20:39:05 -0700 Subject: [PATCH 43/74] remove components, provider --- .../storykit/src/components/Button/Button.tsx | 47 -- .../src/components/Button/__docs__/Button.mdx | 37 -- .../Button/__docs__/Button.stories.tsx | 35 -- .../Button/__tests__/Button.test.tsx | 9 - .../storykit/src/components/Button/index.ts | 1 - .../src/components/IpGraph/IpGraph.tsx | 89 ---- .../components/IpGraph/__docs__/Example.tsx | 26 -- .../components/IpGraph/__docs__/IpGraph.mdx | 45 -- .../IpGraph/__docs__/IpGraph.stories.tsx | 38 -- .../storykit/src/components/IpGraph/index.ts | 1 - .../IpPolicyAccordion/IpPolicyAccordion.tsx | 136 ------ .../IpPolicyAccordion/__docs__/Example.tsx | 27 -- .../__docs__/IpPolicyAccordion.mdx | 32 -- .../__docs__/IpPolicyAccordion.stories.tsx | 40 -- .../components/IpPolicyAccordion/index.tsx | 1 - .../components/IpPolicyAccordion/styles.css | 70 --- .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 102 ----- .../IpRoyaltyPieChart/__docs__/Example.tsx | 22 - .../__docs__/IpRoyaltyPieChart.mdx | 40 -- .../__docs__/IpRoyaltyPieChart.stories.tsx | 38 -- .../components/IpRoyaltyPieChart/index.tsx | 1 - .../src/components/IpWidget/IpWidget.tsx | 405 ------------------ .../components/IpWidget/__docs__/Example.tsx | 29 -- .../components/IpWidget/__docs__/IpWidget.mdx | 34 -- .../IpWidget/__docs__/IpWidget.stories.tsx | 41 -- .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 - .../storykit/src/components/IpWidget/index.ts | 1 - packages/storykit/src/components/index.ts | 5 - .../IPAssetProvider/IPAssetProvider.tsx | 153 ------- .../IPAssetProvider/__docs__/Example.tsx | 59 --- .../__docs__/IPAssetProvider.mdx | 62 --- .../__docs__/IPAssetProvider.stories.tsx | 49 --- .../src/providers/IPAssetProvider/index.tsx | 1 - packages/storykit/src/providers/index.ts | 1 - 34 files changed, 1686 deletions(-) delete mode 100644 packages/storykit/src/components/Button/Button.tsx delete mode 100644 packages/storykit/src/components/Button/__docs__/Button.mdx delete mode 100644 packages/storykit/src/components/Button/__docs__/Button.stories.tsx delete mode 100644 packages/storykit/src/components/Button/__tests__/Button.test.tsx delete mode 100644 packages/storykit/src/components/Button/index.ts delete mode 100644 packages/storykit/src/components/IpGraph/IpGraph.tsx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx delete mode 100644 packages/storykit/src/components/IpGraph/index.ts delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx delete mode 100644 packages/storykit/src/components/IpWidget/IpWidget.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx delete mode 100644 packages/storykit/src/components/IpWidget/index.ts delete mode 100644 packages/storykit/src/components/index.ts delete mode 100644 packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx delete mode 100644 packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx delete mode 100644 packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx delete mode 100644 packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx delete mode 100644 packages/storykit/src/providers/IPAssetProvider/index.tsx delete mode 100644 packages/storykit/src/providers/index.ts diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx deleted file mode 100644 index 41c8a15..0000000 --- a/packages/storykit/src/components/Button/Button.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { cn } from "@/lib/utils" -import { type VariantProps, cva } from "class-variance-authority" -import React from "react" - -import "../../global.css" - -const button = cva( - "rounded-md border px-4 py-2 focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50", - { - variants: { - variant: { - primary: - "border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white", - secondary: "border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white", - }, - size: { - small: "text-sm", - medium: "text-base", - large: "text-lg", - }, - }, - defaultVariants: { - variant: "primary", - size: "medium", - }, - } -) - -export type ButtonProps = React.ButtonHTMLAttributes & - VariantProps & { - variant?: "primary" | "secondary" - size?: "small" | "medium" | "large" - } - -type ButtonRef = React.ForwardedRef - -const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { - return ( - - ) -}) - -Button.displayName = "Button" - -export default Button diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx deleted file mode 100644 index d204fc3..0000000 --- a/packages/storykit/src/components/Button/__docs__/Button.mdx +++ /dev/null @@ -1,37 +0,0 @@ -import * as ButtonStory from "./Button.stories" -import { Canvas, Meta } from "@storybook/blocks" - - - -# Button - -Button component with different props. - -#### Example - - - -## Usage - -```ts -import { Button } from "@storyprotocol/storykit"; - -const Example = () => { - return ( - - ); -}; - -export default Example; -``` - -#### Arguments - -- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. -- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. -- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. -- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx deleted file mode 100644 index 5661c8e..0000000 --- a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react" - -import Button from "../Button" - -const meta = { - title: "Example/Button", - component: Button, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Primary: Story = { - args: { - children: "Button", - variant: "primary", - size: "medium", - disabled: false, - }, -} - -export const Secondary: Story = { - args: { - children: "Button", - variant: "secondary", - size: "medium", - disabled: false, - }, -} diff --git a/packages/storykit/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx deleted file mode 100644 index 8f57dae..0000000 --- a/packages/storykit/src/components/Button/__tests__/Button.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import Button from "../Button" - -describe("Button", () => { - test("renders the Button component", () => { - render() - }) -}) diff --git a/packages/storykit/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts deleted file mode 100644 index ae0694c..0000000 --- a/packages/storykit/src/components/Button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Button } from "./Button" diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx deleted file mode 100644 index 80cf249..0000000 --- a/packages/storykit/src/components/IpGraph/IpGraph.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react" - -import "../../global.css" -import { convertAssetToGraphFormat } from "../../lib/graph" -import { Asset } from "../../lib/types" -import { useIpAssetContext } from "../../providers" - -export type IpGraphProps = { - width?: number - height?: number -} - -function IpGraph({ width = 500, height = 500 }: IpGraphProps) { - const { assetData } = useIpAssetContext() - const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [ForceGraph, setForceGraph] = useState(null) - - useEffect(() => { - // ForceGraph will break SSR, and needs to be loaded dynamically - async function importForceGraphModule() { - const fg = await import("react-force-graph-2d") - setForceGraph(fg.default) - } - importForceGraphModule() - }, []) - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { - const isParent = node.level < 0 - const isSelf = node.level === 0 - const isChild = node.level > 0 - - let label - - if (node.isRoot) { - if (isParent) { - label = `${node.name} (Root / Parent)` - } else { - label = `${node.name} (Root)` - } - } else if (isParent) { - label = `${node.name} (Parent)` - } else if (isChild) { - label = `${node.name} (Child)` - } else { - label = `${node.name}` - } - - const fontSize = 12 / globalScale - const circleRadius = isSelf ? 6 : 3 // Radius of the circle - - // Set the font for the text - ctx.font = `${fontSize}px Sans-Serif` - - // Draw the circle - ctx.beginPath() - ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) - if (isSelf) { - ctx.fillStyle = "black" // Color of the circle - } else if (isParent) { - ctx.fillStyle = "grey" // Color of the circle - } else { - ctx.fillStyle = "lightgrey" // Color of the circle - } - - ctx.fill() - if (isSelf) { - ctx.strokeStyle = "lightblue" // Border color of the circle - ctx.stroke() - } - - // Draw the text next to the circle - ctx.fillText(label, node.x, node.y + 10) - } - - return ( -
- {ForceGraph ? ( - - ) : null} -
- ) -} - -IpGraph.displayName = "IpGraph" - -export default IpGraph diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx deleted file mode 100644 index 6e98d12..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpGraph from "../IpGraph" - -const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ - ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, - width = 400, - height = 300, -}) => { - const queryClient = new QueryClient() - return ( - -
- - - -
-
- ) -} - -export default Example diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx deleted file mode 100644 index ad8a772..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx +++ /dev/null @@ -1,45 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpGraphStory from "./IpGraph.stories" - - - -# IpGraph - -Show IP Asset derivatives graph. - -#### Example - - - - - -## Dependencies - -The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). - -```bash -npm install react-force-graph-2d -``` - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - - - - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **width**: _number_ - The width of the canvas -- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx deleted file mode 100644 index 049a105..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpGraph", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts deleted file mode 100644 index d038069..0000000 --- a/packages/storykit/src/components/IpGraph/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx deleted file mode 100644 index 26eaf5d..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import { POLICY_TYPE } from "@/lib/types" -import { cn, getPolicyTypeByPILData } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" -import { cva } from "class-variance-authority" -import { CircleCheck, CircleMinus } from "lucide-react" -import { useState } from "react" -import { FaCaretDown, FaCaretUp } from "react-icons/fa6" - -import "../../global.css" -import "./styles.css" - -const CANS = { - REMIX: "Remix this work", - INCLUDE: "Include this work in their own work(s)", - CREDIT: "Credit you appropriately", - DISTRIBUTE: "Distribute their remix anywhere", - PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", - CREATOR_CREDIT: "Credit you as the creator", - PUBLISH: "Display / publish the work in any medium", -} - -const ShowCans = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] - break - default: - return [] - break - } -} - -const CANNOTS = { - RESELL: "Resell your original work", - COMMERCIALIZE: "Commercialize the remix", - CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", - CLAIM: "Claim your work as their own", - REMIX: "Create remixes of the commercial use.", -} - -const ShowCannots = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] - break - default: - return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] - break - } -} - -const policiesStyles = cva("", { - variants: { - size: { - small: "small", - medium: "medium", - large: "large", - }, - }, -}) - -export type IpPolicyAccordionProps = { - size?: "small" | "medium" | "large" -} - -function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { - const { policyData } = useIpAssetContext() - const [expanded, setExpanded] = useState(0) - - const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 - - return policyData?.length ? ( -
- {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {(policyData as unknown as any[])?.map((policy, index) => ( -
-
setExpanded(expanded === index ? null : index)}> - {getPolicyTypeByPILData(policy.licenseTerms)} - {expanded === index ? : } -
- -
-
- {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( - <> -
Others Can
-
- {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( -
- - {can} -
- ))} -
- - ) : null} -
Others Cannot
-
- {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( -
- - {can} -
- ))} -
-
-
- - {index < policyData.length - 1 &&
} -
- ))} -
- ) : ( -
No Policy
- ) -} - -export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx deleted file mode 100644 index 5a4a58f..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpPolicyAccordion from "../IpPolicyAccordion" - -type Size = "small" | "medium" | "large" - -const Example: FC<{ ipId: Address; size: Size }> = ({ - ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, - size = "medium", -}) => { - const queryClient = new QueryClient() - return ( - -
- - - -
-
- ) -} - -export default Example diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx deleted file mode 100644 index fa8a1c9..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" - - - -# IpPolicyAccordion - -Displays the IP Asset policies in a readable format (cans & cannots). - -#### Example - - - - - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpPolicyAccordion } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - - - - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx deleted file mode 100644 index 00db34b..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpPolicyAccordion", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx deleted file mode 100644 index f05ad5a..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css deleted file mode 100644 index 7916fc8..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/styles.css +++ /dev/null @@ -1,70 +0,0 @@ -.ip-policy-accordion { - @apply flex flex-col w-full min-w-48; - - .policy-item { - @apply flex flex-col w-full; - } - - .policy-item-header { - @apply flex w-full items-center justify-between cursor-pointer; - } - - .policy-item-list { - @apply flex w-full items-center justify-between overflow-hidden h-0; - - &.policy-item-list-expanded { - @apply h-auto; - } - } - - .policy-properties { - @apply flex flex-col pt-2 gap-2; - } - - .policy-item-list-title { - @apply font-bold; - } - - .policy-list { - @apply flex flex-col; - } - - .policy-property { - @apply flex w-full items-center gap-2; - - &.policy-property-can > svg { - @apply text-green-500; - } - - &.policy-property-cannot > svg { - @apply text-red-500; - } - } - - .policy-divider { - @apply border-b border-gray-200 w-full my-2; - } - - &.small { - @apply text-sm; - } - - &.medium { - @apply text-base; - - .policy-list { - @apply gap-1; - } - } - - &.large { - @apply text-lg; - .policy-list { - @apply gap-2; - } - } - - &.no-policy { - @apply text-slate-400; - } -} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx deleted file mode 100644 index 88d4f93..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { shortenAddress } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" -import { useEffect, useState } from "react" -import { Address } from "viem" - -import "../../global.css" - -function IpRoyaltyPieChart() { - const { royaltyData } = useIpAssetContext() - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [Chart, setChart] = useState(null) - useEffect(() => { - import("react-apexcharts").then((Component) => setChart(Component)) - }, []) - - let ApexChart = Chart - if (ApexChart?.default) ApexChart = ApexChart.default - if (ApexChart?.default) ApexChart = ApexChart.default - - if (royaltyData?.targetAncestors) { - const chart = { - options: { - chart: { - width: 300, - type: "pie" as `pie`, - }, - dataLabels: { - style: { - fontSize: "20px", - // fontFamily: "Inter, ui-sans-serif", - fontWeight: "400", - colors: ["#fff", "#fff", "#1f2937"], - }, - dropShadow: { - enabled: false, - }, - formatter: (value: number) => `${value.toFixed(1)} %`, - }, - // labels: ["Direct", "Organic search"], - plotOptions: { - pie: { - dataLabels: { - offset: -20, - }, - }, - }, - colors: ["#5f6060", "#494848"], - tooltip: { - enabled: true, - y: { - title: { - formatter: (value: Address) => shortenAddress(value), - }, - }, - }, - legend: { - show: false, - }, - labels: royaltyData?.targetAncestors, - responsive: [ - { - breakpoint: 480, - options: { - chart: { - width: 300, - }, - legend: { - position: "bottom", - }, - }, - }, - ], - }, - series: royaltyData?.targetRoyaltyAmount.map(Number), - } - - return ( -
-
- {ApexChart ? ( - - ) : null} -
-
-
- {royaltyData?.targetAncestors.map((target, i) => ( -
-
{shortenAddress(target)}
-
{royaltyData.targetRoyaltyAmount[i]}
-
- ))} -
-
-
- ) - } - - return
No Royalty Data
-} - -export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx deleted file mode 100644 index 3719043..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpRoyaltyPieChart from "../IpRoyaltyPieChart" - -const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { - const queryClient = new QueryClient() - return ( - -
- - - -
-
- ) -} - -export default Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx deleted file mode 100644 index 7bb1ab0..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx +++ /dev/null @@ -1,40 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" - - - -# IpRoyaltyPieChart - -Displays the divisions of royalties for an IP Asset in a pie chart. - -#### Example - - - - - -## Dependencies - -The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). - -```bash -npm install react-apexcharts -``` - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpRoyaltyPieChart } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - - - - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx deleted file mode 100644 index c218f3f..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpRoyaltyPieChart", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx deleted file mode 100644 index 80b6af8..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx deleted file mode 100644 index 7efcb60..0000000 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ /dev/null @@ -1,405 +0,0 @@ -import { Menu, Transition } from "@headlessui/react" -import React, { Fragment, useState } from "react" -import { FaWandMagicSparkles } from "react-icons/fa6" -import { IoIosShareAlt } from "react-icons/io" -import { SiOpensea } from "react-icons/si" -import { TbLicense } from "react-icons/tb" -import { Address } from "viem" - -import "../../global.css" -import { cn, shortenAddress } from "../../lib/utils" -import { IpAssetProvider, useIpAssetContext } from "../../providers" -import { IpGraph } from "../IpGraph" -import { IpPolicyAccordion } from "../IpPolicyAccordion" -import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" - -export type IpWidgetProps = { - ipId: Address - isBottomNav?: boolean -} - -export const IPA_CARD_TABS = [ - { id: "overview", label: "Overview" }, - { id: "licensing", label: "Licensing" }, - { id: "derivatives", label: "IP Graph" }, - { id: "royalty", label: "Royalty" }, -] - -const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { - return -} - -function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { - const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) - - const _Tabs = () => ( -
- -
- ) - - const _Card = () => ( -
- -
- ) - - return ( - -
- {isBottomNav ? <_Card /> : <_Tabs />} - {isBottomNav ? <_Tabs /> : <_Card />} -
-
- ) -} - -function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { - return ( -
- - {children} -
- ) -} - -function IPAssetDropdownMenu() { - const { assetData } = useIpAssetContext() - return ( - -
- - - - - - - -
- - - - {assetData?.rootIpIds?.[0]?.id && ( -
-

Root IP

-
- {assetData?.rootIpIds?.[0]?.id -

- {shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)} -

-
-
- )} - {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( -
-

Parent IPs

-
-
- {assetData?.parentIpIds - ?.slice(0, 5) - .map((asset, index) => ( - {asset.id} - ))} -
-

- {assetData?.parentIpIds?.length === 1 - ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) - : `${assetData?.parentIpIds?.length} total `} -

-
-
- )} - {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( -
-

Child IPs

-
-
- {assetData?.childIpIds - ?.slice(0, 5) - .map((asset, index) => ( - {asset.id} - ))} -
-

- {assetData?.childIpIds?.length === 1 - ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) - : `${assetData?.childIpIds?.length} total `} -

-
-
- )} -
- - {({ active }) => ( - - - )} - - - - {({ active }) => ( - - - )} - - - {({ active }) => ( - - - )} - - - {({ active }) => ( - - - )} - -
-
-
-
- ) -} - -function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { - const { nftData, assetData } = useIpAssetContext() - return ( -
-
-
- -
-
-
-

{assetData?.nftMetadata.name || nftData?.name || "Untitled"}

-

- Owned by{" "} - {shortenAddress(nftData?.owners[0].owner_address as string)} -

-
-
-
- -
- ) -} - -function Tabs({ - ipId, - activeTab, - setActiveTab, -}: { - ipId: Address - activeTab: string - setActiveTab: (tab: string) => void -}) { - return ( -
-
- {IPA_CARD_TABS.map((tab) => ( - - ))} -
- -
- ) -} - -function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { - switch (activeTab) { - case "overview": - return - case "licensing": - return ( - -
- -
-
- ) - case "derivatives": - return ( - - - - ) - case "royalty": - return ( - - - - ) - default: - return - } -} - -function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { - const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() - - const isLoading = isAssetDataLoading || isNftDataLoading - - const Title = () => - isLoading ? ( -
-
-
-
- ) : ( - - ) - - const AssetImage = () => - isLoading ? ( -
-
- -
-
- ) : ( -
- -
- ) - - const TitleBar = () => ( -
- - </div> - ) - - return ( - <div className="flex w-full flex-col items-start justify-start"> - {isBottomNav && <TitleBar />} - <AssetImage /> - {!isBottomNav && <TitleBar />} - </div> - ) -} - -IpWidget.displayName = "IpWidget" - -export default IpWidget diff --git a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx deleted file mode 100644 index c23faf9..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import IpWidget from "../IpWidget" - -const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ - ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", - isBottomNav = false, -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpWidget ipId={ipId} isBottomNav={isBottomNav} /> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx deleted file mode 100644 index e7797aa..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx +++ /dev/null @@ -1,34 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpWidgetStory from "./IpWidget.stories" - -<Meta of={IpWidgetStory} /> - -# IP Asset Widget - -IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. - -#### Example - -<Canvas of={IpWidgetStory.Select} /> - -<Controls /> - -## Usage - -```ts -import { IpWidget } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. -- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx deleted file mode 100644 index 0385ca9..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpWidget", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: { - isBottomNav: { control: "boolean", defaultValue: true }, - }, - args: {}, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - isBottomNav: true, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - isBottomNav: true, - }, -} diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx deleted file mode 100644 index 86d2dd2..0000000 --- a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import IpWidget from "../IpWidget" - -describe("IpWidget", () => { - test("renders the IpWidget component", () => { - render(<IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} />) - }) -}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts deleted file mode 100644 index 00d52ff..0000000 --- a/packages/storykit/src/components/IpWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts deleted file mode 100644 index db39fd2..0000000 --- a/packages/storykit/src/components/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./Button" -export * from "./IpWidget" -export * from "./IpGraph" -export * from "./IpPolicyAccordion" -export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx b/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx deleted file mode 100644 index 3375937..0000000 --- a/packages/storykit/src/providers/IPAssetProvider/IPAssetProvider.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { useQuery } from "@tanstack/react-query" -import React from "react" -import { Address } from "viem" - -import { getResource, listResource } from "../../lib/api" -import { getNFTByTokenId } from "../../lib/simplehash" -import { NFTMetadata } from "../../lib/simplehash/types/simplehash" -import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" -import { camelize } from "../../lib/utils" - -const IpAssetContext = React.createContext<{ - // activeTab: string - // setActiveTab: React.Dispatch<React.SetStateAction<string>> - assetData: Asset | undefined - nftData: NFTMetadata | undefined - isNftDataLoading: boolean - isAssetDataLoading: boolean - ipPolicyData: IPAPolicy[] | undefined - isIPAPolicyDataLoading: boolean - policyData: Policy[] | undefined - isPolicyDataLoading: boolean - licenseData: License[] | undefined - isLicenseDataLoading: boolean - royaltyData: RoyaltyPolicy | undefined - isRoyaltyDataLoading: boolean -} | null>(null) - -export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { - // Fetch asset data - const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ - queryKey: [RESOURCE_TYPE.ASSET, ipId], - queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), - }) - - const ipaPolicyQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - } - // Fetch IPPolicy data - const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ - queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), - }) - - async function fetchPolicyDetails(data: IPAPolicy[]) { - const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) - - const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) - const results = await Promise.all(requests) - - return results.map((result) => { - return { - ...result.data, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { - return { - ...acc, - [camelize(option.trait_type)]: - option.value === "true" ? true : option.value === "false" ? false : option.value, - } - }, {}), - } - }) - } - - const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ - queryKey: ["fetchPolicyDetails", ipPolicyData?.data], - queryFn: () => fetchPolicyDetails(ipPolicyData?.data), - enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), - }) - - const licenseQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - licensorIpdId: ipId, - }, - } - // Fetch License Data - const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ - queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), - }) - - // Fetch Royalty Data - const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ - queryKey: [ - RESOURCE_TYPE.ROYALTY_POLICY, - { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - }, - ], - queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), - }) - - // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], - // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), - // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), - // }) - const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], - queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), - enabled: - Boolean(assetData) && - Boolean(assetData.data.nftMetadata.tokenContract) && - Boolean(assetData.data.nftMetadata.tokenId), - }) - - return ( - <IpAssetContext.Provider - value={{ - // activeTab, - // setActiveTab, - nftData, - isNftDataLoading, - assetData: assetData?.data, - isAssetDataLoading, - ipPolicyData: ipPolicyData?.data, - isIPAPolicyDataLoading, - policyData: policyData, - isPolicyDataLoading, - licenseData: licenseData?.data, - isLicenseDataLoading, - royaltyData: royaltyData?.data, - isRoyaltyDataLoading, - }} - > - {children} - </IpAssetContext.Provider> - ) -} - -export const useIpAssetContext = () => { - const context = React.useContext(IpAssetContext) - if (!context) { - throw new Error("useAccount must be used within an IpAssetProvider") - } - return context -} diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx deleted file mode 100644 index a84a01b..0000000 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/Example.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" - -const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpAssetProvider ipId={ipId}> - <ExampleComponent /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - return ( - <> - {isNftDataLoading && <div>Fetching Asset...</div>} - {nftData && !isNftDataLoading ? ( - <div className="grid grid-cols-4 gap-4"> - <> - <div className="col-span-1 text-xs text-gray-600">nft_id</div> - <div className="col-span-3 text-sm">{nftData.nft_id}</div> - - <div className="col-span-1 text-xs text-gray-600">chain</div> - <div className="col-span-3 text-sm">{nftData.chain}</div> - - <div className="col-span-1 text-xs text-gray-600">contract_address</div> - <div className="col-span-3 text-sm">{nftData.contract_address}</div> - - <div className="col-span-1 text-xs text-gray-600">token_id</div> - <div className="col-span-3 text-sm">{nftData.token_id}</div> - - <div className="col-span-1 text-xs text-gray-600">name</div> - <div className="col-span-3 text-sm">{nftData.name}</div> - - <div className="col-span-1 text-xs text-gray-600">description</div> - <div className="col-span-3 text-sm">{nftData.description}</div> - </> - </div> - ) : null} - </> - ) -} - -export default Example diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx deleted file mode 100644 index e42fb0c..0000000 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx +++ /dev/null @@ -1,62 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpAssetProviderStory from "./IpAssetProvider.stories" - -<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> - -# IpAssetProvider - -Provides IP Asset data to children components. - -#### Example - -<Canvas of={IpAssetProviderStory.Select} /> - -<Controls /> - -## Usage - -```ts -// wrap your component with the IpAssetProvider - -import { IpAssetProvider } from "@storyprotocol/storykit" -import ExampleComponent from './ExampleComponent' - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` - -```ts -// in your component file, context provides IP asset state - -import { useIpAssetContext } from "@storyprotocol/storykit" - -const ExampleComponent = () => { - - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; - -export default ExampleComponent; -``` - -#### Arguments - -- **children** - The child component to provide the IP Asset context to. -- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx b/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx deleted file mode 100644 index cd7231b..0000000 --- a/packages/storykit/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "Providers/IpAssetProvider", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - // argTypes: {}, - // argTypes: { - // ipId: { - // options: [ - // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - // ], - // // control: { type: "select" }, // Automatically inferred when 'options' is defined - // }, - // }, - // args: { - // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // }, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/providers/IPAssetProvider/index.tsx b/packages/storykit/src/providers/IPAssetProvider/index.tsx deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/IPAssetProvider/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" From ae13253b6301af7fcdca9aae2f48678c2986de20 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Tue, 7 May 2024 20:39:40 -0700 Subject: [PATCH 44/74] return components/provider --- .../storykit/src/components/Button/Button.tsx | 47 ++ .../src/components/Button/__docs__/Button.mdx | 37 ++ .../Button/__docs__/Button.stories.tsx | 35 ++ .../Button/__tests__/Button.test.tsx | 9 + .../storykit/src/components/Button/index.ts | 1 + .../src/components/IpGraph/IpGraph.tsx | 89 ++++ .../components/IpGraph/__docs__/Example.tsx | 26 ++ .../components/IpGraph/__docs__/IpGraph.mdx | 45 ++ .../IpGraph/__docs__/IpGraph.stories.tsx | 38 ++ .../storykit/src/components/IpGraph/index.ts | 1 + .../IpPolicyAccordion/IpPolicyAccordion.tsx | 136 ++++++ .../IpPolicyAccordion/__docs__/Example.tsx | 27 ++ .../__docs__/IpPolicyAccordion.mdx | 32 ++ .../__docs__/IpPolicyAccordion.stories.tsx | 40 ++ .../components/IpPolicyAccordion/index.tsx | 1 + .../components/IpPolicyAccordion/styles.css | 70 +++ .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 102 +++++ .../IpRoyaltyPieChart/__docs__/Example.tsx | 22 + .../__docs__/IpRoyaltyPieChart.mdx | 40 ++ .../__docs__/IpRoyaltyPieChart.stories.tsx | 38 ++ .../components/IpRoyaltyPieChart/index.tsx | 1 + .../src/components/IpWidget/IpWidget.tsx | 405 ++++++++++++++++++ .../components/IpWidget/__docs__/Example.tsx | 29 ++ .../components/IpWidget/__docs__/IpWidget.mdx | 34 ++ .../IpWidget/__docs__/IpWidget.stories.tsx | 41 ++ .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 + .../storykit/src/components/IpWidget/index.ts | 1 + packages/storykit/src/components/index.ts | 5 + .../IpAssetProvider/IpAssetProvider.tsx | 153 +++++++ .../IpAssetProvider/__docs__/Example.tsx | 59 +++ .../__docs__/IpAssetProvider.mdx | 62 +++ .../__docs__/IpAssetProvider.stories.tsx | 49 +++ .../src/providers/IpAssetProvider/index.tsx | 1 + packages/storykit/src/providers/index.ts | 1 + 34 files changed, 1686 insertions(+) create mode 100644 packages/storykit/src/components/Button/Button.tsx create mode 100644 packages/storykit/src/components/Button/__docs__/Button.mdx create mode 100644 packages/storykit/src/components/Button/__docs__/Button.stories.tsx create mode 100644 packages/storykit/src/components/Button/__tests__/Button.test.tsx create mode 100644 packages/storykit/src/components/Button/index.ts create mode 100644 packages/storykit/src/components/IpGraph/IpGraph.tsx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx create mode 100644 packages/storykit/src/components/IpGraph/index.ts create mode 100644 packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx create mode 100644 packages/storykit/src/components/IpWidget/IpWidget.tsx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx create mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx create mode 100644 packages/storykit/src/components/IpWidget/index.ts create mode 100644 packages/storykit/src/components/index.ts create mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx create mode 100644 packages/storykit/src/providers/index.ts diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx new file mode 100644 index 0000000..41c8a15 --- /dev/null +++ b/packages/storykit/src/components/Button/Button.tsx @@ -0,0 +1,47 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" + +const button = cva( + "rounded-md border px-4 py-2 focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + primary: + "border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white", + secondary: "border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white", + }, + size: { + small: "text-sm", + medium: "text-base", + large: "text-lg", + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, + } +) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx new file mode 100644 index 0000000..d204fc3 --- /dev/null +++ b/packages/storykit/src/components/Button/__docs__/Button.mdx @@ -0,0 +1,37 @@ +import * as ButtonStory from "./Button.stories" +import { Canvas, Meta } from "@storybook/blocks" + +<Meta of={ButtonStory} title="Example/Button" /> + +# Button + +Button component with different props. + +#### Example + +<Canvas of={ButtonStory.Primary} /> + +## Usage + +```ts +import { Button } from "@storyprotocol/storykit"; + +const Example = () => { + return ( + <Button + size="small" + variant="primary" + onClick={()=> console.log("Clicked")} + >hello</Button> + ); +}; + +export default Example; +``` + +#### Arguments + +- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. +- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. +- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. +- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx new file mode 100644 index 0000000..5661c8e --- /dev/null +++ b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx @@ -0,0 +1,35 @@ +import type { Meta, StoryObj } from "@storybook/react" + +import Button from "../Button" + +const meta = { + title: "Example/Button", + component: Button, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, +} satisfies Meta<typeof Button> + +export default meta +type Story = StoryObj<typeof meta> + +export const Primary: Story = { + args: { + children: "Button", + variant: "primary", + size: "medium", + disabled: false, + }, +} + +export const Secondary: Story = { + args: { + children: "Button", + variant: "secondary", + size: "medium", + disabled: false, + }, +} diff --git a/packages/storykit/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx new file mode 100644 index 0000000..8f57dae --- /dev/null +++ b/packages/storykit/src/components/Button/__tests__/Button.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import Button from "../Button" + +describe("Button", () => { + test("renders the Button component", () => { + render(<Button>hi</Button>) + }) +}) diff --git a/packages/storykit/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts new file mode 100644 index 0000000..ae0694c --- /dev/null +++ b/packages/storykit/src/components/Button/index.ts @@ -0,0 +1 @@ +export { default as Button } from "./Button" diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx new file mode 100644 index 0000000..80cf249 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -0,0 +1,89 @@ +import React, { useEffect, useMemo, useState } from "react" + +import "../../global.css" +import { convertAssetToGraphFormat } from "../../lib/graph" +import { Asset } from "../../lib/types" +import { useIpAssetContext } from "../../providers" + +export type IpGraphProps = { + width?: number + height?: number +} + +function IpGraph({ width = 500, height = 500 }: IpGraphProps) { + const { assetData } = useIpAssetContext() + const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [ForceGraph, setForceGraph] = useState<any>(null) + + useEffect(() => { + // ForceGraph will break SSR, and needs to be loaded dynamically + async function importForceGraphModule() { + const fg = await import("react-force-graph-2d") + setForceGraph(fg.default) + } + importForceGraphModule() + }, []) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { + const isParent = node.level < 0 + const isSelf = node.level === 0 + const isChild = node.level > 0 + + let label + + if (node.isRoot) { + if (isParent) { + label = `${node.name} (Root / Parent)` + } else { + label = `${node.name} (Root)` + } + } else if (isParent) { + label = `${node.name} (Parent)` + } else if (isChild) { + label = `${node.name} (Child)` + } else { + label = `${node.name}` + } + + const fontSize = 12 / globalScale + const circleRadius = isSelf ? 6 : 3 // Radius of the circle + + // Set the font for the text + ctx.font = `${fontSize}px Sans-Serif` + + // Draw the circle + ctx.beginPath() + ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) + if (isSelf) { + ctx.fillStyle = "black" // Color of the circle + } else if (isParent) { + ctx.fillStyle = "grey" // Color of the circle + } else { + ctx.fillStyle = "lightgrey" // Color of the circle + } + + ctx.fill() + if (isSelf) { + ctx.strokeStyle = "lightblue" // Border color of the circle + ctx.stroke() + } + + // Draw the text next to the circle + ctx.fillText(label, node.x, node.y + 10) + } + + return ( + <div className="relative"> + {ForceGraph ? ( + <ForceGraph width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> + ) : null} + </div> + ) +} + +IpGraph.displayName = "IpGraph" + +export default IpGraph diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx new file mode 100644 index 0000000..6e98d12 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx @@ -0,0 +1,26 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpGraph from "../IpGraph" + +const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + width = 400, + height = 300, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpGraph width={width} height={height} /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx new file mode 100644 index 0000000..ad8a772 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -0,0 +1,45 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpGraphStory from "./IpGraph.stories" + +<Meta of={IpGraphStory} /> + +# IpGraph + +Show IP Asset derivatives graph. + +#### Example + +<Canvas of={IpGraphStory.Select} /> + +<Controls /> + +## Dependencies + +The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). + +```bash +npm install react-force-graph-2d +``` + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **width**: _number_ - The width of the canvas +- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx new file mode 100644 index 0000000..049a105 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpGraph", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts new file mode 100644 index 0000000..d038069 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/index.ts @@ -0,0 +1 @@ +export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx new file mode 100644 index 0000000..26eaf5d --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -0,0 +1,136 @@ +import { POLICY_TYPE } from "@/lib/types" +import { cn, getPolicyTypeByPILData } from "@/lib/utils" +import { useIpAssetContext } from "@/providers" +import { cva } from "class-variance-authority" +import { CircleCheck, CircleMinus } from "lucide-react" +import { useState } from "react" +import { FaCaretDown, FaCaretUp } from "react-icons/fa6" + +import "../../global.css" +import "./styles.css" + +const CANS = { + REMIX: "Remix this work", + INCLUDE: "Include this work in their own work(s)", + CREDIT: "Credit you appropriately", + DISTRIBUTE: "Distribute their remix anywhere", + PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", + CREATOR_CREDIT: "Credit you as the creator", + PUBLISH: "Display / publish the work in any medium", +} + +const ShowCans = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] + break + default: + return [] + break + } +} + +const CANNOTS = { + RESELL: "Resell your original work", + COMMERCIALIZE: "Commercialize the remix", + CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", + CLAIM: "Claim your work as their own", + REMIX: "Create remixes of the commercial use.", +} + +const ShowCannots = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] + break + default: + return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] + break + } +} + +const policiesStyles = cva("", { + variants: { + size: { + small: "small", + medium: "medium", + large: "large", + }, + }, +}) + +export type IpPolicyAccordionProps = { + size?: "small" | "medium" | "large" +} + +function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { + const { policyData } = useIpAssetContext() + const [expanded, setExpanded] = useState<number | null>(0) + + const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 + + return policyData?.length ? ( + <div className={cn("ip-policy-accordion", policiesStyles({ size }))}> + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {(policyData as unknown as any[])?.map((policy, index) => ( + <div key={policy.id} className="policy-item"> + <div className="policy-item-header" onClick={() => setExpanded(expanded === index ? null : index)}> + {getPolicyTypeByPILData(policy.licenseTerms)} + {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} + </div> + + <div className={cn("policy-item-list", expanded === index && "policy-item-list-expanded")}> + <div className="policy-properties"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( + <> + <div className="policy-item-list-title">Others Can</div> + <div className="policy-list"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="policy-property policy-property-can"> + <CircleCheck width={iconWidth} /> + <span>{can}</span> + </div> + ))} + </div> + </> + ) : null} + <div className="policy-item-list-title">Others Cannot</div> + <div className="policy-list"> + {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="policy-property policy-property-cannot"> + <CircleMinus width={iconWidth} /> + <span>{can}</span> + </div> + ))} + </div> + </div> + </div> + + {index < policyData.length - 1 && <div className="policy-divider" />} + </div> + ))} + </div> + ) : ( + <div className="ip-policy-accordion no-policy">No Policy</div> + ) +} + +export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx new file mode 100644 index 0000000..5a4a58f --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx @@ -0,0 +1,27 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpPolicyAccordion from "../IpPolicyAccordion" + +type Size = "small" | "medium" | "large" + +const Example: FC<{ ipId: Address; size: Size }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + size = "medium", +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full w-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpPolicyAccordion size={size} /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx new file mode 100644 index 0000000..fa8a1c9 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" + +<Meta of={IpPolicyAccordionStory} /> + +# IpPolicyAccordion + +Displays the IP Asset policies in a readable format (cans & cannots). + +#### Example + +<Canvas of={IpPolicyAccordionStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpPolicyAccordion } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpPolicyAccordion /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx new file mode 100644 index 0000000..00db34b --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx @@ -0,0 +1,40 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpPolicyAccordion", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx new file mode 100644 index 0000000..f05ad5a --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/index.tsx @@ -0,0 +1 @@ +export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css new file mode 100644 index 0000000..7916fc8 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -0,0 +1,70 @@ +.ip-policy-accordion { + @apply flex flex-col w-full min-w-48; + + .policy-item { + @apply flex flex-col w-full; + } + + .policy-item-header { + @apply flex w-full items-center justify-between cursor-pointer; + } + + .policy-item-list { + @apply flex w-full items-center justify-between overflow-hidden h-0; + + &.policy-item-list-expanded { + @apply h-auto; + } + } + + .policy-properties { + @apply flex flex-col pt-2 gap-2; + } + + .policy-item-list-title { + @apply font-bold; + } + + .policy-list { + @apply flex flex-col; + } + + .policy-property { + @apply flex w-full items-center gap-2; + + &.policy-property-can > svg { + @apply text-green-500; + } + + &.policy-property-cannot > svg { + @apply text-red-500; + } + } + + .policy-divider { + @apply border-b border-gray-200 w-full my-2; + } + + &.small { + @apply text-sm; + } + + &.medium { + @apply text-base; + + .policy-list { + @apply gap-1; + } + } + + &.large { + @apply text-lg; + .policy-list { + @apply gap-2; + } + } + + &.no-policy { + @apply text-slate-400; + } +} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx new file mode 100644 index 0000000..88d4f93 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -0,0 +1,102 @@ +import { shortenAddress } from "@/lib/utils" +import { useIpAssetContext } from "@/providers" +import { useEffect, useState } from "react" +import { Address } from "viem" + +import "../../global.css" + +function IpRoyaltyPieChart() { + const { royaltyData } = useIpAssetContext() + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [Chart, setChart] = useState<any>(null) + useEffect(() => { + import("react-apexcharts").then((Component) => setChart(Component)) + }, []) + + let ApexChart = Chart + if (ApexChart?.default) ApexChart = ApexChart.default + if (ApexChart?.default) ApexChart = ApexChart.default + + if (royaltyData?.targetAncestors) { + const chart = { + options: { + chart: { + width: 300, + type: "pie" as `pie`, + }, + dataLabels: { + style: { + fontSize: "20px", + // fontFamily: "Inter, ui-sans-serif", + fontWeight: "400", + colors: ["#fff", "#fff", "#1f2937"], + }, + dropShadow: { + enabled: false, + }, + formatter: (value: number) => `${value.toFixed(1)} %`, + }, + // labels: ["Direct", "Organic search"], + plotOptions: { + pie: { + dataLabels: { + offset: -20, + }, + }, + }, + colors: ["#5f6060", "#494848"], + tooltip: { + enabled: true, + y: { + title: { + formatter: (value: Address) => shortenAddress(value), + }, + }, + }, + legend: { + show: false, + }, + labels: royaltyData?.targetAncestors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 300, + }, + legend: { + position: "bottom", + }, + }, + }, + ], + }, + series: royaltyData?.targetRoyaltyAmount.map(Number), + } + + return ( + <div className="flex flex-col items-center justify-between"> + <div className="min-h-[230px]"> + {ApexChart ? ( + <ApexChart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> + ) : null} + </div> + <div className="w-full min-w-[300px] px-2"> + <dl className="divide-y divide-gray-100 overflow-x-hidden text-sm leading-6"> + {royaltyData?.targetAncestors.map((target, i) => ( + <div key={target} className="flex justify-between gap-x-4 py-1"> + <dt className="text-xs capitalize text-gray-500">{shortenAddress(target)}</dt> + <dd className="truncate text-gray-700">{royaltyData.targetRoyaltyAmount[i]}</dd> + </div> + ))} + </dl> + </div> + </div> + ) + } + + return <div className="flex h-60 flex-col items-center justify-center text-slate-400">No Royalty Data</div> +} + +export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx new file mode 100644 index 0000000..3719043 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx @@ -0,0 +1,22 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpRoyaltyPieChart from "../IpRoyaltyPieChart" + +const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpRoyaltyPieChart /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx new file mode 100644 index 0000000..7bb1ab0 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -0,0 +1,40 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" + +<Meta of={IpRoyaltyPieChartStory} /> + +# IpRoyaltyPieChart + +Displays the divisions of royalties for an IP Asset in a pie chart. + +#### Example + +<Canvas of={IpRoyaltyPieChartStory.Select} /> + +<Controls /> + +## Dependencies + +The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). + +```bash +npm install react-apexcharts +``` + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpRoyaltyPieChart } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpRoyaltyPieChart /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx new file mode 100644 index 0000000..c218f3f --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpRoyaltyPieChart", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx new file mode 100644 index 0000000..80b6af8 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx @@ -0,0 +1 @@ +export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx new file mode 100644 index 0000000..7efcb60 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -0,0 +1,405 @@ +import { Menu, Transition } from "@headlessui/react" +import React, { Fragment, useState } from "react" +import { FaWandMagicSparkles } from "react-icons/fa6" +import { IoIosShareAlt } from "react-icons/io" +import { SiOpensea } from "react-icons/si" +import { TbLicense } from "react-icons/tb" +import { Address } from "viem" + +import "../../global.css" +import { cn, shortenAddress } from "../../lib/utils" +import { IpAssetProvider, useIpAssetContext } from "../../providers" +import { IpGraph } from "../IpGraph" +import { IpPolicyAccordion } from "../IpPolicyAccordion" +import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" + +export type IpWidgetProps = { + ipId: Address + isBottomNav?: boolean +} + +export const IPA_CARD_TABS = [ + { id: "overview", label: "Overview" }, + { id: "licensing", label: "Licensing" }, + { id: "derivatives", label: "IP Graph" }, + { id: "royalty", label: "Royalty" }, +] + +const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { + return <IPAssetCardWrapper ipId={ipId} isBottomNav={isBottomNav} {...rest} /> +} + +function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { + const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) + + const _Tabs = () => ( + <div className={cn("w-full px-2", isBottomNav ? "pb-2" : "pt-2")}> + <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> + </div> + ) + + const _Card = () => ( + <div className="flex size-full flex-auto flex-col p-2"> + <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> + </div> + ) + + return ( + <IpAssetProvider ipId={ipId} key={ipId}> + <div className="flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg"> + {isBottomNav ? <_Card /> : <_Tabs />} + {isBottomNav ? <_Tabs /> : <_Card />} + </div> + </IpAssetProvider> + ) +} + +function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { + return ( + <div className={cn("flex gap-2", isBottomNav ? "flex-col" : "flex-col-reverse justify-between h-full flex-auto")}> + <IPAssetHeader /> + {children} + </div> + ) +} + +function IPAssetDropdownMenu() { + const { assetData } = useIpAssetContext() + return ( + <Menu as="div" className="relative inline-block text-left"> + <div> + <Menu.Button className="inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm"> + <svg + className="size-4 flex-none text-gray-600" + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + > + <circle cx="12" cy="12" r="1" /> + <circle cx="12" cy="5" r="1" /> + <circle cx="12" cy="19" r="1" /> + </svg> + </Menu.Button> + </div> + + <Transition + as={Fragment} + enter="transition ease-out duration-100" + enterFrom="transform opacity-0 scale-95" + enterTo="transform opacity-100 scale-100" + leave="transition ease-in duration-75" + leaveFrom="transform opacity-100 scale-100" + leaveTo="transform opacity-0 scale-95" + > + <Menu.Items className="absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none"> + {assetData?.rootIpIds?.[0]?.id && ( + <div className="px-4 py-2"> + <p className="text-xs text-slate-400">Root IP</p> + <div className="flex items-center"> + <img + className="relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white " + src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} + alt={assetData?.rootIpIds?.[0]?.id as Address} + ></img> + <p className="truncate text-sm text-gray-900"> + {shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)} + </p> + </div> + </div> + )} + {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( + <div className="px-4 py-2"> + <p className="text-xs text-slate-400">Parent IPs</p> + <div className="flex items-center"> + <div className="mr-3 -space-x-3"> + {assetData?.parentIpIds + ?.slice(0, 5) + .map((asset, index) => ( + <img + key={index} + className={cn( + "relative inline-block h-5 w-5 rounded-full ring-2 ring-white", + `z-${((assetData?.parentIpIds?.length as number) - index) * 10}` + )} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className=" truncate text-sm text-gray-900"> + {assetData?.parentIpIds?.length === 1 + ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) + : `${assetData?.parentIpIds?.length} total `} + </p> + </div> + </div> + )} + {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( + <div className="px-4 py-2"> + <p className="text-xs text-slate-400">Child IPs</p> + <div className="flex items-center"> + <div className="mr-3 -space-x-3"> + {assetData?.childIpIds + ?.slice(0, 5) + .map((asset, index) => ( + <img + key={index} + className={cn( + "relative inline-block h-5 w-5 rounded-full ring-2 ring-white", + `z-${((assetData?.childIpIds?.length as number) - index) * 5}` + )} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className=" truncate text-sm text-gray-900"> + {assetData?.childIpIds?.length === 1 + ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) + : `${assetData?.childIpIds?.length} total `} + </p> + </div> + </div> + )} + <div className="py-1"> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <FaWandMagicSparkles + className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" + aria-hidden="true" + /> + Remix + </a> + )} + </Menu.Item> + + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <SiOpensea className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + View on Opensea + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <TbLicense className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + Buy License + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <IoIosShareAlt className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + Share + </a> + )} + </Menu.Item> + </div> + </Menu.Items> + </Transition> + </Menu> + ) +} + +function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { + const { nftData, assetData } = useIpAssetContext() + return ( + <div className="flex w-full flex-row justify-between"> + <div className="flex w-full flex-row justify-start gap-2"> + <div className={cn("", hideImage ? "hidden" : "")}> + <img src={nftData?.image_url} className="size-10 rounded-md object-cover" /> + </div> + <div> + <div> + <h1 className="font-semibold">{assetData?.nftMetadata.name || nftData?.name || "Untitled"}</h1> + <h2 className="text-xs"> + Owned by{" "} + <span className="text-slate-400">{shortenAddress(nftData?.owners[0].owner_address as string)}</span> + </h2> + </div> + </div> + </div> + <IPAssetDropdownMenu /> + </div> + ) +} + +function Tabs({ + ipId, + activeTab, + setActiveTab, +}: { + ipId: Address + activeTab: string + setActiveTab: (tab: string) => void +}) { + return ( + <div className="flex space-x-1" id={ipId}> + <div className="flex w-full justify-between"> + {IPA_CARD_TABS.map((tab) => ( + <button + key={`${ipId}-${tab.id}`} + onClick={() => setActiveTab(tab.id)} + className={`${ + activeTab === tab.id ? "" : "hover:text-black/60" + } relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2`} + style={{ + WebkitTapHighlightColor: "transparent", + }} + > + {activeTab === tab.id && ( + <span className="absolute inset-0 z-10 bg-white mix-blend-difference rounded-full" /> + )} + {tab.label} + </button> + ))} + </div> + <button> + <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g clipPath="url(#clip0_235_3)"> + <mask + id="mask0_235_3" + style={{ maskType: "luminance" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="512" + height="512" + > + <path d="M512 0H0V512H512V0Z" fill="white" /> + </mask> + <g mask="url(#mask0_235_3)"> + <path + d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" + fill="black" + /> + </g> + </g> + <defs> + <clipPath id="clip0_235_3"> + <rect width="512" height="512" fill="white" /> + </clipPath> + </defs> + </svg> + </button> + </div> + ) +} + +function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { + switch (activeTab) { + case "overview": + return <IPAssetOverview isBottomNav={isBottomNav} /> + case "licensing": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <div className="p-2"> + <IpPolicyAccordion size="small" /> + </div> + </IPAssetLayout> + ) + case "derivatives": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpGraph width={370} height={250} /> + </IPAssetLayout> + ) + case "royalty": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpRoyaltyPieChart /> + </IPAssetLayout> + ) + default: + return <IPAssetOverview /> + } +} + +function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { + const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() + + const isLoading = isAssetDataLoading || isNftDataLoading + + const Title = () => + isLoading ? ( + <div className="flex animate-pulse flex-col gap-2"> + <div className="h-4 w-20 rounded bg-slate-200"></div> + <div className="h-3 w-32 rounded bg-slate-200"></div> + </div> + ) : ( + <IPAssetHeader hideImage /> + ) + + const AssetImage = () => + isLoading ? ( + <div className="w-full animate-pulse py-1"> + <div className="flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700"> + <svg + className="size-10 text-slate-100 dark:text-slate-600" + aria-hidden="true" + xmlns="http://www.w3.org/2000/svg" + fill="currentColor" + viewBox="0 0 20 18" + > + <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> + </svg> + </div> + </div> + ) : ( + <div className="flex w-full justify-center text-center"> + <img src={nftData?.image_url} className="rounded-md object-contain" /> + </div> + ) + + const TitleBar = () => ( + <div className={cn("flex w-full flex-row justify-between", isBottomNav ? "pb-1" : "pt-1")}> + <Title /> + </div> + ) + + return ( + <div className="flex w-full flex-col items-start justify-start"> + {isBottomNav && <TitleBar />} + <AssetImage /> + {!isBottomNav && <TitleBar />} + </div> + ) +} + +IpWidget.displayName = "IpWidget" + +export default IpWidget diff --git a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx new file mode 100644 index 0000000..c23faf9 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx @@ -0,0 +1,29 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import IpWidget from "../IpWidget" + +const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ + ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", + isBottomNav = false, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpWidget ipId={ipId} isBottomNav={isBottomNav} /> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx new file mode 100644 index 0000000..e7797aa --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx @@ -0,0 +1,34 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpWidgetStory from "./IpWidget.stories" + +<Meta of={IpWidgetStory} /> + +# IP Asset Widget + +IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. + +#### Example + +<Canvas of={IpWidgetStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. +- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx new file mode 100644 index 0000000..0385ca9 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx @@ -0,0 +1,41 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpWidget", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: { + isBottomNav: { control: "boolean", defaultValue: true }, + }, + args: {}, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx new file mode 100644 index 0000000..86d2dd2 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import IpWidget from "../IpWidget" + +describe("IpWidget", () => { + test("renders the IpWidget component", () => { + render(<IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} />) + }) +}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts new file mode 100644 index 0000000..00d52ff --- /dev/null +++ b/packages/storykit/src/components/IpWidget/index.ts @@ -0,0 +1 @@ +export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts new file mode 100644 index 0000000..db39fd2 --- /dev/null +++ b/packages/storykit/src/components/index.ts @@ -0,0 +1,5 @@ +export * from "./Button" +export * from "./IpWidget" +export * from "./IpGraph" +export * from "./IpPolicyAccordion" +export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx new file mode 100644 index 0000000..3375937 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx @@ -0,0 +1,153 @@ +import { useQuery } from "@tanstack/react-query" +import React from "react" +import { Address } from "viem" + +import { getResource, listResource } from "../../lib/api" +import { getNFTByTokenId } from "../../lib/simplehash" +import { NFTMetadata } from "../../lib/simplehash/types/simplehash" +import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" +import { camelize } from "../../lib/utils" + +const IpAssetContext = React.createContext<{ + // activeTab: string + // setActiveTab: React.Dispatch<React.SetStateAction<string>> + assetData: Asset | undefined + nftData: NFTMetadata | undefined + isNftDataLoading: boolean + isAssetDataLoading: boolean + ipPolicyData: IPAPolicy[] | undefined + isIPAPolicyDataLoading: boolean + policyData: Policy[] | undefined + isPolicyDataLoading: boolean + licenseData: License[] | undefined + isLicenseDataLoading: boolean + royaltyData: RoyaltyPolicy | undefined + isRoyaltyDataLoading: boolean +} | null>(null) + +export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { + // Fetch asset data + const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ + queryKey: [RESOURCE_TYPE.ASSET, ipId], + queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), + }) + + const ipaPolicyQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + } + // Fetch IPPolicy data + const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ + queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), + }) + + async function fetchPolicyDetails(data: IPAPolicy[]) { + const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) + + const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) + const results = await Promise.all(requests) + + return results.map((result) => { + return { + ...result.data, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { + return { + ...acc, + [camelize(option.trait_type)]: + option.value === "true" ? true : option.value === "false" ? false : option.value, + } + }, {}), + } + }) + } + + const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ + queryKey: ["fetchPolicyDetails", ipPolicyData?.data], + queryFn: () => fetchPolicyDetails(ipPolicyData?.data), + enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), + }) + + const licenseQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + licensorIpdId: ipId, + }, + } + // Fetch License Data + const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ + queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), + }) + + // Fetch Royalty Data + const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ + queryKey: [ + RESOURCE_TYPE.ROYALTY_POLICY, + { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + }, + ], + queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), + }) + + // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], + // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), + // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + // }) + const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], + queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), + enabled: + Boolean(assetData) && + Boolean(assetData.data.nftMetadata.tokenContract) && + Boolean(assetData.data.nftMetadata.tokenId), + }) + + return ( + <IpAssetContext.Provider + value={{ + // activeTab, + // setActiveTab, + nftData, + isNftDataLoading, + assetData: assetData?.data, + isAssetDataLoading, + ipPolicyData: ipPolicyData?.data, + isIPAPolicyDataLoading, + policyData: policyData, + isPolicyDataLoading, + licenseData: licenseData?.data, + isLicenseDataLoading, + royaltyData: royaltyData?.data, + isRoyaltyDataLoading, + }} + > + {children} + </IpAssetContext.Provider> + ) +} + +export const useIpAssetContext = () => { + const context = React.useContext(IpAssetContext) + if (!context) { + throw new Error("useAccount must be used within an IpAssetProvider") + } + return context +} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx new file mode 100644 index 0000000..a84a01b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx @@ -0,0 +1,59 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" + +const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpAssetProvider ipId={ipId}> + <ExampleComponent /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + return ( + <> + {isNftDataLoading && <div>Fetching Asset...</div>} + {nftData && !isNftDataLoading ? ( + <div className="grid grid-cols-4 gap-4"> + <> + <div className="col-span-1 text-xs text-gray-600">nft_id</div> + <div className="col-span-3 text-sm">{nftData.nft_id}</div> + + <div className="col-span-1 text-xs text-gray-600">chain</div> + <div className="col-span-3 text-sm">{nftData.chain}</div> + + <div className="col-span-1 text-xs text-gray-600">contract_address</div> + <div className="col-span-3 text-sm">{nftData.contract_address}</div> + + <div className="col-span-1 text-xs text-gray-600">token_id</div> + <div className="col-span-3 text-sm">{nftData.token_id}</div> + + <div className="col-span-1 text-xs text-gray-600">name</div> + <div className="col-span-3 text-sm">{nftData.name}</div> + + <div className="col-span-1 text-xs text-gray-600">description</div> + <div className="col-span-3 text-sm">{nftData.description}</div> + </> + </div> + ) : null} + </> + ) +} + +export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx new file mode 100644 index 0000000..e42fb0c --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx @@ -0,0 +1,62 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpAssetProviderStory from "./IpAssetProvider.stories" + +<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> + +# IpAssetProvider + +Provides IP Asset data to children components. + +#### Example + +<Canvas of={IpAssetProviderStory.Select} /> + +<Controls /> + +## Usage + +```ts +// wrap your component with the IpAssetProvider + +import { IpAssetProvider } from "@storyprotocol/storykit" +import ExampleComponent from './ExampleComponent' + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +```ts +// in your component file, context provides IP asset state + +import { useIpAssetContext } from "@storyprotocol/storykit" + +const ExampleComponent = () => { + + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; + +export default ExampleComponent; +``` + +#### Arguments + +- **children** - The child component to provide the IP Asset context to. +- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx new file mode 100644 index 0000000..cd7231b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx @@ -0,0 +1,49 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Providers/IpAssetProvider", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + // argTypes: {}, + // argTypes: { + // ipId: { + // options: [ + // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", + // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", + // ], + // // control: { type: "select" }, // Automatically inferred when 'options' is defined + // }, + // }, + // args: { + // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // }, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/index.tsx @@ -0,0 +1 @@ +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/index.ts @@ -0,0 +1 @@ +export * from "./IpAssetProvider" From cbcb645e2e17f8fe54e0d5be2202387ca84b0d3f Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 12:11:21 -0700 Subject: [PATCH 45/74] accordion style --- .../src/components/IpPolicyAccordion/IpPolicyAccordion.tsx | 5 ++--- .../storykit/src/components/IpPolicyAccordion/styles.css | 6 +++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx index 26eaf5d..791ca21 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -6,7 +6,6 @@ import { CircleCheck, CircleMinus } from "lucide-react" import { useState } from "react" import { FaCaretDown, FaCaretUp } from "react-icons/fa6" -import "../../global.css" import "./styles.css" const CANS = { @@ -88,7 +87,7 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 return policyData?.length ? ( - <div className={cn("ip-policy-accordion", policiesStyles({ size }))}> + <div className={cn("storykit-ip-policy-accordion", policiesStyles({ size }))}> {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} {(policyData as unknown as any[])?.map((policy, index) => ( <div key={policy.id} className="policy-item"> @@ -129,7 +128,7 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { ))} </div> ) : ( - <div className="ip-policy-accordion no-policy">No Policy</div> + <div className="storykit-ip-policy-accordion no-policy">No Policy</div> ) } diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css index 7916fc8..e53127f 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/styles.css +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -1,4 +1,8 @@ -.ip-policy-accordion { +@tailwind base; +@tailwind components; +@tailwind utilities; + +.storykit-ip-policy-accordion { @apply flex flex-col w-full min-w-48; .policy-item { From 975de15f95ed0b27e698176c48b8611c3fd036b7 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 12:11:36 -0700 Subject: [PATCH 46/74] disable global styles --- packages/storykit/.storybook/preview.ts | 2 +- packages/storykit/src/components/Button/Button.tsx | 2 +- packages/storykit/src/components/IpGraph/IpGraph.tsx | 2 +- .../src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 2 +- packages/storykit/src/components/IpWidget/IpWidget.tsx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts index 5ce8caf..4da2007 100644 --- a/packages/storykit/.storybook/preview.ts +++ b/packages/storykit/.storybook/preview.ts @@ -1,7 +1,7 @@ import { withThemeByClassName } from "@storybook/addon-themes" import type { Preview } from "@storybook/react" -import "../src/global.css" +// import "../src/global.css" import theme from "./theme" const preview: Preview = { diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx index 41c8a15..fd2c835 100644 --- a/packages/storykit/src/components/Button/Button.tsx +++ b/packages/storykit/src/components/Button/Button.tsx @@ -2,7 +2,7 @@ import { cn } from "@/lib/utils" import { type VariantProps, cva } from "class-variance-authority" import React from "react" -import "../../global.css" +// import "../../global.css" const button = cva( "rounded-md border px-4 py-2 focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50", diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx index 80cf249..da0ce41 100644 --- a/packages/storykit/src/components/IpGraph/IpGraph.tsx +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useMemo, useState } from "react" -import "../../global.css" +// import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" import { useIpAssetContext } from "../../providers" diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx index 88d4f93..1b84255 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -3,7 +3,7 @@ import { useIpAssetContext } from "@/providers" import { useEffect, useState } from "react" import { Address } from "viem" -import "../../global.css" +// import "../../global.css" function IpRoyaltyPieChart() { const { royaltyData } = useIpAssetContext() diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx index 7efcb60..ef5f9df 100644 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -6,7 +6,7 @@ import { SiOpensea } from "react-icons/si" import { TbLicense } from "react-icons/tb" import { Address } from "viem" -import "../../global.css" +// import "../../global.css" import { cn, shortenAddress } from "../../lib/utils" import { IpAssetProvider, useIpAssetContext } from "../../providers" import { IpGraph } from "../IpGraph" From 4476d29c23e093c0689f0a7211f5c96e688791ab Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 13:42:39 -0700 Subject: [PATCH 47/74] independent storybook base styles --- packages/storykit/.storybook/global.css | 7 +++++++ packages/storykit/.storybook/preview.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 packages/storykit/.storybook/global.css diff --git a/packages/storykit/.storybook/global.css b/packages/storykit/.storybook/global.css new file mode 100644 index 0000000..5ac59a8 --- /dev/null +++ b/packages/storykit/.storybook/global.css @@ -0,0 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.sb-show-main { + @apply bg-white dark:bg-gray-900; +} diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts index 4da2007..7d21660 100644 --- a/packages/storykit/.storybook/preview.ts +++ b/packages/storykit/.storybook/preview.ts @@ -1,7 +1,7 @@ import { withThemeByClassName } from "@storybook/addon-themes" import type { Preview } from "@storybook/react" -// import "../src/global.css" +import "./global.css" import theme from "./theme" const preview: Preview = { From 25ac79e599211ec7d20eeae09f4f771b387736a8 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 13:44:04 -0700 Subject: [PATCH 48/74] accordion import global styles --- .../src/components/IpPolicyAccordion/IpPolicyAccordion.tsx | 1 + packages/storykit/src/components/IpPolicyAccordion/styles.css | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx index 791ca21..74ca5ab 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -6,6 +6,7 @@ import { CircleCheck, CircleMinus } from "lucide-react" import { useState } from "react" import { FaCaretDown, FaCaretUp } from "react-icons/fa6" +import "../../global.css" import "./styles.css" const CANS = { diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css index e53127f..685e35f 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/styles.css +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -1,7 +1,3 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - .storykit-ip-policy-accordion { @apply flex flex-col w-full min-w-48; From 6dd8e63a087ccde98d07bfb2d0dc3deab77bd92f Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 13:44:18 -0700 Subject: [PATCH 49/74] disable ununsed css variables --- packages/storykit/src/global.css | 17 +--- packages/storykit/tailwind.config.js | 112 +++++++++++++-------------- 2 files changed, 58 insertions(+), 71 deletions(-) diff --git a/packages/storykit/src/global.css b/packages/storykit/src/global.css index c8b8c3e..413f711 100644 --- a/packages/storykit/src/global.css +++ b/packages/storykit/src/global.css @@ -2,7 +2,7 @@ @tailwind components; @tailwind utilities; -@layer base { +/* @layer base { :root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; @@ -64,17 +64,4 @@ --input: 217.2 32.6% 17.5%; --ring: 212.7 26.8% 83.9%; } -} - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } -} - -.sb-show-main { - @apply bg-white dark:bg-gray-900; -} +} */ diff --git a/packages/storykit/tailwind.config.js b/packages/storykit/tailwind.config.js index d790af4..6211183 100644 --- a/packages/storykit/tailwind.config.js +++ b/packages/storykit/tailwind.config.js @@ -11,62 +11,62 @@ module.exports = { "2xl": "1400px", }, }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: "0" }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: "0" }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - }, - }, + // extend: { + // colors: { + // border: "hsl(var(--border))", + // input: "hsl(var(--input))", + // ring: "hsl(var(--ring))", + // background: "hsl(var(--background))", + // foreground: "hsl(var(--foreground))", + // primary: { + // DEFAULT: "hsl(var(--primary))", + // foreground: "hsl(var(--primary-foreground))", + // }, + // secondary: { + // DEFAULT: "hsl(var(--secondary))", + // foreground: "hsl(var(--secondary-foreground))", + // }, + // destructive: { + // DEFAULT: "hsl(var(--destructive))", + // foreground: "hsl(var(--destructive-foreground))", + // }, + // muted: { + // DEFAULT: "hsl(var(--muted))", + // foreground: "hsl(var(--muted-foreground))", + // }, + // accent: { + // DEFAULT: "hsl(var(--accent))", + // foreground: "hsl(var(--accent-foreground))", + // }, + // popover: { + // DEFAULT: "hsl(var(--popover))", + // foreground: "hsl(var(--popover-foreground))", + // }, + // card: { + // DEFAULT: "hsl(var(--card))", + // foreground: "hsl(var(--card-foreground))", + // }, + // }, + // borderRadius: { + // lg: "var(--radius)", + // md: "calc(var(--radius) - 2px)", + // sm: "calc(var(--radius) - 4px)", + // }, + // keyframes: { + // "accordion-down": { + // from: { height: "0" }, + // to: { height: "var(--radix-accordion-content-height)" }, + // }, + // "accordion-up": { + // from: { height: "var(--radix-accordion-content-height)" }, + // to: { height: "0" }, + // }, + // }, + // animation: { + // "accordion-down": "accordion-down 0.2s ease-out", + // "accordion-up": "accordion-up 0.2s ease-out", + // }, + // }, }, plugins: [require("tailwindcss-animate")], } From 07e459fe6fcd038efb1b1b9831c8fd33420b519c Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 13:45:52 -0700 Subject: [PATCH 50/74] extract button styles to css file using BEM naming --- .../storykit/src/components/Button/Button.tsx | 37 +++++++++---------- .../storykit/src/components/Button/styles.css | 21 +++++++++++ 2 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 packages/storykit/src/components/Button/styles.css diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx index fd2c835..75a75c1 100644 --- a/packages/storykit/src/components/Button/Button.tsx +++ b/packages/storykit/src/components/Button/Button.tsx @@ -2,29 +2,26 @@ import { cn } from "@/lib/utils" import { type VariantProps, cva } from "class-variance-authority" import React from "react" -// import "../../global.css" +import "../../global.css" +import "./styles.css" -const button = cva( - "rounded-md border px-4 py-2 focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50", - { - variants: { - variant: { - primary: - "border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white", - secondary: "border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white", - }, - size: { - small: "text-sm", - medium: "text-base", - large: "text-lg", - }, +const button = cva("sk-button", { + variants: { + variant: { + primary: "sk-button--primary", + secondary: "sk-button--secondary", }, - defaultVariants: { - variant: "primary", - size: "medium", + size: { + small: "sk-button--small", + medium: "sk-button--medium", + large: "sk-button--large", }, - } -) + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, +}) export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof button> & { diff --git a/packages/storykit/src/components/Button/styles.css b/packages/storykit/src/components/Button/styles.css new file mode 100644 index 0000000..5bd2b7a --- /dev/null +++ b/packages/storykit/src/components/Button/styles.css @@ -0,0 +1,21 @@ +.sk-button { + @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; + + &.sk-button--primary { + @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; + } + + &.sk-button--secondary { + @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; + } + + &.sk-button--small { + @apply text-xs px-2 py-1; + } + &.sk-button--medium { + @apply text-base px-4 py-2; + } + &.sk-button--large { + @apply text-xl px-6 py-3; + } +} From 8d6353a42fe1d245479cbf73e344115103a64780 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 14:01:37 -0700 Subject: [PATCH 51/74] use BEM naming --- .../IpPolicyAccordion/IpPolicyAccordion.tsx | 40 +++++++++++-------- .../components/IpPolicyAccordion/styles.css | 32 +++++++-------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx index 74ca5ab..bf01fc6 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -70,9 +70,9 @@ const ShowCannots = ({ type }: { type: string }) => { const policiesStyles = cva("", { variants: { size: { - small: "small", - medium: "medium", - large: "large", + small: "skIpPolicyAccordion--small", + medium: "skIpPolicyAccordion--medium", + large: "skIpPolicyAccordion--large", }, }, }) @@ -88,23 +88,31 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 return policyData?.length ? ( - <div className={cn("storykit-ip-policy-accordion", policiesStyles({ size }))}> + <div className={cn("skIpPolicyAccordion", policiesStyles({ size }))}> {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} {(policyData as unknown as any[])?.map((policy, index) => ( - <div key={policy.id} className="policy-item"> - <div className="policy-item-header" onClick={() => setExpanded(expanded === index ? null : index)}> + <div key={policy.id} className="skIpPolicyAccordion__item"> + <div + className="skIpPolicyAccordion__item-header" + onClick={() => setExpanded(expanded === index ? null : index)} + > {getPolicyTypeByPILData(policy.licenseTerms)} {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} </div> - <div className={cn("policy-item-list", expanded === index && "policy-item-list-expanded")}> - <div className="policy-properties"> + <div + className={cn( + "skIpPolicyAccordion__item-list", + expanded === index && "skIpPolicyAccordion__item-list--expanded" + )} + > + <div className="skIpPolicyAccordion__properties"> {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( <> - <div className="policy-item-list-title">Others Can</div> - <div className="policy-list"> + <div className="skIpPolicyAccordion__item-list-title">Others Can</div> + <div className="skIpPolicyAccordion__list"> {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( - <div key={index} className="policy-property policy-property-can"> + <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--can"> <CircleCheck width={iconWidth} /> <span>{can}</span> </div> @@ -112,10 +120,10 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { </div> </> ) : null} - <div className="policy-item-list-title">Others Cannot</div> - <div className="policy-list"> + <div className="skIpPolicyAccordion__item-list-title">Others Cannot</div> + <div className="skIpPolicyAccordion__list"> {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( - <div key={index} className="policy-property policy-property-cannot"> + <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--cannot"> <CircleMinus width={iconWidth} /> <span>{can}</span> </div> @@ -124,12 +132,12 @@ function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { </div> </div> - {index < policyData.length - 1 && <div className="policy-divider" />} + {index < policyData.length - 1 && <div className="skIpPolicyAccordion__divider" />} </div> ))} </div> ) : ( - <div className="storykit-ip-policy-accordion no-policy">No Policy</div> + <div className="skIpPolicyAccordion skIpPolicyAccordion--no-policy">No Policy</div> ) } diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css index 685e35f..0cefe8e 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/styles.css +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -1,55 +1,55 @@ -.storykit-ip-policy-accordion { +.skIpPolicyAccordion { @apply flex flex-col w-full min-w-48; - .policy-item { + .skIpPolicyAccordion__item { @apply flex flex-col w-full; } - .policy-item-header { + .skIpPolicyAccordion__item-header { @apply flex w-full items-center justify-between cursor-pointer; } - .policy-item-list { + .skIpPolicyAccordion__item-list { @apply flex w-full items-center justify-between overflow-hidden h-0; - &.policy-item-list-expanded { + &.skIpPolicyAccordion__item-list--expanded { @apply h-auto; } } - .policy-properties { + .skIpPolicyAccordion__properties { @apply flex flex-col pt-2 gap-2; } - .policy-item-list-title { + .skIpPolicyAccordion__item-list-title { @apply font-bold; } - .policy-list { + .skIpPolicyAccordion__list { @apply flex flex-col; } - .policy-property { + .skIpPolicyAccordion__property { @apply flex w-full items-center gap-2; - &.policy-property-can > svg { + &.skIpPolicyAccordion__property--can > svg { @apply text-green-500; } - &.policy-property-cannot > svg { + &.skIpPolicyAccordion__property--cannot > svg { @apply text-red-500; } } - .policy-divider { + .skIpPolicyAccordion__divider { @apply border-b border-gray-200 w-full my-2; } - &.small { + &.skIpPolicyAccordion--small { @apply text-sm; } - &.medium { + &.skIpPolicyAccordion--medium { @apply text-base; .policy-list { @@ -57,14 +57,14 @@ } } - &.large { + &.skIpPolicyAccordion--large { @apply text-lg; .policy-list { @apply gap-2; } } - &.no-policy { + &.skIpPolicyAccordion--no-policy { @apply text-slate-400; } } From 2e1c882fa3f7577a55af19d6f5c4036d7c26b572 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 15:04:26 -0700 Subject: [PATCH 52/74] css module support --- .../components/Button/Button-css-modules.tsx | 45 +++++++++++++++++++ .../src/components/Button/styles.module.css | 21 +++++++++ packages/storykit/src/declarations.d.ts | 4 ++ pnpm-lock.yaml | 1 + 4 files changed, 71 insertions(+) create mode 100644 packages/storykit/src/components/Button/Button-css-modules.tsx create mode 100644 packages/storykit/src/components/Button/styles.module.css create mode 100644 packages/storykit/src/declarations.d.ts diff --git a/packages/storykit/src/components/Button/Button-css-modules.tsx b/packages/storykit/src/components/Button/Button-css-modules.tsx new file mode 100644 index 0000000..987c681 --- /dev/null +++ b/packages/storykit/src/components/Button/Button-css-modules.tsx @@ -0,0 +1,45 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" +import styles from "./styles.module.css" + +const button = cva(styles.skButton, { + variants: { + variant: { + primary: styles.primary, + secondary: styles.secondary, + }, + size: { + small: styles.small, + medium: styles.medium, + large: styles.large, + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, +}) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + // <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/packages/storykit/src/components/Button/styles.module.css b/packages/storykit/src/components/Button/styles.module.css new file mode 100644 index 0000000..d024632 --- /dev/null +++ b/packages/storykit/src/components/Button/styles.module.css @@ -0,0 +1,21 @@ +.skButton { + @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; + + &.primary { + @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; + } + + &.secondary { + @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; + } + + &.small { + @apply text-xs px-2 py-1; + } + &.medium { + @apply text-base px-4 py-2; + } + &.large { + @apply text-xl px-6 py-3; + } +} diff --git a/packages/storykit/src/declarations.d.ts b/packages/storykit/src/declarations.d.ts new file mode 100644 index 0000000..a5ad056 --- /dev/null +++ b/packages/storykit/src/declarations.d.ts @@ -0,0 +1,4 @@ +declare module "*.module.css" { + const classes: { [key: string]: string } + export default classes +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 779575b..c2d139e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12946,6 +12946,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + requiresBuild: true dev: true /pify@5.0.0: From b750fefc598738b0584df3fdbc774dad9ecce44a Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 15:04:41 -0700 Subject: [PATCH 53/74] button BEM naming --- examples/next-app/components/HomePage.tsx | 4 +++- packages/storykit/src/components/Button/Button.tsx | 12 ++++++------ packages/storykit/src/components/Button/styles.css | 12 ++++++------ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index f381ac9..4c7c762 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,6 +1,6 @@ "use client" -import { IpAssetProvider, useIpAssetContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph } from "@storyprotocol/storykit" +import { IpAssetProvider, useIpAssetContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph, Button } from "@storyprotocol/storykit" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" @@ -28,6 +28,8 @@ export default function Home() { <IpPolicyAccordion size="medium" /> </IpAssetProvider> + <Button variant="primary" size="medium">Primary Button</Button> + {/* <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> <ExampleComponent /> </IpAssetProvider> */} diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx index 75a75c1..7ea8640 100644 --- a/packages/storykit/src/components/Button/Button.tsx +++ b/packages/storykit/src/components/Button/Button.tsx @@ -5,16 +5,16 @@ import React from "react" import "../../global.css" import "./styles.css" -const button = cva("sk-button", { +const button = cva("skButton", { variants: { variant: { - primary: "sk-button--primary", - secondary: "sk-button--secondary", + primary: "skButton--primary", + secondary: "skButton--secondary", }, size: { - small: "sk-button--small", - medium: "sk-button--medium", - large: "sk-button--large", + small: "skButton--small", + medium: "skButton--medium", + large: "skButton--large", }, }, defaultVariants: { diff --git a/packages/storykit/src/components/Button/styles.css b/packages/storykit/src/components/Button/styles.css index 5bd2b7a..384f0fc 100644 --- a/packages/storykit/src/components/Button/styles.css +++ b/packages/storykit/src/components/Button/styles.css @@ -1,21 +1,21 @@ -.sk-button { +.skButton { @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; - &.sk-button--primary { + &.skButton--primary { @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; } - &.sk-button--secondary { + &.skButton--secondary { @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; } - &.sk-button--small { + &.skButton--small { @apply text-xs px-2 py-1; } - &.sk-button--medium { + &.skButton--medium { @apply text-base px-4 py-2; } - &.sk-button--large { + &.skButton--large { @apply text-xl px-6 py-3; } } From b07e114f1965e7c2c6c67a80ef0dcd6e29d8baaa Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 15:16:27 -0700 Subject: [PATCH 54/74] extract ip graph styles --- packages/storykit/src/components/IpGraph/IpGraph.tsx | 5 +++-- packages/storykit/src/components/IpGraph/styles.css | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 packages/storykit/src/components/IpGraph/styles.css diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx index da0ce41..2673224 100644 --- a/packages/storykit/src/components/IpGraph/IpGraph.tsx +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -1,9 +1,10 @@ import React, { useEffect, useMemo, useState } from "react" -// import "../../global.css" +import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" import { useIpAssetContext } from "../../providers" +import "./styles.css" export type IpGraphProps = { width?: number @@ -76,7 +77,7 @@ function IpGraph({ width = 500, height = 500 }: IpGraphProps) { } return ( - <div className="relative"> + <div className="skIpGraph"> {ForceGraph ? ( <ForceGraph width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> ) : null} diff --git a/packages/storykit/src/components/IpGraph/styles.css b/packages/storykit/src/components/IpGraph/styles.css new file mode 100644 index 0000000..1bae73e --- /dev/null +++ b/packages/storykit/src/components/IpGraph/styles.css @@ -0,0 +1,3 @@ +.skIpGraph { + @apply relative; +} From d5094b44c300a6ed400d2e38d6115fb33f81e5ac Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Wed, 8 May 2024 21:12:00 -0700 Subject: [PATCH 55/74] extract pie chart styles --- .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 19 ++++++------ .../components/IpRoyaltyPieChart/styles.css | 30 +++++++++++++++++++ 2 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/styles.css diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx index 1b84255..d24d382 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -3,7 +3,8 @@ import { useIpAssetContext } from "@/providers" import { useEffect, useState } from "react" import { Address } from "viem" -// import "../../global.css" +import "../../global.css" +import "./styles.css" function IpRoyaltyPieChart() { const { royaltyData } = useIpAssetContext() @@ -76,18 +77,18 @@ function IpRoyaltyPieChart() { } return ( - <div className="flex flex-col items-center justify-between"> - <div className="min-h-[230px]"> + <div className="skIpRoyaltyPieChart"> + <div className="skIpRoyaltyPieChart__chart"> {ApexChart ? ( <ApexChart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> ) : null} </div> - <div className="w-full min-w-[300px] px-2"> - <dl className="divide-y divide-gray-100 overflow-x-hidden text-sm leading-6"> + <div className="skIpRoyaltyPieChart__key"> + <dl className="skIpRoyaltyPieChart__list"> {royaltyData?.targetAncestors.map((target, i) => ( - <div key={target} className="flex justify-between gap-x-4 py-1"> - <dt className="text-xs capitalize text-gray-500">{shortenAddress(target)}</dt> - <dd className="truncate text-gray-700">{royaltyData.targetRoyaltyAmount[i]}</dd> + <div key={target} className="skIpRoyaltyPieChart__item"> + <dt className="skIpRoyaltyPieChart__address">{shortenAddress(target)}</dt> + <dd className="skIpRoyaltyPieChart__value">{royaltyData.targetRoyaltyAmount[i]}</dd> </div> ))} </dl> @@ -96,7 +97,7 @@ function IpRoyaltyPieChart() { ) } - return <div className="flex h-60 flex-col items-center justify-center text-slate-400">No Royalty Data</div> + return <div className="skIpRoyaltyPieChart skIpRoyaltyPieChart--empty">No Royalty Data</div> } export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css new file mode 100644 index 0000000..d59f690 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css @@ -0,0 +1,30 @@ +.skIpRoyaltyPieChart { + @apply flex flex-col items-center justify-between; + + .skIpRoyaltyPieChart__chart { + @apply min-h-[230px]; + } + + .skIpRoyaltyPieChart__key { + @apply w-full min-w-[300px] px-2; + } + + .skIpRoyaltyPieChart__list { + @apply divide-y divide-gray-100 overflow-x-hidden text-sm leading-6; + } + + .skIpRoyaltyPieChart__item { + @apply flex justify-between gap-x-4 py-1; + } + + .skIpRoyaltyPieChart__address { + @apply text-xs capitalize text-gray-500; + } + .skIpRoyaltyPieChart__value { + @apply truncate text-gray-700; + } + + &.skIpRoyaltyPieChart--empty { + @apply items-start text-slate-400; + } +} From 96340a3607f3403a4733cb70c787191ca0c5e905 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 11:14:30 -0700 Subject: [PATCH 56/74] extract widget styles --- .../src/components/IpWidget/IpWidget.tsx | 353 +++++++++--------- .../src/components/IpWidget/styles.css | 218 +++++++++++ 2 files changed, 389 insertions(+), 182 deletions(-) create mode 100644 packages/storykit/src/components/IpWidget/styles.css diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx index ef5f9df..73fc24d 100644 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -6,12 +6,13 @@ import { SiOpensea } from "react-icons/si" import { TbLicense } from "react-icons/tb" import { Address } from "viem" -// import "../../global.css" +import "../../global.css" import { cn, shortenAddress } from "../../lib/utils" import { IpAssetProvider, useIpAssetContext } from "../../providers" import { IpGraph } from "../IpGraph" import { IpPolicyAccordion } from "../IpPolicyAccordion" import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" +import "./styles.css" export type IpWidgetProps = { ipId: Address @@ -33,20 +34,20 @@ function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBot const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) const _Tabs = () => ( - <div className={cn("w-full px-2", isBottomNav ? "pb-2" : "pt-2")}> + <div className={cn("skIpWidget__tabs", isBottomNav && "skIpWidget__tabs--bottom")}> <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> </div> ) const _Card = () => ( - <div className="flex size-full flex-auto flex-col p-2"> + <div className="skIpWidget__card"> <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> </div> ) return ( <IpAssetProvider ipId={ipId} key={ipId}> - <div className="flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg"> + <div className="skIpWidget"> {isBottomNav ? <_Card /> : <_Tabs />} {isBottomNav ? <_Tabs /> : <_Card />} </div> @@ -54,9 +55,96 @@ function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBot ) } +function Tabs({ + ipId, + activeTab, + setActiveTab, +}: { + ipId: Address + activeTab: string + setActiveTab: (tab: string) => void +}) { + return ( + <div className="skIpWidget__tabsContainer" id={ipId}> + <div className="skIpWidget__tabsInner"> + {IPA_CARD_TABS.map((tab) => ( + <button + key={`${ipId}-${tab.id}`} + onClick={() => setActiveTab(tab.id)} + className={cn("skIpWidget__tab", activeTab !== tab.id && "skIpWidget__tab--active")} + style={{ + WebkitTapHighlightColor: "transparent", + }} + > + {activeTab === tab.id && <span className="skIpWidget__activeTab" />} + {tab.label} + </button> + ))} + </div> + <button> + <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g clipPath="url(#clip0_235_3)"> + <mask + id="mask0_235_3" + style={{ maskType: "luminance" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="512" + height="512" + > + <path d="M512 0H0V512H512V0Z" fill="white" /> + </mask> + <g mask="url(#mask0_235_3)"> + <path + d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" + fill="black" + /> + </g> + </g> + <defs> + <clipPath id="clip0_235_3"> + <rect width="512" height="512" fill="white" /> + </clipPath> + </defs> + </svg> + </button> + </div> + ) +} + +function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { + switch (activeTab) { + case "overview": + return <IPAssetOverview isBottomNav={isBottomNav} /> + case "licensing": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <div className="skIpWidget__policyContainer"> + <IpPolicyAccordion size="small" /> + </div> + </IPAssetLayout> + ) + case "derivatives": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpGraph width={370} height={250} /> + </IPAssetLayout> + ) + case "royalty": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpRoyaltyPieChart /> + </IPAssetLayout> + ) + default: + return <IPAssetOverview /> + } +} + function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { return ( - <div className={cn("flex gap-2", isBottomNav ? "flex-col" : "flex-col-reverse justify-between h-full flex-auto")}> + <div className={cn("skIpWidget__ipAssetLayout", !isBottomNav && "skIpWidget__ipAssetLayout--topNav")}> <IPAssetHeader /> {children} </div> @@ -66,11 +154,10 @@ function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; i function IPAssetDropdownMenu() { const { assetData } = useIpAssetContext() return ( - <Menu as="div" className="relative inline-block text-left"> + <Menu as="div" className="skIpWidget__ipAssetDropdownMenu"> <div> - <Menu.Button className="inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm"> + <Menu.Button className="skIpWidget__ipAssetDropdownMenu__button"> <svg - className="size-4 flex-none text-gray-600" xmlns="http://www.w3.org/2000/svg" width="24" height="24" @@ -97,42 +184,36 @@ function IPAssetDropdownMenu() { leaveFrom="transform opacity-100 scale-100" leaveTo="transform opacity-0 scale-95" > - <Menu.Items className="absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none"> + <Menu.Items className="skIpWidget__ipAssetDropdownMenu__items"> {assetData?.rootIpIds?.[0]?.id && ( - <div className="px-4 py-2"> - <p className="text-xs text-slate-400">Root IP</p> - <div className="flex items-center"> + <div className="skIpWidget__ipAssetDropdownMenu__rootIp"> + <p className="skIpWidget__ipAssetDropdownMenu__rootIp__title">Root IP</p> + <div className="skIpWidget__ipAssetDropdownMenu__rootIp__item"> <img - className="relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white " src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} alt={assetData?.rootIpIds?.[0]?.id as Address} ></img> - <p className="truncate text-sm text-gray-900"> - {shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)} - </p> + <p>{shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)}</p> </div> </div> )} {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( - <div className="px-4 py-2"> - <p className="text-xs text-slate-400">Parent IPs</p> - <div className="flex items-center"> - <div className="mr-3 -space-x-3"> - {assetData?.parentIpIds - ?.slice(0, 5) - .map((asset, index) => ( - <img - key={index} - className={cn( - "relative inline-block h-5 w-5 rounded-full ring-2 ring-white", - `z-${((assetData?.parentIpIds?.length as number) - index) * 10}` - )} - src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} - alt={asset.id} - /> - ))} + <div className="skIpWidget__ipAssetDropdownMenu__parentIp"> + <p className="skIpWidget__ipAssetDropdownMenu__parentIp__title">Parent IPs</p> + <div className="skIpWidget__ipAssetDropdownMenu__parentIp__item"> + <div className="skIpWidget__ipAssetDropdownMenu__parentIp__avatars"> + {[...assetData?.parentIpIds, ...assetData?.parentIpIds]?.slice(0, 5).map((asset, index) => ( + <img + key={index} + style={{ + zIndex: ((assetData?.parentIpIds?.length as number) - index) * 10, + }} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} </div> - <p className=" truncate text-sm text-gray-900"> + <p className="skIpWidget__ipAssetDropdownMenu__parentIp__addresses"> {assetData?.parentIpIds?.length === 1 ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) : `${assetData?.parentIpIds?.length} total `} @@ -141,25 +222,22 @@ function IPAssetDropdownMenu() { </div> )} {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( - <div className="px-4 py-2"> - <p className="text-xs text-slate-400">Child IPs</p> - <div className="flex items-center"> - <div className="mr-3 -space-x-3"> - {assetData?.childIpIds - ?.slice(0, 5) - .map((asset, index) => ( - <img - key={index} - className={cn( - "relative inline-block h-5 w-5 rounded-full ring-2 ring-white", - `z-${((assetData?.childIpIds?.length as number) - index) * 5}` - )} - src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} - alt={asset.id} - /> - ))} + <div className="skIpWidget__ipAssetDropdownMenu__childIp"> + <p className="skIpWidget__ipAssetDropdownMenu__childIp__title">Child IPs</p> + <div className="skIpWidget__ipAssetDropdownMenu__childIp__container"> + <div className="skIpWidget__ipAssetDropdownMenu__childIp__avatars"> + {assetData?.childIpIds?.slice(0, 5).map((asset, index) => ( + <img + key={index} + style={{ + zIndex: ((assetData?.childIpIds?.length as number) - index) * 5, + }} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} </div> - <p className=" truncate text-sm text-gray-900"> + <p className="skIpWidget__ipAssetDropdownMenu__childIp__addresses"> {assetData?.childIpIds?.length === 1 ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) : `${assetData?.childIpIds?.length} total `} @@ -167,20 +245,17 @@ function IPAssetDropdownMenu() { </div> </div> )} - <div className="py-1"> + <div className="skIpWidget__ipAssetDropdownMenu__menu"> <Menu.Item> {({ active }) => ( <a href="#" className={cn( - active ? "bg-gray-100 text-gray-900" : "text-gray-700", - "group flex items-center px-4 py-2 text-sm" + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" )} > - <FaWandMagicSparkles - className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" - aria-hidden="true" - /> + <FaWandMagicSparkles className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> Remix </a> )} @@ -191,11 +266,11 @@ function IPAssetDropdownMenu() { <a href="#" className={cn( - active ? "bg-gray-100 text-gray-900" : "text-gray-700", - "group flex items-center px-4 py-2 text-sm" + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" )} > - <SiOpensea className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + <SiOpensea className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> View on Opensea </a> )} @@ -205,11 +280,11 @@ function IPAssetDropdownMenu() { <a href="#" className={cn( - active ? "bg-gray-100 text-gray-900" : "text-gray-700", - "group flex items-center px-4 py-2 text-sm" + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" )} > - <TbLicense className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + <TbLicense className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> Buy License </a> )} @@ -219,11 +294,11 @@ function IPAssetDropdownMenu() { <a href="#" className={cn( - active ? "bg-gray-100 text-gray-900" : "text-gray-700", - "group flex items-center px-4 py-2 text-sm" + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" )} > - <IoIosShareAlt className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + <IoIosShareAlt className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> Share </a> )} @@ -238,17 +313,23 @@ function IPAssetDropdownMenu() { function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { const { nftData, assetData } = useIpAssetContext() return ( - <div className="flex w-full flex-row justify-between"> - <div className="flex w-full flex-row justify-start gap-2"> - <div className={cn("", hideImage ? "hidden" : "")}> - <img src={nftData?.image_url} className="size-10 rounded-md object-cover" /> + <div className="skIpWidget__ipAssetHeader"> + <div className="skIpWidget__ipAssetHeader__inner"> + <div + className={cn("skIpWidget__ipAssetHeader__image", hideImage && "skIpWidget__ipAssetHeader__image--hidden")} + > + <img src={nftData?.image_url} /> </div> <div> <div> - <h1 className="font-semibold">{assetData?.nftMetadata.name || nftData?.name || "Untitled"}</h1> - <h2 className="text-xs"> + <h1 className="skIpWidget__ipAssetHeader__name"> + {assetData?.nftMetadata.name || nftData?.name || "Untitled"} + </h1> + <h2 className="skIpWidget__ipAssetHeader__owner"> Owned by{" "} - <span className="text-slate-400">{shortenAddress(nftData?.owners[0].owner_address as string)}</span> + <span className="skIpWidget__ipAssetHeader__owner__address"> + {shortenAddress(nftData?.owners[0].owner_address as string)} + </span> </h2> </div> </div> @@ -258,97 +339,6 @@ function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { ) } -function Tabs({ - ipId, - activeTab, - setActiveTab, -}: { - ipId: Address - activeTab: string - setActiveTab: (tab: string) => void -}) { - return ( - <div className="flex space-x-1" id={ipId}> - <div className="flex w-full justify-between"> - {IPA_CARD_TABS.map((tab) => ( - <button - key={`${ipId}-${tab.id}`} - onClick={() => setActiveTab(tab.id)} - className={`${ - activeTab === tab.id ? "" : "hover:text-black/60" - } relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2`} - style={{ - WebkitTapHighlightColor: "transparent", - }} - > - {activeTab === tab.id && ( - <span className="absolute inset-0 z-10 bg-white mix-blend-difference rounded-full" /> - )} - {tab.label} - </button> - ))} - </div> - <button> - <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> - <g clipPath="url(#clip0_235_3)"> - <mask - id="mask0_235_3" - style={{ maskType: "luminance" }} - maskUnits="userSpaceOnUse" - x="0" - y="0" - width="512" - height="512" - > - <path d="M512 0H0V512H512V0Z" fill="white" /> - </mask> - <g mask="url(#mask0_235_3)"> - <path - d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" - fill="black" - /> - </g> - </g> - <defs> - <clipPath id="clip0_235_3"> - <rect width="512" height="512" fill="white" /> - </clipPath> - </defs> - </svg> - </button> - </div> - ) -} - -function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { - switch (activeTab) { - case "overview": - return <IPAssetOverview isBottomNav={isBottomNav} /> - case "licensing": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <div className="p-2"> - <IpPolicyAccordion size="small" /> - </div> - </IPAssetLayout> - ) - case "derivatives": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <IpGraph width={370} height={250} /> - </IPAssetLayout> - ) - case "royalty": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <IpRoyaltyPieChart /> - </IPAssetLayout> - ) - default: - return <IPAssetOverview /> - } -} - function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() @@ -356,9 +346,9 @@ function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { const Title = () => isLoading ? ( - <div className="flex animate-pulse flex-col gap-2"> - <div className="h-4 w-20 rounded bg-slate-200"></div> - <div className="h-3 w-32 rounded bg-slate-200"></div> + <div className="skIpWidget__ipAssetOverview__titleLoading"> + <div></div> + <div></div> </div> ) : ( <IPAssetHeader hideImage /> @@ -366,33 +356,32 @@ function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { const AssetImage = () => isLoading ? ( - <div className="w-full animate-pulse py-1"> - <div className="flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700"> - <svg - className="size-10 text-slate-100 dark:text-slate-600" - aria-hidden="true" - xmlns="http://www.w3.org/2000/svg" - fill="currentColor" - viewBox="0 0 20 18" - > + <div className="skIpWidget__ipAssetOverview__assetImage__loading"> + <div> + <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 18"> <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> </svg> </div> </div> ) : ( - <div className="flex w-full justify-center text-center"> - <img src={nftData?.image_url} className="rounded-md object-contain" /> + <div className="skIpWidget__ipAssetOverview__assetImage"> + <img src={nftData?.image_url} /> </div> ) const TitleBar = () => ( - <div className={cn("flex w-full flex-row justify-between", isBottomNav ? "pb-1" : "pt-1")}> + <div + className={cn( + "skIpWidget__ipAssetOverview__titleBar", + isBottomNav && "skIpWidget__ipAssetOverview__titleBar--bottom" + )} + > <Title /> </div> ) return ( - <div className="flex w-full flex-col items-start justify-start"> + <div className="skIpWidget__ipAssetOverview"> {isBottomNav && <TitleBar />} <AssetImage /> {!isBottomNav && <TitleBar />} diff --git a/packages/storykit/src/components/IpWidget/styles.css b/packages/storykit/src/components/IpWidget/styles.css new file mode 100644 index 0000000..e120f5a --- /dev/null +++ b/packages/storykit/src/components/IpWidget/styles.css @@ -0,0 +1,218 @@ +.skIpWidget { + @apply flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg; + + .skIpWidget__card { + @apply flex size-full flex-auto flex-col p-2; + } + + .skIpWidget__tabs { + @apply w-full px-2 pt-2; + + &.skIpWidget__tabs--bottom { + @apply pb-2 pt-0; + } + + .skIpWidget__tabsContainer { + @apply flex space-x-1; + } + + .skIpWidget__tabsInner { + @apply flex w-full justify-between; + } + + .skIpWidget__tab { + @apply relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2; + + &.skIpWidget__tab--active { + @apply hover:text-black/60; + } + } + + .skIpWidget__activeTab { + @apply absolute inset-0 z-10 bg-white mix-blend-difference rounded-full; + } + } + + .skIpWidget__policyContainer { + @apply p-2; + + .skIpPolicyAccordion--no-policy { + @apply w-full items-center py-32; + } + } + + .skIpWidget__ipAssetLayout { + @apply flex gap-2 flex-col; + + .skIpWidget__ipAssetLayout--topNav { + @apply flex-col-reverse justify-between h-full flex-auto; + } + + .skIpRoyaltyPieChart--empty { + @apply w-full items-center py-32; + } + } + + .skIpWidget__ipAssetDropdownMenu { + @apply relative inline-block text-left; + + .skIpWidget__ipAssetDropdownMenu__button { + @apply inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm; + + svg { + @apply size-4 flex-none text-gray-600; + } + } + + .skIpWidget__ipAssetDropdownMenu__items { + @apply absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none; + } + + .skIpWidget__ipAssetDropdownMenu__rootIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__rootIp__title { + @apply text-xs text-slate-400; + } + + .skIpWidget__ipAssetDropdownMenu__rootIp__item { + @apply flex items-center; + + > img { + @apply relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white; + } + + > p { + @apply truncate text-sm text-gray-900; + } + } + } + + .skIpWidget__ipAssetDropdownMenu__parentIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__parentIp__title { + @apply text-xs text-slate-400; + } + + .skIpWidget__ipAssetDropdownMenu__parentIp__avatars { + @apply mr-3 -space-x-3; + + img { + @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; + } + } + .skIpWidget__ipAssetDropdownMenu__parentIp__addresses { + @apply truncate text-sm text-gray-900; + } + } + + .skIpWidget__ipAssetDropdownMenu__childIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__childIp__title { + @apply text-xs text-slate-400; + } + .skIpWidget__ipAssetDropdownMenu__childIp__container { + @apply flex items-center; + } + .skIpWidget__ipAssetDropdownMenu__childIp__avatars { + @apply mr-3 -space-x-3; + + img { + @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; + } + } + .skIpWidget__ipAssetDropdownMenu__childIp__addresses { + @apply truncate text-sm text-gray-900; + } + } + + .skIpWidget__ipAssetDropdownMenu__menu { + @apply py-1; + + .skIpWidget__ipAssetDropdownMenu__menu__link { + @apply flex items-center px-4 py-2 text-sm text-gray-700; + + .skIpWidget__ipAssetDropdownMenu__menu__icon { + @apply mr-3 size-5 text-gray-400; + } + + &.skIpWidget__ipAssetDropdownMenu__menu__link--active { + @apply bg-gray-100 text-gray-900; + + .skIpWidget__ipAssetDropdownMenu__menu__icon { + @apply text-gray-500; + } + } + } + } + } + + .skIpWidget__ipAssetHeader { + @apply flex w-full flex-row justify-between; + + .skIpWidget__ipAssetHeader__inner { + @apply flex w-full flex-row justify-start gap-2; + } + + .skIpWidget__ipAssetHeader__image { + &.skIpWidget__ipAssetHeader__image--hidden { + @apply hidden; + } + img { + @apply size-10 rounded-md object-cover; + } + } + .skIpWidget__ipAssetHeader__name { + @apply font-semibold; + } + .skIpWidget__ipAssetHeader__owner { + @apply text-xs; + .skIpWidget__ipAssetHeader__owner__address { + @apply text-slate-400; + } + } + } + + .skIpWidget__ipAssetOverview { + @apply flex w-full flex-col items-start justify-start; + + .skIpWidget__ipAssetOverview__titleBar { + @apply flex w-full flex-row justify-between pt-1; + + &.skIpWidget__ipAssetOverview__titleBar--bottom { + @apply pb-1 pt-0; + } + } + + .skIpWidget__ipAssetOverview__titleLoading { + @apply flex animate-pulse flex-col gap-2; + div:nth-child(1) { + @apply h-4 w-20 rounded bg-slate-200; + } + div:nth-child(2) { + @apply h-3 w-32 rounded bg-slate-200; + } + } + + .skIpWidget__ipAssetOverview__assetImage { + @apply flex w-full justify-center text-center; + + img { + @apply rounded-md object-contain; + } + } + .skIpWidget__ipAssetOverview__assetImage__loading { + @apply w-full animate-pulse py-1; + + > div { + @apply flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700; + + > svg { + @apply size-10 text-slate-100 dark:text-slate-600; + } + } + } + } +} From b53dba5c697561b4855ee1034ebc95ce5dea3a71 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 11:32:02 -0700 Subject: [PATCH 57/74] update example app --- examples/next-app/components/HomePage.tsx | 29 ++++++++++++-------- examples/next-app/components/home.module.css | 15 +++++++++- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index 4c7c762..1c84e5d 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -25,22 +25,27 @@ export default function Home() { <main className={styles.main}> <IpAssetProvider ipId="0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"> - <IpPolicyAccordion size="medium" /> + <div className={`${styles.block} ${styles.padded}`}> + <IpPolicyAccordion size="medium" /> + </div> </IpAssetProvider> - <Button variant="primary" size="medium">Primary Button</Button> + {/* <Button variant="primary" size="medium">Primary Button</Button> */} - {/* <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> - <ExampleComponent /> - </IpAssetProvider> */} - - {/* <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> - <IpRoyaltyPieChart /> - </IpAssetProvider> */} + <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> + <div className={`${styles.block} ${styles.padded}`}> + <ExampleComponent /> + </div> + <div className={`${styles.block} ${styles.padded}`}> + <IpRoyaltyPieChart /> + </div> + </IpAssetProvider> - {/* <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> - <IpGraph /> - </IpAssetProvider> */} + <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> + <div className={styles.block}> + <IpGraph width={400} height={300} /> + </div> + </IpAssetProvider> <IpWidget ipId={"0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"} /> </main> diff --git a/examples/next-app/components/home.module.css b/examples/next-app/components/home.module.css index f03ac16..ee1e8e6 100644 --- a/examples/next-app/components/home.module.css +++ b/examples/next-app/components/home.module.css @@ -5,5 +5,18 @@ justify-content: center; gap: 1rem; width: 100%; - height: 100vh; + padding: 4rem 0; +} + +.block { + background-color: #f9f9f9; + border-radius: 0.5rem; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + border: 1px solid #ddd; + overflow: hidden; + +} + +.padded { + padding: 1rem; } From 4041acc34f9c53ce4ad1b2dc5569adf49952f20c Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 12:25:16 -0700 Subject: [PATCH 58/74] Update Introduction.mdx --- .../storykit/src/stories/Introduction.mdx | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index a1d44d0..e248350 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -15,7 +15,7 @@ _Storykit is a private package so you need repo access and a personal access tok 2 . Create an `.npmrc` file in the root of your project and add the following: ```bash -//npm.pkg.github.com/:_authToken=$NPM_TOKEN +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} @storyprotocol/storykit:registry=https://npm.pkg.github.com ``` @@ -46,6 +46,43 @@ See the individual component docs ro see if they require an additional dependenc npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d ``` +## Run locally + +### Storybook + +Run Storybook locally for component development and documentation: + +```bash +pnpm dev +``` + +Find the Storybook at [http://localhost:6006](http://localhost:6006) + +### Example app + +Run the next.js example app: + +```bash +pnpm build +pnpm dev-example +``` + +The dev server will be running at [http://localhost:3000](http://localhost:3000) + +### Linting and formatting + +Lint with eslint: + +```bash +pnpm lint +``` + +Format with prettier: + +```bash +pnpm format +``` + ## Usage Using Storykit in your React app From 0f6ba4eeedbf91ae7dec73a82ef4ecefba3dbcc7 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 13:28:03 -0700 Subject: [PATCH 59/74] update docuementation --- README.md | 196 ++++++++++++++---- .../storykit/src/stories/Introduction.mdx | 2 +- 2 files changed, 154 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index fb889fa..1095638 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,190 @@ -# Turborepo starter with Rollup +import { Meta } from "@storybook/blocks" -This is an official starter Turborepo, showing how Turborepo can be used with Rollup for bundling a `ui` package. +<Meta title="Introduction" /> -## Using this example +# Storykit -Run the following command: +Plug-and-play React components for Story Protocol. -```sh -npx create-turbo@latest -e with-rollup +## Installation + +_Storykit is a private package so you need repo access and a personal access token to use_ + +1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) + +2 . Create an `.npmrc` file in the root of your project and add the following: + +```bash +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +3 . Add your personal access token to your environment variables + +```bash +NPM_TOKEN=your_personal_access_token ``` -## What's inside? +4 . Install the package and the required react-query dependencies -This Turborepo includes the following packages/apps: +```bash +npm install @storyprotocol/storykit @tanstack/react-query +``` -### Apps and Packages +## Dependencies -- `web`: a [Next.js](https://nextjs.org) app -- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) -- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo -- `@repo/ui`: a React component library used by the `web` application, compiled with Rollup +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. -Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). +Some components have additional dependencies including: -### Utilities +- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) +- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) -This Turborepo has some additional tools already setup for you: +See the individual component docs ro see if they require an additional dependency or install them all at once with: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d +``` -- [TypeScript](https://www.typescriptlang.org/) for static type checking -- [ESLint](https://eslint.org/) for code linting -- [Prettier](https://prettier.io) for code formatting +## Run locally -### Build +### Storybook -To build all apps and packages, run the following command: +Run Storybook locally for component development and documentation: +```bash +pnpm dev ``` -cd my-turborepo -pnpm run build + +Find the Storybook at [http://localhost:6006](http://localhost:6006) + +### Example app + +Run the next.js [example app](./examples/next-app/): + +```bash +pnpm build +pnpm dev-example ``` -### Develop +The dev server will be running at [http://localhost:3000](http://localhost:3000) + +### Linting and formatting -To develop all apps and packages, run the following command: +Lint with eslint: +```bash +pnpm lint ``` -cd my-turborepo -pnpm run dev + +Format with prettier: + +```bash +pnpm format ``` -### Remote Caching +## Usage + +Using Storykit in your React app + +### Include React Query -Turborepo can use a technique known as [Remote Caching](https://turborepo.org/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. +React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. -By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup), then enter the following commands: +```typescript +// app/layout.tsx +import Providers from "./Providers" + +export default function Layout({children}) { + return ( + <html> + <body> + <Providers>{children}</Providers> + </body> + </html> + ) +} ``` -cd my-turborepo -npx turbo login + +```typescript +// app/Providers.tsx + +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export default function Providers({ children }) { + return ( + <QueryClientProvider client={queryClient}> + {children} + </QueryClientProvider> + ) +} + ``` -This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). +### The IpAssetProvider + +The IpAssetProvider provides IP Asset data to child components. + +```typescript +import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; -Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; ``` -npx turbo link + +### The IpGraph + +Some components require the IpAssetProvider to supply asset data + +```typescript +import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; ``` -## Useful Links +### The IpWidget -Learn more about the power of Turborepo: +The IpAssetProvider is already included in the IpWidget + +```typescript +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ) +} + +``` -- [Pipelines](https://turborepo.org/docs/core-concepts/pipelines) -- [Caching](https://turborepo.org/docs/core-concepts/caching) -- [Remote Caching](https://turborepo.org/docs/core-concepts/remote-caching) -- [Scoped Tasks](https://turborepo.org/docs/core-concepts/scopes) -- [Configuration Options](https://turborepo.org/docs/reference/configuration) -- [CLI Usage](https://turborepo.org/docs/reference/command-line-reference) +See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index e248350..e479a1b 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -60,7 +60,7 @@ Find the Storybook at [http://localhost:6006](http://localhost:6006) ### Example app -Run the next.js example app: +Run the next.js [example app](../examples/next-app/): ```bash pnpm build From 93291235e982a95b0e4bd0176a52628ab1849cbd Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 13:44:11 -0700 Subject: [PATCH 60/74] update docs --- README.md | 23 ++++++++++++++----- .../storykit/src/stories/Introduction.mdx | 23 ++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 1095638..c952590 100644 --- a/README.md +++ b/README.md @@ -12,25 +12,36 @@ _Storykit is a private package so you need repo access and a personal access tok 1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) -2 . Create an `.npmrc` file in the root of your project and add the following: +2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: ```bash -//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +//npm.pkg.github.com/:_authToken=NPM_TOKEN @storyprotocol/storykit:registry=https://npm.pkg.github.com ``` -3 . Add your personal access token to your environment variables +3 . Add `.npmrc` to your `.gitignore` to keep your access token private. + +4 . Install the package and the required dependencies: ```bash -NPM_TOKEN=your_personal_access_token +npm install @storyprotocol/storykit @tanstack/react-query ``` -4 . Install the package and the required react-query dependencies +## Deploying on vercel + +To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: ```bash -npm install @storyprotocol/storykit @tanstack/react-query +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +@storyprotocol/storykit:registry=https://npm.pkg.github.com ``` +#### OR... + +You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. + +See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. + ## Dependencies Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index e479a1b..8d5a16c 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -12,25 +12,36 @@ _Storykit is a private package so you need repo access and a personal access tok 1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) -2 . Create an `.npmrc` file in the root of your project and add the following: +2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: ```bash -//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +//npm.pkg.github.com/:_authToken=NPM_TOKEN @storyprotocol/storykit:registry=https://npm.pkg.github.com ``` -3 . Add your personal access token to your environment variables +3 . Add `.npmrc` to your `.gitignore` to keep your access token private. + +4 . Install the package and the required dependencies: ```bash -NPM_TOKEN=your_personal_access_token +npm install @storyprotocol/storykit @tanstack/react-query ``` -4 . Install the package and the required react-query dependencies +## Deploying on vercel + +To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: ```bash -npm install @storyprotocol/storykit @tanstack/react-query +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +@storyprotocol/storykit:registry=https://npm.pkg.github.com ``` +OR... + +You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. + +See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. + ## Dependencies Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. From e0c2ea7533790d8ac692d6a1fc13a4922b4a20fc Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:06:56 -0700 Subject: [PATCH 61/74] Update IpAssetProvider.mdx --- .../__docs__/IpAssetProvider.mdx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx index e42fb0c..cbfbf01 100644 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx @@ -56,6 +56,23 @@ const ExampleComponent = () => { export default ExampleComponent; ``` +#### Provider data + +The IpAssetProvider provides the following data to its children: + +- **assetData** - The IP Asset data. +- **isAssetDataLoading** - IP Asset data loading state. +- **nftData** - The NFT Metadata. +- **isNftDataLoading** - NFT Metadata loading state. +- **ipPolicyData** - Policies attached to the IP Asset. +- **isIPAPolicyDataLoading** - Policy data loading state. +- **policyData** - The Policy details including the template id, address and terms. +- **isPolicyDataLoading** - Policy data loading state. +- **licenseData** - IP Asset minted Licenses. +- **isLicenseDataLoading** - License data loading state. +- **royaltyData** - The Royalty Policy data. +- **isRoyaltyDataLoading** - Royalty Policy data loading state. + #### Arguments - **children** - The child component to provide the IP Asset context to. From 87f91bab1a6e90af7792f5b036e6f1d6d099a898 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:16:00 -0700 Subject: [PATCH 62/74] fix widget parentIpIds --- packages/storykit/src/components/IpWidget/IpWidget.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx index 73fc24d..382949d 100644 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -202,7 +202,7 @@ function IPAssetDropdownMenu() { <p className="skIpWidget__ipAssetDropdownMenu__parentIp__title">Parent IPs</p> <div className="skIpWidget__ipAssetDropdownMenu__parentIp__item"> <div className="skIpWidget__ipAssetDropdownMenu__parentIp__avatars"> - {[...assetData?.parentIpIds, ...assetData?.parentIpIds]?.slice(0, 5).map((asset, index) => ( + {assetData?.parentIpIds?.slice(0, 5).map((asset, index) => ( <img key={index} style={{ From 4d199d17c1e0c966d4ec5fa594d85712be253b62 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:20:38 -0700 Subject: [PATCH 63/74] royaltyData map types --- .../src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx index d24d382..b4fbf52 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -85,7 +85,8 @@ function IpRoyaltyPieChart() { </div> <div className="skIpRoyaltyPieChart__key"> <dl className="skIpRoyaltyPieChart__list"> - {royaltyData?.targetAncestors.map((target, i) => ( + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {royaltyData?.targetAncestors.map((target: any, i: any) => ( <div key={target} className="skIpRoyaltyPieChart__item"> <dt className="skIpRoyaltyPieChart__address">{shortenAddress(target)}</dt> <dd className="skIpRoyaltyPieChart__value">{royaltyData.targetRoyaltyAmount[i]}</dd> From b877dccf728804bd2ecbb99d913f45a002ec2c41 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:21:06 -0700 Subject: [PATCH 64/74] remove IpAssetProvider --- .../IpAssetProvider/IpAssetProvider.tsx | 153 ------------------ .../IpAssetProvider/__docs__/Example.tsx | 59 ------- .../__docs__/IpAssetProvider.mdx | 79 --------- .../__docs__/IpAssetProvider.stories.tsx | 49 ------ .../src/providers/IpAssetProvider/index.tsx | 1 - 5 files changed, 341 deletions(-) delete mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx deleted file mode 100644 index 3375937..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { useQuery } from "@tanstack/react-query" -import React from "react" -import { Address } from "viem" - -import { getResource, listResource } from "../../lib/api" -import { getNFTByTokenId } from "../../lib/simplehash" -import { NFTMetadata } from "../../lib/simplehash/types/simplehash" -import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" -import { camelize } from "../../lib/utils" - -const IpAssetContext = React.createContext<{ - // activeTab: string - // setActiveTab: React.Dispatch<React.SetStateAction<string>> - assetData: Asset | undefined - nftData: NFTMetadata | undefined - isNftDataLoading: boolean - isAssetDataLoading: boolean - ipPolicyData: IPAPolicy[] | undefined - isIPAPolicyDataLoading: boolean - policyData: Policy[] | undefined - isPolicyDataLoading: boolean - licenseData: License[] | undefined - isLicenseDataLoading: boolean - royaltyData: RoyaltyPolicy | undefined - isRoyaltyDataLoading: boolean -} | null>(null) - -export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { - // Fetch asset data - const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ - queryKey: [RESOURCE_TYPE.ASSET, ipId], - queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), - }) - - const ipaPolicyQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - } - // Fetch IPPolicy data - const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ - queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), - }) - - async function fetchPolicyDetails(data: IPAPolicy[]) { - const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) - - const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) - const results = await Promise.all(requests) - - return results.map((result) => { - return { - ...result.data, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { - return { - ...acc, - [camelize(option.trait_type)]: - option.value === "true" ? true : option.value === "false" ? false : option.value, - } - }, {}), - } - }) - } - - const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ - queryKey: ["fetchPolicyDetails", ipPolicyData?.data], - queryFn: () => fetchPolicyDetails(ipPolicyData?.data), - enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), - }) - - const licenseQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - licensorIpdId: ipId, - }, - } - // Fetch License Data - const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ - queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), - }) - - // Fetch Royalty Data - const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ - queryKey: [ - RESOURCE_TYPE.ROYALTY_POLICY, - { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - }, - ], - queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), - }) - - // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], - // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), - // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), - // }) - const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], - queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), - enabled: - Boolean(assetData) && - Boolean(assetData.data.nftMetadata.tokenContract) && - Boolean(assetData.data.nftMetadata.tokenId), - }) - - return ( - <IpAssetContext.Provider - value={{ - // activeTab, - // setActiveTab, - nftData, - isNftDataLoading, - assetData: assetData?.data, - isAssetDataLoading, - ipPolicyData: ipPolicyData?.data, - isIPAPolicyDataLoading, - policyData: policyData, - isPolicyDataLoading, - licenseData: licenseData?.data, - isLicenseDataLoading, - royaltyData: royaltyData?.data, - isRoyaltyDataLoading, - }} - > - {children} - </IpAssetContext.Provider> - ) -} - -export const useIpAssetContext = () => { - const context = React.useContext(IpAssetContext) - if (!context) { - throw new Error("useAccount must be used within an IpAssetProvider") - } - return context -} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx deleted file mode 100644 index a84a01b..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" - -const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpAssetProvider ipId={ipId}> - <ExampleComponent /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - return ( - <> - {isNftDataLoading && <div>Fetching Asset...</div>} - {nftData && !isNftDataLoading ? ( - <div className="grid grid-cols-4 gap-4"> - <> - <div className="col-span-1 text-xs text-gray-600">nft_id</div> - <div className="col-span-3 text-sm">{nftData.nft_id}</div> - - <div className="col-span-1 text-xs text-gray-600">chain</div> - <div className="col-span-3 text-sm">{nftData.chain}</div> - - <div className="col-span-1 text-xs text-gray-600">contract_address</div> - <div className="col-span-3 text-sm">{nftData.contract_address}</div> - - <div className="col-span-1 text-xs text-gray-600">token_id</div> - <div className="col-span-3 text-sm">{nftData.token_id}</div> - - <div className="col-span-1 text-xs text-gray-600">name</div> - <div className="col-span-3 text-sm">{nftData.name}</div> - - <div className="col-span-1 text-xs text-gray-600">description</div> - <div className="col-span-3 text-sm">{nftData.description}</div> - </> - </div> - ) : null} - </> - ) -} - -export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx deleted file mode 100644 index cbfbf01..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpAssetProviderStory from "./IpAssetProvider.stories" - -<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> - -# IpAssetProvider - -Provides IP Asset data to children components. - -#### Example - -<Canvas of={IpAssetProviderStory.Select} /> - -<Controls /> - -## Usage - -```ts -// wrap your component with the IpAssetProvider - -import { IpAssetProvider } from "@storyprotocol/storykit" -import ExampleComponent from './ExampleComponent' - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` - -```ts -// in your component file, context provides IP asset state - -import { useIpAssetContext } from "@storyprotocol/storykit" - -const ExampleComponent = () => { - - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; - -export default ExampleComponent; -``` - -#### Provider data - -The IpAssetProvider provides the following data to its children: - -- **assetData** - The IP Asset data. -- **isAssetDataLoading** - IP Asset data loading state. -- **nftData** - The NFT Metadata. -- **isNftDataLoading** - NFT Metadata loading state. -- **ipPolicyData** - Policies attached to the IP Asset. -- **isIPAPolicyDataLoading** - Policy data loading state. -- **policyData** - The Policy details including the template id, address and terms. -- **isPolicyDataLoading** - Policy data loading state. -- **licenseData** - IP Asset minted Licenses. -- **isLicenseDataLoading** - License data loading state. -- **royaltyData** - The Royalty Policy data. -- **isRoyaltyDataLoading** - Royalty Policy data loading state. - -#### Arguments - -- **children** - The child component to provide the IP Asset context to. -- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx deleted file mode 100644 index cd7231b..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "Providers/IpAssetProvider", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - // argTypes: {}, - // argTypes: { - // ipId: { - // options: [ - // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - // ], - // // control: { type: "select" }, // Automatically inferred when 'options' is defined - // }, - // }, - // args: { - // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // }, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" From cec8ba2157cf1731a240cfa9bc7599ea566eafaa Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:21:33 -0700 Subject: [PATCH 65/74] reinstate IpAssetProvider --- .../IpAssetProvider/IpAssetProvider.tsx | 153 ++++++++++++++++++ .../IpAssetProvider/__docs__/Example.tsx | 59 +++++++ .../__docs__/IpAssetProvider.mdx | 79 +++++++++ .../__docs__/IpAssetProvider.stories.tsx | 49 ++++++ .../src/providers/IpAssetProvider/index.tsx | 1 + 5 files changed, 341 insertions(+) create mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx new file mode 100644 index 0000000..3375937 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx @@ -0,0 +1,153 @@ +import { useQuery } from "@tanstack/react-query" +import React from "react" +import { Address } from "viem" + +import { getResource, listResource } from "../../lib/api" +import { getNFTByTokenId } from "../../lib/simplehash" +import { NFTMetadata } from "../../lib/simplehash/types/simplehash" +import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" +import { camelize } from "../../lib/utils" + +const IpAssetContext = React.createContext<{ + // activeTab: string + // setActiveTab: React.Dispatch<React.SetStateAction<string>> + assetData: Asset | undefined + nftData: NFTMetadata | undefined + isNftDataLoading: boolean + isAssetDataLoading: boolean + ipPolicyData: IPAPolicy[] | undefined + isIPAPolicyDataLoading: boolean + policyData: Policy[] | undefined + isPolicyDataLoading: boolean + licenseData: License[] | undefined + isLicenseDataLoading: boolean + royaltyData: RoyaltyPolicy | undefined + isRoyaltyDataLoading: boolean +} | null>(null) + +export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { + // Fetch asset data + const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ + queryKey: [RESOURCE_TYPE.ASSET, ipId], + queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), + }) + + const ipaPolicyQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + } + // Fetch IPPolicy data + const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ + queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), + }) + + async function fetchPolicyDetails(data: IPAPolicy[]) { + const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) + + const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) + const results = await Promise.all(requests) + + return results.map((result) => { + return { + ...result.data, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { + return { + ...acc, + [camelize(option.trait_type)]: + option.value === "true" ? true : option.value === "false" ? false : option.value, + } + }, {}), + } + }) + } + + const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ + queryKey: ["fetchPolicyDetails", ipPolicyData?.data], + queryFn: () => fetchPolicyDetails(ipPolicyData?.data), + enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), + }) + + const licenseQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + licensorIpdId: ipId, + }, + } + // Fetch License Data + const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ + queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), + }) + + // Fetch Royalty Data + const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ + queryKey: [ + RESOURCE_TYPE.ROYALTY_POLICY, + { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + }, + ], + queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), + }) + + // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], + // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), + // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + // }) + const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], + queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), + enabled: + Boolean(assetData) && + Boolean(assetData.data.nftMetadata.tokenContract) && + Boolean(assetData.data.nftMetadata.tokenId), + }) + + return ( + <IpAssetContext.Provider + value={{ + // activeTab, + // setActiveTab, + nftData, + isNftDataLoading, + assetData: assetData?.data, + isAssetDataLoading, + ipPolicyData: ipPolicyData?.data, + isIPAPolicyDataLoading, + policyData: policyData, + isPolicyDataLoading, + licenseData: licenseData?.data, + isLicenseDataLoading, + royaltyData: royaltyData?.data, + isRoyaltyDataLoading, + }} + > + {children} + </IpAssetContext.Provider> + ) +} + +export const useIpAssetContext = () => { + const context = React.useContext(IpAssetContext) + if (!context) { + throw new Error("useAccount must be used within an IpAssetProvider") + } + return context +} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx new file mode 100644 index 0000000..a84a01b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx @@ -0,0 +1,59 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" + +const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpAssetProvider ipId={ipId}> + <ExampleComponent /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + return ( + <> + {isNftDataLoading && <div>Fetching Asset...</div>} + {nftData && !isNftDataLoading ? ( + <div className="grid grid-cols-4 gap-4"> + <> + <div className="col-span-1 text-xs text-gray-600">nft_id</div> + <div className="col-span-3 text-sm">{nftData.nft_id}</div> + + <div className="col-span-1 text-xs text-gray-600">chain</div> + <div className="col-span-3 text-sm">{nftData.chain}</div> + + <div className="col-span-1 text-xs text-gray-600">contract_address</div> + <div className="col-span-3 text-sm">{nftData.contract_address}</div> + + <div className="col-span-1 text-xs text-gray-600">token_id</div> + <div className="col-span-3 text-sm">{nftData.token_id}</div> + + <div className="col-span-1 text-xs text-gray-600">name</div> + <div className="col-span-3 text-sm">{nftData.name}</div> + + <div className="col-span-1 text-xs text-gray-600">description</div> + <div className="col-span-3 text-sm">{nftData.description}</div> + </> + </div> + ) : null} + </> + ) +} + +export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx new file mode 100644 index 0000000..cbfbf01 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx @@ -0,0 +1,79 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpAssetProviderStory from "./IpAssetProvider.stories" + +<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> + +# IpAssetProvider + +Provides IP Asset data to children components. + +#### Example + +<Canvas of={IpAssetProviderStory.Select} /> + +<Controls /> + +## Usage + +```ts +// wrap your component with the IpAssetProvider + +import { IpAssetProvider } from "@storyprotocol/storykit" +import ExampleComponent from './ExampleComponent' + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +```ts +// in your component file, context provides IP asset state + +import { useIpAssetContext } from "@storyprotocol/storykit" + +const ExampleComponent = () => { + + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; + +export default ExampleComponent; +``` + +#### Provider data + +The IpAssetProvider provides the following data to its children: + +- **assetData** - The IP Asset data. +- **isAssetDataLoading** - IP Asset data loading state. +- **nftData** - The NFT Metadata. +- **isNftDataLoading** - NFT Metadata loading state. +- **ipPolicyData** - Policies attached to the IP Asset. +- **isIPAPolicyDataLoading** - Policy data loading state. +- **policyData** - The Policy details including the template id, address and terms. +- **isPolicyDataLoading** - Policy data loading state. +- **licenseData** - IP Asset minted Licenses. +- **isLicenseDataLoading** - License data loading state. +- **royaltyData** - The Royalty Policy data. +- **isRoyaltyDataLoading** - Royalty Policy data loading state. + +#### Arguments + +- **children** - The child component to provide the IP Asset context to. +- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx new file mode 100644 index 0000000..cd7231b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx @@ -0,0 +1,49 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Providers/IpAssetProvider", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + // argTypes: {}, + // argTypes: { + // ipId: { + // options: [ + // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", + // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", + // ], + // // control: { type: "select" }, // Automatically inferred when 'options' is defined + // }, + // }, + // args: { + // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // }, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/index.tsx @@ -0,0 +1 @@ +export * from "./IpAssetProvider" From 8be257ebf77c201dadb0be244831724d6a8d38cc Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:26:09 -0700 Subject: [PATCH 66/74] archive storykit --- packages/storykit/.eslintrc.cjs | 13 - packages/storykit/.gitignore | 30 -- .../storykit/.storybook/assets/story-logo.png | Bin 16720 -> 0 bytes packages/storykit/.storybook/global.css | 7 - packages/storykit/.storybook/main.ts | 33 -- .../storykit/.storybook/manager-head.html | 1 - packages/storykit/.storybook/manager.ts | 7 - packages/storykit/.storybook/preview.ts | 34 -- packages/storykit/.storybook/theme.ts | 42 -- packages/storykit/package.json | 108 ----- packages/storykit/postcss.config.cjs | 7 - packages/storykit/rollup.config.js | 54 --- .../components/Button/Button-css-modules.tsx | 45 -- .../storykit/src/components/Button/Button.tsx | 44 -- .../src/components/Button/__docs__/Button.mdx | 37 -- .../Button/__docs__/Button.stories.tsx | 35 -- .../Button/__tests__/Button.test.tsx | 9 - .../storykit/src/components/Button/index.ts | 1 - .../storykit/src/components/Button/styles.css | 21 - .../src/components/Button/styles.module.css | 21 - .../src/components/IpGraph/IpGraph.tsx | 90 ---- .../components/IpGraph/__docs__/Example.tsx | 26 -- .../components/IpGraph/__docs__/IpGraph.mdx | 45 -- .../IpGraph/__docs__/IpGraph.stories.tsx | 38 -- .../storykit/src/components/IpGraph/index.ts | 1 - .../src/components/IpGraph/styles.css | 3 - .../IpPolicyAccordion/IpPolicyAccordion.tsx | 144 ------- .../IpPolicyAccordion/__docs__/Example.tsx | 27 -- .../__docs__/IpPolicyAccordion.mdx | 32 -- .../__docs__/IpPolicyAccordion.stories.tsx | 40 -- .../components/IpPolicyAccordion/index.tsx | 1 - .../components/IpPolicyAccordion/styles.css | 70 ---- .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 104 ----- .../IpRoyaltyPieChart/__docs__/Example.tsx | 22 - .../__docs__/IpRoyaltyPieChart.mdx | 40 -- .../__docs__/IpRoyaltyPieChart.stories.tsx | 38 -- .../components/IpRoyaltyPieChart/index.tsx | 1 - .../components/IpRoyaltyPieChart/styles.css | 30 -- .../src/components/IpWidget/IpWidget.tsx | 394 ------------------ .../components/IpWidget/__docs__/Example.tsx | 29 -- .../components/IpWidget/__docs__/IpWidget.mdx | 34 -- .../IpWidget/__docs__/IpWidget.stories.tsx | 41 -- .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 - .../storykit/src/components/IpWidget/index.ts | 1 - .../src/components/IpWidget/styles.css | 218 ---------- packages/storykit/src/components/index.ts | 5 - packages/storykit/src/declarations.d.ts | 4 - packages/storykit/src/global.css | 67 --- packages/storykit/src/index.ts | 2 - packages/storykit/src/lib/api.ts | 49 --- packages/storykit/src/lib/graph.ts | 122 ------ packages/storykit/src/lib/simplehash/index.ts | 39 -- .../src/lib/simplehash/types/simplehash.d.ts | 143 ------- packages/storykit/src/lib/types.ts | 325 --------------- packages/storykit/src/lib/utils.ts | 51 --- .../IpAssetProvider/IpAssetProvider.tsx | 153 ------- .../IpAssetProvider/__docs__/Example.tsx | 59 --- .../__docs__/IpAssetProvider.mdx | 79 ---- .../__docs__/IpAssetProvider.stories.tsx | 49 --- .../src/providers/IpAssetProvider/index.tsx | 1 - packages/storykit/src/providers/index.ts | 1 - .../storykit/src/stories/Introduction.mdx | 201 --------- packages/storykit/src/stories/data/index.ts | 8 - packages/storykit/tailwind.config.js | 72 ---- packages/storykit/tsconfig.json | 10 - 65 files changed, 3467 deletions(-) delete mode 100644 packages/storykit/.eslintrc.cjs delete mode 100644 packages/storykit/.gitignore delete mode 100644 packages/storykit/.storybook/assets/story-logo.png delete mode 100644 packages/storykit/.storybook/global.css delete mode 100644 packages/storykit/.storybook/main.ts delete mode 100644 packages/storykit/.storybook/manager-head.html delete mode 100644 packages/storykit/.storybook/manager.ts delete mode 100644 packages/storykit/.storybook/preview.ts delete mode 100644 packages/storykit/.storybook/theme.ts delete mode 100644 packages/storykit/package.json delete mode 100644 packages/storykit/postcss.config.cjs delete mode 100644 packages/storykit/rollup.config.js delete mode 100644 packages/storykit/src/components/Button/Button-css-modules.tsx delete mode 100644 packages/storykit/src/components/Button/Button.tsx delete mode 100644 packages/storykit/src/components/Button/__docs__/Button.mdx delete mode 100644 packages/storykit/src/components/Button/__docs__/Button.stories.tsx delete mode 100644 packages/storykit/src/components/Button/__tests__/Button.test.tsx delete mode 100644 packages/storykit/src/components/Button/index.ts delete mode 100644 packages/storykit/src/components/Button/styles.css delete mode 100644 packages/storykit/src/components/Button/styles.module.css delete mode 100644 packages/storykit/src/components/IpGraph/IpGraph.tsx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx delete mode 100644 packages/storykit/src/components/IpGraph/index.ts delete mode 100644 packages/storykit/src/components/IpGraph/styles.css delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/styles.css delete mode 100644 packages/storykit/src/components/IpWidget/IpWidget.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx delete mode 100644 packages/storykit/src/components/IpWidget/index.ts delete mode 100644 packages/storykit/src/components/IpWidget/styles.css delete mode 100644 packages/storykit/src/components/index.ts delete mode 100644 packages/storykit/src/declarations.d.ts delete mode 100644 packages/storykit/src/global.css delete mode 100644 packages/storykit/src/index.ts delete mode 100644 packages/storykit/src/lib/api.ts delete mode 100644 packages/storykit/src/lib/graph.ts delete mode 100644 packages/storykit/src/lib/simplehash/index.ts delete mode 100644 packages/storykit/src/lib/simplehash/types/simplehash.d.ts delete mode 100644 packages/storykit/src/lib/types.ts delete mode 100644 packages/storykit/src/lib/utils.ts delete mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx delete mode 100644 packages/storykit/src/providers/index.ts delete mode 100644 packages/storykit/src/stories/Introduction.mdx delete mode 100644 packages/storykit/src/stories/data/index.ts delete mode 100644 packages/storykit/tailwind.config.js delete mode 100644 packages/storykit/tsconfig.json diff --git a/packages/storykit/.eslintrc.cjs b/packages/storykit/.eslintrc.cjs deleted file mode 100644 index fc3bf2f..0000000 --- a/packages/storykit/.eslintrc.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/** @type {import("eslint").Linter.Config} */ -module.exports = { - root: true, - extends: ["@storykit/eslint-config/react-internal.js"], - parser: "@typescript-eslint/parser", - // parserOptions: { - // project: true, - // }, - // parserOptions: { - // project: "./tsconfig.json", - // tsconfigRootDir: __dirname, - // }, -} diff --git a/packages/storykit/.gitignore b/packages/storykit/.gitignore deleted file mode 100644 index 694a99f..0000000 --- a/packages/storykit/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -build -dist - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -*storybook.log -storybook-static - -.yalc -yalc.lock \ No newline at end of file diff --git a/packages/storykit/.storybook/assets/story-logo.png b/packages/storykit/.storybook/assets/story-logo.png deleted file mode 100644 index 6b8b039b7c6d087b1ecbc5af9276506f560c9536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16720 zcmeIZcUY6zw<sJ`K<S}|u0arlKq4)4#Q=&F1*Eqm^xg?YiU<S}U>p?@DFUL>VL$`{ zDGABUAWdm1NJwS?X(od}r09K_^83!cr+nwR&;9ef4`pY+Yp=cf-g~W`oU1k#{5(=T zAP|WE@+FiV2z1mF1maLS&IR;D>0F2h{vGqbV0{4uYAN8|M{|NeJgb2hFJ6tdvoJk* z+3cbYLQh8rc1|4u0$t+2*YEFapDhKVeJ)x1p;;Jul5tYn3a*@<_Ve*msPiYGr@{Ad zQEA6-6<wGWxz?|L72KcWU<Pw-cr=mYrm|s_n;1Eb5tGOd-pU@0rWU-?0I8~&J=M6d z&XK$2S7j<*pmIHkIK`n1PvbEK@rRvzEMWWkmd0;(C;aSwrY{&Aqiu<urx6JIk7M{U zQYjp|kYUgzeGuP-u#yZ&<!BnT?wvQ+`Ij7N2JK@&;}=k$_Sx$}pb1G($5+dHQlND~ z&}_?LBaai**zVlKd0vyF?-6V&h-0h@1aF!!4dA$>0=nv1t56Smd<8_a_feVR_~GLb z(2Jt6BGAujASOZt#{o(JftraAcus&4;Goib<uyNme&9Yj=7QA}69)a^4bmU7vVxN& zeiSC5s?>Y?h@7<aqN{58eLo%#2BUR0-)iG3D9;8@D-Lqyr9jgP;S0>Xs>`Pc)ZgrK zE-8!Wuq%$7N?r;87)EqDK!tP7pefJJAOButS52YS-Iq)Qfd+z|Y9}E3+|`zO{Z5Ko zAg~eW@gTrfMiZs+Sipm$wB(C5c39@UQGHO?xwOSr*MVCkUBga?n_@-7SwH_ER5y8c z4BP?INc)V7syU_#f5?CP)G5ch>yH#7I6Oh$@qdzZUj3dow8Hr`J)7s2^O4(6TSOlq zGS%crS8^@Y%wPMA(T-85Ry;0-$!C7JqFD3~;f3da3sf`nvjW&*{#YqY0BcHWA=6oi zJEr1--|rkEwoc`|Z2>u9WaI6kKT!L23HzgPkE8$8y=6qH+?^|m|4hmB_;13c-dj1Y zx}W!!d7=Y*%saJ^_p!<Q^w%vMb|X@t^LNi`bERHE`&`fm`6L;uDQPLOxzfMiR6hcm zcsxX<@#a89NHB^WJD1PvYTAjoK28ZHDEv6c_?9UWbwTYCTKVw>rDxt+w5y;&?_;V~ z=?|_7+-rsuUWC<Was}K{nmGY$78D>wB9AW7&duJkS-$ynjK8Tu;)0OWfH@M+OV43L z`!6XAr}JHSe2J&>yu&5+9}AYjyyrL{<T*gEUxNK47l=wR--c%2w*NWdH~lDy1mb>X zx5Z^;-rp-Xp2<tyG=CHsaIQEf-*j`FwS2mb&jUa8Xlq%gP11;1c0r@6blJWw``Bq| z;ey}H=y#x(gzcm*TmPycdHL-nvByDnMm0GTmiiZ7URpVAq|l>a|BK8y^Tj(=KVSY0 z>{DV`W|-HV=6>a)RhW{zqSxtp#rQiW*Jea@E#ZnkLZ2$Dd=*u#F0r$Icj=wAo_VL$ zr^@apb~T2zCfX&%sO#6L*Us2WTy?U4VJ~=X)c&)5Qh-)5FRV!1`bt$`fS;>gsA8z} z`pNYp4TSB&u!}p7v)_n(3VK;)Oz^axH#Irmdp`BjXWtpkWXan^t*k=C?H2raUx06k zZww;wfq+%2pO)qwy?nhpE~F5Q9QGsTRa;BTCx3<ZUz*3?y>6~)d54aEv)DLnP^h4a zS498btX7{{Z(V<}ezpF7h|Y%s*&)Z);kC>)^KJ09?6#X*enX#QSl#o|FgO1XAxZt) zowB5nY4wq?wz<<?L0ukk{_AD$G}jK+6t|`J0=Hwglh&Kw?;s;&ZV3bm3<~hdv?EKR zaKBxO{t|sxKS*{+Mi(g;**$tHvRhABVC2DYAWeo56ItV)+E`+c@Ak_<&WHZ>xTqMZ z-|qgd)n79b*lT~LfV|20CBdxQth=;ZwR`8r>>hdR)b8ugZzq;a%XLR?lwwOyEb%O@ zkK8Yv@A6i+yKj15Q5~lK!sD053yqSEj?>zWRQK|&-?#Ht2s;hSU9F$_bthmyTQBIm z3(aurax3V{?s`2(d-di3zo#i!W>HT?7Wm3>8_Fd`8D`^F4DTn%eM!ElhmLdxJ7&lZ zzU-Op{;^xlbG1jmJ8|#pj`VoAWAFMwSdwOsLic9({e%|@@q4)4$GcXncPr7P`wP+w zZnUm}om-!!O;US9dOK5KDFyqb2fu&2v;Sgup2wS;e2gggOt3@r5<l^{8lSr?PW?DP z5AWIIwY>V$L@vV3*#5eV(VeGXBzC5Enm(uA8>LfOSH8M^jpsDHkn3Ie$c$-7K7*3| z>GW@?pPzD|kLGe|@pY)ghzf{}2)FZm=i%oWytrzr!S5qzC4;;{D@)hl;uM5(HAu$5 zh$4kjI=c0+wJK$IA5rZbx$M1LOIb}ky;A*omkOMPBJHfeRKiojPR_hpE_C>|fx>qp z-9pSfG$&DOCKZn8Kr;`PQ^t#zx5i5^HlOOeIK}^o$jTijPf%wGTltfeFyak}1VmRo z%x!j)&B3Cu=UCyVZ~s{H<HZw?kGYtdnPyL1(>HZh?YT3ffiQ^-#=KCo(s7AX&iV0f zN!#g9wX+`iL(;#`T_k1O$R=t%xMyhCsq@v-@@g)kT3gIow)myi))agmy^Dqg{-9** zRvc$AXL2KXw@Gq>_=WhA$jwuM$)%GcMwkfF3%=A+$?{I+%|(0~xDXub66d1llIIfs zlgLkXKN;LR^=r+qnrEHv**v$fw)d~mtxYnwv{09ScTc3yzAW1J?)PUWs%-M&WIePJ zzeBnZ#fYvbmCkpaZc!!yZ?v|G%Ub?usiVX(gp)bHIY`%eJh@?o61h$$buV|<c3XTM z|9WLpUV<#@AYu6Sa?JCW5{w@y4YE5=;0+P>3rm%2mFt6F=(F^mM2j00-vV+he!2DI zW|sHG&Wh;d-`Kx1y7GRZ<SCK0er=<^)|P&~UI-eJ8Jc@@syenhyuoG4LqtYt`AnNF zUokS3PP&|PC#A%yjA$G7kgn~!c(==*@uaal%SzgyA@t?Wm!Cd)X!>aCjQWhIm3;kB z&(T`z*Hc_-)b;#zPl)-u1HGU0+=fDj@_u((G9UIZC@{3uZNh%*`>MK>T07=g(kOG) z#p5fQ;}z|T;DCHk3cDK~j;2D#E42wVge^joT8_(4oxfHD*-ai)*IapcA3b!ou*cQd z?`zG<g~?zixRbME%+%wFHJ4AVQLJADpL0IHze-<iZ;Eo$PMv%>`F>Jjirg6Jy85a; zYJD&EW$g6S(3I}<-lS9bqcG(;=A%<}3*-W@iB4F|oO36Op>*(MWH@)&LYgEk{h}k( zrA=%u=-n>PZKOTgL~+0EY0i9Gia~hN?*cREcdXx*X3Lw_tUkVLSH(EJ)p*rg|9<$L z$2d{THe@4ACE(L+)%)m_&tpBI4c8jFQpNUP29{61dU;^8Cn4)Cr)<FdN_(7Pl+Bl2 zCOcx1+#723VOZf;h5Pw_GV92~<h9>eWQK(exfF>zxBJ^G``b^q%kq(PQRXpEI*saY z?1ZCx*EfV>waWQTx|T}V?yFz>mjvDMoe^xzz#!xPZ}&&s<>J2X-vc`}dJK2IPq0o} zAK$86)d;)$ak)p2A^yALVCde5$@tlgiSKgky=|LoOW(Rq#DDnA-y6SaobvrsuhsY6 zvFqDu2ak3umPizfih^w;o8;t;Uw%I0VasouRDSRK0+U+1#4(!sRdaiEJIptJnwLQs zO@-k;{So!H?n2Z1#5YMB-RdcGdr#;MLm!4eLqC?{$`8Jwo3@UwUmT|P6*QFpXfn6! zzW;Tzm*Z&B=00buE(zEMpTu6Wvj%|@l|Z1hTOiOb(3Q3f0>#2XpcQWrNWTaKl87jI zdCd@baU$Z9OEd^1u6X#%aoO%P69nR-20A#$I9prkW5Yw$(LUiAUv*q)1ON>J8JgfC z(AZ$#n3EV^|G+RK=;y9p=*d7IBdC+MHQYMlqHjRprNk&-`$QWDY+^80&j)H^e9{o7 z4<HEjjX|Hpg@%Mh>*I`|f8x~#+K1g5(35|H!~`2bFC0#I(%Jgz$&2Apz9)6n5il$q z4nL`@r|yHsps^T?+R1b9a|jK%mIgu#28Ziw>gj7~o&5WO0@FqL`03lB%>SMY_+$hP zh>3~N*U*TMk5`Y^R1c5x*Ffm$>1n{vX`DL;10Z1031Km494sta;U5er-)L-9U_?w{ zc-YB9jA%@FY>W{UAoVXELL>f#HZ1yYIRO&Wz@Z~F5bE$lp8f>%!Tt*_A~q`I&&hqT z8onXEp}t`;(Eu#sU$7AY;W6RS0pb4%>VLid-zETLYi<3nIsQXhLPP&GMRbf=9Kgok z0{IW2qa6|=d^PNRqr+pPu)bz-0GSGh+(hVKjPgatghx4qhll*5sjL5xeDa*8I{c)v zH5wZjcF2UvzZv3-LdW<TK>@u18q<WG({VTl*VjVo!;z|R;4l0yQ0s7?K)-~44|+}? zuB(su-$4PZ@j=I+|9^pfu=;-CQK4vn<-kz1zpq9_m_PL7zXYj&F+3zZ3YZw6PV?XP zUk1*OQQ>}pA;61&cZU3vTx)Cn%VE(m=rFABWt0&V5RZCbppU*UU|8BZ+Hjbbrj8#> z3+v|#L&7z&Fr*J$%NLE&!@#xC|BOe4V`C4E;Bfq34&f7y1#tX-<oO`9b<o;qO&HS8 z7Y#cHpn#z@u?RqdXdPW`O<%0GuFgN$Y@-4JpG1fJTdapv`5aP(J*VZPhtYxg`04>v z`DpsVkXqV)Ftjh)$43{bjfG<nhlc;BE$Lqhj0Uuv@V6`3`$qoV3JE;<r}^lkv4?J9 z1jQcOgRc+t@9x0=NFM*4ng1RiAK(ih{V%NKui2x+{bJ(LQN9=a0onaG>`>!BBR?7) z_g@o_#QON5k#IkluAZ+ppiCc4n4T|M4+huKL+a|Hk=mMQ?SGj64~ahvP5+qq{~hsv ziv}Bj4)gZ~0<8x0|DK)yo^Ad`=f7v?|8T?qm+WX92H3ysOymDF!9U;qn_vtm^Up3I z!XGyOwYC5s{<S*!h5?d_0@fbu_C<LRNPYh@>VgA~W4-@G_mj*=Cd|)!C7RJA^)OBA zy(gItu3>c>y?3E^Rbhotdz4SkT5#iyPIc&;C!#roF;gd(vybhroo%zV9)2~d7d^81 zo&EZ$?WGsKAD0q7?v%{$d^kH~hx+qzcq#<`^SO8SuMSi-&tDzaYE1tIsr?@iKob8W zmqT-K_<w8+E0anMj#ng<;T(719Cc{b`fPp#f3P>~3pVx(+u{nGn-`AXi{#$uJIdx2 z$D9!NK98EH;Km|Oh%_rr^)D9XsuX3ZIP)q#@m8}`eGb3HSwzUh2?^4SXLCLvcnJvk zD+o0x=9nsA@AbuwE`{$aCWAhC2Ya7w@5`UzvZdmP7V^7r@t%N$WJ^A8$wIUcAwnXI z)WqU8Ow)5#g1)bj2*$ud@`srYAsNpR;tV(!7WgqtQRG74e|OIEb-wv9Lbj3W1?O%> zp@`>wU2^f)-vaJs(B=x0ea!8KRSn5br8+KCor%|b&}t-*A3dH841jeAR^xF{S7&)Q z@8A$ZX|oE&n~(D7Y5|8D)ox$RX<>)0*+|8J!3yVH3Za<EwqJjm5CB9)+HFzUCWXy# zN>_2iO3@HPgi&MP^$xx(Ev8G#&8l%E;WpHZ;EKMT$fk{R0>KOKa7yj{Q;>oqu+l0r ze38bpFVNc`-f~QpDAzLseu(C@RB%ccD=HA?Z4r%bhFpXU@bICX<DL06`c7JINoSZW z=vRH1nt5+YT5<Be=29pD@b~6#{`dpXXSe(MXT;o=<p_~RDfrI}Ikh+4Eo@~QA%)>G zcJ+v^KrlL9=GJ;MXJSlwX9xH`ExY3=Z(gzpD?ujx6rXgbD`eoDDvWee94jeK=a^0J zrR&UQRy*Iy)PF0*=Gvw-@8<RM<G>r*`VBcv3{K}<yMtX;%};9c3Q)((O&ia}wn?XE zWP4tY9y1gfC3i7pOLA9R9HLzVa-PkLhGZX&gil#ibTy<KwVe5wE>BBh!~7t?qy;VJ z1()SMzzfkT8>G(>oM8h!MLE9uB=?fM8}JL7?IZ;I(fFr`wG44eFy%-IFquo!#-_tQ zw`U%VC{wo((9QRh@u7o9b)t#f49T%94UAs9l@W=*9jx6g+(h<8a+^@g^Q=_KCaQ2b z27>bg?YiSjDW?V94h~)HrB-#y?=xPS6k0?w{|>}MhoTDiY&Fg{$-!Trs!OsWp^;J_ zq&q1Lq)gT(D|FwK{BxU%0EN)fHSQa}mN!o`V5^5oRJ|LSd1tB1h;q*viY)MZO{$rZ zzERwQ@XX$k^bi=dDUOBNP=CNX`}XM1LuBySW_g|}l2$jzC{>U(-{C?2x!G8NN@(sH z4|Q70m0%bq^J)$Tybx<2h}q|oSP<UlP@P!CxTjszu9DCg)McKjBH1&g+O+(SdkuI% zD`7mP>ncdeGmK7UqVYqzHBy?JupD-Pl<{YX%y=03#3%F2_aT<WE|_c&q|)8@b<1iz z39P`^Z%c+F3@K7y6C;kdPt*rT)Zhainl2@RUu9Gwtk=?;=nnM?m3wPBn-Rj>=2!Mx zTV^E62fxnPlP$5$Vjt6@S)3vD#?uQj!}_90l3#VmtJ=XQY$$Wk%21wCf2c9>ZA%6_ z$v#5s6=5lNS>Ogv{#CvNCYI%_L^nf9f2QETf*&B^eVI63O3g=}l5}oufBtUaI?2x6 zNEw}}`tk+SyMLnc^(Z06qxo3@WjUJ6bD~iF>E4AsHb@6-J7LZiN=cJ7Gpz4>%Q~?y z7-!cb9og<@#QojxxA!M3f~MR{a=B3`H!*!`9Fo_<n}}0erE7Hy-a*9_8q4I#V^fJ> z+bQQYg8YKAl_;y(c OA>d2h2*`%YU#!Xhw&mq*|0DT>4#O{nBnbF+)tIcF2=#3- zTQaf)Z;P(Pk2D(_XE%9=j;pWI9g^i%bJ-RT7aU6PDz%#yCFx?t(Z{!S|5(df3Y<EM z<Q+0YeGn^tAvi*QJ9uYHKbh-}nO1Oo2?0B<`o1BvDnejeh;`|6Um&h{C0W`jz{Vth z@TGZv3z8=|U_|IudO03%DO&to*M_Qux!xmQP7Z<=vyPPH7@19OQ{EwEGV!Tj<k>v! z4tbJnbuMjxTSIP`0_i)6puK9#?#4f}s?c+ztIjyL4XrYbzvMi#<!z#Tnz5VkwNK^` z7iV2cT2P&F*M3Ft3Z9B|_SkutCNkEfr#M0a4D4K{pA{(;du2R~x}Xf+O3*aU4y+7g zFcBqbreu@%(oem4*L9D2QO^y(JCVJTGD`h;Xz(K7duJ!YW0UztMXoPXb8xTlD?Oa@ z6x8_Ll>IZtC+WAhDVJxi?v)ml2TXM#tapm>FCN)Ob45t`0i24h=*n8;o^8l1pa(*0 zHyumxmn#Dga1zF+>9@-=1hGGDyQbMAY@>Dh-C~=Z(7MAfWtMXBzlyCqm;adWdF}an z<PoKufZi7i8AWRPX7V3%zKgOhS<o6FRXytc8rrLu)*kIykyNh*j0l(He1%p<W$xBz zzwq|Bc3&a#2mE#->|^#Xm2bZ=j+NjG@!4DSP~7cpslH#FAL#`%l;@TrLYiE92MbUr z7|)h+#Obm#D-#5fmKyvvPUmCZq}kII>IbIImt5Qos$2G9U=x8QI~=%>Idgpnr~d>? zTvQ`dTdtxeDz6rJ0Dg>`)9F94EY=bfM@~g!$3H32GI0DnfOkkzu_fCoES1+|CH$<! zFU!e2xD)N;^_mf#_-ED?i3doohb!ueS#UfDpEoE2GUef!-+(equxAAtUW_5+ut8<2 zborhmNkL6+EJc6-&|1^x`pr)Pfg{PuVn?BsIz6>7j655oVg07B$vs7xdPRiaA*jG= zVNMGA$W&jVGj}jLwmz$H<R|@n>bSC*A)*IovJIZ|lTDV{p_zkKttlrugn6G^<ZLqa zL!L<n(_`6QYHuGTMhfXn)N3$Cp_Pt3wUYx6$DX#%=5<9XG!D*n@Csr$3KNoDi*9N+ z>r4&C%?Lb1tCliAYsC3n945bS)$GN40r^2yxEI-SkDiIN*qcqi!@NBFHC_h48T({C zvdC{Prxkt@8Z=qw+C{%w%Ftyist<U<MTQI$6#dZRVXbez7TvUNmXD*h!d+UY2Cj8* zU4+V&ud~2kR#Gl@2yP<eH(QSIUQ3)o5~;}g^ydi9o|n_<IKhtuF{opr>Z@$U_t@j} z14AvPe)ahZktf8L)v!$AkjHwe5yD|&;ODE?8(vg7Z8lO}IzXuxYFt|p($n5NaRX?i z%#GsBkdR!Hq>xNVj%!&_Jod)iC%M_Qhlrz^h@+cuc>>~AwX#u&+U{8PWV758@6eF+ zhGtErW%clZ=SW+!r2)+sX}vd_Im%Fl)JY~WP9}T!zmsixQ(qS;mt}@pPrU9Qz4pXK zlNFdOm^w*(*Ky2=hUpgT3Z!Js$e&3FAz|7K#JNAIPt%UL6Os@|TU!PgFUTe@$4M0Q zS)INoGrSrDTBS|$@|32?r^j7!Vm5C*CFquhS2QV%tqz&^6+Q-B)?V9R@>Nck8A`#` z*Ci<1vF`WsWXNapCcph-pZlLH$L7Z}{ko54?t0+wd*8O09&oVgZytGpFeZdf){&n^ zyxfS?EldpgKu>M%9MK_~Fj6BpHu^H0E969)1>*X^Ge_-X+chK93hSm$Cres9o4+5a z#Pj8uV_<a-q~P+*aW`+HkaX>4DOdebwQj!qLFMB4eUi)LM0B@E`MBgZiF0|nL^T4r z@#XYgUlpjMbyHA%=8dts6x9gzkLeHeM-SL=IdT%*tf!r{$nLRlqF*q4X29qDz|Szv zEl<q|$FDQpDb6^TEGU82;hG3Xe7o68gNCGk!f}+{EF9UibI)qcbALe#8vZm0`SM86 z4Xv@3zuqF}s!tN_J_e8@d>;_`c}*UfOnI8laB*6ErC0PKowvgtrS;@$o(D5#OM2i; z1fSoE`xTa6x71GEv`>h?k0ilVGcnIFiRP>S)@~nUK_5iQ?x4?aiZgbQa@q9gj-wa# zhmhU84<$PjwSqYdF<?K26C2`5JQ@kzAU|4s-mKX^;VDS-QJXAjh!El#PSn|+swc2K zz~j$M_ntSaD%CpWv@#KD(_bx<<v&x;Z9Tx>K<x(~uunc&Q6sSxJPYnKx*!t|vLa<a zW@WJSUcYf^A2_iLj#WXVtwuo02nCp|#nAkowt3sgMn7w+WAWR97ZqbAdTgC66sn46 z{e}KFS?t7WR5$mP*!!9+PQF?TUbiY+vO*7E*Q(kk>$(hHvjw%&As$Y>%~s5c%@X&_ z?J=_t>(4<RaSED3hUAzg@zWfDX!aDXPYI%2X?f^(0GXEn=c%^MXW?=ajqnAulsSJ+ z<2<jLQ6EDyvPto+X>`d5>r6LC6LtONbSCmxdH+#;(h5@Gpz`wl1@HZ<(L8JUThHg4 zB2QTk>&bk7lCnzAgVgD1GWEdYV1Q;tN2jJck)0dby#AQmiB^Mg&~M{IEe#`)V9)$$ zBA+0wv?%{!Ox6<Jd%SIrCAEJkT8C6v%MzQd(_5uYLaIEe-WJ2V`i&xB*^03g1Mi!= zv-z9w`mO_^=^CmOt`?td-9Ln|@kh#9F!U8hGm*k36Wu8?c{!DVnk;ko21(!`HQB+n zgt-(g(62e+e^jQ{MU!a;9!K!3PiA|J)fq1>h|h(qtCQ{cu%M%mJ`fi??J%DI`{o7J zhEsI(9>$_{A*Lj4kLcb@3XXiTxSo|^cBbQ~JVk9wI$IXusBK(e5-{Q;(`5XXr8TV2 zxs!v>AFu0C@-E(;EhxwQ{Bwl(1{qR+HBUS-vJQVwiI!RPEa55R*lX=S=CWT@Wh!X< z%Xp^qvK|Gzw~gTX*q9=XKIa$ME6G-B2SPyi@zFuW+ULds7YY{Lb2JF}{5N$sctVJm zSE7%mg#T8Q9-jMbx)ImDSehU2-8haF{}@&cU<7s}OZX@JG((wN!;`^hrv}s}k<uE2 z+r<cu&x6;UAL&!k!NV?DcbJdx%gUMCp9Wo*oys4=El~Bj9xd&D2cn-zAyuOpIPQ@* zB?#nkd(@c@$=<8Ifiuprezb>>HzlPkp2>G&*^exuQ}PLBD5^@Et;tkBa?3f_&5T?- zbA&r^Diq1FBiSR@XTZ8K{7$foVAFi;KBgwonvz(%m9Xy`y~`4=uQ^Brma;~@E3DYp zfXbha8Q*Z0W=vppfVf|WITKQ?M~E~G6WU=Ib(m`^F*qS-^!tZ9JOJs+PP*n7U@t|- z4X8e!PeGn<O-Yll68#ee7QuOArA0{7jC@C1JjuJ#k8h!sU4#317$7K!VmxCNb5lC9 zbhn`{@jlITSTb9o`N8%l61u2Xk2m71I3Azx5Kt~hbSfV#(twuL=QZD1+~@J4q_LCk zGwwhfdSNYsiKw?(OeaA9rq3N|nvk)Qb%d<Zd#tTYy^H^XC3w7rXZ>x)i51N>vlRqK zFd9~$-U3mr>{=(vYGc8#Za$!UebrBSESZF@Tt2pgd62kOWxLf#+0lB+t<fLnICrd@ z=Z?0&&IrX0K$ZC1R&aN+u3B!7mgk%<=8P96z`3L05}FYva(z8eeJ73fLC7#$CFQi- z@R4L018<S7M5VHHuiPhd1WrJ!Czh#pldidUm}>P6k`EW)`*NhRZVB4SVf~}ifH_Uo z^;m8N)lijYM!$y&MI$6O5!^2pb~?mT$%c2K#kyh!L6jrO(ggDN--AkWcB(9HJVEQa z=bRdUYzD}}&L|~AlVvj;uppEyGMyAP)h`XViEbQ}XmLlyw0W*ye`c$(JAoa;N@oNX zEu#0Z9OB+OVf~{K{2P60;Ncm*@3xvLnew?*1_1|dcWPRPgE!6Yh+{erMPkGisqRSx z61kc(=_csTGhy;;6?#K}I|+kjo5qYu&b7uOEm<SFlG5G=GFhXvBgx#KNo9bbJ>9&! zcZW&3EzX8=(GgsZ&!#t9asuAl@zpw+P-;iznX<!)vSpug9^TZgw1{r(k4K@Ll-ov6 zir0>=%$(nOfRAmFFis0+7~phuE}W`#6=8lZjuaaau_b?ES0y&2%Z>?KpPg)~_9P+Y zbpuCGGTD<xh|&JW;#QD9%@aH>#<SjfBpUHp&Yl%B7s@w9NoOBdr~0>mcTo;lXq<g7 zhkO177D{bE;#%!=>)4s%HvQenV2;9P)3Hc?Qt>8qZG-gz^4auCv^q833^fhV2J*vp zCK3k)l!<(tIuy4Ev2VNvRZgfRYl`@aF7LdkEk!V*Dseskm&(hGu{uvx_~Vp$(!FAP zT3*o_OHcSi(1=V)dIGdESoFQWq#XI&);p<(QVCO}Ro2mN-VeC}<?9H?gU0?j`Y%NV zpKGT5W}LMGrIemcpLBdSzm7bbQQWG#y)#pm<y2LzXF@fDR@MQCKs(r+-H;5UJoi<) zNu+T;MGDv+2$of(kdU^9E*Tx5&55Vn26!dw!DCylw-k$6M(z!I2RQC2R;q!VbkK-l z$*tf2!o<1JhuM-OC^To?Uaw)FwV{+j%es$zsGFB@R|2ZH9hZ9Igsk5m$4&(6Sq>Kw znlM+R+o@o=Ih`4=RvXeN3N;M`pd6Q?YR{yF^9o*qo;QKjfCy&&7E+z!gl%*dBQRCB z-g{{Is_9(s{i>|J<ksOHoya^JLi0+3=}eTkuuJgEmYLhGH>Kf^jg63U4<WKTgJ&Xn zbc9%BE0Wa8PPCdtT_st&sKR&^9Xoz&xTQ0ZpPn)-)prIs7PSvtF?<t-6oL(Z72Xg7 zd(@11Dt=4zU3qTwvB0>BgzV;7@^%6j%yTVY>y<{RIZn!UT)sh}1y-IgpnqD?mVOcV z(HH3z%_Ea%ZCEcz#bAd!!A}YJ#_IvS^VpW%o+F>B&Q;Vhw)}oJp6Va{rDodjwdgur zUiX=;NxN9AG{FPz*dvZET;yl07FFrll2(n@z5+4vRTi+ToIcw&Z&Xx~f@KPHbKfv8 z*kWpTUnOHdK(Ldmf*rPPq;s>mr?w!3Vbok4nFFvU&Dbn2#)sm!14GTct~kA^i4p=+ z7Dx^RZw2*sF{48Wa$8avJ6K^G@{uZ%D_hF715}Mq4Gk4t*>ZX<vL2<m=nb1xZLWD{ zFE7ylWF_9jZ<X&N@`Og;OXbP%&~EWnjMuQ_fNo?temSV8mc<LK-YZVDhM6PfecH}p zzdg)qa{a^&{q{U?CH@Q-s%tiTuca`tUS*|?+p{u7F{~d`%CN<0mZhH>cFxsB#}0QM zGXZ4Y<fNTKFhQRg))VTYsg-0tMELl)NqhAjaaW?>p0ew8frzjF1lhs5Z50ty)I_ek zNl>vzx7_g3S65^%vgKYq)wA%{7<Ng!6WNPjPRtCN%_tB4_#S7VKA7EXKuMsxzNDJ7 z`O41HZ|_djk!AP@aV~g+34fU<Iknbgi-<J8*JK#|b3-0>tV(Z*<`2c7lpU6isEtWZ zQTCWdB}83sTdP0VYHvN_$T>x7bTk8Q-cyLa9q?2Uu&EnGr)wt)1R2W1osutdvcJ&a zK&Wet6ez^w!4*!ijeWKe_>mT!eDdv%qp5v8Y=sR<X%WHKIbY1N_|cwBt~BceUyipS z<=M39Yl(HOTb(PK;v%T)Q>1LB)UYJwx${Z6p9DS<O{2eYPXj2coMN+>dNO$9Qh$*U zOtr6bTBkGdf*M7*t+{2xo_1_s+(hhxM&d-UN+CY(AptE~I}M!A=P2H(-TX;`Q#U$H z4IgLTM{5puig=OFff1N5wNsNwd5h(cgJr6g!q5ua);&WH)8;07u<~5=3aV>(P>5%8 zbr3nOeq%-=o0j10wi!mz7`&)MzE-T6_BNsl54o0jJy_@rL+A@ZX)RZTd4Vr?yuLa` zG0Uurzs^?B_2p3W$fnv_hDWo))Eh~zNX|k+woLxhz!4Zb7Y~U{y#Co0NUVrjC-9F@ zV=-E)lTDe0I4x|m4yEGDjHTKDS3m+rt}nUGFvX}SulnWC%bDXw%h$@$R%E53T<c~d z9g4oQNRR%|4R${6XHBMSn-*4bgq#7zkUw4T@kNS_Qr?=0JfVjc<zE1gtL!opWYSI* z*yhN6NyHeZy&Yd=1y_*MHvVvw$rg8Av9CNY$Rir?DdavwkRHy{eL^~TgrEHq54oK< z$>2)nD7PpN7}#vqP#3Pce&xXOE`9v&GRb+;E&l?a)K|)3;%t-Y!ulbVga(!rd1?q4 z0o|${)oqr|pS-cr?{)Q&{GIXalrLDB-I#W5gzSCHRiZg*Wt!m03P>DRt&}tw<fosa zVk;Nj^RJ-D_{lnB0!uQaU@rE4Ijv{8-}ws~Iz=v?5gqM&;>;~wIhIhCSsHN<l6Sc9 zTKAo11vpZRYn?DT_-t6;{lSZI)XlLsL{22<6|+NRo~eUfO#YB(NooTJ-@+NqQtjl8 z86c9W=u;iK`FaO`fP{*BKS*rI(k53uxEWZhd+P#N&_JYDI8~D?ynm&5)5u*7YTjmg zkdpoaU9o|f!n)<|v3Qe(HK;?ZQ?rjX+nP<L#Hz+Ie6`cK`crblD@9Kdd7GWdmYNY# zj`&^|?hgSYYRTY>fRCwaF_OC_hVtAq*!(u+D@@PX#)MU@7s3_h)FeK2{?xa7{0N(^ zMQl3$-m5edeD)WtbM#1`HlS8jttFpi;fv<4OlVk~vCUxGB9X*P4$!tgc=AZ`+dbGM zR%bDn=8xnh(NB?-wXxzOqTnji3O!ZkiR9x$M1j-+7LIo@*qql5D}s<3w(GSX)A;r- zXy$^^qIWuEePe(cQNAqdH82dtI4Elcs~G2CBg)6oV4HqKhnJ>KKL<wZrL^iquyj4_ z+dK0aGb2At1!Opjb<JH#f6y1nUyX-|@eE6o-{BO$VPYTyFCw-4YUh#r4<UIQ1CJ6z z^K0nk2L?)YR6aHFs!1W^f>wl@em{`d?J^@jyS6NIpI+T@yn1}Ww40wW8P013t{N_d zI5b_JLGAa*$>0&SPIQjDm^OW2&tx~Qa=4YmIH<%F&M#alxus{G9nB1^zuFYrk_ia~ zBJNg_5)bPK52n>tQJ&jiz?Mid=nCqL%D6DN%Cch95U;xs%Z6Dh%&V~PB{pQh1_N4; z$3L4lE>e?=I;~VgHR`Y?ntvzg(rv~Af%*jgTJ>1x2=x>a91nT7LAsCdx<SEeBHrKa zxNuOG^)#pV9b^wE2T2wwm_ID1JI|hlLiJ56TIcda5VHR0C%0Fr?7YN=Y)?cn-$FcK z_D2WjyComijKYdk&F@6Bf@YO~0p=A3?)lS<OC>i4&C3+oh{9*1yUzARCB;U^UU7lG z(^VhBkfNE1YW=a!r_2eX4C{_7C{)Z{(;a8x6{e%ittL$R?cXh5JCp|kqjWSQ>UNDd zlO%hTXwD&zj5Q-#A^d)fEu4lQ0XQ(&F9Qx{-_38ZP}(6ti0w65*jdpOvnL0%9&@Ul zKh{0FtSy^eGhH6h1^E<48e&~n69<E3YsPxS89K@0qXQi5bBz?4yDvwfv$w=n5R!Ke zN8YdV;{7hT2f0y}qg&;5BP&925q~>O!HV3B$1gkgyqp&jr$y}_0je8u)VD2SI(?8Y zm1FPZ`c5WZZ<0U2w5de$ilZw5IZ4o?_@rfZNKczP6OGb>ujSru6r|G6&Yl6JWY=`t z7c#_B*gwwMKJb<)YAELBjr~$3-vc2a<UD$J_c;l0n=J~u1d{hHcPQdfq8N^2q<_-< zl?ofQeYJNrvKj*09!y7?0kV7Ssqg{*4R7LF!)@Oz^#pyxYS4TJRELEsRWO^ACj5;H zpIPMC5zV8S1~Si5Z2Qq20;)v!V0sm<dY7Lr;jC<ahrzsIcoHDXrfJ;wxFC&Vc2WNM zSjG{f<*jCpEf*m4PP(S6A|!&JIi=sHakKB;4!n^Ju?VCXA)SaiAL!mCYKMbQ$=P8z zxtc|JTZDL9+;50`=ipc7(&mAr9g^pUd6{g4RQ?+x+C9@?Fd#<e3I0%lcpJ?VjL9lR z^VZG|%V<yHclb{-H=7up#jVG`E1K6mWoSd8l?>6!xAj>kR<7lahX{Qq>}g@OlR*!c zQywl10hNHsdM}#PwMtZuu%hK%<^QBneJ`u|SoLBzm#qk30o6`1#lI{&75F+UnYTWS z;1?JpHn8Mm3I<<}I#^MMnllz*gA(NU$d-FNTY+fKMXY@ZK62%Sif4f?aMlG<B*1w7 zu_n1qxEIl{HIif7tk+K_Czy5p?n_b@j=wBpeXL2-9X|xb6YB$4<!czevUG)src4Qj zTL*9pBIcGUFdpG(B#yof8MfT#n+_atPCoX%LK6^r4)XXsd6XHpmYY(FmV0&c!Z_i- zV(gG-1o4e!29lpw8|xvH4_u*$x#c;2d8%(}`C5Tq(HZluUYgSkKWw<@W&vGkwpQ{E zf`hb7Le}S%wn)cO9lm_BT3V0*mdnzGX|}p&bqc3I--8ZU6iTbnY0r>bq~%EU$`^0Q zG{Z(=NF4Wa_jO+e6e-WmP$}MwDY@xHSKnG0e8__GVPr$<lV10|g9w%SNRISZ6g^6j z#^^Wp18x)G(6s&aNLj71SAUCn;f?0}UBk2lXor-^K%}ykzeY)x6T@aprCA|vqVyHM z4s~W%>=nVO7I4G#O=dLs&&;2D`n#1@`F2E9eg46ClkpBvba0A%vA9lXLMv>!J~22r z;_vMoQ|Sv7ptP_?-6uqVn*%^HFIsQIu6#H`)YUvo0?obUa`OYqa7`&$zIt&zy9q7L zN_~)B;QeIT#|fzKy%Xfl#pBJz-Y*5sR(dw|MaT38;<T0OMvXeIlTCJoHzp*@GNL2X z*iKnYuMYQ^mx@SE!63?Mnamo%ND-Oa2}0AD&Rwg)?3VP6IJLNIO<fUp@ToD<Hl{V2 zAq0C?+!sP`Jor`Gg>n9rg7AP5&ly`l%1_3OH(9~2?V3E899C1Mo>?z2#KbwGFI4W6 zntM%jeV!mgE#%C%Mc0zFua$0mG&MklScL3bfI)@B1Ml>Lz*dr&asK6(L*GeD2$!D4 zg=t_H&&_gCd!x4-sr)Jri}+<(`{)_E_;_eoAK+TL+rWLBJmt1&=)UOD6>YAjK`Puc z9;fr_*7J$aa{E@~sy)QWbV56MDMCrWv|!wq!x%506Q)IsW+e?T4<csHqfir#V<{#B z2P@MVx->0AepqRZL^geO#__;%Uv7thi#f_x+jx_(%fuuf^~VTWY5mdA_X}{yu5_Er z;=LL~`G`9OT>80IXS#O)b_z7-)foJWlo5$3e9p8f$=cG!a=e1kTMkZ?Q+P@P4fFfV zkn*F{-DT}R_!u$W64lFb{tUt5Xtj308J`2ktaJN<;sGN%NZIm1&GDx$B22XsK&?M6 z&fZi-8MdD)NpFp9zdR#vLQ%vCZc`}BTkN~av5lIMhFRoGO#ftwi^VPcp0|KaKTvOy zl3+|1AIij*DY=#txuOl;qxVK4fF!gSn`;q|OBQEjba=+kNS&eEm1GoP^|uGii*Csk zXyH$l`a`@Z(k&?B>3K4&IGRuAki1XV^Ela3+o)bY>%K^&s0omSfo=31S=R+W^mbY! zEMfRd7n;~D_%n-P-MsUCqH`5}ax)~$_yvL40+*t^2hKM;m0Mayegb{ZEWl(!0>cLN zkl>!fV3bn;gizNnwIhNo>9uOj`aCC^_r6$a-*dKtAN|5>a#VpAZ!kJE1V0Sq)JgW^ zPowX$1;Qj)WRIJpG==5y8#)8#-^Qc(Fe+Is#Ulvr&*U1+X#=rrw81b=)`rRl=%>?j z(j|YCHa}h!O{D6~aB*YR7Z*}y^SKd%L(M`%4GxukK13?6K99czJT(xs{Pw{{-vgk6 z7O7|hd@E||=do;Ks|lAz(q2Rb<da<AyBYD!-G+i48uBmPyC+5lVoC$~o}hufY?-6f z0GtcqQ!NZ5nrZN~#bl#Ph=98$5SYdxxd&!IOo(3?#k3*$xv}xXxDz9T_W-xE%M9YD z^+uL&yvaZSWtE~^zZBgv{_?0gX&>yL>l_=+6mVC4A1MAYy^7_JD1J@y2aM05`vh=B z85p`UhcBoSwT28B014Uc4ls4WucbCCQbho$P`-lXsrUN=b*^r}+8t`I_6X0DU!dkJ zOKz1D0-EZWT(hUjh{C$`8%Rhm<p)TEID;4RhFF6;K>@V#tLO@XSAH<I(#DAv?R>WK zK%LamVQ&Z)q{VcL%2SVk_hs$}jJ(3-114uxVVp`%LR^_Z>lot=%p8_5-Qw{CYLxB> z`4mn&OqkW2fD{9Qnv?+bP;5D-J?aA%E$$A1$K?lnp|$ZRJo7$~d;dr($-j@)Pf?+J zb;*3M(;FobfB>P$v$c2DI2(QKo(5x8*=&Mw1}FoN=hX(xaAyPt$JzJr-#@sQWF-{0 z00moqAkxNV?!pEwn2Ogj-?CEFM6WfeMrfr3#}pIh=_H(Fe&183KafuuWZzy~%gF#H z_^=g3!F0>_ARXI=UNCK5ON<k}7!k>!CU{gsU&!kL7~5+WzXuGm{b-lW%k3SzwF+Ex zLHGfIw*Av&$yc02Rz!*O_4$FwB3PwMD&=8>$;Vs9bHU(6>?ygvgAVRga>HRM^9pLu zJ@+$hvbcp;pf3<mUTC6rFvrI{GaNS$%cmqO9@CB=feXr$x7bLXiFa8MI*sRf6~(c} zi|A8+7`;NQo+WtFIX{}|9`Y;&CX+4CNCCJN?<sz9{0xS}_*M&@B}JKL#;J*pyA%SK zN94TvTCXl!UF-nO?=;(?qEpi4>08AuMxMDE-p(jg{ZFR;&RGSFtF!8I1qnEfe5xt9 zw1zCt0%Xw|+t>nZLqx~x(IpvOT1$D(K$LGYt7vskBSoli4OVrYu%L+mMzJ|er81AW z=WvuhRjh1v&nbU2L3~QvS_Xo1UHw=>N;ZiZ_*y76+<1g?0SFKqo6>6pk;p1MPVLNs z@vt7x2SA9|9ha@5S)NwZYG<{S>=(34vu7)lV1v{M<Opy@g+A_HARj#P9;fXJg<|fB z>VL3h+Lfd|B--pSHjzjCD@76KX7Qhj^4~@l;Mq>b1Ou%l?+_Rixad@|IZSbiIBiVm z$`cr3TFd0UpoxPOMuomfP`&kE<$i_IKhNE4)%KU|HV4G<qv;M?)~2t5ExIW6z_O&^ zB1_+08S|U;Ks8Q8pkKxLBvdYnE9^}PsksY}$Gzd1ThhhJmjNr=sCkwol5>=_%2ZGj zDs2>9*Gjv>a$F;PC&QG@bkAy6Y5g&q|5nRiRz~A}HA)3)e$R6*P-uEV@Nm#(i-OLS zkvJp119YDzpeAlR;ryk>i}#M1m^dTIy`Tx>FGDPC)=M;d8jQ9cE(-C{mw4Nf=hrPn zrHLvGL5TKEmmz2VL>VfyL)R)HJjH4ligaOQffNGYMVyc>Lw}#o3B!>E6f{JhqD6p8 zU^?1esa7j3DN;k7k~niT32hLPEeC8*)u_6Wyq0%soxC9?y61+;do5?OCYl7V<QWRm zRh{K8)=p=1c9@}vXB&P}dw#KQ^38?a7XEf}@4^GzS;`|ptV1{_P!LOs<ZmSNvw7uE zD(|bSC94BW)A<3ge)SokzQ(tE6}Qh7ar%|w`-bY2>e~&~F4ec60xfmB!fL#;_CJ{W zpLolL<okPbhosdkTbNKP1$*RrPu2IG<MUP#Ux=Gcla5sN^VZ=)p~NWIvpST*8Oetj zEb*c|1+7M@WL|3O(?y}k3V#)y>(s8Sj|DxCNtYv1eTXEj5FlrxuG1IfEX!z-O01t4 z5L(0t5m=zb1@+m2URsm$O-^T`7_?FyM(huQ6hzL5t};}dxmUgUt;ol$22OrV`<#Qv zTPXi?ITHHkQ>mW`1Wn+1=5Xq-p0n5g>Hx0D{0(CFKOlf4{zoo{<^U|+f0@VsBYT<n a&fRrhwlI8ou=?-|T$jykP>rVEH~$x3)0bud diff --git a/packages/storykit/.storybook/global.css b/packages/storykit/.storybook/global.css deleted file mode 100644 index 5ac59a8..0000000 --- a/packages/storykit/.storybook/global.css +++ /dev/null @@ -1,7 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -.sb-show-main { - @apply bg-white dark:bg-gray-900; -} diff --git a/packages/storykit/.storybook/main.ts b/packages/storykit/.storybook/main.ts deleted file mode 100644 index 65f7312..0000000 --- a/packages/storykit/.storybook/main.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { StorybookConfig } from "@storybook/react-webpack5" - -const path = require("path") - -const config: StorybookConfig = { - stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: [ - "@storybook/preset-create-react-app", - "@storybook/addon-onboarding", - "@storybook/addon-links", - "@storybook/addon-essentials", - "@chromatic-com/storybook", - "@storybook/addon-interactions", - "@storybook/addon-themes", - ], - framework: { - name: "@storybook/react-webpack5", - options: {}, - }, - docs: { - autodocs: "tag", - }, - webpackFinal: async (config) => { - if (config.resolve) { - config.resolve.alias = { - ...config.resolve.alias, - "@": path.resolve(__dirname, "../src"), - } - } - return config - }, -} -export default config diff --git a/packages/storykit/.storybook/manager-head.html b/packages/storykit/.storybook/manager-head.html deleted file mode 100644 index f5105bd..0000000 --- a/packages/storykit/.storybook/manager-head.html +++ /dev/null @@ -1 +0,0 @@ -<meta name="robots" content="noindex" /> diff --git a/packages/storykit/.storybook/manager.ts b/packages/storykit/.storybook/manager.ts deleted file mode 100644 index d0c47a0..0000000 --- a/packages/storykit/.storybook/manager.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { addons } from "@storybook/manager-api" - -import theme from "./theme" - -addons.setConfig({ - theme, -}) diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts deleted file mode 100644 index 7d21660..0000000 --- a/packages/storykit/.storybook/preview.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { withThemeByClassName } from "@storybook/addon-themes" -import type { Preview } from "@storybook/react" - -import "./global.css" -import theme from "./theme" - -const preview: Preview = { - parameters: { - options: { - theme, - storySort: { - order: ["Introduction", "*", "Example"], - }, - }, - backgrounds: { disable: true }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/i, - }, - }, - }, - decorators: [ - withThemeByClassName({ - themes: { - light: "", - dark: "dark", - }, - defaultTheme: "light", - }), - ], -} - -export default preview diff --git a/packages/storykit/.storybook/theme.ts b/packages/storykit/.storybook/theme.ts deleted file mode 100644 index f4651cb..0000000 --- a/packages/storykit/.storybook/theme.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { create } from "@storybook/theming/create" - -const logo = require("./assets/story-logo.png") - -export default create({ - base: "light", - // Typography - fontBase: '"Open Sans", sans-serif', - fontCode: "monospace", - - brandTitle: "Story Protocol", - brandUrl: "https://storykit.vercel.app/", - brandImage: logo, - brandTarget: "_self", - - // - colorPrimary: "#3A10E5", - colorSecondary: "#585C6D", - - // UI - appBg: "#ffffff", - appContentBg: "#ffffff", - appPreviewBg: "#ffffff", - appBorderColor: "#585C6D", - appBorderRadius: 4, - - // Text colors - textColor: "#10162F", - textInverseColor: "#ffffff", - - // Toolbar default and active colors - barTextColor: "#9E9E9E", - barSelectedColor: "#585C6D", - barHoverColor: "#585C6D", - barBg: "#ffffff", - - // Form colors - inputBg: "#ffffff", - inputBorder: "#10162F", - inputTextColor: "#10162F", - inputBorderRadius: 2, -}) diff --git a/packages/storykit/package.json b/packages/storykit/package.json deleted file mode 100644 index ee29996..0000000 --- a/packages/storykit/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@storyprotocol/storykit", - "author": "storyprotocol engineering <eng@storyprotocol.xyz>", - "version": "0.1.7", - "type": "module", - "exports": { - ".": { - "module": "./dist/storyprotocol-storykit.esm.js", - "default": "./dist/storyprotocol-storykit.cjs.js", - "types": "./dist/types.d.ts" - }, - "./package.json": "./package.json" - }, - "types": "dist/types.d.ts", - "files": [ - "dist" - ], - "publishConfig": { - "registry": "https://npm.pkg.github.com/@storyprotocol" - }, - "scripts": { - "test": "react-scripts test", - "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", - "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", - "dev": "storybook dev -p 6006", - "build-storybook": "storybook build", - "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports" - }, - "prettier": "@storykit/prettier-config", - "dependencies": { - "@emotion/is-prop-valid": "^1.2.2", - "@emotion/react": "^11.11.4", - "@headlessui/react": "^1.7.18", - "@radix-ui/react-accordion": "^1.1.2", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", - "lucide-react": "^0.364.0", - "react-icons": "^5.0.1", - "tailwind-merge": "^2.2.2", - "tailwindcss": "^3.4.1", - "tailwindcss-animate": "^1.0.7", - "viem": "^2.7.19" - }, - "devDependencies": { - "@chromatic-com/storybook": "^1.2.25", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^11.1.6", - "@storybook/addon-essentials": "^8.0.4", - "@storybook/addon-interactions": "^8.0.4", - "@storybook/addon-links": "^8.0.4", - "@storybook/addon-onboarding": "^8.0.4", - "@storybook/addon-styling-webpack": "^1.0.0", - "@storybook/addon-themes": "^8.0.4", - "@storybook/blocks": "^8.0.4", - "@storybook/manager-api": "^8.0.4", - "@storybook/preset-create-react-app": "^8.0.4", - "@storybook/react": "^8.0.4", - "@storybook/react-webpack5": "^8.0.4", - "@storybook/test": "^8.0.4", - "@storybook/theming": "^8.0.4", - "@storykit/eslint-config": "workspace:*", - "@storykit/prettier-config": "workspace:*", - "@storykit/typescript-config": "workspace:*", - "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", - "@tanstack/react-query": "^5.25.0", - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@turbo/gen": "^1.12.4", - "@types/eslint": "^8.56.5", - "@types/jest": "^29.5.12", - "@types/node": "^20.11.24", - "@types/react": "^18.2.61", - "@types/react-dom": "^18.2.19", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-storybook": "^0.8.0", - "postcss": "^8.4.38", - "postcss-nesting": "^12.1.2", - "prettier": "^3.2.5", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-apexcharts": "^1.4.1", - "react-dom": "^18.2.0", - "react-force-graph-2d": "^1.25.4", - "react-scripts": "5.0.1", - "rollup": "^4.13.1", - "rollup-plugin-dts": "^6.1.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-postcss": "^4.0.2", - "storybook": "^8.0.4", - "typescript": "^5.3.3", - "webpack": "^5.91.0" - }, - "peerDependencies": { - "@tanstack/react-query": "^5.25.0", - "react": ">=18.2.0", - "react-apexcharts": "^1.4.1", - "react-dom": ">=18.2.0", - "react-force-graph-2d": "^1.25.4", - "typescript": "^5.4.3" - } -} diff --git a/packages/storykit/postcss.config.cjs b/packages/storykit/postcss.config.cjs deleted file mode 100644 index 9615734..0000000 --- a/packages/storykit/postcss.config.cjs +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - plugins: { - "@tailwindcss/nesting": "postcss-nesting", - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js deleted file mode 100644 index 45f453e..0000000 --- a/packages/storykit/rollup.config.js +++ /dev/null @@ -1,54 +0,0 @@ -import commonjs from "@rollup/plugin-commonjs" -import resolve from "@rollup/plugin-node-resolve" -import terser from "@rollup/plugin-terser" -import typescript from "@rollup/plugin-typescript" -import dts from "rollup-plugin-dts" -import peerDepsExternal from "rollup-plugin-peer-deps-external" -import postcss from "rollup-plugin-postcss" - -// eslint-disable-next-line -const packageJson = require("./package.json") - -const config = [ - { - input: "src/index.ts", - output: [ - { - file: packageJson.exports["."].default, - format: "cjs", - sourcemap: true, - }, - { - file: packageJson.exports["."].module, - format: "esm", - sourcemap: true, - }, - ], - plugins: [ - peerDepsExternal(), - resolve(), - commonjs(), - typescript(), - terser(), - postcss({ - config: { - path: "./postcss.config.cjs", - }, - extensions: [".css"], - minimize: true, - inject: { - insertAt: "top", - }, - }), - ], - external: ["react/jsx-runtime"], - }, - { - input: "src/index.ts", - output: [{ file: "dist/types.d.ts", format: "es" }], - plugins: [dts.default()], - external: [/\.(css|less|scss)$/], - }, -] - -export default config diff --git a/packages/storykit/src/components/Button/Button-css-modules.tsx b/packages/storykit/src/components/Button/Button-css-modules.tsx deleted file mode 100644 index 987c681..0000000 --- a/packages/storykit/src/components/Button/Button-css-modules.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { cn } from "@/lib/utils" -import { type VariantProps, cva } from "class-variance-authority" -import React from "react" - -import "../../global.css" -import styles from "./styles.module.css" - -const button = cva(styles.skButton, { - variants: { - variant: { - primary: styles.primary, - secondary: styles.secondary, - }, - size: { - small: styles.small, - medium: styles.medium, - large: styles.large, - }, - }, - defaultVariants: { - variant: "primary", - size: "medium", - }, -}) - -export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & - VariantProps<typeof button> & { - variant?: "primary" | "secondary" - size?: "small" | "medium" | "large" - } - -type ButtonRef = React.ForwardedRef<HTMLButtonElement> - -const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { - return ( - // <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> - <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> - {children} - </button> - ) -}) - -Button.displayName = "Button" - -export default Button diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx deleted file mode 100644 index 7ea8640..0000000 --- a/packages/storykit/src/components/Button/Button.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { cn } from "@/lib/utils" -import { type VariantProps, cva } from "class-variance-authority" -import React from "react" - -import "../../global.css" -import "./styles.css" - -const button = cva("skButton", { - variants: { - variant: { - primary: "skButton--primary", - secondary: "skButton--secondary", - }, - size: { - small: "skButton--small", - medium: "skButton--medium", - large: "skButton--large", - }, - }, - defaultVariants: { - variant: "primary", - size: "medium", - }, -}) - -export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & - VariantProps<typeof button> & { - variant?: "primary" | "secondary" - size?: "small" | "medium" | "large" - } - -type ButtonRef = React.ForwardedRef<HTMLButtonElement> - -const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { - return ( - <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> - {children} - </button> - ) -}) - -Button.displayName = "Button" - -export default Button diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx deleted file mode 100644 index d204fc3..0000000 --- a/packages/storykit/src/components/Button/__docs__/Button.mdx +++ /dev/null @@ -1,37 +0,0 @@ -import * as ButtonStory from "./Button.stories" -import { Canvas, Meta } from "@storybook/blocks" - -<Meta of={ButtonStory} title="Example/Button" /> - -# Button - -Button component with different props. - -#### Example - -<Canvas of={ButtonStory.Primary} /> - -## Usage - -```ts -import { Button } from "@storyprotocol/storykit"; - -const Example = () => { - return ( - <Button - size="small" - variant="primary" - onClick={()=> console.log("Clicked")} - >hello</Button> - ); -}; - -export default Example; -``` - -#### Arguments - -- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. -- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. -- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. -- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx deleted file mode 100644 index 5661c8e..0000000 --- a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react" - -import Button from "../Button" - -const meta = { - title: "Example/Button", - component: Button, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, -} satisfies Meta<typeof Button> - -export default meta -type Story = StoryObj<typeof meta> - -export const Primary: Story = { - args: { - children: "Button", - variant: "primary", - size: "medium", - disabled: false, - }, -} - -export const Secondary: Story = { - args: { - children: "Button", - variant: "secondary", - size: "medium", - disabled: false, - }, -} diff --git a/packages/storykit/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx deleted file mode 100644 index 8f57dae..0000000 --- a/packages/storykit/src/components/Button/__tests__/Button.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import Button from "../Button" - -describe("Button", () => { - test("renders the Button component", () => { - render(<Button>hi</Button>) - }) -}) diff --git a/packages/storykit/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts deleted file mode 100644 index ae0694c..0000000 --- a/packages/storykit/src/components/Button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Button } from "./Button" diff --git a/packages/storykit/src/components/Button/styles.css b/packages/storykit/src/components/Button/styles.css deleted file mode 100644 index 384f0fc..0000000 --- a/packages/storykit/src/components/Button/styles.css +++ /dev/null @@ -1,21 +0,0 @@ -.skButton { - @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; - - &.skButton--primary { - @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; - } - - &.skButton--secondary { - @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; - } - - &.skButton--small { - @apply text-xs px-2 py-1; - } - &.skButton--medium { - @apply text-base px-4 py-2; - } - &.skButton--large { - @apply text-xl px-6 py-3; - } -} diff --git a/packages/storykit/src/components/Button/styles.module.css b/packages/storykit/src/components/Button/styles.module.css deleted file mode 100644 index d024632..0000000 --- a/packages/storykit/src/components/Button/styles.module.css +++ /dev/null @@ -1,21 +0,0 @@ -.skButton { - @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; - - &.primary { - @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; - } - - &.secondary { - @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; - } - - &.small { - @apply text-xs px-2 py-1; - } - &.medium { - @apply text-base px-4 py-2; - } - &.large { - @apply text-xl px-6 py-3; - } -} diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx deleted file mode 100644 index 2673224..0000000 --- a/packages/storykit/src/components/IpGraph/IpGraph.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react" - -import "../../global.css" -import { convertAssetToGraphFormat } from "../../lib/graph" -import { Asset } from "../../lib/types" -import { useIpAssetContext } from "../../providers" -import "./styles.css" - -export type IpGraphProps = { - width?: number - height?: number -} - -function IpGraph({ width = 500, height = 500 }: IpGraphProps) { - const { assetData } = useIpAssetContext() - const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [ForceGraph, setForceGraph] = useState<any>(null) - - useEffect(() => { - // ForceGraph will break SSR, and needs to be loaded dynamically - async function importForceGraphModule() { - const fg = await import("react-force-graph-2d") - setForceGraph(fg.default) - } - importForceGraphModule() - }, []) - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { - const isParent = node.level < 0 - const isSelf = node.level === 0 - const isChild = node.level > 0 - - let label - - if (node.isRoot) { - if (isParent) { - label = `${node.name} (Root / Parent)` - } else { - label = `${node.name} (Root)` - } - } else if (isParent) { - label = `${node.name} (Parent)` - } else if (isChild) { - label = `${node.name} (Child)` - } else { - label = `${node.name}` - } - - const fontSize = 12 / globalScale - const circleRadius = isSelf ? 6 : 3 // Radius of the circle - - // Set the font for the text - ctx.font = `${fontSize}px Sans-Serif` - - // Draw the circle - ctx.beginPath() - ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) - if (isSelf) { - ctx.fillStyle = "black" // Color of the circle - } else if (isParent) { - ctx.fillStyle = "grey" // Color of the circle - } else { - ctx.fillStyle = "lightgrey" // Color of the circle - } - - ctx.fill() - if (isSelf) { - ctx.strokeStyle = "lightblue" // Border color of the circle - ctx.stroke() - } - - // Draw the text next to the circle - ctx.fillText(label, node.x, node.y + 10) - } - - return ( - <div className="skIpGraph"> - {ForceGraph ? ( - <ForceGraph width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> - ) : null} - </div> - ) -} - -IpGraph.displayName = "IpGraph" - -export default IpGraph diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx deleted file mode 100644 index 6e98d12..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpGraph from "../IpGraph" - -const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ - ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, - width = 400, - height = 300, -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div className="flex h-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> - <IpGraph width={width} height={height} /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx deleted file mode 100644 index ad8a772..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx +++ /dev/null @@ -1,45 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpGraphStory from "./IpGraph.stories" - -<Meta of={IpGraphStory} /> - -# IpGraph - -Show IP Asset derivatives graph. - -#### Example - -<Canvas of={IpGraphStory.Select} /> - -<Controls /> - -## Dependencies - -The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). - -```bash -npm install react-force-graph-2d -``` - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpGraph /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **width**: _number_ - The width of the canvas -- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx deleted file mode 100644 index 049a105..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpGraph", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts deleted file mode 100644 index d038069..0000000 --- a/packages/storykit/src/components/IpGraph/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IpGraph/styles.css b/packages/storykit/src/components/IpGraph/styles.css deleted file mode 100644 index 1bae73e..0000000 --- a/packages/storykit/src/components/IpGraph/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -.skIpGraph { - @apply relative; -} diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx deleted file mode 100644 index bf01fc6..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { POLICY_TYPE } from "@/lib/types" -import { cn, getPolicyTypeByPILData } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" -import { cva } from "class-variance-authority" -import { CircleCheck, CircleMinus } from "lucide-react" -import { useState } from "react" -import { FaCaretDown, FaCaretUp } from "react-icons/fa6" - -import "../../global.css" -import "./styles.css" - -const CANS = { - REMIX: "Remix this work", - INCLUDE: "Include this work in their own work(s)", - CREDIT: "Credit you appropriately", - DISTRIBUTE: "Distribute their remix anywhere", - PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", - CREATOR_CREDIT: "Credit you as the creator", - PUBLISH: "Display / publish the work in any medium", -} - -const ShowCans = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] - break - default: - return [] - break - } -} - -const CANNOTS = { - RESELL: "Resell your original work", - COMMERCIALIZE: "Commercialize the remix", - CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", - CLAIM: "Claim your work as their own", - REMIX: "Create remixes of the commercial use.", -} - -const ShowCannots = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] - break - default: - return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] - break - } -} - -const policiesStyles = cva("", { - variants: { - size: { - small: "skIpPolicyAccordion--small", - medium: "skIpPolicyAccordion--medium", - large: "skIpPolicyAccordion--large", - }, - }, -}) - -export type IpPolicyAccordionProps = { - size?: "small" | "medium" | "large" -} - -function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { - const { policyData } = useIpAssetContext() - const [expanded, setExpanded] = useState<number | null>(0) - - const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 - - return policyData?.length ? ( - <div className={cn("skIpPolicyAccordion", policiesStyles({ size }))}> - {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {(policyData as unknown as any[])?.map((policy, index) => ( - <div key={policy.id} className="skIpPolicyAccordion__item"> - <div - className="skIpPolicyAccordion__item-header" - onClick={() => setExpanded(expanded === index ? null : index)} - > - {getPolicyTypeByPILData(policy.licenseTerms)} - {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} - </div> - - <div - className={cn( - "skIpPolicyAccordion__item-list", - expanded === index && "skIpPolicyAccordion__item-list--expanded" - )} - > - <div className="skIpPolicyAccordion__properties"> - {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( - <> - <div className="skIpPolicyAccordion__item-list-title">Others Can</div> - <div className="skIpPolicyAccordion__list"> - {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( - <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--can"> - <CircleCheck width={iconWidth} /> - <span>{can}</span> - </div> - ))} - </div> - </> - ) : null} - <div className="skIpPolicyAccordion__item-list-title">Others Cannot</div> - <div className="skIpPolicyAccordion__list"> - {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( - <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--cannot"> - <CircleMinus width={iconWidth} /> - <span>{can}</span> - </div> - ))} - </div> - </div> - </div> - - {index < policyData.length - 1 && <div className="skIpPolicyAccordion__divider" />} - </div> - ))} - </div> - ) : ( - <div className="skIpPolicyAccordion skIpPolicyAccordion--no-policy">No Policy</div> - ) -} - -export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx deleted file mode 100644 index 5a4a58f..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpPolicyAccordion from "../IpPolicyAccordion" - -type Size = "small" | "medium" | "large" - -const Example: FC<{ ipId: Address; size: Size }> = ({ - ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, - size = "medium", -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div className="flex h-full w-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> - <IpPolicyAccordion size={size} /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx deleted file mode 100644 index fa8a1c9..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" - -<Meta of={IpPolicyAccordionStory} /> - -# IpPolicyAccordion - -Displays the IP Asset policies in a readable format (cans & cannots). - -#### Example - -<Canvas of={IpPolicyAccordionStory.Select} /> - -<Controls /> - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpPolicyAccordion } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpPolicyAccordion /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx deleted file mode 100644 index 00db34b..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpPolicyAccordion", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx deleted file mode 100644 index f05ad5a..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css deleted file mode 100644 index 0cefe8e..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/styles.css +++ /dev/null @@ -1,70 +0,0 @@ -.skIpPolicyAccordion { - @apply flex flex-col w-full min-w-48; - - .skIpPolicyAccordion__item { - @apply flex flex-col w-full; - } - - .skIpPolicyAccordion__item-header { - @apply flex w-full items-center justify-between cursor-pointer; - } - - .skIpPolicyAccordion__item-list { - @apply flex w-full items-center justify-between overflow-hidden h-0; - - &.skIpPolicyAccordion__item-list--expanded { - @apply h-auto; - } - } - - .skIpPolicyAccordion__properties { - @apply flex flex-col pt-2 gap-2; - } - - .skIpPolicyAccordion__item-list-title { - @apply font-bold; - } - - .skIpPolicyAccordion__list { - @apply flex flex-col; - } - - .skIpPolicyAccordion__property { - @apply flex w-full items-center gap-2; - - &.skIpPolicyAccordion__property--can > svg { - @apply text-green-500; - } - - &.skIpPolicyAccordion__property--cannot > svg { - @apply text-red-500; - } - } - - .skIpPolicyAccordion__divider { - @apply border-b border-gray-200 w-full my-2; - } - - &.skIpPolicyAccordion--small { - @apply text-sm; - } - - &.skIpPolicyAccordion--medium { - @apply text-base; - - .policy-list { - @apply gap-1; - } - } - - &.skIpPolicyAccordion--large { - @apply text-lg; - .policy-list { - @apply gap-2; - } - } - - &.skIpPolicyAccordion--no-policy { - @apply text-slate-400; - } -} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx deleted file mode 100644 index b4fbf52..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { shortenAddress } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" -import { useEffect, useState } from "react" -import { Address } from "viem" - -import "../../global.css" -import "./styles.css" - -function IpRoyaltyPieChart() { - const { royaltyData } = useIpAssetContext() - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [Chart, setChart] = useState<any>(null) - useEffect(() => { - import("react-apexcharts").then((Component) => setChart(Component)) - }, []) - - let ApexChart = Chart - if (ApexChart?.default) ApexChart = ApexChart.default - if (ApexChart?.default) ApexChart = ApexChart.default - - if (royaltyData?.targetAncestors) { - const chart = { - options: { - chart: { - width: 300, - type: "pie" as `pie`, - }, - dataLabels: { - style: { - fontSize: "20px", - // fontFamily: "Inter, ui-sans-serif", - fontWeight: "400", - colors: ["#fff", "#fff", "#1f2937"], - }, - dropShadow: { - enabled: false, - }, - formatter: (value: number) => `${value.toFixed(1)} %`, - }, - // labels: ["Direct", "Organic search"], - plotOptions: { - pie: { - dataLabels: { - offset: -20, - }, - }, - }, - colors: ["#5f6060", "#494848"], - tooltip: { - enabled: true, - y: { - title: { - formatter: (value: Address) => shortenAddress(value), - }, - }, - }, - legend: { - show: false, - }, - labels: royaltyData?.targetAncestors, - responsive: [ - { - breakpoint: 480, - options: { - chart: { - width: 300, - }, - legend: { - position: "bottom", - }, - }, - }, - ], - }, - series: royaltyData?.targetRoyaltyAmount.map(Number), - } - - return ( - <div className="skIpRoyaltyPieChart"> - <div className="skIpRoyaltyPieChart__chart"> - {ApexChart ? ( - <ApexChart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> - ) : null} - </div> - <div className="skIpRoyaltyPieChart__key"> - <dl className="skIpRoyaltyPieChart__list"> - {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {royaltyData?.targetAncestors.map((target: any, i: any) => ( - <div key={target} className="skIpRoyaltyPieChart__item"> - <dt className="skIpRoyaltyPieChart__address">{shortenAddress(target)}</dt> - <dd className="skIpRoyaltyPieChart__value">{royaltyData.targetRoyaltyAmount[i]}</dd> - </div> - ))} - </dl> - </div> - </div> - ) - } - - return <div className="skIpRoyaltyPieChart skIpRoyaltyPieChart--empty">No Royalty Data</div> -} - -export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx deleted file mode 100644 index 3719043..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpRoyaltyPieChart from "../IpRoyaltyPieChart" - -const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div className="flex h-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> - <IpRoyaltyPieChart /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx deleted file mode 100644 index 7bb1ab0..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx +++ /dev/null @@ -1,40 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" - -<Meta of={IpRoyaltyPieChartStory} /> - -# IpRoyaltyPieChart - -Displays the divisions of royalties for an IP Asset in a pie chart. - -#### Example - -<Canvas of={IpRoyaltyPieChartStory.Select} /> - -<Controls /> - -## Dependencies - -The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). - -```bash -npm install react-apexcharts -``` - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpRoyaltyPieChart } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpRoyaltyPieChart /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx deleted file mode 100644 index c218f3f..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpRoyaltyPieChart", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx deleted file mode 100644 index 80b6af8..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css deleted file mode 100644 index d59f690..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css +++ /dev/null @@ -1,30 +0,0 @@ -.skIpRoyaltyPieChart { - @apply flex flex-col items-center justify-between; - - .skIpRoyaltyPieChart__chart { - @apply min-h-[230px]; - } - - .skIpRoyaltyPieChart__key { - @apply w-full min-w-[300px] px-2; - } - - .skIpRoyaltyPieChart__list { - @apply divide-y divide-gray-100 overflow-x-hidden text-sm leading-6; - } - - .skIpRoyaltyPieChart__item { - @apply flex justify-between gap-x-4 py-1; - } - - .skIpRoyaltyPieChart__address { - @apply text-xs capitalize text-gray-500; - } - .skIpRoyaltyPieChart__value { - @apply truncate text-gray-700; - } - - &.skIpRoyaltyPieChart--empty { - @apply items-start text-slate-400; - } -} diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx deleted file mode 100644 index 382949d..0000000 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ /dev/null @@ -1,394 +0,0 @@ -import { Menu, Transition } from "@headlessui/react" -import React, { Fragment, useState } from "react" -import { FaWandMagicSparkles } from "react-icons/fa6" -import { IoIosShareAlt } from "react-icons/io" -import { SiOpensea } from "react-icons/si" -import { TbLicense } from "react-icons/tb" -import { Address } from "viem" - -import "../../global.css" -import { cn, shortenAddress } from "../../lib/utils" -import { IpAssetProvider, useIpAssetContext } from "../../providers" -import { IpGraph } from "../IpGraph" -import { IpPolicyAccordion } from "../IpPolicyAccordion" -import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" -import "./styles.css" - -export type IpWidgetProps = { - ipId: Address - isBottomNav?: boolean -} - -export const IPA_CARD_TABS = [ - { id: "overview", label: "Overview" }, - { id: "licensing", label: "Licensing" }, - { id: "derivatives", label: "IP Graph" }, - { id: "royalty", label: "Royalty" }, -] - -const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { - return <IPAssetCardWrapper ipId={ipId} isBottomNav={isBottomNav} {...rest} /> -} - -function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { - const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) - - const _Tabs = () => ( - <div className={cn("skIpWidget__tabs", isBottomNav && "skIpWidget__tabs--bottom")}> - <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> - </div> - ) - - const _Card = () => ( - <div className="skIpWidget__card"> - <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> - </div> - ) - - return ( - <IpAssetProvider ipId={ipId} key={ipId}> - <div className="skIpWidget"> - {isBottomNav ? <_Card /> : <_Tabs />} - {isBottomNav ? <_Tabs /> : <_Card />} - </div> - </IpAssetProvider> - ) -} - -function Tabs({ - ipId, - activeTab, - setActiveTab, -}: { - ipId: Address - activeTab: string - setActiveTab: (tab: string) => void -}) { - return ( - <div className="skIpWidget__tabsContainer" id={ipId}> - <div className="skIpWidget__tabsInner"> - {IPA_CARD_TABS.map((tab) => ( - <button - key={`${ipId}-${tab.id}`} - onClick={() => setActiveTab(tab.id)} - className={cn("skIpWidget__tab", activeTab !== tab.id && "skIpWidget__tab--active")} - style={{ - WebkitTapHighlightColor: "transparent", - }} - > - {activeTab === tab.id && <span className="skIpWidget__activeTab" />} - {tab.label} - </button> - ))} - </div> - <button> - <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> - <g clipPath="url(#clip0_235_3)"> - <mask - id="mask0_235_3" - style={{ maskType: "luminance" }} - maskUnits="userSpaceOnUse" - x="0" - y="0" - width="512" - height="512" - > - <path d="M512 0H0V512H512V0Z" fill="white" /> - </mask> - <g mask="url(#mask0_235_3)"> - <path - d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" - fill="black" - /> - </g> - </g> - <defs> - <clipPath id="clip0_235_3"> - <rect width="512" height="512" fill="white" /> - </clipPath> - </defs> - </svg> - </button> - </div> - ) -} - -function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { - switch (activeTab) { - case "overview": - return <IPAssetOverview isBottomNav={isBottomNav} /> - case "licensing": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <div className="skIpWidget__policyContainer"> - <IpPolicyAccordion size="small" /> - </div> - </IPAssetLayout> - ) - case "derivatives": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <IpGraph width={370} height={250} /> - </IPAssetLayout> - ) - case "royalty": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <IpRoyaltyPieChart /> - </IPAssetLayout> - ) - default: - return <IPAssetOverview /> - } -} - -function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { - return ( - <div className={cn("skIpWidget__ipAssetLayout", !isBottomNav && "skIpWidget__ipAssetLayout--topNav")}> - <IPAssetHeader /> - {children} - </div> - ) -} - -function IPAssetDropdownMenu() { - const { assetData } = useIpAssetContext() - return ( - <Menu as="div" className="skIpWidget__ipAssetDropdownMenu"> - <div> - <Menu.Button className="skIpWidget__ipAssetDropdownMenu__button"> - <svg - xmlns="http://www.w3.org/2000/svg" - width="24" - height="24" - viewBox="0 0 24 24" - fill="none" - stroke="currentColor" - strokeWidth="2" - strokeLinecap="round" - strokeLinejoin="round" - > - <circle cx="12" cy="12" r="1" /> - <circle cx="12" cy="5" r="1" /> - <circle cx="12" cy="19" r="1" /> - </svg> - </Menu.Button> - </div> - - <Transition - as={Fragment} - enter="transition ease-out duration-100" - enterFrom="transform opacity-0 scale-95" - enterTo="transform opacity-100 scale-100" - leave="transition ease-in duration-75" - leaveFrom="transform opacity-100 scale-100" - leaveTo="transform opacity-0 scale-95" - > - <Menu.Items className="skIpWidget__ipAssetDropdownMenu__items"> - {assetData?.rootIpIds?.[0]?.id && ( - <div className="skIpWidget__ipAssetDropdownMenu__rootIp"> - <p className="skIpWidget__ipAssetDropdownMenu__rootIp__title">Root IP</p> - <div className="skIpWidget__ipAssetDropdownMenu__rootIp__item"> - <img - src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} - alt={assetData?.rootIpIds?.[0]?.id as Address} - ></img> - <p>{shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)}</p> - </div> - </div> - )} - {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( - <div className="skIpWidget__ipAssetDropdownMenu__parentIp"> - <p className="skIpWidget__ipAssetDropdownMenu__parentIp__title">Parent IPs</p> - <div className="skIpWidget__ipAssetDropdownMenu__parentIp__item"> - <div className="skIpWidget__ipAssetDropdownMenu__parentIp__avatars"> - {assetData?.parentIpIds?.slice(0, 5).map((asset, index) => ( - <img - key={index} - style={{ - zIndex: ((assetData?.parentIpIds?.length as number) - index) * 10, - }} - src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} - alt={asset.id} - /> - ))} - </div> - <p className="skIpWidget__ipAssetDropdownMenu__parentIp__addresses"> - {assetData?.parentIpIds?.length === 1 - ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) - : `${assetData?.parentIpIds?.length} total `} - </p> - </div> - </div> - )} - {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( - <div className="skIpWidget__ipAssetDropdownMenu__childIp"> - <p className="skIpWidget__ipAssetDropdownMenu__childIp__title">Child IPs</p> - <div className="skIpWidget__ipAssetDropdownMenu__childIp__container"> - <div className="skIpWidget__ipAssetDropdownMenu__childIp__avatars"> - {assetData?.childIpIds?.slice(0, 5).map((asset, index) => ( - <img - key={index} - style={{ - zIndex: ((assetData?.childIpIds?.length as number) - index) * 5, - }} - src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} - alt={asset.id} - /> - ))} - </div> - <p className="skIpWidget__ipAssetDropdownMenu__childIp__addresses"> - {assetData?.childIpIds?.length === 1 - ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) - : `${assetData?.childIpIds?.length} total `} - </p> - </div> - </div> - )} - <div className="skIpWidget__ipAssetDropdownMenu__menu"> - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <FaWandMagicSparkles className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - Remix - </a> - )} - </Menu.Item> - - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <SiOpensea className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - View on Opensea - </a> - )} - </Menu.Item> - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <TbLicense className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - Buy License - </a> - )} - </Menu.Item> - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <IoIosShareAlt className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - Share - </a> - )} - </Menu.Item> - </div> - </Menu.Items> - </Transition> - </Menu> - ) -} - -function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { - const { nftData, assetData } = useIpAssetContext() - return ( - <div className="skIpWidget__ipAssetHeader"> - <div className="skIpWidget__ipAssetHeader__inner"> - <div - className={cn("skIpWidget__ipAssetHeader__image", hideImage && "skIpWidget__ipAssetHeader__image--hidden")} - > - <img src={nftData?.image_url} /> - </div> - <div> - <div> - <h1 className="skIpWidget__ipAssetHeader__name"> - {assetData?.nftMetadata.name || nftData?.name || "Untitled"} - </h1> - <h2 className="skIpWidget__ipAssetHeader__owner"> - Owned by{" "} - <span className="skIpWidget__ipAssetHeader__owner__address"> - {shortenAddress(nftData?.owners[0].owner_address as string)} - </span> - </h2> - </div> - </div> - </div> - <IPAssetDropdownMenu /> - </div> - ) -} - -function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { - const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() - - const isLoading = isAssetDataLoading || isNftDataLoading - - const Title = () => - isLoading ? ( - <div className="skIpWidget__ipAssetOverview__titleLoading"> - <div></div> - <div></div> - </div> - ) : ( - <IPAssetHeader hideImage /> - ) - - const AssetImage = () => - isLoading ? ( - <div className="skIpWidget__ipAssetOverview__assetImage__loading"> - <div> - <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 18"> - <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> - </svg> - </div> - </div> - ) : ( - <div className="skIpWidget__ipAssetOverview__assetImage"> - <img src={nftData?.image_url} /> - </div> - ) - - const TitleBar = () => ( - <div - className={cn( - "skIpWidget__ipAssetOverview__titleBar", - isBottomNav && "skIpWidget__ipAssetOverview__titleBar--bottom" - )} - > - <Title /> - </div> - ) - - return ( - <div className="skIpWidget__ipAssetOverview"> - {isBottomNav && <TitleBar />} - <AssetImage /> - {!isBottomNav && <TitleBar />} - </div> - ) -} - -IpWidget.displayName = "IpWidget" - -export default IpWidget diff --git a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx deleted file mode 100644 index c23faf9..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import IpWidget from "../IpWidget" - -const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ - ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", - isBottomNav = false, -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpWidget ipId={ipId} isBottomNav={isBottomNav} /> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx deleted file mode 100644 index e7797aa..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx +++ /dev/null @@ -1,34 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpWidgetStory from "./IpWidget.stories" - -<Meta of={IpWidgetStory} /> - -# IP Asset Widget - -IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. - -#### Example - -<Canvas of={IpWidgetStory.Select} /> - -<Controls /> - -## Usage - -```ts -import { IpWidget } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. -- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx deleted file mode 100644 index 0385ca9..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpWidget", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: { - isBottomNav: { control: "boolean", defaultValue: true }, - }, - args: {}, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - isBottomNav: true, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - isBottomNav: true, - }, -} diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx deleted file mode 100644 index 86d2dd2..0000000 --- a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import IpWidget from "../IpWidget" - -describe("IpWidget", () => { - test("renders the IpWidget component", () => { - render(<IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} />) - }) -}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts deleted file mode 100644 index 00d52ff..0000000 --- a/packages/storykit/src/components/IpWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/IpWidget/styles.css b/packages/storykit/src/components/IpWidget/styles.css deleted file mode 100644 index e120f5a..0000000 --- a/packages/storykit/src/components/IpWidget/styles.css +++ /dev/null @@ -1,218 +0,0 @@ -.skIpWidget { - @apply flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg; - - .skIpWidget__card { - @apply flex size-full flex-auto flex-col p-2; - } - - .skIpWidget__tabs { - @apply w-full px-2 pt-2; - - &.skIpWidget__tabs--bottom { - @apply pb-2 pt-0; - } - - .skIpWidget__tabsContainer { - @apply flex space-x-1; - } - - .skIpWidget__tabsInner { - @apply flex w-full justify-between; - } - - .skIpWidget__tab { - @apply relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2; - - &.skIpWidget__tab--active { - @apply hover:text-black/60; - } - } - - .skIpWidget__activeTab { - @apply absolute inset-0 z-10 bg-white mix-blend-difference rounded-full; - } - } - - .skIpWidget__policyContainer { - @apply p-2; - - .skIpPolicyAccordion--no-policy { - @apply w-full items-center py-32; - } - } - - .skIpWidget__ipAssetLayout { - @apply flex gap-2 flex-col; - - .skIpWidget__ipAssetLayout--topNav { - @apply flex-col-reverse justify-between h-full flex-auto; - } - - .skIpRoyaltyPieChart--empty { - @apply w-full items-center py-32; - } - } - - .skIpWidget__ipAssetDropdownMenu { - @apply relative inline-block text-left; - - .skIpWidget__ipAssetDropdownMenu__button { - @apply inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm; - - svg { - @apply size-4 flex-none text-gray-600; - } - } - - .skIpWidget__ipAssetDropdownMenu__items { - @apply absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none; - } - - .skIpWidget__ipAssetDropdownMenu__rootIp { - @apply px-4 py-2; - - .skIpWidget__ipAssetDropdownMenu__rootIp__title { - @apply text-xs text-slate-400; - } - - .skIpWidget__ipAssetDropdownMenu__rootIp__item { - @apply flex items-center; - - > img { - @apply relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white; - } - - > p { - @apply truncate text-sm text-gray-900; - } - } - } - - .skIpWidget__ipAssetDropdownMenu__parentIp { - @apply px-4 py-2; - - .skIpWidget__ipAssetDropdownMenu__parentIp__title { - @apply text-xs text-slate-400; - } - - .skIpWidget__ipAssetDropdownMenu__parentIp__avatars { - @apply mr-3 -space-x-3; - - img { - @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; - } - } - .skIpWidget__ipAssetDropdownMenu__parentIp__addresses { - @apply truncate text-sm text-gray-900; - } - } - - .skIpWidget__ipAssetDropdownMenu__childIp { - @apply px-4 py-2; - - .skIpWidget__ipAssetDropdownMenu__childIp__title { - @apply text-xs text-slate-400; - } - .skIpWidget__ipAssetDropdownMenu__childIp__container { - @apply flex items-center; - } - .skIpWidget__ipAssetDropdownMenu__childIp__avatars { - @apply mr-3 -space-x-3; - - img { - @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; - } - } - .skIpWidget__ipAssetDropdownMenu__childIp__addresses { - @apply truncate text-sm text-gray-900; - } - } - - .skIpWidget__ipAssetDropdownMenu__menu { - @apply py-1; - - .skIpWidget__ipAssetDropdownMenu__menu__link { - @apply flex items-center px-4 py-2 text-sm text-gray-700; - - .skIpWidget__ipAssetDropdownMenu__menu__icon { - @apply mr-3 size-5 text-gray-400; - } - - &.skIpWidget__ipAssetDropdownMenu__menu__link--active { - @apply bg-gray-100 text-gray-900; - - .skIpWidget__ipAssetDropdownMenu__menu__icon { - @apply text-gray-500; - } - } - } - } - } - - .skIpWidget__ipAssetHeader { - @apply flex w-full flex-row justify-between; - - .skIpWidget__ipAssetHeader__inner { - @apply flex w-full flex-row justify-start gap-2; - } - - .skIpWidget__ipAssetHeader__image { - &.skIpWidget__ipAssetHeader__image--hidden { - @apply hidden; - } - img { - @apply size-10 rounded-md object-cover; - } - } - .skIpWidget__ipAssetHeader__name { - @apply font-semibold; - } - .skIpWidget__ipAssetHeader__owner { - @apply text-xs; - .skIpWidget__ipAssetHeader__owner__address { - @apply text-slate-400; - } - } - } - - .skIpWidget__ipAssetOverview { - @apply flex w-full flex-col items-start justify-start; - - .skIpWidget__ipAssetOverview__titleBar { - @apply flex w-full flex-row justify-between pt-1; - - &.skIpWidget__ipAssetOverview__titleBar--bottom { - @apply pb-1 pt-0; - } - } - - .skIpWidget__ipAssetOverview__titleLoading { - @apply flex animate-pulse flex-col gap-2; - div:nth-child(1) { - @apply h-4 w-20 rounded bg-slate-200; - } - div:nth-child(2) { - @apply h-3 w-32 rounded bg-slate-200; - } - } - - .skIpWidget__ipAssetOverview__assetImage { - @apply flex w-full justify-center text-center; - - img { - @apply rounded-md object-contain; - } - } - .skIpWidget__ipAssetOverview__assetImage__loading { - @apply w-full animate-pulse py-1; - - > div { - @apply flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700; - - > svg { - @apply size-10 text-slate-100 dark:text-slate-600; - } - } - } - } -} diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts deleted file mode 100644 index db39fd2..0000000 --- a/packages/storykit/src/components/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./Button" -export * from "./IpWidget" -export * from "./IpGraph" -export * from "./IpPolicyAccordion" -export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/declarations.d.ts b/packages/storykit/src/declarations.d.ts deleted file mode 100644 index a5ad056..0000000 --- a/packages/storykit/src/declarations.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "*.module.css" { - const classes: { [key: string]: string } - export default classes -} diff --git a/packages/storykit/src/global.css b/packages/storykit/src/global.css deleted file mode 100644 index 413f711..0000000 --- a/packages/storykit/src/global.css +++ /dev/null @@ -1,67 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* @layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; - - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; - - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 222.2 84% 4.9%; - - --radius: 0.5rem; - } - - .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; - - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; - - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; - - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; - - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; - - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; - - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; - - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; - - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 212.7 26.8% 83.9%; - } -} */ diff --git a/packages/storykit/src/index.ts b/packages/storykit/src/index.ts deleted file mode 100644 index 6efd0b2..0000000 --- a/packages/storykit/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./components" -export * from "./providers" diff --git a/packages/storykit/src/lib/api.ts b/packages/storykit/src/lib/api.ts deleted file mode 100644 index 562f0cb..0000000 --- a/packages/storykit/src/lib/api.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { QueryOptions, ResourceType } from "./types" - -const API_BASE_URL = - process.env.STORYBOOK_API_BASE_URL || process.env.NEXT_PUBLIC_API_BASE_URL || process.env.API_BASE_URL || "" -const API_KEY = - process.env.STORYBOOK_STORY_PROTOCOL_X_API_KEY || - process.env.NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY || - process.env.STORY_PROTOCOL_X_API_KEY || - "" - -export async function getResource(resourceName: ResourceType, resourceId: string) { - try { - const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { - method: "GET", - headers: { - "Content-Type": "application/json", - "x-api-key": API_KEY as string, - "X-CHAIN": "sepolia", - }, - }) - if (res.ok) { - return res.json() - } - } catch (error) { - console.error(error) - } -} - -export async function listResource(resourceName: ResourceType, options?: QueryOptions) { - try { - const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}`, { - method: "POST", - headers: { - "Content-Type": "application/json", - "x-api-key": API_KEY as string, - "X-CHAIN": "sepolia", - }, - cache: "no-cache", - ...(options && { body: JSON.stringify({ options }) }), - }) - if (res.ok) { - return res.json() - } else { - return res - } - } catch (error) { - console.error(error) - } -} diff --git a/packages/storykit/src/lib/graph.ts b/packages/storykit/src/lib/graph.ts deleted file mode 100644 index 09852aa..0000000 --- a/packages/storykit/src/lib/graph.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { Asset } from "@/lib/types" -import { Address } from "viem" - -export interface GraphNode { - id: string - name: string - val: number - tokenContract?: string | Address - tokenId?: string - level?: number - isRoot?: boolean -} - -interface Link { - source: string - target: string -} - -export interface GraphData { - nodes: GraphNode[] - links: Link[] -} - -export function convertJsonToGraphFormat(ipAssets: Asset[]): GraphData { - const nodes: GraphNode[] = [] - const links: Link[] = [] - - // Map ids to their corresponding objects for quick access - const idToObjectMap: { [id: string]: Asset } = {} - for (const obj of ipAssets) { - idToObjectMap[obj.id] = obj - } - - // Create nodes - for (const asset of ipAssets) { - const nodeName = asset.nftMetadata.name || "Untitled" - const node: GraphNode = { - id: asset.id, - name: nodeName, - val: 1, - tokenContract: asset.nftMetadata.tokenContract, - } - nodes.push(node) - - // Create links - if (asset.childIpIds) { - for (const childId of asset.childIpIds) { - const childObj = idToObjectMap[childId.id] - if (childObj && childObj.parentIpIds) { - for (const parentObj of childObj.parentIpIds) { - links.push({ - source: parentObj.id, - target: childObj.id, - }) - } - } - } - } - } - - return { nodes, links } -} - -export function convertAssetToGraphFormat(jsonData: Asset): GraphData { - const rootIpId = jsonData.rootIpIds?.[0]?.id - const nodes: GraphNode[] = [] - const links: Link[] = [] - - // Create node for the main object - const mainNode: GraphNode = { - id: jsonData.id, - name: jsonData.nftMetadata.name || "Untitled", - tokenContract: jsonData.nftMetadata.tokenContract, - tokenId: jsonData.nftMetadata.tokenId, - val: 1, - level: 0, - isRoot: rootIpId === undefined, - } - nodes.push(mainNode) - - // Add all childIpIds to nodes array and create links - if (jsonData.childIpIds) { - for (const child of jsonData.childIpIds) { - const childNode: GraphNode = { - id: child.id, - name: child.nftMetadata.name || "Untitled", - tokenContract: child.nftMetadata.tokenContract, - tokenId: child.nftMetadata.tokenId, - val: 1, - level: 1, - } - nodes.push(childNode) - - links.push({ - source: jsonData.id, - target: child.id, - }) - } - } - - // Add all parentIpIds to nodes array and create links - if (jsonData.parentIpIds) { - for (const parent of jsonData.parentIpIds) { - const parentNode: GraphNode = { - id: parent.id, - name: parent.nftMetadata.name || "Untitled", - tokenContract: parent.nftMetadata.tokenContract, - tokenId: parent.nftMetadata.tokenId, - val: 1, - level: -1, // assuming parent is one level up - isRoot: parent.id === rootIpId, - } - nodes.push(parentNode) - links.push({ - source: parent.id, - target: jsonData.id, - }) - } - } - - return { nodes, links } -} diff --git a/packages/storykit/src/lib/simplehash/index.ts b/packages/storykit/src/lib/simplehash/index.ts deleted file mode 100644 index 3e28a76..0000000 --- a/packages/storykit/src/lib/simplehash/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Address } from "viem" - -import { CollectionMetadata, NFTMetadata, NFTWalletResponse } from "./types/simplehash" - -const createRequestOptions = (): RequestInit => ({ - method: "GET", - headers: { - accept: "application/json", - "X-API-KEY": - process.env.STORYBOOK_SIMPLE_HASH_API_KEY || - process.env.NEXT_PUBLIC_SIMPLE_HASH_API_KEY || - process.env.SIMPLE_HASH_API_KEY || - "", - }, -}) - -export const getNFTByTokenId = async (contractAddress: Address, tokenId: string): Promise<NFTMetadata> => { - const options = createRequestOptions() - const url = `https://api.simplehash.com/api/v0/nfts/ethereum-sepolia/${contractAddress}/${tokenId}` - const response = await fetch(url, options) - const data = await response.json() - return data -} - -export const getCollectionByAddress = async (contractAddress: Address): Promise<CollectionMetadata> => { - const options = createRequestOptions() - const url = `https://api.simplehash.com/api/v0/nfts/collections/ethereum-sepolia/${contractAddress}` - const response = await fetch(url, options) - const data = await response.json() - return data.collections[0] -} - -export const getNFTByWallet = async (walletAddress: Address): Promise<NFTWalletResponse> => { - const options = createRequestOptions() - const url = `https://api.simplehash.com/api/v0/nfts/owners?chains=ethereum-sepolia&wallet_addresses=${walletAddress}` - const response = await fetch(url, options) - const data = await response.json() - return data -} diff --git a/packages/storykit/src/lib/simplehash/types/simplehash.d.ts b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts deleted file mode 100644 index c3dc429..0000000 --- a/packages/storykit/src/lib/simplehash/types/simplehash.d.ts +++ /dev/null @@ -1,143 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -export type NFTWalletResponse = { - next_cursor: string | null - next: string | null - previous: string | null - nfts: NFTMetadata[] -} - -export type NFTMetadata = { - nft_id: string - chain: string - contract_address: string - token_id: string - name: string - description: string - previews: { - image_small_url: string - image_medium_url: string - image_large_url: string - image_opengraph_url: string - blurhash: string - predominant_color: string - } - image_url: string - image_properties: { - width: number - height: number - size: number - mime_type: string - } - video_url: string | null - video_properties: any - audio_url: string | null - audio_properties: any - model_url: string | null - model_properties: any - other_url: string | null - other_properties: any - background_color: string | null - external_url: string | null - created_date: string - status: string - token_count: number - owner_count: number - owners: { - owner_address: string - quantity: number - quantity_string: string - first_acquired_date: string - last_acquired_date: string - }[] - contract: { - type: string - name: string - symbol: string - deployed_by: string - deployed_via_contract: string | null - owned_by: string - has_multiple_collections: boolean - } - collection: CollectionMetadata - last_sale: any - first_created: { - minted_to: string - quantity: number - quantity_string: string - timestamp: string - block_number: number - transaction: string - transaction_initiator: string - } - rarity: { - rank: number - score: number - unique_attributes: number - } - royalty: CollectionRoyalties[] - extra_metadata: { - attributes: { - trait_type: string - value: string - display_type: string | null - }[] - image_original_url: string - animation_original_url: string - metadata_original_url: string - } -} - -export type SPExtendedNFTMetadata = NFTMetadata & { - isRegistered?: boolean - ipId?: string -} - -export type CollectionResponse = { - next_cursor: string | null - next: string | null - previous: string | null - collections: CollectionMetadata[] -} - -export type CollectionMetadata = { - collection_id: string - name: string - description: string - image_url: string - banner_image_url: string - category: string - is_nsfw: boolean - external_url: string - twitter_username: string - discord_url: string - instagram_username: string - medium_username: string - telegram_url: string - marketplace_pages: MarketplacePage[] - metaplex_mint: string - metaplex_candy_machine: string - metaplex_first_verified_creator: string - floor_prices: any[] - top_bids: any[] - distinct_owner_count: number - distinct_nft_count: number - total_quantity: number - chains: string[] - top_contracts: string[] - collection_royalties: CollectionRoyalties[] -} - -export type MarketplacePage = { - marketplace_id: string - marketplace_name: string - marketplace_collection_id: string - collection_url: string - verified: boolean -} - -export type CollectionRoyalties = { - source: string - total_creator_fee_basis_points: number - recipients: any[] -} diff --git a/packages/storykit/src/lib/types.ts b/packages/storykit/src/lib/types.ts deleted file mode 100644 index c5d6b4a..0000000 --- a/packages/storykit/src/lib/types.ts +++ /dev/null @@ -1,325 +0,0 @@ -import { Address } from "viem" - -export const POLICY_TYPE = { - NON_COMMERCIAL_SOCIAL_REMIXING: "Non-Commercial Social Remixing", - COMMERCIAL_USE: "Commercial Use", - COMMERCIAL_REMIX: "Commercial Remix", - OPEN_DOMAIN: "Open Domain", - NO_DERIVATIVE: "No Derivative", -} - -export enum RESOURCE_TYPE { - ASSET = "assets", - COLLECTION = "collections", - DISPUTE = "disputes", - IPA_POLICY = "licenses/ip/terms", - LICENSE = "licenses/tokens", - LICENSE_MINT_FEES = "licenses/mintingfees", - LICENSE_OWNER = "licenses/owners", - MODULE = "modules", - PERMISSION = "permissions", - POLICY = "licenses/terms", - POLICY_FRAMEWORK = "licenses/templates", - ROYALTY = "royalties", - ROYALTY_PAY = "royalties/payments", - ROYALTY_POLICY = "royalties/policies", - ROYALTY_SPLIT = "royalties/splits", - TAGS = "tags", - TRANSACTION = "transactions", -} - -export type ResourceType = - | RESOURCE_TYPE.ASSET - | RESOURCE_TYPE.COLLECTION - | RESOURCE_TYPE.TRANSACTION - | RESOURCE_TYPE.LICENSE - | RESOURCE_TYPE.LICENSE_MINT_FEES - | RESOURCE_TYPE.LICENSE_OWNER - | RESOURCE_TYPE.MODULE - | RESOURCE_TYPE.POLICY - | RESOURCE_TYPE.PERMISSION - | RESOURCE_TYPE.POLICY_FRAMEWORK - | RESOURCE_TYPE.TAGS - | RESOURCE_TYPE.IPA_POLICY - | RESOURCE_TYPE.ROYALTY - | RESOURCE_TYPE.ROYALTY_PAY - | RESOURCE_TYPE.ROYALTY_POLICY - | RESOURCE_TYPE.ROYALTY_SPLIT - | RESOURCE_TYPE.DISPUTE - -export type PaginationOptions = { - limit?: number - offset?: number -} - -export type AssetFilterOptions = { - chainId?: string - metadataResolverAddress?: string - tokenContract?: string - tokenId?: string -} - -export type DisputeFilterOptions = { - currentTag?: string - initiator?: string - targetIpId?: string - targetTag?: string -} - -export type PermissionFilterOptions = { - signer?: string - to?: string -} - -export type PolicyFilterOptions = { - policyFrameworkManager?: string -} - -export type PolicyFrameworkFilterOptions = { - address?: string - name?: string -} - -export type RoyaltyFilterOptions = { - ipId?: string | null - royaltyPolicy?: string | null -} - -export type TagFilterOptions = { - ipId?: string - tag?: string -} -export type RoyaltyPayFilterOptions = { - ipId?: string - payerIpId?: string - receiverIpId?: string - sender?: string - token?: string -} - -export type ModuleFilterOptions = { - name?: string -} - -export type LicenseFilterOptions = { - licensorIpdId?: Address - policyId?: string -} - -export type LicenseFrameworkFilterOptions = { - creator?: string -} - -export type LicenseOwnerFilterOptions = { - owner?: string -} - -export type IPAPolicyFilterOptions = { - active?: string - inherited?: string - policyId?: string -} - -export type TransactionFilterOptions = { - actionType?: string - resourceId?: string -} - -export type FilterOptions = - | AssetFilterOptions - | DisputeFilterOptions - | PermissionFilterOptions - | PolicyFilterOptions - | PolicyFrameworkFilterOptions - | RoyaltyFilterOptions - | TagFilterOptions - | RoyaltyPayFilterOptions - | ModuleFilterOptions - | LicenseFilterOptions - | LicenseFrameworkFilterOptions - | LicenseOwnerFilterOptions - | IPAPolicyFilterOptions - | TransactionFilterOptions - -export type QueryOptions = { - pagination: PaginationOptions - where?: FilterOptions -} - -export type Transaction = { - id: string - createdAt: string - actionType: string - initiator: Address - ipId: Address - resourceId: Address - resourceType: string -} - -export type Asset = { - id: Address - parentIpIds: Asset[] | null - childIpIds: Asset[] | null - rootIpIds: Asset[] | null - nftMetadata: { - name: string - chainId: string - tokenContract: Address - tokenId: string - tokenUri: string - imageUrl: string - } - blockNumber: string - blockTimestamp: string -} - -export type Permission = { - id: string - permission: string - signer: Address - to: Address - func: string - blockNumber: string - blockTimestamp: string -} - -export type License = { - id: string - licensorIpId: Address - licenseTemplate: string - licenseTermsId: string - transferable: boolean - owner: Address - mintedAt: string - expiresAt: string - burntAt: string - blockNumber: string - blockTime: string -} - -export type PolicyFramework = { - id: string - name: string - metadataUri: string - blockNumber: string - blockTime: string -} - -export type Module = { - id: string - name: string - module: string - blockNumber: string - blockTimestamp: string - deletedAt: string -} - -export type Tag = { - id: string - uuid: string - ipId: Address - tag: string - deletedAt: string - blockNumber: string - blockTimestamp: string -} - -export type IPAPolicy = { - id: string - ipId: Address - licenseTemplate: string - licenseTermsId: string - blockNumber: string - blockTime: string -} - -export type RoyaltyPay = { - id: string - receiverIpId: Address - payerIpId: Address - sender: Address - token: Address - amount: string - blockNumber: string - blockTimestamp: string -} - -export type Royalty = { - id: string - ipId: Address - data: string - royaltyPolicy: Address - blockNumber: string - blockTimestamp: string -} - -export type RoyaltyPolicy = { - id: Address - ancestorsVault: Address - splitClone: Address - royaltyStack: string - targetAncestors: Address[] - targetRoyaltyAmount: string[] - blockNumber: string - blockTimestamp: string -} - -export type Dispute = { - id: string - targetIpId: Address - targetTag: Address - currentTag: Address - arbitrationPolicy: Address - evidenceLink: string - initiator: Address - data: string - blockNumber: string - blockTimestamp: string -} - -export type Collection = { - id: string - assetCount: string - licensesCount: string - resolvedDisputeCount: string - cancelledDisputeCount: string - raisedDisputeCount: string - judgedDisputeCount: string - blockNumber: string - blockTimestamp: string -} - -export type Policy = { - id: string - json: string - licenseTemplate: Address - blockNumber: string - blockTime: string -} - -export type PILType = { - commercialAttribution: boolean - commercialRevenueCelling: number - commercialRevenueShare: number - commercialUse: boolean - commercializerCheck: Address - currency: Address - derivativesAllowed: boolean - derivativesApproval: boolean - derivativesAttribution: boolean - derivativesReciprocal: boolean - derivativesRevenueCelling: number - expiration: string - URI: string -} - -export type RoyaltySplit = { - id: Address - holders: RoyaltyHolder[] - claimFromIPPoolArg: string -} - -export type RoyaltyHolder = { - id: Address - ownership: string -} diff --git a/packages/storykit/src/lib/utils.ts b/packages/storykit/src/lib/utils.ts deleted file mode 100644 index 4d6d29e..0000000 --- a/packages/storykit/src/lib/utils.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { type ClassValue, clsx } from "clsx" -import { twMerge } from "tailwind-merge" - -import { PILType, POLICY_TYPE } from "./types" - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)) -} - -export function shortenAddress(address: string, length = 4): string { - if (!address) { - return "" - } - if (address.length < 2 * length + 2) { - // Check if the address is too short to be shortened. - return address - } - - const start = address.substring(0, length + 2) - const end = address.substring(address.length - length) - return `${start}...${end}` -} - -export function camelize(str: string) { - return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) { - if (+match === 0) return "" // or if (/\s+/.test(match)) for white spaces - return index === 0 ? match.toLowerCase() : match.toUpperCase() - }) -} - -export function getPolicyTypeByPILData(pilData: PILType) { - const { derivativesAttribution, derivativesAllowed, commercialUse, derivativesReciprocal } = pilData - - if (commercialUse) { - if (!derivativesReciprocal) { - return POLICY_TYPE.COMMERCIAL_USE - } else { - return POLICY_TYPE.COMMERCIAL_REMIX - } - } else { - if (!derivativesAllowed) { - return POLICY_TYPE.NO_DERIVATIVE - } else { - if (derivativesAttribution) { - return POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING - } else { - return POLICY_TYPE.OPEN_DOMAIN - } - } - } -} diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx deleted file mode 100644 index 3375937..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { useQuery } from "@tanstack/react-query" -import React from "react" -import { Address } from "viem" - -import { getResource, listResource } from "../../lib/api" -import { getNFTByTokenId } from "../../lib/simplehash" -import { NFTMetadata } from "../../lib/simplehash/types/simplehash" -import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" -import { camelize } from "../../lib/utils" - -const IpAssetContext = React.createContext<{ - // activeTab: string - // setActiveTab: React.Dispatch<React.SetStateAction<string>> - assetData: Asset | undefined - nftData: NFTMetadata | undefined - isNftDataLoading: boolean - isAssetDataLoading: boolean - ipPolicyData: IPAPolicy[] | undefined - isIPAPolicyDataLoading: boolean - policyData: Policy[] | undefined - isPolicyDataLoading: boolean - licenseData: License[] | undefined - isLicenseDataLoading: boolean - royaltyData: RoyaltyPolicy | undefined - isRoyaltyDataLoading: boolean -} | null>(null) - -export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { - // Fetch asset data - const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ - queryKey: [RESOURCE_TYPE.ASSET, ipId], - queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), - }) - - const ipaPolicyQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - } - // Fetch IPPolicy data - const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ - queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), - }) - - async function fetchPolicyDetails(data: IPAPolicy[]) { - const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) - - const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) - const results = await Promise.all(requests) - - return results.map((result) => { - return { - ...result.data, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { - return { - ...acc, - [camelize(option.trait_type)]: - option.value === "true" ? true : option.value === "false" ? false : option.value, - } - }, {}), - } - }) - } - - const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ - queryKey: ["fetchPolicyDetails", ipPolicyData?.data], - queryFn: () => fetchPolicyDetails(ipPolicyData?.data), - enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), - }) - - const licenseQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - licensorIpdId: ipId, - }, - } - // Fetch License Data - const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ - queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), - }) - - // Fetch Royalty Data - const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ - queryKey: [ - RESOURCE_TYPE.ROYALTY_POLICY, - { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - }, - ], - queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), - }) - - // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], - // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), - // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), - // }) - const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], - queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), - enabled: - Boolean(assetData) && - Boolean(assetData.data.nftMetadata.tokenContract) && - Boolean(assetData.data.nftMetadata.tokenId), - }) - - return ( - <IpAssetContext.Provider - value={{ - // activeTab, - // setActiveTab, - nftData, - isNftDataLoading, - assetData: assetData?.data, - isAssetDataLoading, - ipPolicyData: ipPolicyData?.data, - isIPAPolicyDataLoading, - policyData: policyData, - isPolicyDataLoading, - licenseData: licenseData?.data, - isLicenseDataLoading, - royaltyData: royaltyData?.data, - isRoyaltyDataLoading, - }} - > - {children} - </IpAssetContext.Provider> - ) -} - -export const useIpAssetContext = () => { - const context = React.useContext(IpAssetContext) - if (!context) { - throw new Error("useAccount must be used within an IpAssetProvider") - } - return context -} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx deleted file mode 100644 index a84a01b..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" - -const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpAssetProvider ipId={ipId}> - <ExampleComponent /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - return ( - <> - {isNftDataLoading && <div>Fetching Asset...</div>} - {nftData && !isNftDataLoading ? ( - <div className="grid grid-cols-4 gap-4"> - <> - <div className="col-span-1 text-xs text-gray-600">nft_id</div> - <div className="col-span-3 text-sm">{nftData.nft_id}</div> - - <div className="col-span-1 text-xs text-gray-600">chain</div> - <div className="col-span-3 text-sm">{nftData.chain}</div> - - <div className="col-span-1 text-xs text-gray-600">contract_address</div> - <div className="col-span-3 text-sm">{nftData.contract_address}</div> - - <div className="col-span-1 text-xs text-gray-600">token_id</div> - <div className="col-span-3 text-sm">{nftData.token_id}</div> - - <div className="col-span-1 text-xs text-gray-600">name</div> - <div className="col-span-3 text-sm">{nftData.name}</div> - - <div className="col-span-1 text-xs text-gray-600">description</div> - <div className="col-span-3 text-sm">{nftData.description}</div> - </> - </div> - ) : null} - </> - ) -} - -export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx deleted file mode 100644 index cbfbf01..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpAssetProviderStory from "./IpAssetProvider.stories" - -<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> - -# IpAssetProvider - -Provides IP Asset data to children components. - -#### Example - -<Canvas of={IpAssetProviderStory.Select} /> - -<Controls /> - -## Usage - -```ts -// wrap your component with the IpAssetProvider - -import { IpAssetProvider } from "@storyprotocol/storykit" -import ExampleComponent from './ExampleComponent' - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` - -```ts -// in your component file, context provides IP asset state - -import { useIpAssetContext } from "@storyprotocol/storykit" - -const ExampleComponent = () => { - - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; - -export default ExampleComponent; -``` - -#### Provider data - -The IpAssetProvider provides the following data to its children: - -- **assetData** - The IP Asset data. -- **isAssetDataLoading** - IP Asset data loading state. -- **nftData** - The NFT Metadata. -- **isNftDataLoading** - NFT Metadata loading state. -- **ipPolicyData** - Policies attached to the IP Asset. -- **isIPAPolicyDataLoading** - Policy data loading state. -- **policyData** - The Policy details including the template id, address and terms. -- **isPolicyDataLoading** - Policy data loading state. -- **licenseData** - IP Asset minted Licenses. -- **isLicenseDataLoading** - License data loading state. -- **royaltyData** - The Royalty Policy data. -- **isRoyaltyDataLoading** - Royalty Policy data loading state. - -#### Arguments - -- **children** - The child component to provide the IP Asset context to. -- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx deleted file mode 100644 index cd7231b..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "Providers/IpAssetProvider", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - // argTypes: {}, - // argTypes: { - // ipId: { - // options: [ - // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - // ], - // // control: { type: "select" }, // Automatically inferred when 'options' is defined - // }, - // }, - // args: { - // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // }, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx deleted file mode 100644 index 8d5a16c..0000000 --- a/packages/storykit/src/stories/Introduction.mdx +++ /dev/null @@ -1,201 +0,0 @@ -import { Meta } from "@storybook/blocks" - -<Meta title="Introduction" /> - -# Storykit - -Plug-and-play React components for Story Protocol. - -## Installation - -_Storykit is a private package so you need repo access and a personal access token to use_ - -1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) - -2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: - -```bash -//npm.pkg.github.com/:_authToken=NPM_TOKEN -@storyprotocol/storykit:registry=https://npm.pkg.github.com -``` - -3 . Add `.npmrc` to your `.gitignore` to keep your access token private. - -4 . Install the package and the required dependencies: - -```bash -npm install @storyprotocol/storykit @tanstack/react-query -``` - -## Deploying on vercel - -To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: - -```bash -//npm.pkg.github.com/:_authToken=${NPM_TOKEN} -@storyprotocol/storykit:registry=https://npm.pkg.github.com -``` - -OR... - -You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. - -See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. - -## Dependencies - -Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. - -Some components have additional dependencies including: - -- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) -- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) - -See the individual component docs ro see if they require an additional dependency or install them all at once with: - -```bash -npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d -``` - -## Run locally - -### Storybook - -Run Storybook locally for component development and documentation: - -```bash -pnpm dev -``` - -Find the Storybook at [http://localhost:6006](http://localhost:6006) - -### Example app - -Run the next.js [example app](../examples/next-app/): - -```bash -pnpm build -pnpm dev-example -``` - -The dev server will be running at [http://localhost:3000](http://localhost:3000) - -### Linting and formatting - -Lint with eslint: - -```bash -pnpm lint -``` - -Format with prettier: - -```bash -pnpm format -``` - -## Usage - -Using Storykit in your React app - -### Include React Query - -React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. - -```typescript -// app/layout.tsx - -import Providers from "./Providers" - -export default function Layout({children}) { - return ( - <html> - <body> - <Providers>{children}</Providers> - </body> - </html> - ) -} -``` - -```typescript -// app/Providers.tsx - -"use client" - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" - -const queryClient = new QueryClient() - -export default function Providers({ children }) { - return ( - <QueryClientProvider client={queryClient}> - {children} - </QueryClientProvider> - ) -} - -``` - -### The IpAssetProvider - -The IpAssetProvider provides IP Asset data to child components. - -```typescript -import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; -``` - -### The IpGraph - -Some components require the IpAssetProvider to supply asset data - -```typescript -import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpGraph /> - </IpAssetProvider> - ); -}; -``` - -### The IpWidget - -The IpAssetProvider is already included in the IpWidget - -```typescript -import { IpWidget } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> - ) -} - -``` - -See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/packages/storykit/src/stories/data/index.ts b/packages/storykit/src/stories/data/index.ts deleted file mode 100644 index ec9074b..0000000 --- a/packages/storykit/src/stories/data/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const PREVIEW_IP_ASSETS = [ - "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", - "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", - "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", - "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", - "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", - "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", -] diff --git a/packages/storykit/tailwind.config.js b/packages/storykit/tailwind.config.js deleted file mode 100644 index 6211183..0000000 --- a/packages/storykit/tailwind.config.js +++ /dev/null @@ -1,72 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: ["class"], - content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], - prefix: "", - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - // extend: { - // colors: { - // border: "hsl(var(--border))", - // input: "hsl(var(--input))", - // ring: "hsl(var(--ring))", - // background: "hsl(var(--background))", - // foreground: "hsl(var(--foreground))", - // primary: { - // DEFAULT: "hsl(var(--primary))", - // foreground: "hsl(var(--primary-foreground))", - // }, - // secondary: { - // DEFAULT: "hsl(var(--secondary))", - // foreground: "hsl(var(--secondary-foreground))", - // }, - // destructive: { - // DEFAULT: "hsl(var(--destructive))", - // foreground: "hsl(var(--destructive-foreground))", - // }, - // muted: { - // DEFAULT: "hsl(var(--muted))", - // foreground: "hsl(var(--muted-foreground))", - // }, - // accent: { - // DEFAULT: "hsl(var(--accent))", - // foreground: "hsl(var(--accent-foreground))", - // }, - // popover: { - // DEFAULT: "hsl(var(--popover))", - // foreground: "hsl(var(--popover-foreground))", - // }, - // card: { - // DEFAULT: "hsl(var(--card))", - // foreground: "hsl(var(--card-foreground))", - // }, - // }, - // borderRadius: { - // lg: "var(--radius)", - // md: "calc(var(--radius) - 2px)", - // sm: "calc(var(--radius) - 4px)", - // }, - // keyframes: { - // "accordion-down": { - // from: { height: "0" }, - // to: { height: "var(--radix-accordion-content-height)" }, - // }, - // "accordion-up": { - // from: { height: "var(--radix-accordion-content-height)" }, - // to: { height: "0" }, - // }, - // }, - // animation: { - // "accordion-down": "accordion-down 0.2s ease-out", - // "accordion-up": "accordion-up 0.2s ease-out", - // }, - // }, - }, - plugins: [require("tailwindcss-animate")], -} diff --git a/packages/storykit/tsconfig.json b/packages/storykit/tsconfig.json deleted file mode 100644 index ca92804..0000000 --- a/packages/storykit/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@storykit/typescript-config/react-library.json", - "include": ["src"], - "compilerOptions": { - "paths": { - "@/*": ["./src/*"] - } - }, - "exclude": ["dist", "build", "node_modules"] -} From 7658597f2d2cb1a1230ce91dd66477211184510b Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:28:56 -0700 Subject: [PATCH 67/74] reinstate storykit --- packages/storykit/.eslintrc.cjs | 13 + packages/storykit/.gitignore | 30 ++ .../storykit/.storybook/assets/story-logo.png | Bin 0 -> 16720 bytes packages/storykit/.storybook/global.css | 7 + packages/storykit/.storybook/main.ts | 33 ++ .../storykit/.storybook/manager-head.html | 1 + packages/storykit/.storybook/manager.ts | 7 + packages/storykit/.storybook/preview.ts | 34 ++ packages/storykit/.storybook/theme.ts | 42 ++ packages/storykit/package.json | 108 +++++ packages/storykit/postcss.config.cjs | 7 + packages/storykit/rollup.config.js | 54 +++ .../components/Button/Button-css-modules.tsx | 45 ++ .../storykit/src/components/Button/Button.tsx | 44 ++ .../src/components/Button/__docs__/Button.mdx | 37 ++ .../Button/__docs__/Button.stories.tsx | 35 ++ .../Button/__tests__/Button.test.tsx | 9 + .../storykit/src/components/Button/index.ts | 1 + .../storykit/src/components/Button/styles.css | 21 + .../src/components/Button/styles.module.css | 21 + .../src/components/IpGraph/IpGraph.tsx | 90 ++++ .../components/IpGraph/__docs__/Example.tsx | 26 ++ .../components/IpGraph/__docs__/IpGraph.mdx | 45 ++ .../IpGraph/__docs__/IpGraph.stories.tsx | 38 ++ .../storykit/src/components/IpGraph/index.ts | 1 + .../src/components/IpGraph/styles.css | 3 + .../IpPolicyAccordion/IpPolicyAccordion.tsx | 144 +++++++ .../IpPolicyAccordion/__docs__/Example.tsx | 27 ++ .../__docs__/IpPolicyAccordion.mdx | 32 ++ .../__docs__/IpPolicyAccordion.stories.tsx | 40 ++ .../components/IpPolicyAccordion/index.tsx | 1 + .../components/IpPolicyAccordion/styles.css | 70 ++++ .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 104 +++++ .../IpRoyaltyPieChart/__docs__/Example.tsx | 22 + .../__docs__/IpRoyaltyPieChart.mdx | 40 ++ .../__docs__/IpRoyaltyPieChart.stories.tsx | 38 ++ .../components/IpRoyaltyPieChart/index.tsx | 1 + .../components/IpRoyaltyPieChart/styles.css | 30 ++ .../src/components/IpWidget/IpWidget.tsx | 394 ++++++++++++++++++ .../components/IpWidget/__docs__/Example.tsx | 29 ++ .../components/IpWidget/__docs__/IpWidget.mdx | 34 ++ .../IpWidget/__docs__/IpWidget.stories.tsx | 41 ++ .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 + .../storykit/src/components/IpWidget/index.ts | 1 + .../src/components/IpWidget/styles.css | 218 ++++++++++ packages/storykit/src/components/index.ts | 5 + packages/storykit/src/declarations.d.ts | 4 + packages/storykit/src/global.css | 67 +++ packages/storykit/src/index.ts | 2 + packages/storykit/src/lib/api.ts | 49 +++ packages/storykit/src/lib/graph.ts | 122 ++++++ packages/storykit/src/lib/simplehash/index.ts | 39 ++ .../src/lib/simplehash/types/simplehash.d.ts | 143 +++++++ packages/storykit/src/lib/types.ts | 325 +++++++++++++++ packages/storykit/src/lib/utils.ts | 51 +++ .../IpAssetProvider/IpAssetProvider.tsx | 153 +++++++ .../IpAssetProvider/__docs__/Example.tsx | 59 +++ .../__docs__/IpAssetProvider.mdx | 79 ++++ .../__docs__/IpAssetProvider.stories.tsx | 49 +++ .../src/providers/IpAssetProvider/index.tsx | 1 + packages/storykit/src/providers/index.ts | 1 + .../storykit/src/stories/Introduction.mdx | 201 +++++++++ packages/storykit/src/stories/data/index.ts | 8 + packages/storykit/tailwind.config.js | 72 ++++ packages/storykit/tsconfig.json | 10 + 65 files changed, 3467 insertions(+) create mode 100644 packages/storykit/.eslintrc.cjs create mode 100644 packages/storykit/.gitignore create mode 100644 packages/storykit/.storybook/assets/story-logo.png create mode 100644 packages/storykit/.storybook/global.css create mode 100644 packages/storykit/.storybook/main.ts create mode 100644 packages/storykit/.storybook/manager-head.html create mode 100644 packages/storykit/.storybook/manager.ts create mode 100644 packages/storykit/.storybook/preview.ts create mode 100644 packages/storykit/.storybook/theme.ts create mode 100644 packages/storykit/package.json create mode 100644 packages/storykit/postcss.config.cjs create mode 100644 packages/storykit/rollup.config.js create mode 100644 packages/storykit/src/components/Button/Button-css-modules.tsx create mode 100644 packages/storykit/src/components/Button/Button.tsx create mode 100644 packages/storykit/src/components/Button/__docs__/Button.mdx create mode 100644 packages/storykit/src/components/Button/__docs__/Button.stories.tsx create mode 100644 packages/storykit/src/components/Button/__tests__/Button.test.tsx create mode 100644 packages/storykit/src/components/Button/index.ts create mode 100644 packages/storykit/src/components/Button/styles.css create mode 100644 packages/storykit/src/components/Button/styles.module.css create mode 100644 packages/storykit/src/components/IpGraph/IpGraph.tsx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx create mode 100644 packages/storykit/src/components/IpGraph/index.ts create mode 100644 packages/storykit/src/components/IpGraph/styles.css create mode 100644 packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/styles.css create mode 100644 packages/storykit/src/components/IpWidget/IpWidget.tsx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx create mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx create mode 100644 packages/storykit/src/components/IpWidget/index.ts create mode 100644 packages/storykit/src/components/IpWidget/styles.css create mode 100644 packages/storykit/src/components/index.ts create mode 100644 packages/storykit/src/declarations.d.ts create mode 100644 packages/storykit/src/global.css create mode 100644 packages/storykit/src/index.ts create mode 100644 packages/storykit/src/lib/api.ts create mode 100644 packages/storykit/src/lib/graph.ts create mode 100644 packages/storykit/src/lib/simplehash/index.ts create mode 100644 packages/storykit/src/lib/simplehash/types/simplehash.d.ts create mode 100644 packages/storykit/src/lib/types.ts create mode 100644 packages/storykit/src/lib/utils.ts create mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx create mode 100644 packages/storykit/src/providers/index.ts create mode 100644 packages/storykit/src/stories/Introduction.mdx create mode 100644 packages/storykit/src/stories/data/index.ts create mode 100644 packages/storykit/tailwind.config.js create mode 100644 packages/storykit/tsconfig.json diff --git a/packages/storykit/.eslintrc.cjs b/packages/storykit/.eslintrc.cjs new file mode 100644 index 0000000..fc3bf2f --- /dev/null +++ b/packages/storykit/.eslintrc.cjs @@ -0,0 +1,13 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/react-internal.js"], + parser: "@typescript-eslint/parser", + // parserOptions: { + // project: true, + // }, + // parserOptions: { + // project: "./tsconfig.json", + // tsconfigRootDir: __dirname, + // }, +} diff --git a/packages/storykit/.gitignore b/packages/storykit/.gitignore new file mode 100644 index 0000000..694a99f --- /dev/null +++ b/packages/storykit/.gitignore @@ -0,0 +1,30 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +build +dist + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +*storybook.log +storybook-static + +.yalc +yalc.lock \ No newline at end of file diff --git a/packages/storykit/.storybook/assets/story-logo.png b/packages/storykit/.storybook/assets/story-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8b039b7c6d087b1ecbc5af9276506f560c9536 GIT binary patch literal 16720 zcmeIZcUY6zw<sJ`K<S}|u0arlKq4)4#Q=&F1*Eqm^xg?YiU<S}U>p?@DFUL>VL$`{ zDGABUAWdm1NJwS?X(od}r09K_^83!cr+nwR&;9ef4`pY+Yp=cf-g~W`oU1k#{5(=T zAP|WE@+FiV2z1mF1maLS&IR;D>0F2h{vGqbV0{4uYAN8|M{|NeJgb2hFJ6tdvoJk* z+3cbYLQh8rc1|4u0$t+2*YEFapDhKVeJ)x1p;;Jul5tYn3a*@<_Ve*msPiYGr@{Ad zQEA6-6<wGWxz?|L72KcWU<Pw-cr=mYrm|s_n;1Eb5tGOd-pU@0rWU-?0I8~&J=M6d z&XK$2S7j<*pmIHkIK`n1PvbEK@rRvzEMWWkmd0;(C;aSwrY{&Aqiu<urx6JIk7M{U zQYjp|kYUgzeGuP-u#yZ&<!BnT?wvQ+`Ij7N2JK@&;}=k$_Sx$}pb1G($5+dHQlND~ z&}_?LBaai**zVlKd0vyF?-6V&h-0h@1aF!!4dA$>0=nv1t56Smd<8_a_feVR_~GLb z(2Jt6BGAujASOZt#{o(JftraAcus&4;Goib<uyNme&9Yj=7QA}69)a^4bmU7vVxN& zeiSC5s?>Y?h@7<aqN{58eLo%#2BUR0-)iG3D9;8@D-Lqyr9jgP;S0>Xs>`Pc)ZgrK zE-8!Wuq%$7N?r;87)EqDK!tP7pefJJAOButS52YS-Iq)Qfd+z|Y9}E3+|`zO{Z5Ko zAg~eW@gTrfMiZs+Sipm$wB(C5c39@UQGHO?xwOSr*MVCkUBga?n_@-7SwH_ER5y8c z4BP?INc)V7syU_#f5?CP)G5ch>yH#7I6Oh$@qdzZUj3dow8Hr`J)7s2^O4(6TSOlq zGS%crS8^@Y%wPMA(T-85Ry;0-$!C7JqFD3~;f3da3sf`nvjW&*{#YqY0BcHWA=6oi zJEr1--|rkEwoc`|Z2>u9WaI6kKT!L23HzgPkE8$8y=6qH+?^|m|4hmB_;13c-dj1Y zx}W!!d7=Y*%saJ^_p!<Q^w%vMb|X@t^LNi`bERHE`&`fm`6L;uDQPLOxzfMiR6hcm zcsxX<@#a89NHB^WJD1PvYTAjoK28ZHDEv6c_?9UWbwTYCTKVw>rDxt+w5y;&?_;V~ z=?|_7+-rsuUWC<Was}K{nmGY$78D>wB9AW7&duJkS-$ynjK8Tu;)0OWfH@M+OV43L z`!6XAr}JHSe2J&>yu&5+9}AYjyyrL{<T*gEUxNK47l=wR--c%2w*NWdH~lDy1mb>X zx5Z^;-rp-Xp2<tyG=CHsaIQEf-*j`FwS2mb&jUa8Xlq%gP11;1c0r@6blJWw``Bq| z;ey}H=y#x(gzcm*TmPycdHL-nvByDnMm0GTmiiZ7URpVAq|l>a|BK8y^Tj(=KVSY0 z>{DV`W|-HV=6>a)RhW{zqSxtp#rQiW*Jea@E#ZnkLZ2$Dd=*u#F0r$Icj=wAo_VL$ zr^@apb~T2zCfX&%sO#6L*Us2WTy?U4VJ~=X)c&)5Qh-)5FRV!1`bt$`fS;>gsA8z} z`pNYp4TSB&u!}p7v)_n(3VK;)Oz^axH#Irmdp`BjXWtpkWXan^t*k=C?H2raUx06k zZww;wfq+%2pO)qwy?nhpE~F5Q9QGsTRa;BTCx3<ZUz*3?y>6~)d54aEv)DLnP^h4a zS498btX7{{Z(V<}ezpF7h|Y%s*&)Z);kC>)^KJ09?6#X*enX#QSl#o|FgO1XAxZt) zowB5nY4wq?wz<<?L0ukk{_AD$G}jK+6t|`J0=Hwglh&Kw?;s;&ZV3bm3<~hdv?EKR zaKBxO{t|sxKS*{+Mi(g;**$tHvRhABVC2DYAWeo56ItV)+E`+c@Ak_<&WHZ>xTqMZ z-|qgd)n79b*lT~LfV|20CBdxQth=;ZwR`8r>>hdR)b8ugZzq;a%XLR?lwwOyEb%O@ zkK8Yv@A6i+yKj15Q5~lK!sD053yqSEj?>zWRQK|&-?#Ht2s;hSU9F$_bthmyTQBIm z3(aurax3V{?s`2(d-di3zo#i!W>HT?7Wm3>8_Fd`8D`^F4DTn%eM!ElhmLdxJ7&lZ zzU-Op{;^xlbG1jmJ8|#pj`VoAWAFMwSdwOsLic9({e%|@@q4)4$GcXncPr7P`wP+w zZnUm}om-!!O;US9dOK5KDFyqb2fu&2v;Sgup2wS;e2gggOt3@r5<l^{8lSr?PW?DP z5AWIIwY>V$L@vV3*#5eV(VeGXBzC5Enm(uA8>LfOSH8M^jpsDHkn3Ie$c$-7K7*3| z>GW@?pPzD|kLGe|@pY)ghzf{}2)FZm=i%oWytrzr!S5qzC4;;{D@)hl;uM5(HAu$5 zh$4kjI=c0+wJK$IA5rZbx$M1LOIb}ky;A*omkOMPBJHfeRKiojPR_hpE_C>|fx>qp z-9pSfG$&DOCKZn8Kr;`PQ^t#zx5i5^HlOOeIK}^o$jTijPf%wGTltfeFyak}1VmRo z%x!j)&B3Cu=UCyVZ~s{H<HZw?kGYtdnPyL1(>HZh?YT3ffiQ^-#=KCo(s7AX&iV0f zN!#g9wX+`iL(;#`T_k1O$R=t%xMyhCsq@v-@@g)kT3gIow)myi))agmy^Dqg{-9** zRvc$AXL2KXw@Gq>_=WhA$jwuM$)%GcMwkfF3%=A+$?{I+%|(0~xDXub66d1llIIfs zlgLkXKN;LR^=r+qnrEHv**v$fw)d~mtxYnwv{09ScTc3yzAW1J?)PUWs%-M&WIePJ zzeBnZ#fYvbmCkpaZc!!yZ?v|G%Ub?usiVX(gp)bHIY`%eJh@?o61h$$buV|<c3XTM z|9WLpUV<#@AYu6Sa?JCW5{w@y4YE5=;0+P>3rm%2mFt6F=(F^mM2j00-vV+he!2DI zW|sHG&Wh;d-`Kx1y7GRZ<SCK0er=<^)|P&~UI-eJ8Jc@@syenhyuoG4LqtYt`AnNF zUokS3PP&|PC#A%yjA$G7kgn~!c(==*@uaal%SzgyA@t?Wm!Cd)X!>aCjQWhIm3;kB z&(T`z*Hc_-)b;#zPl)-u1HGU0+=fDj@_u((G9UIZC@{3uZNh%*`>MK>T07=g(kOG) z#p5fQ;}z|T;DCHk3cDK~j;2D#E42wVge^joT8_(4oxfHD*-ai)*IapcA3b!ou*cQd z?`zG<g~?zixRbME%+%wFHJ4AVQLJADpL0IHze-<iZ;Eo$PMv%>`F>Jjirg6Jy85a; zYJD&EW$g6S(3I}<-lS9bqcG(;=A%<}3*-W@iB4F|oO36Op>*(MWH@)&LYgEk{h}k( zrA=%u=-n>PZKOTgL~+0EY0i9Gia~hN?*cREcdXx*X3Lw_tUkVLSH(EJ)p*rg|9<$L z$2d{THe@4ACE(L+)%)m_&tpBI4c8jFQpNUP29{61dU;^8Cn4)Cr)<FdN_(7Pl+Bl2 zCOcx1+#723VOZf;h5Pw_GV92~<h9>eWQK(exfF>zxBJ^G``b^q%kq(PQRXpEI*saY z?1ZCx*EfV>waWQTx|T}V?yFz>mjvDMoe^xzz#!xPZ}&&s<>J2X-vc`}dJK2IPq0o} zAK$86)d;)$ak)p2A^yALVCde5$@tlgiSKgky=|LoOW(Rq#DDnA-y6SaobvrsuhsY6 zvFqDu2ak3umPizfih^w;o8;t;Uw%I0VasouRDSRK0+U+1#4(!sRdaiEJIptJnwLQs zO@-k;{So!H?n2Z1#5YMB-RdcGdr#;MLm!4eLqC?{$`8Jwo3@UwUmT|P6*QFpXfn6! zzW;Tzm*Z&B=00buE(zEMpTu6Wvj%|@l|Z1hTOiOb(3Q3f0>#2XpcQWrNWTaKl87jI zdCd@baU$Z9OEd^1u6X#%aoO%P69nR-20A#$I9prkW5Yw$(LUiAUv*q)1ON>J8JgfC z(AZ$#n3EV^|G+RK=;y9p=*d7IBdC+MHQYMlqHjRprNk&-`$QWDY+^80&j)H^e9{o7 z4<HEjjX|Hpg@%Mh>*I`|f8x~#+K1g5(35|H!~`2bFC0#I(%Jgz$&2Apz9)6n5il$q z4nL`@r|yHsps^T?+R1b9a|jK%mIgu#28Ziw>gj7~o&5WO0@FqL`03lB%>SMY_+$hP zh>3~N*U*TMk5`Y^R1c5x*Ffm$>1n{vX`DL;10Z1031Km494sta;U5er-)L-9U_?w{ zc-YB9jA%@FY>W{UAoVXELL>f#HZ1yYIRO&Wz@Z~F5bE$lp8f>%!Tt*_A~q`I&&hqT z8onXEp}t`;(Eu#sU$7AY;W6RS0pb4%>VLid-zETLYi<3nIsQXhLPP&GMRbf=9Kgok z0{IW2qa6|=d^PNRqr+pPu)bz-0GSGh+(hVKjPgatghx4qhll*5sjL5xeDa*8I{c)v zH5wZjcF2UvzZv3-LdW<TK>@u18q<WG({VTl*VjVo!;z|R;4l0yQ0s7?K)-~44|+}? zuB(su-$4PZ@j=I+|9^pfu=;-CQK4vn<-kz1zpq9_m_PL7zXYj&F+3zZ3YZw6PV?XP zUk1*OQQ>}pA;61&cZU3vTx)Cn%VE(m=rFABWt0&V5RZCbppU*UU|8BZ+Hjbbrj8#> z3+v|#L&7z&Fr*J$%NLE&!@#xC|BOe4V`C4E;Bfq34&f7y1#tX-<oO`9b<o;qO&HS8 z7Y#cHpn#z@u?RqdXdPW`O<%0GuFgN$Y@-4JpG1fJTdapv`5aP(J*VZPhtYxg`04>v z`DpsVkXqV)Ftjh)$43{bjfG<nhlc;BE$Lqhj0Uuv@V6`3`$qoV3JE;<r}^lkv4?J9 z1jQcOgRc+t@9x0=NFM*4ng1RiAK(ih{V%NKui2x+{bJ(LQN9=a0onaG>`>!BBR?7) z_g@o_#QON5k#IkluAZ+ppiCc4n4T|M4+huKL+a|Hk=mMQ?SGj64~ahvP5+qq{~hsv ziv}Bj4)gZ~0<8x0|DK)yo^Ad`=f7v?|8T?qm+WX92H3ysOymDF!9U;qn_vtm^Up3I z!XGyOwYC5s{<S*!h5?d_0@fbu_C<LRNPYh@>VgA~W4-@G_mj*=Cd|)!C7RJA^)OBA zy(gItu3>c>y?3E^Rbhotdz4SkT5#iyPIc&;C!#roF;gd(vybhroo%zV9)2~d7d^81 zo&EZ$?WGsKAD0q7?v%{$d^kH~hx+qzcq#<`^SO8SuMSi-&tDzaYE1tIsr?@iKob8W zmqT-K_<w8+E0anMj#ng<;T(719Cc{b`fPp#f3P>~3pVx(+u{nGn-`AXi{#$uJIdx2 z$D9!NK98EH;Km|Oh%_rr^)D9XsuX3ZIP)q#@m8}`eGb3HSwzUh2?^4SXLCLvcnJvk zD+o0x=9nsA@AbuwE`{$aCWAhC2Ya7w@5`UzvZdmP7V^7r@t%N$WJ^A8$wIUcAwnXI z)WqU8Ow)5#g1)bj2*$ud@`srYAsNpR;tV(!7WgqtQRG74e|OIEb-wv9Lbj3W1?O%> zp@`>wU2^f)-vaJs(B=x0ea!8KRSn5br8+KCor%|b&}t-*A3dH841jeAR^xF{S7&)Q z@8A$ZX|oE&n~(D7Y5|8D)ox$RX<>)0*+|8J!3yVH3Za<EwqJjm5CB9)+HFzUCWXy# zN>_2iO3@HPgi&MP^$xx(Ev8G#&8l%E;WpHZ;EKMT$fk{R0>KOKa7yj{Q;>oqu+l0r ze38bpFVNc`-f~QpDAzLseu(C@RB%ccD=HA?Z4r%bhFpXU@bICX<DL06`c7JINoSZW z=vRH1nt5+YT5<Be=29pD@b~6#{`dpXXSe(MXT;o=<p_~RDfrI}Ikh+4Eo@~QA%)>G zcJ+v^KrlL9=GJ;MXJSlwX9xH`ExY3=Z(gzpD?ujx6rXgbD`eoDDvWee94jeK=a^0J zrR&UQRy*Iy)PF0*=Gvw-@8<RM<G>r*`VBcv3{K}<yMtX;%};9c3Q)((O&ia}wn?XE zWP4tY9y1gfC3i7pOLA9R9HLzVa-PkLhGZX&gil#ibTy<KwVe5wE>BBh!~7t?qy;VJ z1()SMzzfkT8>G(>oM8h!MLE9uB=?fM8}JL7?IZ;I(fFr`wG44eFy%-IFquo!#-_tQ zw`U%VC{wo((9QRh@u7o9b)t#f49T%94UAs9l@W=*9jx6g+(h<8a+^@g^Q=_KCaQ2b z27>bg?YiSjDW?V94h~)HrB-#y?=xPS6k0?w{|>}MhoTDiY&Fg{$-!Trs!OsWp^;J_ zq&q1Lq)gT(D|FwK{BxU%0EN)fHSQa}mN!o`V5^5oRJ|LSd1tB1h;q*viY)MZO{$rZ zzERwQ@XX$k^bi=dDUOBNP=CNX`}XM1LuBySW_g|}l2$jzC{>U(-{C?2x!G8NN@(sH z4|Q70m0%bq^J)$Tybx<2h}q|oSP<UlP@P!CxTjszu9DCg)McKjBH1&g+O+(SdkuI% zD`7mP>ncdeGmK7UqVYqzHBy?JupD-Pl<{YX%y=03#3%F2_aT<WE|_c&q|)8@b<1iz z39P`^Z%c+F3@K7y6C;kdPt*rT)Zhainl2@RUu9Gwtk=?;=nnM?m3wPBn-Rj>=2!Mx zTV^E62fxnPlP$5$Vjt6@S)3vD#?uQj!}_90l3#VmtJ=XQY$$Wk%21wCf2c9>ZA%6_ z$v#5s6=5lNS>Ogv{#CvNCYI%_L^nf9f2QETf*&B^eVI63O3g=}l5}oufBtUaI?2x6 zNEw}}`tk+SyMLnc^(Z06qxo3@WjUJ6bD~iF>E4AsHb@6-J7LZiN=cJ7Gpz4>%Q~?y z7-!cb9og<@#QojxxA!M3f~MR{a=B3`H!*!`9Fo_<n}}0erE7Hy-a*9_8q4I#V^fJ> z+bQQYg8YKAl_;y(c OA>d2h2*`%YU#!Xhw&mq*|0DT>4#O{nBnbF+)tIcF2=#3- zTQaf)Z;P(Pk2D(_XE%9=j;pWI9g^i%bJ-RT7aU6PDz%#yCFx?t(Z{!S|5(df3Y<EM z<Q+0YeGn^tAvi*QJ9uYHKbh-}nO1Oo2?0B<`o1BvDnejeh;`|6Um&h{C0W`jz{Vth z@TGZv3z8=|U_|IudO03%DO&to*M_Qux!xmQP7Z<=vyPPH7@19OQ{EwEGV!Tj<k>v! z4tbJnbuMjxTSIP`0_i)6puK9#?#4f}s?c+ztIjyL4XrYbzvMi#<!z#Tnz5VkwNK^` z7iV2cT2P&F*M3Ft3Z9B|_SkutCNkEfr#M0a4D4K{pA{(;du2R~x}Xf+O3*aU4y+7g zFcBqbreu@%(oem4*L9D2QO^y(JCVJTGD`h;Xz(K7duJ!YW0UztMXoPXb8xTlD?Oa@ z6x8_Ll>IZtC+WAhDVJxi?v)ml2TXM#tapm>FCN)Ob45t`0i24h=*n8;o^8l1pa(*0 zHyumxmn#Dga1zF+>9@-=1hGGDyQbMAY@>Dh-C~=Z(7MAfWtMXBzlyCqm;adWdF}an z<PoKufZi7i8AWRPX7V3%zKgOhS<o6FRXytc8rrLu)*kIykyNh*j0l(He1%p<W$xBz zzwq|Bc3&a#2mE#->|^#Xm2bZ=j+NjG@!4DSP~7cpslH#FAL#`%l;@TrLYiE92MbUr z7|)h+#Obm#D-#5fmKyvvPUmCZq}kII>IbIImt5Qos$2G9U=x8QI~=%>Idgpnr~d>? zTvQ`dTdtxeDz6rJ0Dg>`)9F94EY=bfM@~g!$3H32GI0DnfOkkzu_fCoES1+|CH$<! zFU!e2xD)N;^_mf#_-ED?i3doohb!ueS#UfDpEoE2GUef!-+(equxAAtUW_5+ut8<2 zborhmNkL6+EJc6-&|1^x`pr)Pfg{PuVn?BsIz6>7j655oVg07B$vs7xdPRiaA*jG= zVNMGA$W&jVGj}jLwmz$H<R|@n>bSC*A)*IovJIZ|lTDV{p_zkKttlrugn6G^<ZLqa zL!L<n(_`6QYHuGTMhfXn)N3$Cp_Pt3wUYx6$DX#%=5<9XG!D*n@Csr$3KNoDi*9N+ z>r4&C%?Lb1tCliAYsC3n945bS)$GN40r^2yxEI-SkDiIN*qcqi!@NBFHC_h48T({C zvdC{Prxkt@8Z=qw+C{%w%Ftyist<U<MTQI$6#dZRVXbez7TvUNmXD*h!d+UY2Cj8* zU4+V&ud~2kR#Gl@2yP<eH(QSIUQ3)o5~;}g^ydi9o|n_<IKhtuF{opr>Z@$U_t@j} z14AvPe)ahZktf8L)v!$AkjHwe5yD|&;ODE?8(vg7Z8lO}IzXuxYFt|p($n5NaRX?i z%#GsBkdR!Hq>xNVj%!&_Jod)iC%M_Qhlrz^h@+cuc>>~AwX#u&+U{8PWV758@6eF+ zhGtErW%clZ=SW+!r2)+sX}vd_Im%Fl)JY~WP9}T!zmsixQ(qS;mt}@pPrU9Qz4pXK zlNFdOm^w*(*Ky2=hUpgT3Z!Js$e&3FAz|7K#JNAIPt%UL6Os@|TU!PgFUTe@$4M0Q zS)INoGrSrDTBS|$@|32?r^j7!Vm5C*CFquhS2QV%tqz&^6+Q-B)?V9R@>Nck8A`#` z*Ci<1vF`WsWXNapCcph-pZlLH$L7Z}{ko54?t0+wd*8O09&oVgZytGpFeZdf){&n^ zyxfS?EldpgKu>M%9MK_~Fj6BpHu^H0E969)1>*X^Ge_-X+chK93hSm$Cres9o4+5a z#Pj8uV_<a-q~P+*aW`+HkaX>4DOdebwQj!qLFMB4eUi)LM0B@E`MBgZiF0|nL^T4r z@#XYgUlpjMbyHA%=8dts6x9gzkLeHeM-SL=IdT%*tf!r{$nLRlqF*q4X29qDz|Szv zEl<q|$FDQpDb6^TEGU82;hG3Xe7o68gNCGk!f}+{EF9UibI)qcbALe#8vZm0`SM86 z4Xv@3zuqF}s!tN_J_e8@d>;_`c}*UfOnI8laB*6ErC0PKowvgtrS;@$o(D5#OM2i; z1fSoE`xTa6x71GEv`>h?k0ilVGcnIFiRP>S)@~nUK_5iQ?x4?aiZgbQa@q9gj-wa# zhmhU84<$PjwSqYdF<?K26C2`5JQ@kzAU|4s-mKX^;VDS-QJXAjh!El#PSn|+swc2K zz~j$M_ntSaD%CpWv@#KD(_bx<<v&x;Z9Tx>K<x(~uunc&Q6sSxJPYnKx*!t|vLa<a zW@WJSUcYf^A2_iLj#WXVtwuo02nCp|#nAkowt3sgMn7w+WAWR97ZqbAdTgC66sn46 z{e}KFS?t7WR5$mP*!!9+PQF?TUbiY+vO*7E*Q(kk>$(hHvjw%&As$Y>%~s5c%@X&_ z?J=_t>(4<RaSED3hUAzg@zWfDX!aDXPYI%2X?f^(0GXEn=c%^MXW?=ajqnAulsSJ+ z<2<jLQ6EDyvPto+X>`d5>r6LC6LtONbSCmxdH+#;(h5@Gpz`wl1@HZ<(L8JUThHg4 zB2QTk>&bk7lCnzAgVgD1GWEdYV1Q;tN2jJck)0dby#AQmiB^Mg&~M{IEe#`)V9)$$ zBA+0wv?%{!Ox6<Jd%SIrCAEJkT8C6v%MzQd(_5uYLaIEe-WJ2V`i&xB*^03g1Mi!= zv-z9w`mO_^=^CmOt`?td-9Ln|@kh#9F!U8hGm*k36Wu8?c{!DVnk;ko21(!`HQB+n zgt-(g(62e+e^jQ{MU!a;9!K!3PiA|J)fq1>h|h(qtCQ{cu%M%mJ`fi??J%DI`{o7J zhEsI(9>$_{A*Lj4kLcb@3XXiTxSo|^cBbQ~JVk9wI$IXusBK(e5-{Q;(`5XXr8TV2 zxs!v>AFu0C@-E(;EhxwQ{Bwl(1{qR+HBUS-vJQVwiI!RPEa55R*lX=S=CWT@Wh!X< z%Xp^qvK|Gzw~gTX*q9=XKIa$ME6G-B2SPyi@zFuW+ULds7YY{Lb2JF}{5N$sctVJm zSE7%mg#T8Q9-jMbx)ImDSehU2-8haF{}@&cU<7s}OZX@JG((wN!;`^hrv}s}k<uE2 z+r<cu&x6;UAL&!k!NV?DcbJdx%gUMCp9Wo*oys4=El~Bj9xd&D2cn-zAyuOpIPQ@* zB?#nkd(@c@$=<8Ifiuprezb>>HzlPkp2>G&*^exuQ}PLBD5^@Et;tkBa?3f_&5T?- zbA&r^Diq1FBiSR@XTZ8K{7$foVAFi;KBgwonvz(%m9Xy`y~`4=uQ^Brma;~@E3DYp zfXbha8Q*Z0W=vppfVf|WITKQ?M~E~G6WU=Ib(m`^F*qS-^!tZ9JOJs+PP*n7U@t|- z4X8e!PeGn<O-Yll68#ee7QuOArA0{7jC@C1JjuJ#k8h!sU4#317$7K!VmxCNb5lC9 zbhn`{@jlITSTb9o`N8%l61u2Xk2m71I3Azx5Kt~hbSfV#(twuL=QZD1+~@J4q_LCk zGwwhfdSNYsiKw?(OeaA9rq3N|nvk)Qb%d<Zd#tTYy^H^XC3w7rXZ>x)i51N>vlRqK zFd9~$-U3mr>{=(vYGc8#Za$!UebrBSESZF@Tt2pgd62kOWxLf#+0lB+t<fLnICrd@ z=Z?0&&IrX0K$ZC1R&aN+u3B!7mgk%<=8P96z`3L05}FYva(z8eeJ73fLC7#$CFQi- z@R4L018<S7M5VHHuiPhd1WrJ!Czh#pldidUm}>P6k`EW)`*NhRZVB4SVf~}ifH_Uo z^;m8N)lijYM!$y&MI$6O5!^2pb~?mT$%c2K#kyh!L6jrO(ggDN--AkWcB(9HJVEQa z=bRdUYzD}}&L|~AlVvj;uppEyGMyAP)h`XViEbQ}XmLlyw0W*ye`c$(JAoa;N@oNX zEu#0Z9OB+OVf~{K{2P60;Ncm*@3xvLnew?*1_1|dcWPRPgE!6Yh+{erMPkGisqRSx z61kc(=_csTGhy;;6?#K}I|+kjo5qYu&b7uOEm<SFlG5G=GFhXvBgx#KNo9bbJ>9&! zcZW&3EzX8=(GgsZ&!#t9asuAl@zpw+P-;iznX<!)vSpug9^TZgw1{r(k4K@Ll-ov6 zir0>=%$(nOfRAmFFis0+7~phuE}W`#6=8lZjuaaau_b?ES0y&2%Z>?KpPg)~_9P+Y zbpuCGGTD<xh|&JW;#QD9%@aH>#<SjfBpUHp&Yl%B7s@w9NoOBdr~0>mcTo;lXq<g7 zhkO177D{bE;#%!=>)4s%HvQenV2;9P)3Hc?Qt>8qZG-gz^4auCv^q833^fhV2J*vp zCK3k)l!<(tIuy4Ev2VNvRZgfRYl`@aF7LdkEk!V*Dseskm&(hGu{uvx_~Vp$(!FAP zT3*o_OHcSi(1=V)dIGdESoFQWq#XI&);p<(QVCO}Ro2mN-VeC}<?9H?gU0?j`Y%NV zpKGT5W}LMGrIemcpLBdSzm7bbQQWG#y)#pm<y2LzXF@fDR@MQCKs(r+-H;5UJoi<) zNu+T;MGDv+2$of(kdU^9E*Tx5&55Vn26!dw!DCylw-k$6M(z!I2RQC2R;q!VbkK-l z$*tf2!o<1JhuM-OC^To?Uaw)FwV{+j%es$zsGFB@R|2ZH9hZ9Igsk5m$4&(6Sq>Kw znlM+R+o@o=Ih`4=RvXeN3N;M`pd6Q?YR{yF^9o*qo;QKjfCy&&7E+z!gl%*dBQRCB z-g{{Is_9(s{i>|J<ksOHoya^JLi0+3=}eTkuuJgEmYLhGH>Kf^jg63U4<WKTgJ&Xn zbc9%BE0Wa8PPCdtT_st&sKR&^9Xoz&xTQ0ZpPn)-)prIs7PSvtF?<t-6oL(Z72Xg7 zd(@11Dt=4zU3qTwvB0>BgzV;7@^%6j%yTVY>y<{RIZn!UT)sh}1y-IgpnqD?mVOcV z(HH3z%_Ea%ZCEcz#bAd!!A}YJ#_IvS^VpW%o+F>B&Q;Vhw)}oJp6Va{rDodjwdgur zUiX=;NxN9AG{FPz*dvZET;yl07FFrll2(n@z5+4vRTi+ToIcw&Z&Xx~f@KPHbKfv8 z*kWpTUnOHdK(Ldmf*rPPq;s>mr?w!3Vbok4nFFvU&Dbn2#)sm!14GTct~kA^i4p=+ z7Dx^RZw2*sF{48Wa$8avJ6K^G@{uZ%D_hF715}Mq4Gk4t*>ZX<vL2<m=nb1xZLWD{ zFE7ylWF_9jZ<X&N@`Og;OXbP%&~EWnjMuQ_fNo?temSV8mc<LK-YZVDhM6PfecH}p zzdg)qa{a^&{q{U?CH@Q-s%tiTuca`tUS*|?+p{u7F{~d`%CN<0mZhH>cFxsB#}0QM zGXZ4Y<fNTKFhQRg))VTYsg-0tMELl)NqhAjaaW?>p0ew8frzjF1lhs5Z50ty)I_ek zNl>vzx7_g3S65^%vgKYq)wA%{7<Ng!6WNPjPRtCN%_tB4_#S7VKA7EXKuMsxzNDJ7 z`O41HZ|_djk!AP@aV~g+34fU<Iknbgi-<J8*JK#|b3-0>tV(Z*<`2c7lpU6isEtWZ zQTCWdB}83sTdP0VYHvN_$T>x7bTk8Q-cyLa9q?2Uu&EnGr)wt)1R2W1osutdvcJ&a zK&Wet6ez^w!4*!ijeWKe_>mT!eDdv%qp5v8Y=sR<X%WHKIbY1N_|cwBt~BceUyipS z<=M39Yl(HOTb(PK;v%T)Q>1LB)UYJwx${Z6p9DS<O{2eYPXj2coMN+>dNO$9Qh$*U zOtr6bTBkGdf*M7*t+{2xo_1_s+(hhxM&d-UN+CY(AptE~I}M!A=P2H(-TX;`Q#U$H z4IgLTM{5puig=OFff1N5wNsNwd5h(cgJr6g!q5ua);&WH)8;07u<~5=3aV>(P>5%8 zbr3nOeq%-=o0j10wi!mz7`&)MzE-T6_BNsl54o0jJy_@rL+A@ZX)RZTd4Vr?yuLa` zG0Uurzs^?B_2p3W$fnv_hDWo))Eh~zNX|k+woLxhz!4Zb7Y~U{y#Co0NUVrjC-9F@ zV=-E)lTDe0I4x|m4yEGDjHTKDS3m+rt}nUGFvX}SulnWC%bDXw%h$@$R%E53T<c~d z9g4oQNRR%|4R${6XHBMSn-*4bgq#7zkUw4T@kNS_Qr?=0JfVjc<zE1gtL!opWYSI* z*yhN6NyHeZy&Yd=1y_*MHvVvw$rg8Av9CNY$Rir?DdavwkRHy{eL^~TgrEHq54oK< z$>2)nD7PpN7}#vqP#3Pce&xXOE`9v&GRb+;E&l?a)K|)3;%t-Y!ulbVga(!rd1?q4 z0o|${)oqr|pS-cr?{)Q&{GIXalrLDB-I#W5gzSCHRiZg*Wt!m03P>DRt&}tw<fosa zVk;Nj^RJ-D_{lnB0!uQaU@rE4Ijv{8-}ws~Iz=v?5gqM&;>;~wIhIhCSsHN<l6Sc9 zTKAo11vpZRYn?DT_-t6;{lSZI)XlLsL{22<6|+NRo~eUfO#YB(NooTJ-@+NqQtjl8 z86c9W=u;iK`FaO`fP{*BKS*rI(k53uxEWZhd+P#N&_JYDI8~D?ynm&5)5u*7YTjmg zkdpoaU9o|f!n)<|v3Qe(HK;?ZQ?rjX+nP<L#Hz+Ie6`cK`crblD@9Kdd7GWdmYNY# zj`&^|?hgSYYRTY>fRCwaF_OC_hVtAq*!(u+D@@PX#)MU@7s3_h)FeK2{?xa7{0N(^ zMQl3$-m5edeD)WtbM#1`HlS8jttFpi;fv<4OlVk~vCUxGB9X*P4$!tgc=AZ`+dbGM zR%bDn=8xnh(NB?-wXxzOqTnji3O!ZkiR9x$M1j-+7LIo@*qql5D}s<3w(GSX)A;r- zXy$^^qIWuEePe(cQNAqdH82dtI4Elcs~G2CBg)6oV4HqKhnJ>KKL<wZrL^iquyj4_ z+dK0aGb2At1!Opjb<JH#f6y1nUyX-|@eE6o-{BO$VPYTyFCw-4YUh#r4<UIQ1CJ6z z^K0nk2L?)YR6aHFs!1W^f>wl@em{`d?J^@jyS6NIpI+T@yn1}Ww40wW8P013t{N_d zI5b_JLGAa*$>0&SPIQjDm^OW2&tx~Qa=4YmIH<%F&M#alxus{G9nB1^zuFYrk_ia~ zBJNg_5)bPK52n>tQJ&jiz?Mid=nCqL%D6DN%Cch95U;xs%Z6Dh%&V~PB{pQh1_N4; z$3L4lE>e?=I;~VgHR`Y?ntvzg(rv~Af%*jgTJ>1x2=x>a91nT7LAsCdx<SEeBHrKa zxNuOG^)#pV9b^wE2T2wwm_ID1JI|hlLiJ56TIcda5VHR0C%0Fr?7YN=Y)?cn-$FcK z_D2WjyComijKYdk&F@6Bf@YO~0p=A3?)lS<OC>i4&C3+oh{9*1yUzARCB;U^UU7lG z(^VhBkfNE1YW=a!r_2eX4C{_7C{)Z{(;a8x6{e%ittL$R?cXh5JCp|kqjWSQ>UNDd zlO%hTXwD&zj5Q-#A^d)fEu4lQ0XQ(&F9Qx{-_38ZP}(6ti0w65*jdpOvnL0%9&@Ul zKh{0FtSy^eGhH6h1^E<48e&~n69<E3YsPxS89K@0qXQi5bBz?4yDvwfv$w=n5R!Ke zN8YdV;{7hT2f0y}qg&;5BP&925q~>O!HV3B$1gkgyqp&jr$y}_0je8u)VD2SI(?8Y zm1FPZ`c5WZZ<0U2w5de$ilZw5IZ4o?_@rfZNKczP6OGb>ujSru6r|G6&Yl6JWY=`t z7c#_B*gwwMKJb<)YAELBjr~$3-vc2a<UD$J_c;l0n=J~u1d{hHcPQdfq8N^2q<_-< zl?ofQeYJNrvKj*09!y7?0kV7Ssqg{*4R7LF!)@Oz^#pyxYS4TJRELEsRWO^ACj5;H zpIPMC5zV8S1~Si5Z2Qq20;)v!V0sm<dY7Lr;jC<ahrzsIcoHDXrfJ;wxFC&Vc2WNM zSjG{f<*jCpEf*m4PP(S6A|!&JIi=sHakKB;4!n^Ju?VCXA)SaiAL!mCYKMbQ$=P8z zxtc|JTZDL9+;50`=ipc7(&mAr9g^pUd6{g4RQ?+x+C9@?Fd#<e3I0%lcpJ?VjL9lR z^VZG|%V<yHclb{-H=7up#jVG`E1K6mWoSd8l?>6!xAj>kR<7lahX{Qq>}g@OlR*!c zQywl10hNHsdM}#PwMtZuu%hK%<^QBneJ`u|SoLBzm#qk30o6`1#lI{&75F+UnYTWS z;1?JpHn8Mm3I<<}I#^MMnllz*gA(NU$d-FNTY+fKMXY@ZK62%Sif4f?aMlG<B*1w7 zu_n1qxEIl{HIif7tk+K_Czy5p?n_b@j=wBpeXL2-9X|xb6YB$4<!czevUG)src4Qj zTL*9pBIcGUFdpG(B#yof8MfT#n+_atPCoX%LK6^r4)XXsd6XHpmYY(FmV0&c!Z_i- zV(gG-1o4e!29lpw8|xvH4_u*$x#c;2d8%(}`C5Tq(HZluUYgSkKWw<@W&vGkwpQ{E zf`hb7Le}S%wn)cO9lm_BT3V0*mdnzGX|}p&bqc3I--8ZU6iTbnY0r>bq~%EU$`^0Q zG{Z(=NF4Wa_jO+e6e-WmP$}MwDY@xHSKnG0e8__GVPr$<lV10|g9w%SNRISZ6g^6j z#^^Wp18x)G(6s&aNLj71SAUCn;f?0}UBk2lXor-^K%}ykzeY)x6T@aprCA|vqVyHM z4s~W%>=nVO7I4G#O=dLs&&;2D`n#1@`F2E9eg46ClkpBvba0A%vA9lXLMv>!J~22r z;_vMoQ|Sv7ptP_?-6uqVn*%^HFIsQIu6#H`)YUvo0?obUa`OYqa7`&$zIt&zy9q7L zN_~)B;QeIT#|fzKy%Xfl#pBJz-Y*5sR(dw|MaT38;<T0OMvXeIlTCJoHzp*@GNL2X z*iKnYuMYQ^mx@SE!63?Mnamo%ND-Oa2}0AD&Rwg)?3VP6IJLNIO<fUp@ToD<Hl{V2 zAq0C?+!sP`Jor`Gg>n9rg7AP5&ly`l%1_3OH(9~2?V3E899C1Mo>?z2#KbwGFI4W6 zntM%jeV!mgE#%C%Mc0zFua$0mG&MklScL3bfI)@B1Ml>Lz*dr&asK6(L*GeD2$!D4 zg=t_H&&_gCd!x4-sr)Jri}+<(`{)_E_;_eoAK+TL+rWLBJmt1&=)UOD6>YAjK`Puc z9;fr_*7J$aa{E@~sy)QWbV56MDMCrWv|!wq!x%506Q)IsW+e?T4<csHqfir#V<{#B z2P@MVx->0AepqRZL^geO#__;%Uv7thi#f_x+jx_(%fuuf^~VTWY5mdA_X}{yu5_Er z;=LL~`G`9OT>80IXS#O)b_z7-)foJWlo5$3e9p8f$=cG!a=e1kTMkZ?Q+P@P4fFfV zkn*F{-DT}R_!u$W64lFb{tUt5Xtj308J`2ktaJN<;sGN%NZIm1&GDx$B22XsK&?M6 z&fZi-8MdD)NpFp9zdR#vLQ%vCZc`}BTkN~av5lIMhFRoGO#ftwi^VPcp0|KaKTvOy zl3+|1AIij*DY=#txuOl;qxVK4fF!gSn`;q|OBQEjba=+kNS&eEm1GoP^|uGii*Csk zXyH$l`a`@Z(k&?B>3K4&IGRuAki1XV^Ela3+o)bY>%K^&s0omSfo=31S=R+W^mbY! zEMfRd7n;~D_%n-P-MsUCqH`5}ax)~$_yvL40+*t^2hKM;m0Mayegb{ZEWl(!0>cLN zkl>!fV3bn;gizNnwIhNo>9uOj`aCC^_r6$a-*dKtAN|5>a#VpAZ!kJE1V0Sq)JgW^ zPowX$1;Qj)WRIJpG==5y8#)8#-^Qc(Fe+Is#Ulvr&*U1+X#=rrw81b=)`rRl=%>?j z(j|YCHa}h!O{D6~aB*YR7Z*}y^SKd%L(M`%4GxukK13?6K99czJT(xs{Pw{{-vgk6 z7O7|hd@E||=do;Ks|lAz(q2Rb<da<AyBYD!-G+i48uBmPyC+5lVoC$~o}hufY?-6f z0GtcqQ!NZ5nrZN~#bl#Ph=98$5SYdxxd&!IOo(3?#k3*$xv}xXxDz9T_W-xE%M9YD z^+uL&yvaZSWtE~^zZBgv{_?0gX&>yL>l_=+6mVC4A1MAYy^7_JD1J@y2aM05`vh=B z85p`UhcBoSwT28B014Uc4ls4WucbCCQbho$P`-lXsrUN=b*^r}+8t`I_6X0DU!dkJ zOKz1D0-EZWT(hUjh{C$`8%Rhm<p)TEID;4RhFF6;K>@V#tLO@XSAH<I(#DAv?R>WK zK%LamVQ&Z)q{VcL%2SVk_hs$}jJ(3-114uxVVp`%LR^_Z>lot=%p8_5-Qw{CYLxB> z`4mn&OqkW2fD{9Qnv?+bP;5D-J?aA%E$$A1$K?lnp|$ZRJo7$~d;dr($-j@)Pf?+J zb;*3M(;FobfB>P$v$c2DI2(QKo(5x8*=&Mw1}FoN=hX(xaAyPt$JzJr-#@sQWF-{0 z00moqAkxNV?!pEwn2Ogj-?CEFM6WfeMrfr3#}pIh=_H(Fe&183KafuuWZzy~%gF#H z_^=g3!F0>_ARXI=UNCK5ON<k}7!k>!CU{gsU&!kL7~5+WzXuGm{b-lW%k3SzwF+Ex zLHGfIw*Av&$yc02Rz!*O_4$FwB3PwMD&=8>$;Vs9bHU(6>?ygvgAVRga>HRM^9pLu zJ@+$hvbcp;pf3<mUTC6rFvrI{GaNS$%cmqO9@CB=feXr$x7bLXiFa8MI*sRf6~(c} zi|A8+7`;NQo+WtFIX{}|9`Y;&CX+4CNCCJN?<sz9{0xS}_*M&@B}JKL#;J*pyA%SK zN94TvTCXl!UF-nO?=;(?qEpi4>08AuMxMDE-p(jg{ZFR;&RGSFtF!8I1qnEfe5xt9 zw1zCt0%Xw|+t>nZLqx~x(IpvOT1$D(K$LGYt7vskBSoli4OVrYu%L+mMzJ|er81AW z=WvuhRjh1v&nbU2L3~QvS_Xo1UHw=>N;ZiZ_*y76+<1g?0SFKqo6>6pk;p1MPVLNs z@vt7x2SA9|9ha@5S)NwZYG<{S>=(34vu7)lV1v{M<Opy@g+A_HARj#P9;fXJg<|fB z>VL3h+Lfd|B--pSHjzjCD@76KX7Qhj^4~@l;Mq>b1Ou%l?+_Rixad@|IZSbiIBiVm z$`cr3TFd0UpoxPOMuomfP`&kE<$i_IKhNE4)%KU|HV4G<qv;M?)~2t5ExIW6z_O&^ zB1_+08S|U;Ks8Q8pkKxLBvdYnE9^}PsksY}$Gzd1ThhhJmjNr=sCkwol5>=_%2ZGj zDs2>9*Gjv>a$F;PC&QG@bkAy6Y5g&q|5nRiRz~A}HA)3)e$R6*P-uEV@Nm#(i-OLS zkvJp119YDzpeAlR;ryk>i}#M1m^dTIy`Tx>FGDPC)=M;d8jQ9cE(-C{mw4Nf=hrPn zrHLvGL5TKEmmz2VL>VfyL)R)HJjH4ligaOQffNGYMVyc>Lw}#o3B!>E6f{JhqD6p8 zU^?1esa7j3DN;k7k~niT32hLPEeC8*)u_6Wyq0%soxC9?y61+;do5?OCYl7V<QWRm zRh{K8)=p=1c9@}vXB&P}dw#KQ^38?a7XEf}@4^GzS;`|ptV1{_P!LOs<ZmSNvw7uE zD(|bSC94BW)A<3ge)SokzQ(tE6}Qh7ar%|w`-bY2>e~&~F4ec60xfmB!fL#;_CJ{W zpLolL<okPbhosdkTbNKP1$*RrPu2IG<MUP#Ux=Gcla5sN^VZ=)p~NWIvpST*8Oetj zEb*c|1+7M@WL|3O(?y}k3V#)y>(s8Sj|DxCNtYv1eTXEj5FlrxuG1IfEX!z-O01t4 z5L(0t5m=zb1@+m2URsm$O-^T`7_?FyM(huQ6hzL5t};}dxmUgUt;ol$22OrV`<#Qv zTPXi?ITHHkQ>mW`1Wn+1=5Xq-p0n5g>Hx0D{0(CFKOlf4{zoo{<^U|+f0@VsBYT<n a&fRrhwlI8ou=?-|T$jykP>rVEH~$x3)0bud literal 0 HcmV?d00001 diff --git a/packages/storykit/.storybook/global.css b/packages/storykit/.storybook/global.css new file mode 100644 index 0000000..5ac59a8 --- /dev/null +++ b/packages/storykit/.storybook/global.css @@ -0,0 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.sb-show-main { + @apply bg-white dark:bg-gray-900; +} diff --git a/packages/storykit/.storybook/main.ts b/packages/storykit/.storybook/main.ts new file mode 100644 index 0000000..65f7312 --- /dev/null +++ b/packages/storykit/.storybook/main.ts @@ -0,0 +1,33 @@ +import type { StorybookConfig } from "@storybook/react-webpack5" + +const path = require("path") + +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/preset-create-react-app", + "@storybook/addon-onboarding", + "@storybook/addon-links", + "@storybook/addon-essentials", + "@chromatic-com/storybook", + "@storybook/addon-interactions", + "@storybook/addon-themes", + ], + framework: { + name: "@storybook/react-webpack5", + options: {}, + }, + docs: { + autodocs: "tag", + }, + webpackFinal: async (config) => { + if (config.resolve) { + config.resolve.alias = { + ...config.resolve.alias, + "@": path.resolve(__dirname, "../src"), + } + } + return config + }, +} +export default config diff --git a/packages/storykit/.storybook/manager-head.html b/packages/storykit/.storybook/manager-head.html new file mode 100644 index 0000000..f5105bd --- /dev/null +++ b/packages/storykit/.storybook/manager-head.html @@ -0,0 +1 @@ +<meta name="robots" content="noindex" /> diff --git a/packages/storykit/.storybook/manager.ts b/packages/storykit/.storybook/manager.ts new file mode 100644 index 0000000..d0c47a0 --- /dev/null +++ b/packages/storykit/.storybook/manager.ts @@ -0,0 +1,7 @@ +import { addons } from "@storybook/manager-api" + +import theme from "./theme" + +addons.setConfig({ + theme, +}) diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts new file mode 100644 index 0000000..7d21660 --- /dev/null +++ b/packages/storykit/.storybook/preview.ts @@ -0,0 +1,34 @@ +import { withThemeByClassName } from "@storybook/addon-themes" +import type { Preview } from "@storybook/react" + +import "./global.css" +import theme from "./theme" + +const preview: Preview = { + parameters: { + options: { + theme, + storySort: { + order: ["Introduction", "*", "Example"], + }, + }, + backgrounds: { disable: true }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, + decorators: [ + withThemeByClassName({ + themes: { + light: "", + dark: "dark", + }, + defaultTheme: "light", + }), + ], +} + +export default preview diff --git a/packages/storykit/.storybook/theme.ts b/packages/storykit/.storybook/theme.ts new file mode 100644 index 0000000..f4651cb --- /dev/null +++ b/packages/storykit/.storybook/theme.ts @@ -0,0 +1,42 @@ +import { create } from "@storybook/theming/create" + +const logo = require("./assets/story-logo.png") + +export default create({ + base: "light", + // Typography + fontBase: '"Open Sans", sans-serif', + fontCode: "monospace", + + brandTitle: "Story Protocol", + brandUrl: "https://storykit.vercel.app/", + brandImage: logo, + brandTarget: "_self", + + // + colorPrimary: "#3A10E5", + colorSecondary: "#585C6D", + + // UI + appBg: "#ffffff", + appContentBg: "#ffffff", + appPreviewBg: "#ffffff", + appBorderColor: "#585C6D", + appBorderRadius: 4, + + // Text colors + textColor: "#10162F", + textInverseColor: "#ffffff", + + // Toolbar default and active colors + barTextColor: "#9E9E9E", + barSelectedColor: "#585C6D", + barHoverColor: "#585C6D", + barBg: "#ffffff", + + // Form colors + inputBg: "#ffffff", + inputBorder: "#10162F", + inputTextColor: "#10162F", + inputBorderRadius: 2, +}) diff --git a/packages/storykit/package.json b/packages/storykit/package.json new file mode 100644 index 0000000..ee29996 --- /dev/null +++ b/packages/storykit/package.json @@ -0,0 +1,108 @@ +{ + "name": "@storyprotocol/storykit", + "author": "storyprotocol engineering <eng@storyprotocol.xyz>", + "version": "0.1.7", + "type": "module", + "exports": { + ".": { + "module": "./dist/storyprotocol-storykit.esm.js", + "default": "./dist/storyprotocol-storykit.cjs.js", + "types": "./dist/types.d.ts" + }, + "./package.json": "./package.json" + }, + "types": "dist/types.d.ts", + "files": [ + "dist" + ], + "publishConfig": { + "registry": "https://npm.pkg.github.com/@storyprotocol" + }, + "scripts": { + "test": "react-scripts test", + "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", + "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", + "dev": "storybook dev -p 6006", + "build-storybook": "storybook build", + "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports" + }, + "prettier": "@storykit/prettier-config", + "dependencies": { + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/react": "^11.11.4", + "@headlessui/react": "^1.7.18", + "@radix-ui/react-accordion": "^1.1.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "lucide-react": "^0.364.0", + "react-icons": "^5.0.1", + "tailwind-merge": "^2.2.2", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", + "viem": "^2.7.19" + }, + "devDependencies": { + "@chromatic-com/storybook": "^1.2.25", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@storybook/addon-essentials": "^8.0.4", + "@storybook/addon-interactions": "^8.0.4", + "@storybook/addon-links": "^8.0.4", + "@storybook/addon-onboarding": "^8.0.4", + "@storybook/addon-styling-webpack": "^1.0.0", + "@storybook/addon-themes": "^8.0.4", + "@storybook/blocks": "^8.0.4", + "@storybook/manager-api": "^8.0.4", + "@storybook/preset-create-react-app": "^8.0.4", + "@storybook/react": "^8.0.4", + "@storybook/react-webpack5": "^8.0.4", + "@storybook/test": "^8.0.4", + "@storybook/theming": "^8.0.4", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", + "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", + "@tanstack/react-query": "^5.25.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@turbo/gen": "^1.12.4", + "@types/eslint": "^8.56.5", + "@types/jest": "^29.5.12", + "@types/node": "^20.11.24", + "@types/react": "^18.2.61", + "@types/react-dom": "^18.2.19", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-storybook": "^0.8.0", + "postcss": "^8.4.38", + "postcss-nesting": "^12.1.2", + "prettier": "^3.2.5", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-apexcharts": "^1.4.1", + "react-dom": "^18.2.0", + "react-force-graph-2d": "^1.25.4", + "react-scripts": "5.0.1", + "rollup": "^4.13.1", + "rollup-plugin-dts": "^6.1.0", + "rollup-plugin-peer-deps-external": "^2.2.4", + "rollup-plugin-postcss": "^4.0.2", + "storybook": "^8.0.4", + "typescript": "^5.3.3", + "webpack": "^5.91.0" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.25.0", + "react": ">=18.2.0", + "react-apexcharts": "^1.4.1", + "react-dom": ">=18.2.0", + "react-force-graph-2d": "^1.25.4", + "typescript": "^5.4.3" + } +} diff --git a/packages/storykit/postcss.config.cjs b/packages/storykit/postcss.config.cjs new file mode 100644 index 0000000..9615734 --- /dev/null +++ b/packages/storykit/postcss.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + "@tailwindcss/nesting": "postcss-nesting", + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js new file mode 100644 index 0000000..45f453e --- /dev/null +++ b/packages/storykit/rollup.config.js @@ -0,0 +1,54 @@ +import commonjs from "@rollup/plugin-commonjs" +import resolve from "@rollup/plugin-node-resolve" +import terser from "@rollup/plugin-terser" +import typescript from "@rollup/plugin-typescript" +import dts from "rollup-plugin-dts" +import peerDepsExternal from "rollup-plugin-peer-deps-external" +import postcss from "rollup-plugin-postcss" + +// eslint-disable-next-line +const packageJson = require("./package.json") + +const config = [ + { + input: "src/index.ts", + output: [ + { + file: packageJson.exports["."].default, + format: "cjs", + sourcemap: true, + }, + { + file: packageJson.exports["."].module, + format: "esm", + sourcemap: true, + }, + ], + plugins: [ + peerDepsExternal(), + resolve(), + commonjs(), + typescript(), + terser(), + postcss({ + config: { + path: "./postcss.config.cjs", + }, + extensions: [".css"], + minimize: true, + inject: { + insertAt: "top", + }, + }), + ], + external: ["react/jsx-runtime"], + }, + { + input: "src/index.ts", + output: [{ file: "dist/types.d.ts", format: "es" }], + plugins: [dts.default()], + external: [/\.(css|less|scss)$/], + }, +] + +export default config diff --git a/packages/storykit/src/components/Button/Button-css-modules.tsx b/packages/storykit/src/components/Button/Button-css-modules.tsx new file mode 100644 index 0000000..987c681 --- /dev/null +++ b/packages/storykit/src/components/Button/Button-css-modules.tsx @@ -0,0 +1,45 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" +import styles from "./styles.module.css" + +const button = cva(styles.skButton, { + variants: { + variant: { + primary: styles.primary, + secondary: styles.secondary, + }, + size: { + small: styles.small, + medium: styles.medium, + large: styles.large, + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, +}) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + // <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx new file mode 100644 index 0000000..7ea8640 --- /dev/null +++ b/packages/storykit/src/components/Button/Button.tsx @@ -0,0 +1,44 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" +import "./styles.css" + +const button = cva("skButton", { + variants: { + variant: { + primary: "skButton--primary", + secondary: "skButton--secondary", + }, + size: { + small: "skButton--small", + medium: "skButton--medium", + large: "skButton--large", + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, +}) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx new file mode 100644 index 0000000..d204fc3 --- /dev/null +++ b/packages/storykit/src/components/Button/__docs__/Button.mdx @@ -0,0 +1,37 @@ +import * as ButtonStory from "./Button.stories" +import { Canvas, Meta } from "@storybook/blocks" + +<Meta of={ButtonStory} title="Example/Button" /> + +# Button + +Button component with different props. + +#### Example + +<Canvas of={ButtonStory.Primary} /> + +## Usage + +```ts +import { Button } from "@storyprotocol/storykit"; + +const Example = () => { + return ( + <Button + size="small" + variant="primary" + onClick={()=> console.log("Clicked")} + >hello</Button> + ); +}; + +export default Example; +``` + +#### Arguments + +- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. +- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. +- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. +- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx new file mode 100644 index 0000000..5661c8e --- /dev/null +++ b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx @@ -0,0 +1,35 @@ +import type { Meta, StoryObj } from "@storybook/react" + +import Button from "../Button" + +const meta = { + title: "Example/Button", + component: Button, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, +} satisfies Meta<typeof Button> + +export default meta +type Story = StoryObj<typeof meta> + +export const Primary: Story = { + args: { + children: "Button", + variant: "primary", + size: "medium", + disabled: false, + }, +} + +export const Secondary: Story = { + args: { + children: "Button", + variant: "secondary", + size: "medium", + disabled: false, + }, +} diff --git a/packages/storykit/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx new file mode 100644 index 0000000..8f57dae --- /dev/null +++ b/packages/storykit/src/components/Button/__tests__/Button.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import Button from "../Button" + +describe("Button", () => { + test("renders the Button component", () => { + render(<Button>hi</Button>) + }) +}) diff --git a/packages/storykit/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts new file mode 100644 index 0000000..ae0694c --- /dev/null +++ b/packages/storykit/src/components/Button/index.ts @@ -0,0 +1 @@ +export { default as Button } from "./Button" diff --git a/packages/storykit/src/components/Button/styles.css b/packages/storykit/src/components/Button/styles.css new file mode 100644 index 0000000..384f0fc --- /dev/null +++ b/packages/storykit/src/components/Button/styles.css @@ -0,0 +1,21 @@ +.skButton { + @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; + + &.skButton--primary { + @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; + } + + &.skButton--secondary { + @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; + } + + &.skButton--small { + @apply text-xs px-2 py-1; + } + &.skButton--medium { + @apply text-base px-4 py-2; + } + &.skButton--large { + @apply text-xl px-6 py-3; + } +} diff --git a/packages/storykit/src/components/Button/styles.module.css b/packages/storykit/src/components/Button/styles.module.css new file mode 100644 index 0000000..d024632 --- /dev/null +++ b/packages/storykit/src/components/Button/styles.module.css @@ -0,0 +1,21 @@ +.skButton { + @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; + + &.primary { + @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; + } + + &.secondary { + @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; + } + + &.small { + @apply text-xs px-2 py-1; + } + &.medium { + @apply text-base px-4 py-2; + } + &.large { + @apply text-xl px-6 py-3; + } +} diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx new file mode 100644 index 0000000..2673224 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -0,0 +1,90 @@ +import React, { useEffect, useMemo, useState } from "react" + +import "../../global.css" +import { convertAssetToGraphFormat } from "../../lib/graph" +import { Asset } from "../../lib/types" +import { useIpAssetContext } from "../../providers" +import "./styles.css" + +export type IpGraphProps = { + width?: number + height?: number +} + +function IpGraph({ width = 500, height = 500 }: IpGraphProps) { + const { assetData } = useIpAssetContext() + const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [ForceGraph, setForceGraph] = useState<any>(null) + + useEffect(() => { + // ForceGraph will break SSR, and needs to be loaded dynamically + async function importForceGraphModule() { + const fg = await import("react-force-graph-2d") + setForceGraph(fg.default) + } + importForceGraphModule() + }, []) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { + const isParent = node.level < 0 + const isSelf = node.level === 0 + const isChild = node.level > 0 + + let label + + if (node.isRoot) { + if (isParent) { + label = `${node.name} (Root / Parent)` + } else { + label = `${node.name} (Root)` + } + } else if (isParent) { + label = `${node.name} (Parent)` + } else if (isChild) { + label = `${node.name} (Child)` + } else { + label = `${node.name}` + } + + const fontSize = 12 / globalScale + const circleRadius = isSelf ? 6 : 3 // Radius of the circle + + // Set the font for the text + ctx.font = `${fontSize}px Sans-Serif` + + // Draw the circle + ctx.beginPath() + ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) + if (isSelf) { + ctx.fillStyle = "black" // Color of the circle + } else if (isParent) { + ctx.fillStyle = "grey" // Color of the circle + } else { + ctx.fillStyle = "lightgrey" // Color of the circle + } + + ctx.fill() + if (isSelf) { + ctx.strokeStyle = "lightblue" // Border color of the circle + ctx.stroke() + } + + // Draw the text next to the circle + ctx.fillText(label, node.x, node.y + 10) + } + + return ( + <div className="skIpGraph"> + {ForceGraph ? ( + <ForceGraph width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> + ) : null} + </div> + ) +} + +IpGraph.displayName = "IpGraph" + +export default IpGraph diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx new file mode 100644 index 0000000..6e98d12 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx @@ -0,0 +1,26 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpGraph from "../IpGraph" + +const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + width = 400, + height = 300, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpGraph width={width} height={height} /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx new file mode 100644 index 0000000..ad8a772 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -0,0 +1,45 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpGraphStory from "./IpGraph.stories" + +<Meta of={IpGraphStory} /> + +# IpGraph + +Show IP Asset derivatives graph. + +#### Example + +<Canvas of={IpGraphStory.Select} /> + +<Controls /> + +## Dependencies + +The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). + +```bash +npm install react-force-graph-2d +``` + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **width**: _number_ - The width of the canvas +- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx new file mode 100644 index 0000000..049a105 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpGraph", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts new file mode 100644 index 0000000..d038069 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/index.ts @@ -0,0 +1 @@ +export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IpGraph/styles.css b/packages/storykit/src/components/IpGraph/styles.css new file mode 100644 index 0000000..1bae73e --- /dev/null +++ b/packages/storykit/src/components/IpGraph/styles.css @@ -0,0 +1,3 @@ +.skIpGraph { + @apply relative; +} diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx new file mode 100644 index 0000000..bf01fc6 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -0,0 +1,144 @@ +import { POLICY_TYPE } from "@/lib/types" +import { cn, getPolicyTypeByPILData } from "@/lib/utils" +import { useIpAssetContext } from "@/providers" +import { cva } from "class-variance-authority" +import { CircleCheck, CircleMinus } from "lucide-react" +import { useState } from "react" +import { FaCaretDown, FaCaretUp } from "react-icons/fa6" + +import "../../global.css" +import "./styles.css" + +const CANS = { + REMIX: "Remix this work", + INCLUDE: "Include this work in their own work(s)", + CREDIT: "Credit you appropriately", + DISTRIBUTE: "Distribute their remix anywhere", + PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", + CREATOR_CREDIT: "Credit you as the creator", + PUBLISH: "Display / publish the work in any medium", +} + +const ShowCans = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] + break + default: + return [] + break + } +} + +const CANNOTS = { + RESELL: "Resell your original work", + COMMERCIALIZE: "Commercialize the remix", + CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", + CLAIM: "Claim your work as their own", + REMIX: "Create remixes of the commercial use.", +} + +const ShowCannots = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] + break + default: + return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] + break + } +} + +const policiesStyles = cva("", { + variants: { + size: { + small: "skIpPolicyAccordion--small", + medium: "skIpPolicyAccordion--medium", + large: "skIpPolicyAccordion--large", + }, + }, +}) + +export type IpPolicyAccordionProps = { + size?: "small" | "medium" | "large" +} + +function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { + const { policyData } = useIpAssetContext() + const [expanded, setExpanded] = useState<number | null>(0) + + const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 + + return policyData?.length ? ( + <div className={cn("skIpPolicyAccordion", policiesStyles({ size }))}> + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {(policyData as unknown as any[])?.map((policy, index) => ( + <div key={policy.id} className="skIpPolicyAccordion__item"> + <div + className="skIpPolicyAccordion__item-header" + onClick={() => setExpanded(expanded === index ? null : index)} + > + {getPolicyTypeByPILData(policy.licenseTerms)} + {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} + </div> + + <div + className={cn( + "skIpPolicyAccordion__item-list", + expanded === index && "skIpPolicyAccordion__item-list--expanded" + )} + > + <div className="skIpPolicyAccordion__properties"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( + <> + <div className="skIpPolicyAccordion__item-list-title">Others Can</div> + <div className="skIpPolicyAccordion__list"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--can"> + <CircleCheck width={iconWidth} /> + <span>{can}</span> + </div> + ))} + </div> + </> + ) : null} + <div className="skIpPolicyAccordion__item-list-title">Others Cannot</div> + <div className="skIpPolicyAccordion__list"> + {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--cannot"> + <CircleMinus width={iconWidth} /> + <span>{can}</span> + </div> + ))} + </div> + </div> + </div> + + {index < policyData.length - 1 && <div className="skIpPolicyAccordion__divider" />} + </div> + ))} + </div> + ) : ( + <div className="skIpPolicyAccordion skIpPolicyAccordion--no-policy">No Policy</div> + ) +} + +export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx new file mode 100644 index 0000000..5a4a58f --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx @@ -0,0 +1,27 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpPolicyAccordion from "../IpPolicyAccordion" + +type Size = "small" | "medium" | "large" + +const Example: FC<{ ipId: Address; size: Size }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + size = "medium", +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full w-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpPolicyAccordion size={size} /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx new file mode 100644 index 0000000..fa8a1c9 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" + +<Meta of={IpPolicyAccordionStory} /> + +# IpPolicyAccordion + +Displays the IP Asset policies in a readable format (cans & cannots). + +#### Example + +<Canvas of={IpPolicyAccordionStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpPolicyAccordion } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpPolicyAccordion /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx new file mode 100644 index 0000000..00db34b --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx @@ -0,0 +1,40 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpPolicyAccordion", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx new file mode 100644 index 0000000..f05ad5a --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/index.tsx @@ -0,0 +1 @@ +export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css new file mode 100644 index 0000000..0cefe8e --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -0,0 +1,70 @@ +.skIpPolicyAccordion { + @apply flex flex-col w-full min-w-48; + + .skIpPolicyAccordion__item { + @apply flex flex-col w-full; + } + + .skIpPolicyAccordion__item-header { + @apply flex w-full items-center justify-between cursor-pointer; + } + + .skIpPolicyAccordion__item-list { + @apply flex w-full items-center justify-between overflow-hidden h-0; + + &.skIpPolicyAccordion__item-list--expanded { + @apply h-auto; + } + } + + .skIpPolicyAccordion__properties { + @apply flex flex-col pt-2 gap-2; + } + + .skIpPolicyAccordion__item-list-title { + @apply font-bold; + } + + .skIpPolicyAccordion__list { + @apply flex flex-col; + } + + .skIpPolicyAccordion__property { + @apply flex w-full items-center gap-2; + + &.skIpPolicyAccordion__property--can > svg { + @apply text-green-500; + } + + &.skIpPolicyAccordion__property--cannot > svg { + @apply text-red-500; + } + } + + .skIpPolicyAccordion__divider { + @apply border-b border-gray-200 w-full my-2; + } + + &.skIpPolicyAccordion--small { + @apply text-sm; + } + + &.skIpPolicyAccordion--medium { + @apply text-base; + + .policy-list { + @apply gap-1; + } + } + + &.skIpPolicyAccordion--large { + @apply text-lg; + .policy-list { + @apply gap-2; + } + } + + &.skIpPolicyAccordion--no-policy { + @apply text-slate-400; + } +} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx new file mode 100644 index 0000000..b4fbf52 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -0,0 +1,104 @@ +import { shortenAddress } from "@/lib/utils" +import { useIpAssetContext } from "@/providers" +import { useEffect, useState } from "react" +import { Address } from "viem" + +import "../../global.css" +import "./styles.css" + +function IpRoyaltyPieChart() { + const { royaltyData } = useIpAssetContext() + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [Chart, setChart] = useState<any>(null) + useEffect(() => { + import("react-apexcharts").then((Component) => setChart(Component)) + }, []) + + let ApexChart = Chart + if (ApexChart?.default) ApexChart = ApexChart.default + if (ApexChart?.default) ApexChart = ApexChart.default + + if (royaltyData?.targetAncestors) { + const chart = { + options: { + chart: { + width: 300, + type: "pie" as `pie`, + }, + dataLabels: { + style: { + fontSize: "20px", + // fontFamily: "Inter, ui-sans-serif", + fontWeight: "400", + colors: ["#fff", "#fff", "#1f2937"], + }, + dropShadow: { + enabled: false, + }, + formatter: (value: number) => `${value.toFixed(1)} %`, + }, + // labels: ["Direct", "Organic search"], + plotOptions: { + pie: { + dataLabels: { + offset: -20, + }, + }, + }, + colors: ["#5f6060", "#494848"], + tooltip: { + enabled: true, + y: { + title: { + formatter: (value: Address) => shortenAddress(value), + }, + }, + }, + legend: { + show: false, + }, + labels: royaltyData?.targetAncestors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 300, + }, + legend: { + position: "bottom", + }, + }, + }, + ], + }, + series: royaltyData?.targetRoyaltyAmount.map(Number), + } + + return ( + <div className="skIpRoyaltyPieChart"> + <div className="skIpRoyaltyPieChart__chart"> + {ApexChart ? ( + <ApexChart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> + ) : null} + </div> + <div className="skIpRoyaltyPieChart__key"> + <dl className="skIpRoyaltyPieChart__list"> + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {royaltyData?.targetAncestors.map((target: any, i: any) => ( + <div key={target} className="skIpRoyaltyPieChart__item"> + <dt className="skIpRoyaltyPieChart__address">{shortenAddress(target)}</dt> + <dd className="skIpRoyaltyPieChart__value">{royaltyData.targetRoyaltyAmount[i]}</dd> + </div> + ))} + </dl> + </div> + </div> + ) + } + + return <div className="skIpRoyaltyPieChart skIpRoyaltyPieChart--empty">No Royalty Data</div> +} + +export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx new file mode 100644 index 0000000..3719043 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx @@ -0,0 +1,22 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpRoyaltyPieChart from "../IpRoyaltyPieChart" + +const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpRoyaltyPieChart /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx new file mode 100644 index 0000000..7bb1ab0 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -0,0 +1,40 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" + +<Meta of={IpRoyaltyPieChartStory} /> + +# IpRoyaltyPieChart + +Displays the divisions of royalties for an IP Asset in a pie chart. + +#### Example + +<Canvas of={IpRoyaltyPieChartStory.Select} /> + +<Controls /> + +## Dependencies + +The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). + +```bash +npm install react-apexcharts +``` + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpRoyaltyPieChart } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpRoyaltyPieChart /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx new file mode 100644 index 0000000..c218f3f --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpRoyaltyPieChart", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx new file mode 100644 index 0000000..80b6af8 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx @@ -0,0 +1 @@ +export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css new file mode 100644 index 0000000..d59f690 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css @@ -0,0 +1,30 @@ +.skIpRoyaltyPieChart { + @apply flex flex-col items-center justify-between; + + .skIpRoyaltyPieChart__chart { + @apply min-h-[230px]; + } + + .skIpRoyaltyPieChart__key { + @apply w-full min-w-[300px] px-2; + } + + .skIpRoyaltyPieChart__list { + @apply divide-y divide-gray-100 overflow-x-hidden text-sm leading-6; + } + + .skIpRoyaltyPieChart__item { + @apply flex justify-between gap-x-4 py-1; + } + + .skIpRoyaltyPieChart__address { + @apply text-xs capitalize text-gray-500; + } + .skIpRoyaltyPieChart__value { + @apply truncate text-gray-700; + } + + &.skIpRoyaltyPieChart--empty { + @apply items-start text-slate-400; + } +} diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx new file mode 100644 index 0000000..382949d --- /dev/null +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -0,0 +1,394 @@ +import { Menu, Transition } from "@headlessui/react" +import React, { Fragment, useState } from "react" +import { FaWandMagicSparkles } from "react-icons/fa6" +import { IoIosShareAlt } from "react-icons/io" +import { SiOpensea } from "react-icons/si" +import { TbLicense } from "react-icons/tb" +import { Address } from "viem" + +import "../../global.css" +import { cn, shortenAddress } from "../../lib/utils" +import { IpAssetProvider, useIpAssetContext } from "../../providers" +import { IpGraph } from "../IpGraph" +import { IpPolicyAccordion } from "../IpPolicyAccordion" +import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" +import "./styles.css" + +export type IpWidgetProps = { + ipId: Address + isBottomNav?: boolean +} + +export const IPA_CARD_TABS = [ + { id: "overview", label: "Overview" }, + { id: "licensing", label: "Licensing" }, + { id: "derivatives", label: "IP Graph" }, + { id: "royalty", label: "Royalty" }, +] + +const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { + return <IPAssetCardWrapper ipId={ipId} isBottomNav={isBottomNav} {...rest} /> +} + +function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { + const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) + + const _Tabs = () => ( + <div className={cn("skIpWidget__tabs", isBottomNav && "skIpWidget__tabs--bottom")}> + <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> + </div> + ) + + const _Card = () => ( + <div className="skIpWidget__card"> + <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> + </div> + ) + + return ( + <IpAssetProvider ipId={ipId} key={ipId}> + <div className="skIpWidget"> + {isBottomNav ? <_Card /> : <_Tabs />} + {isBottomNav ? <_Tabs /> : <_Card />} + </div> + </IpAssetProvider> + ) +} + +function Tabs({ + ipId, + activeTab, + setActiveTab, +}: { + ipId: Address + activeTab: string + setActiveTab: (tab: string) => void +}) { + return ( + <div className="skIpWidget__tabsContainer" id={ipId}> + <div className="skIpWidget__tabsInner"> + {IPA_CARD_TABS.map((tab) => ( + <button + key={`${ipId}-${tab.id}`} + onClick={() => setActiveTab(tab.id)} + className={cn("skIpWidget__tab", activeTab !== tab.id && "skIpWidget__tab--active")} + style={{ + WebkitTapHighlightColor: "transparent", + }} + > + {activeTab === tab.id && <span className="skIpWidget__activeTab" />} + {tab.label} + </button> + ))} + </div> + <button> + <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g clipPath="url(#clip0_235_3)"> + <mask + id="mask0_235_3" + style={{ maskType: "luminance" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="512" + height="512" + > + <path d="M512 0H0V512H512V0Z" fill="white" /> + </mask> + <g mask="url(#mask0_235_3)"> + <path + d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" + fill="black" + /> + </g> + </g> + <defs> + <clipPath id="clip0_235_3"> + <rect width="512" height="512" fill="white" /> + </clipPath> + </defs> + </svg> + </button> + </div> + ) +} + +function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { + switch (activeTab) { + case "overview": + return <IPAssetOverview isBottomNav={isBottomNav} /> + case "licensing": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <div className="skIpWidget__policyContainer"> + <IpPolicyAccordion size="small" /> + </div> + </IPAssetLayout> + ) + case "derivatives": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpGraph width={370} height={250} /> + </IPAssetLayout> + ) + case "royalty": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpRoyaltyPieChart /> + </IPAssetLayout> + ) + default: + return <IPAssetOverview /> + } +} + +function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { + return ( + <div className={cn("skIpWidget__ipAssetLayout", !isBottomNav && "skIpWidget__ipAssetLayout--topNav")}> + <IPAssetHeader /> + {children} + </div> + ) +} + +function IPAssetDropdownMenu() { + const { assetData } = useIpAssetContext() + return ( + <Menu as="div" className="skIpWidget__ipAssetDropdownMenu"> + <div> + <Menu.Button className="skIpWidget__ipAssetDropdownMenu__button"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + > + <circle cx="12" cy="12" r="1" /> + <circle cx="12" cy="5" r="1" /> + <circle cx="12" cy="19" r="1" /> + </svg> + </Menu.Button> + </div> + + <Transition + as={Fragment} + enter="transition ease-out duration-100" + enterFrom="transform opacity-0 scale-95" + enterTo="transform opacity-100 scale-100" + leave="transition ease-in duration-75" + leaveFrom="transform opacity-100 scale-100" + leaveTo="transform opacity-0 scale-95" + > + <Menu.Items className="skIpWidget__ipAssetDropdownMenu__items"> + {assetData?.rootIpIds?.[0]?.id && ( + <div className="skIpWidget__ipAssetDropdownMenu__rootIp"> + <p className="skIpWidget__ipAssetDropdownMenu__rootIp__title">Root IP</p> + <div className="skIpWidget__ipAssetDropdownMenu__rootIp__item"> + <img + src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} + alt={assetData?.rootIpIds?.[0]?.id as Address} + ></img> + <p>{shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)}</p> + </div> + </div> + )} + {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( + <div className="skIpWidget__ipAssetDropdownMenu__parentIp"> + <p className="skIpWidget__ipAssetDropdownMenu__parentIp__title">Parent IPs</p> + <div className="skIpWidget__ipAssetDropdownMenu__parentIp__item"> + <div className="skIpWidget__ipAssetDropdownMenu__parentIp__avatars"> + {assetData?.parentIpIds?.slice(0, 5).map((asset, index) => ( + <img + key={index} + style={{ + zIndex: ((assetData?.parentIpIds?.length as number) - index) * 10, + }} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className="skIpWidget__ipAssetDropdownMenu__parentIp__addresses"> + {assetData?.parentIpIds?.length === 1 + ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) + : `${assetData?.parentIpIds?.length} total `} + </p> + </div> + </div> + )} + {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( + <div className="skIpWidget__ipAssetDropdownMenu__childIp"> + <p className="skIpWidget__ipAssetDropdownMenu__childIp__title">Child IPs</p> + <div className="skIpWidget__ipAssetDropdownMenu__childIp__container"> + <div className="skIpWidget__ipAssetDropdownMenu__childIp__avatars"> + {assetData?.childIpIds?.slice(0, 5).map((asset, index) => ( + <img + key={index} + style={{ + zIndex: ((assetData?.childIpIds?.length as number) - index) * 5, + }} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className="skIpWidget__ipAssetDropdownMenu__childIp__addresses"> + {assetData?.childIpIds?.length === 1 + ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) + : `${assetData?.childIpIds?.length} total `} + </p> + </div> + </div> + )} + <div className="skIpWidget__ipAssetDropdownMenu__menu"> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <FaWandMagicSparkles className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + Remix + </a> + )} + </Menu.Item> + + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <SiOpensea className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + View on Opensea + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <TbLicense className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + Buy License + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <IoIosShareAlt className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + Share + </a> + )} + </Menu.Item> + </div> + </Menu.Items> + </Transition> + </Menu> + ) +} + +function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { + const { nftData, assetData } = useIpAssetContext() + return ( + <div className="skIpWidget__ipAssetHeader"> + <div className="skIpWidget__ipAssetHeader__inner"> + <div + className={cn("skIpWidget__ipAssetHeader__image", hideImage && "skIpWidget__ipAssetHeader__image--hidden")} + > + <img src={nftData?.image_url} /> + </div> + <div> + <div> + <h1 className="skIpWidget__ipAssetHeader__name"> + {assetData?.nftMetadata.name || nftData?.name || "Untitled"} + </h1> + <h2 className="skIpWidget__ipAssetHeader__owner"> + Owned by{" "} + <span className="skIpWidget__ipAssetHeader__owner__address"> + {shortenAddress(nftData?.owners[0].owner_address as string)} + </span> + </h2> + </div> + </div> + </div> + <IPAssetDropdownMenu /> + </div> + ) +} + +function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { + const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() + + const isLoading = isAssetDataLoading || isNftDataLoading + + const Title = () => + isLoading ? ( + <div className="skIpWidget__ipAssetOverview__titleLoading"> + <div></div> + <div></div> + </div> + ) : ( + <IPAssetHeader hideImage /> + ) + + const AssetImage = () => + isLoading ? ( + <div className="skIpWidget__ipAssetOverview__assetImage__loading"> + <div> + <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 18"> + <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> + </svg> + </div> + </div> + ) : ( + <div className="skIpWidget__ipAssetOverview__assetImage"> + <img src={nftData?.image_url} /> + </div> + ) + + const TitleBar = () => ( + <div + className={cn( + "skIpWidget__ipAssetOverview__titleBar", + isBottomNav && "skIpWidget__ipAssetOverview__titleBar--bottom" + )} + > + <Title /> + </div> + ) + + return ( + <div className="skIpWidget__ipAssetOverview"> + {isBottomNav && <TitleBar />} + <AssetImage /> + {!isBottomNav && <TitleBar />} + </div> + ) +} + +IpWidget.displayName = "IpWidget" + +export default IpWidget diff --git a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx new file mode 100644 index 0000000..c23faf9 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx @@ -0,0 +1,29 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import IpWidget from "../IpWidget" + +const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ + ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", + isBottomNav = false, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpWidget ipId={ipId} isBottomNav={isBottomNav} /> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx new file mode 100644 index 0000000..e7797aa --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx @@ -0,0 +1,34 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpWidgetStory from "./IpWidget.stories" + +<Meta of={IpWidgetStory} /> + +# IP Asset Widget + +IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. + +#### Example + +<Canvas of={IpWidgetStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. +- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx new file mode 100644 index 0000000..0385ca9 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx @@ -0,0 +1,41 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpWidget", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: { + isBottomNav: { control: "boolean", defaultValue: true }, + }, + args: {}, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx new file mode 100644 index 0000000..86d2dd2 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import IpWidget from "../IpWidget" + +describe("IpWidget", () => { + test("renders the IpWidget component", () => { + render(<IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} />) + }) +}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts new file mode 100644 index 0000000..00d52ff --- /dev/null +++ b/packages/storykit/src/components/IpWidget/index.ts @@ -0,0 +1 @@ +export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/IpWidget/styles.css b/packages/storykit/src/components/IpWidget/styles.css new file mode 100644 index 0000000..e120f5a --- /dev/null +++ b/packages/storykit/src/components/IpWidget/styles.css @@ -0,0 +1,218 @@ +.skIpWidget { + @apply flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg; + + .skIpWidget__card { + @apply flex size-full flex-auto flex-col p-2; + } + + .skIpWidget__tabs { + @apply w-full px-2 pt-2; + + &.skIpWidget__tabs--bottom { + @apply pb-2 pt-0; + } + + .skIpWidget__tabsContainer { + @apply flex space-x-1; + } + + .skIpWidget__tabsInner { + @apply flex w-full justify-between; + } + + .skIpWidget__tab { + @apply relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2; + + &.skIpWidget__tab--active { + @apply hover:text-black/60; + } + } + + .skIpWidget__activeTab { + @apply absolute inset-0 z-10 bg-white mix-blend-difference rounded-full; + } + } + + .skIpWidget__policyContainer { + @apply p-2; + + .skIpPolicyAccordion--no-policy { + @apply w-full items-center py-32; + } + } + + .skIpWidget__ipAssetLayout { + @apply flex gap-2 flex-col; + + .skIpWidget__ipAssetLayout--topNav { + @apply flex-col-reverse justify-between h-full flex-auto; + } + + .skIpRoyaltyPieChart--empty { + @apply w-full items-center py-32; + } + } + + .skIpWidget__ipAssetDropdownMenu { + @apply relative inline-block text-left; + + .skIpWidget__ipAssetDropdownMenu__button { + @apply inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm; + + svg { + @apply size-4 flex-none text-gray-600; + } + } + + .skIpWidget__ipAssetDropdownMenu__items { + @apply absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none; + } + + .skIpWidget__ipAssetDropdownMenu__rootIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__rootIp__title { + @apply text-xs text-slate-400; + } + + .skIpWidget__ipAssetDropdownMenu__rootIp__item { + @apply flex items-center; + + > img { + @apply relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white; + } + + > p { + @apply truncate text-sm text-gray-900; + } + } + } + + .skIpWidget__ipAssetDropdownMenu__parentIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__parentIp__title { + @apply text-xs text-slate-400; + } + + .skIpWidget__ipAssetDropdownMenu__parentIp__avatars { + @apply mr-3 -space-x-3; + + img { + @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; + } + } + .skIpWidget__ipAssetDropdownMenu__parentIp__addresses { + @apply truncate text-sm text-gray-900; + } + } + + .skIpWidget__ipAssetDropdownMenu__childIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__childIp__title { + @apply text-xs text-slate-400; + } + .skIpWidget__ipAssetDropdownMenu__childIp__container { + @apply flex items-center; + } + .skIpWidget__ipAssetDropdownMenu__childIp__avatars { + @apply mr-3 -space-x-3; + + img { + @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; + } + } + .skIpWidget__ipAssetDropdownMenu__childIp__addresses { + @apply truncate text-sm text-gray-900; + } + } + + .skIpWidget__ipAssetDropdownMenu__menu { + @apply py-1; + + .skIpWidget__ipAssetDropdownMenu__menu__link { + @apply flex items-center px-4 py-2 text-sm text-gray-700; + + .skIpWidget__ipAssetDropdownMenu__menu__icon { + @apply mr-3 size-5 text-gray-400; + } + + &.skIpWidget__ipAssetDropdownMenu__menu__link--active { + @apply bg-gray-100 text-gray-900; + + .skIpWidget__ipAssetDropdownMenu__menu__icon { + @apply text-gray-500; + } + } + } + } + } + + .skIpWidget__ipAssetHeader { + @apply flex w-full flex-row justify-between; + + .skIpWidget__ipAssetHeader__inner { + @apply flex w-full flex-row justify-start gap-2; + } + + .skIpWidget__ipAssetHeader__image { + &.skIpWidget__ipAssetHeader__image--hidden { + @apply hidden; + } + img { + @apply size-10 rounded-md object-cover; + } + } + .skIpWidget__ipAssetHeader__name { + @apply font-semibold; + } + .skIpWidget__ipAssetHeader__owner { + @apply text-xs; + .skIpWidget__ipAssetHeader__owner__address { + @apply text-slate-400; + } + } + } + + .skIpWidget__ipAssetOverview { + @apply flex w-full flex-col items-start justify-start; + + .skIpWidget__ipAssetOverview__titleBar { + @apply flex w-full flex-row justify-between pt-1; + + &.skIpWidget__ipAssetOverview__titleBar--bottom { + @apply pb-1 pt-0; + } + } + + .skIpWidget__ipAssetOverview__titleLoading { + @apply flex animate-pulse flex-col gap-2; + div:nth-child(1) { + @apply h-4 w-20 rounded bg-slate-200; + } + div:nth-child(2) { + @apply h-3 w-32 rounded bg-slate-200; + } + } + + .skIpWidget__ipAssetOverview__assetImage { + @apply flex w-full justify-center text-center; + + img { + @apply rounded-md object-contain; + } + } + .skIpWidget__ipAssetOverview__assetImage__loading { + @apply w-full animate-pulse py-1; + + > div { + @apply flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700; + + > svg { + @apply size-10 text-slate-100 dark:text-slate-600; + } + } + } + } +} diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts new file mode 100644 index 0000000..db39fd2 --- /dev/null +++ b/packages/storykit/src/components/index.ts @@ -0,0 +1,5 @@ +export * from "./Button" +export * from "./IpWidget" +export * from "./IpGraph" +export * from "./IpPolicyAccordion" +export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/declarations.d.ts b/packages/storykit/src/declarations.d.ts new file mode 100644 index 0000000..a5ad056 --- /dev/null +++ b/packages/storykit/src/declarations.d.ts @@ -0,0 +1,4 @@ +declare module "*.module.css" { + const classes: { [key: string]: string } + export default classes +} diff --git a/packages/storykit/src/global.css b/packages/storykit/src/global.css new file mode 100644 index 0000000..413f711 --- /dev/null +++ b/packages/storykit/src/global.css @@ -0,0 +1,67 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* @layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } +} */ diff --git a/packages/storykit/src/index.ts b/packages/storykit/src/index.ts new file mode 100644 index 0000000..6efd0b2 --- /dev/null +++ b/packages/storykit/src/index.ts @@ -0,0 +1,2 @@ +export * from "./components" +export * from "./providers" diff --git a/packages/storykit/src/lib/api.ts b/packages/storykit/src/lib/api.ts new file mode 100644 index 0000000..562f0cb --- /dev/null +++ b/packages/storykit/src/lib/api.ts @@ -0,0 +1,49 @@ +import { QueryOptions, ResourceType } from "./types" + +const API_BASE_URL = + process.env.STORYBOOK_API_BASE_URL || process.env.NEXT_PUBLIC_API_BASE_URL || process.env.API_BASE_URL || "" +const API_KEY = + process.env.STORYBOOK_STORY_PROTOCOL_X_API_KEY || + process.env.NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY || + process.env.STORY_PROTOCOL_X_API_KEY || + "" + +export async function getResource(resourceName: ResourceType, resourceId: string) { + try { + const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { + method: "GET", + headers: { + "Content-Type": "application/json", + "x-api-key": API_KEY as string, + "X-CHAIN": "sepolia", + }, + }) + if (res.ok) { + return res.json() + } + } catch (error) { + console.error(error) + } +} + +export async function listResource(resourceName: ResourceType, options?: QueryOptions) { + try { + const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": API_KEY as string, + "X-CHAIN": "sepolia", + }, + cache: "no-cache", + ...(options && { body: JSON.stringify({ options }) }), + }) + if (res.ok) { + return res.json() + } else { + return res + } + } catch (error) { + console.error(error) + } +} diff --git a/packages/storykit/src/lib/graph.ts b/packages/storykit/src/lib/graph.ts new file mode 100644 index 0000000..09852aa --- /dev/null +++ b/packages/storykit/src/lib/graph.ts @@ -0,0 +1,122 @@ +import { Asset } from "@/lib/types" +import { Address } from "viem" + +export interface GraphNode { + id: string + name: string + val: number + tokenContract?: string | Address + tokenId?: string + level?: number + isRoot?: boolean +} + +interface Link { + source: string + target: string +} + +export interface GraphData { + nodes: GraphNode[] + links: Link[] +} + +export function convertJsonToGraphFormat(ipAssets: Asset[]): GraphData { + const nodes: GraphNode[] = [] + const links: Link[] = [] + + // Map ids to their corresponding objects for quick access + const idToObjectMap: { [id: string]: Asset } = {} + for (const obj of ipAssets) { + idToObjectMap[obj.id] = obj + } + + // Create nodes + for (const asset of ipAssets) { + const nodeName = asset.nftMetadata.name || "Untitled" + const node: GraphNode = { + id: asset.id, + name: nodeName, + val: 1, + tokenContract: asset.nftMetadata.tokenContract, + } + nodes.push(node) + + // Create links + if (asset.childIpIds) { + for (const childId of asset.childIpIds) { + const childObj = idToObjectMap[childId.id] + if (childObj && childObj.parentIpIds) { + for (const parentObj of childObj.parentIpIds) { + links.push({ + source: parentObj.id, + target: childObj.id, + }) + } + } + } + } + } + + return { nodes, links } +} + +export function convertAssetToGraphFormat(jsonData: Asset): GraphData { + const rootIpId = jsonData.rootIpIds?.[0]?.id + const nodes: GraphNode[] = [] + const links: Link[] = [] + + // Create node for the main object + const mainNode: GraphNode = { + id: jsonData.id, + name: jsonData.nftMetadata.name || "Untitled", + tokenContract: jsonData.nftMetadata.tokenContract, + tokenId: jsonData.nftMetadata.tokenId, + val: 1, + level: 0, + isRoot: rootIpId === undefined, + } + nodes.push(mainNode) + + // Add all childIpIds to nodes array and create links + if (jsonData.childIpIds) { + for (const child of jsonData.childIpIds) { + const childNode: GraphNode = { + id: child.id, + name: child.nftMetadata.name || "Untitled", + tokenContract: child.nftMetadata.tokenContract, + tokenId: child.nftMetadata.tokenId, + val: 1, + level: 1, + } + nodes.push(childNode) + + links.push({ + source: jsonData.id, + target: child.id, + }) + } + } + + // Add all parentIpIds to nodes array and create links + if (jsonData.parentIpIds) { + for (const parent of jsonData.parentIpIds) { + const parentNode: GraphNode = { + id: parent.id, + name: parent.nftMetadata.name || "Untitled", + tokenContract: parent.nftMetadata.tokenContract, + tokenId: parent.nftMetadata.tokenId, + val: 1, + level: -1, // assuming parent is one level up + isRoot: parent.id === rootIpId, + } + nodes.push(parentNode) + links.push({ + source: parent.id, + target: jsonData.id, + }) + } + } + + return { nodes, links } +} diff --git a/packages/storykit/src/lib/simplehash/index.ts b/packages/storykit/src/lib/simplehash/index.ts new file mode 100644 index 0000000..3e28a76 --- /dev/null +++ b/packages/storykit/src/lib/simplehash/index.ts @@ -0,0 +1,39 @@ +import { Address } from "viem" + +import { CollectionMetadata, NFTMetadata, NFTWalletResponse } from "./types/simplehash" + +const createRequestOptions = (): RequestInit => ({ + method: "GET", + headers: { + accept: "application/json", + "X-API-KEY": + process.env.STORYBOOK_SIMPLE_HASH_API_KEY || + process.env.NEXT_PUBLIC_SIMPLE_HASH_API_KEY || + process.env.SIMPLE_HASH_API_KEY || + "", + }, +}) + +export const getNFTByTokenId = async (contractAddress: Address, tokenId: string): Promise<NFTMetadata> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/ethereum-sepolia/${contractAddress}/${tokenId}` + const response = await fetch(url, options) + const data = await response.json() + return data +} + +export const getCollectionByAddress = async (contractAddress: Address): Promise<CollectionMetadata> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/collections/ethereum-sepolia/${contractAddress}` + const response = await fetch(url, options) + const data = await response.json() + return data.collections[0] +} + +export const getNFTByWallet = async (walletAddress: Address): Promise<NFTWalletResponse> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/owners?chains=ethereum-sepolia&wallet_addresses=${walletAddress}` + const response = await fetch(url, options) + const data = await response.json() + return data +} diff --git a/packages/storykit/src/lib/simplehash/types/simplehash.d.ts b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts new file mode 100644 index 0000000..c3dc429 --- /dev/null +++ b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts @@ -0,0 +1,143 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export type NFTWalletResponse = { + next_cursor: string | null + next: string | null + previous: string | null + nfts: NFTMetadata[] +} + +export type NFTMetadata = { + nft_id: string + chain: string + contract_address: string + token_id: string + name: string + description: string + previews: { + image_small_url: string + image_medium_url: string + image_large_url: string + image_opengraph_url: string + blurhash: string + predominant_color: string + } + image_url: string + image_properties: { + width: number + height: number + size: number + mime_type: string + } + video_url: string | null + video_properties: any + audio_url: string | null + audio_properties: any + model_url: string | null + model_properties: any + other_url: string | null + other_properties: any + background_color: string | null + external_url: string | null + created_date: string + status: string + token_count: number + owner_count: number + owners: { + owner_address: string + quantity: number + quantity_string: string + first_acquired_date: string + last_acquired_date: string + }[] + contract: { + type: string + name: string + symbol: string + deployed_by: string + deployed_via_contract: string | null + owned_by: string + has_multiple_collections: boolean + } + collection: CollectionMetadata + last_sale: any + first_created: { + minted_to: string + quantity: number + quantity_string: string + timestamp: string + block_number: number + transaction: string + transaction_initiator: string + } + rarity: { + rank: number + score: number + unique_attributes: number + } + royalty: CollectionRoyalties[] + extra_metadata: { + attributes: { + trait_type: string + value: string + display_type: string | null + }[] + image_original_url: string + animation_original_url: string + metadata_original_url: string + } +} + +export type SPExtendedNFTMetadata = NFTMetadata & { + isRegistered?: boolean + ipId?: string +} + +export type CollectionResponse = { + next_cursor: string | null + next: string | null + previous: string | null + collections: CollectionMetadata[] +} + +export type CollectionMetadata = { + collection_id: string + name: string + description: string + image_url: string + banner_image_url: string + category: string + is_nsfw: boolean + external_url: string + twitter_username: string + discord_url: string + instagram_username: string + medium_username: string + telegram_url: string + marketplace_pages: MarketplacePage[] + metaplex_mint: string + metaplex_candy_machine: string + metaplex_first_verified_creator: string + floor_prices: any[] + top_bids: any[] + distinct_owner_count: number + distinct_nft_count: number + total_quantity: number + chains: string[] + top_contracts: string[] + collection_royalties: CollectionRoyalties[] +} + +export type MarketplacePage = { + marketplace_id: string + marketplace_name: string + marketplace_collection_id: string + collection_url: string + verified: boolean +} + +export type CollectionRoyalties = { + source: string + total_creator_fee_basis_points: number + recipients: any[] +} diff --git a/packages/storykit/src/lib/types.ts b/packages/storykit/src/lib/types.ts new file mode 100644 index 0000000..c5d6b4a --- /dev/null +++ b/packages/storykit/src/lib/types.ts @@ -0,0 +1,325 @@ +import { Address } from "viem" + +export const POLICY_TYPE = { + NON_COMMERCIAL_SOCIAL_REMIXING: "Non-Commercial Social Remixing", + COMMERCIAL_USE: "Commercial Use", + COMMERCIAL_REMIX: "Commercial Remix", + OPEN_DOMAIN: "Open Domain", + NO_DERIVATIVE: "No Derivative", +} + +export enum RESOURCE_TYPE { + ASSET = "assets", + COLLECTION = "collections", + DISPUTE = "disputes", + IPA_POLICY = "licenses/ip/terms", + LICENSE = "licenses/tokens", + LICENSE_MINT_FEES = "licenses/mintingfees", + LICENSE_OWNER = "licenses/owners", + MODULE = "modules", + PERMISSION = "permissions", + POLICY = "licenses/terms", + POLICY_FRAMEWORK = "licenses/templates", + ROYALTY = "royalties", + ROYALTY_PAY = "royalties/payments", + ROYALTY_POLICY = "royalties/policies", + ROYALTY_SPLIT = "royalties/splits", + TAGS = "tags", + TRANSACTION = "transactions", +} + +export type ResourceType = + | RESOURCE_TYPE.ASSET + | RESOURCE_TYPE.COLLECTION + | RESOURCE_TYPE.TRANSACTION + | RESOURCE_TYPE.LICENSE + | RESOURCE_TYPE.LICENSE_MINT_FEES + | RESOURCE_TYPE.LICENSE_OWNER + | RESOURCE_TYPE.MODULE + | RESOURCE_TYPE.POLICY + | RESOURCE_TYPE.PERMISSION + | RESOURCE_TYPE.POLICY_FRAMEWORK + | RESOURCE_TYPE.TAGS + | RESOURCE_TYPE.IPA_POLICY + | RESOURCE_TYPE.ROYALTY + | RESOURCE_TYPE.ROYALTY_PAY + | RESOURCE_TYPE.ROYALTY_POLICY + | RESOURCE_TYPE.ROYALTY_SPLIT + | RESOURCE_TYPE.DISPUTE + +export type PaginationOptions = { + limit?: number + offset?: number +} + +export type AssetFilterOptions = { + chainId?: string + metadataResolverAddress?: string + tokenContract?: string + tokenId?: string +} + +export type DisputeFilterOptions = { + currentTag?: string + initiator?: string + targetIpId?: string + targetTag?: string +} + +export type PermissionFilterOptions = { + signer?: string + to?: string +} + +export type PolicyFilterOptions = { + policyFrameworkManager?: string +} + +export type PolicyFrameworkFilterOptions = { + address?: string + name?: string +} + +export type RoyaltyFilterOptions = { + ipId?: string | null + royaltyPolicy?: string | null +} + +export type TagFilterOptions = { + ipId?: string + tag?: string +} +export type RoyaltyPayFilterOptions = { + ipId?: string + payerIpId?: string + receiverIpId?: string + sender?: string + token?: string +} + +export type ModuleFilterOptions = { + name?: string +} + +export type LicenseFilterOptions = { + licensorIpdId?: Address + policyId?: string +} + +export type LicenseFrameworkFilterOptions = { + creator?: string +} + +export type LicenseOwnerFilterOptions = { + owner?: string +} + +export type IPAPolicyFilterOptions = { + active?: string + inherited?: string + policyId?: string +} + +export type TransactionFilterOptions = { + actionType?: string + resourceId?: string +} + +export type FilterOptions = + | AssetFilterOptions + | DisputeFilterOptions + | PermissionFilterOptions + | PolicyFilterOptions + | PolicyFrameworkFilterOptions + | RoyaltyFilterOptions + | TagFilterOptions + | RoyaltyPayFilterOptions + | ModuleFilterOptions + | LicenseFilterOptions + | LicenseFrameworkFilterOptions + | LicenseOwnerFilterOptions + | IPAPolicyFilterOptions + | TransactionFilterOptions + +export type QueryOptions = { + pagination: PaginationOptions + where?: FilterOptions +} + +export type Transaction = { + id: string + createdAt: string + actionType: string + initiator: Address + ipId: Address + resourceId: Address + resourceType: string +} + +export type Asset = { + id: Address + parentIpIds: Asset[] | null + childIpIds: Asset[] | null + rootIpIds: Asset[] | null + nftMetadata: { + name: string + chainId: string + tokenContract: Address + tokenId: string + tokenUri: string + imageUrl: string + } + blockNumber: string + blockTimestamp: string +} + +export type Permission = { + id: string + permission: string + signer: Address + to: Address + func: string + blockNumber: string + blockTimestamp: string +} + +export type License = { + id: string + licensorIpId: Address + licenseTemplate: string + licenseTermsId: string + transferable: boolean + owner: Address + mintedAt: string + expiresAt: string + burntAt: string + blockNumber: string + blockTime: string +} + +export type PolicyFramework = { + id: string + name: string + metadataUri: string + blockNumber: string + blockTime: string +} + +export type Module = { + id: string + name: string + module: string + blockNumber: string + blockTimestamp: string + deletedAt: string +} + +export type Tag = { + id: string + uuid: string + ipId: Address + tag: string + deletedAt: string + blockNumber: string + blockTimestamp: string +} + +export type IPAPolicy = { + id: string + ipId: Address + licenseTemplate: string + licenseTermsId: string + blockNumber: string + blockTime: string +} + +export type RoyaltyPay = { + id: string + receiverIpId: Address + payerIpId: Address + sender: Address + token: Address + amount: string + blockNumber: string + blockTimestamp: string +} + +export type Royalty = { + id: string + ipId: Address + data: string + royaltyPolicy: Address + blockNumber: string + blockTimestamp: string +} + +export type RoyaltyPolicy = { + id: Address + ancestorsVault: Address + splitClone: Address + royaltyStack: string + targetAncestors: Address[] + targetRoyaltyAmount: string[] + blockNumber: string + blockTimestamp: string +} + +export type Dispute = { + id: string + targetIpId: Address + targetTag: Address + currentTag: Address + arbitrationPolicy: Address + evidenceLink: string + initiator: Address + data: string + blockNumber: string + blockTimestamp: string +} + +export type Collection = { + id: string + assetCount: string + licensesCount: string + resolvedDisputeCount: string + cancelledDisputeCount: string + raisedDisputeCount: string + judgedDisputeCount: string + blockNumber: string + blockTimestamp: string +} + +export type Policy = { + id: string + json: string + licenseTemplate: Address + blockNumber: string + blockTime: string +} + +export type PILType = { + commercialAttribution: boolean + commercialRevenueCelling: number + commercialRevenueShare: number + commercialUse: boolean + commercializerCheck: Address + currency: Address + derivativesAllowed: boolean + derivativesApproval: boolean + derivativesAttribution: boolean + derivativesReciprocal: boolean + derivativesRevenueCelling: number + expiration: string + URI: string +} + +export type RoyaltySplit = { + id: Address + holders: RoyaltyHolder[] + claimFromIPPoolArg: string +} + +export type RoyaltyHolder = { + id: Address + ownership: string +} diff --git a/packages/storykit/src/lib/utils.ts b/packages/storykit/src/lib/utils.ts new file mode 100644 index 0000000..4d6d29e --- /dev/null +++ b/packages/storykit/src/lib/utils.ts @@ -0,0 +1,51 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +import { PILType, POLICY_TYPE } from "./types" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} + +export function shortenAddress(address: string, length = 4): string { + if (!address) { + return "" + } + if (address.length < 2 * length + 2) { + // Check if the address is too short to be shortened. + return address + } + + const start = address.substring(0, length + 2) + const end = address.substring(address.length - length) + return `${start}...${end}` +} + +export function camelize(str: string) { + return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) { + if (+match === 0) return "" // or if (/\s+/.test(match)) for white spaces + return index === 0 ? match.toLowerCase() : match.toUpperCase() + }) +} + +export function getPolicyTypeByPILData(pilData: PILType) { + const { derivativesAttribution, derivativesAllowed, commercialUse, derivativesReciprocal } = pilData + + if (commercialUse) { + if (!derivativesReciprocal) { + return POLICY_TYPE.COMMERCIAL_USE + } else { + return POLICY_TYPE.COMMERCIAL_REMIX + } + } else { + if (!derivativesAllowed) { + return POLICY_TYPE.NO_DERIVATIVE + } else { + if (derivativesAttribution) { + return POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING + } else { + return POLICY_TYPE.OPEN_DOMAIN + } + } + } +} diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx new file mode 100644 index 0000000..3375937 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx @@ -0,0 +1,153 @@ +import { useQuery } from "@tanstack/react-query" +import React from "react" +import { Address } from "viem" + +import { getResource, listResource } from "../../lib/api" +import { getNFTByTokenId } from "../../lib/simplehash" +import { NFTMetadata } from "../../lib/simplehash/types/simplehash" +import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" +import { camelize } from "../../lib/utils" + +const IpAssetContext = React.createContext<{ + // activeTab: string + // setActiveTab: React.Dispatch<React.SetStateAction<string>> + assetData: Asset | undefined + nftData: NFTMetadata | undefined + isNftDataLoading: boolean + isAssetDataLoading: boolean + ipPolicyData: IPAPolicy[] | undefined + isIPAPolicyDataLoading: boolean + policyData: Policy[] | undefined + isPolicyDataLoading: boolean + licenseData: License[] | undefined + isLicenseDataLoading: boolean + royaltyData: RoyaltyPolicy | undefined + isRoyaltyDataLoading: boolean +} | null>(null) + +export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { + // Fetch asset data + const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ + queryKey: [RESOURCE_TYPE.ASSET, ipId], + queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), + }) + + const ipaPolicyQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + } + // Fetch IPPolicy data + const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ + queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), + }) + + async function fetchPolicyDetails(data: IPAPolicy[]) { + const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) + + const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) + const results = await Promise.all(requests) + + return results.map((result) => { + return { + ...result.data, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { + return { + ...acc, + [camelize(option.trait_type)]: + option.value === "true" ? true : option.value === "false" ? false : option.value, + } + }, {}), + } + }) + } + + const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ + queryKey: ["fetchPolicyDetails", ipPolicyData?.data], + queryFn: () => fetchPolicyDetails(ipPolicyData?.data), + enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), + }) + + const licenseQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + licensorIpdId: ipId, + }, + } + // Fetch License Data + const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ + queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), + }) + + // Fetch Royalty Data + const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ + queryKey: [ + RESOURCE_TYPE.ROYALTY_POLICY, + { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + }, + ], + queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), + }) + + // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], + // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), + // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + // }) + const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], + queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), + enabled: + Boolean(assetData) && + Boolean(assetData.data.nftMetadata.tokenContract) && + Boolean(assetData.data.nftMetadata.tokenId), + }) + + return ( + <IpAssetContext.Provider + value={{ + // activeTab, + // setActiveTab, + nftData, + isNftDataLoading, + assetData: assetData?.data, + isAssetDataLoading, + ipPolicyData: ipPolicyData?.data, + isIPAPolicyDataLoading, + policyData: policyData, + isPolicyDataLoading, + licenseData: licenseData?.data, + isLicenseDataLoading, + royaltyData: royaltyData?.data, + isRoyaltyDataLoading, + }} + > + {children} + </IpAssetContext.Provider> + ) +} + +export const useIpAssetContext = () => { + const context = React.useContext(IpAssetContext) + if (!context) { + throw new Error("useAccount must be used within an IpAssetProvider") + } + return context +} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx new file mode 100644 index 0000000..a84a01b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx @@ -0,0 +1,59 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" + +const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpAssetProvider ipId={ipId}> + <ExampleComponent /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + return ( + <> + {isNftDataLoading && <div>Fetching Asset...</div>} + {nftData && !isNftDataLoading ? ( + <div className="grid grid-cols-4 gap-4"> + <> + <div className="col-span-1 text-xs text-gray-600">nft_id</div> + <div className="col-span-3 text-sm">{nftData.nft_id}</div> + + <div className="col-span-1 text-xs text-gray-600">chain</div> + <div className="col-span-3 text-sm">{nftData.chain}</div> + + <div className="col-span-1 text-xs text-gray-600">contract_address</div> + <div className="col-span-3 text-sm">{nftData.contract_address}</div> + + <div className="col-span-1 text-xs text-gray-600">token_id</div> + <div className="col-span-3 text-sm">{nftData.token_id}</div> + + <div className="col-span-1 text-xs text-gray-600">name</div> + <div className="col-span-3 text-sm">{nftData.name}</div> + + <div className="col-span-1 text-xs text-gray-600">description</div> + <div className="col-span-3 text-sm">{nftData.description}</div> + </> + </div> + ) : null} + </> + ) +} + +export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx new file mode 100644 index 0000000..cbfbf01 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx @@ -0,0 +1,79 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpAssetProviderStory from "./IpAssetProvider.stories" + +<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> + +# IpAssetProvider + +Provides IP Asset data to children components. + +#### Example + +<Canvas of={IpAssetProviderStory.Select} /> + +<Controls /> + +## Usage + +```ts +// wrap your component with the IpAssetProvider + +import { IpAssetProvider } from "@storyprotocol/storykit" +import ExampleComponent from './ExampleComponent' + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +```ts +// in your component file, context provides IP asset state + +import { useIpAssetContext } from "@storyprotocol/storykit" + +const ExampleComponent = () => { + + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; + +export default ExampleComponent; +``` + +#### Provider data + +The IpAssetProvider provides the following data to its children: + +- **assetData** - The IP Asset data. +- **isAssetDataLoading** - IP Asset data loading state. +- **nftData** - The NFT Metadata. +- **isNftDataLoading** - NFT Metadata loading state. +- **ipPolicyData** - Policies attached to the IP Asset. +- **isIPAPolicyDataLoading** - Policy data loading state. +- **policyData** - The Policy details including the template id, address and terms. +- **isPolicyDataLoading** - Policy data loading state. +- **licenseData** - IP Asset minted Licenses. +- **isLicenseDataLoading** - License data loading state. +- **royaltyData** - The Royalty Policy data. +- **isRoyaltyDataLoading** - Royalty Policy data loading state. + +#### Arguments + +- **children** - The child component to provide the IP Asset context to. +- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx new file mode 100644 index 0000000..cd7231b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx @@ -0,0 +1,49 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Providers/IpAssetProvider", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + // argTypes: {}, + // argTypes: { + // ipId: { + // options: [ + // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", + // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", + // ], + // // control: { type: "select" }, // Automatically inferred when 'options' is defined + // }, + // }, + // args: { + // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // }, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/index.tsx @@ -0,0 +1 @@ +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/index.ts @@ -0,0 +1 @@ +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx new file mode 100644 index 0000000..8d5a16c --- /dev/null +++ b/packages/storykit/src/stories/Introduction.mdx @@ -0,0 +1,201 @@ +import { Meta } from "@storybook/blocks" + +<Meta title="Introduction" /> + +# Storykit + +Plug-and-play React components for Story Protocol. + +## Installation + +_Storykit is a private package so you need repo access and a personal access token to use_ + +1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) + +2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: + +```bash +//npm.pkg.github.com/:_authToken=NPM_TOKEN +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +3 . Add `.npmrc` to your `.gitignore` to keep your access token private. + +4 . Install the package and the required dependencies: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query +``` + +## Deploying on vercel + +To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: + +```bash +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +OR... + +You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. + +See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. + +## Dependencies + +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. + +Some components have additional dependencies including: + +- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) +- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) + +See the individual component docs ro see if they require an additional dependency or install them all at once with: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d +``` + +## Run locally + +### Storybook + +Run Storybook locally for component development and documentation: + +```bash +pnpm dev +``` + +Find the Storybook at [http://localhost:6006](http://localhost:6006) + +### Example app + +Run the next.js [example app](../examples/next-app/): + +```bash +pnpm build +pnpm dev-example +``` + +The dev server will be running at [http://localhost:3000](http://localhost:3000) + +### Linting and formatting + +Lint with eslint: + +```bash +pnpm lint +``` + +Format with prettier: + +```bash +pnpm format +``` + +## Usage + +Using Storykit in your React app + +### Include React Query + +React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. + +```typescript +// app/layout.tsx + +import Providers from "./Providers" + +export default function Layout({children}) { + return ( + <html> + <body> + <Providers>{children}</Providers> + </body> + </html> + ) +} +``` + +```typescript +// app/Providers.tsx + +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export default function Providers({ children }) { + return ( + <QueryClientProvider client={queryClient}> + {children} + </QueryClientProvider> + ) +} + +``` + +### The IpAssetProvider + +The IpAssetProvider provides IP Asset data to child components. + +```typescript +import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; +``` + +### The IpGraph + +Some components require the IpAssetProvider to supply asset data + +```typescript +import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; +``` + +### The IpWidget + +The IpAssetProvider is already included in the IpWidget + +```typescript +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ) +} + +``` + +See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/packages/storykit/src/stories/data/index.ts b/packages/storykit/src/stories/data/index.ts new file mode 100644 index 0000000..ec9074b --- /dev/null +++ b/packages/storykit/src/stories/data/index.ts @@ -0,0 +1,8 @@ +export const PREVIEW_IP_ASSETS = [ + "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", + "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", + "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", + "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", + "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", + "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", +] diff --git a/packages/storykit/tailwind.config.js b/packages/storykit/tailwind.config.js new file mode 100644 index 0000000..6211183 --- /dev/null +++ b/packages/storykit/tailwind.config.js @@ -0,0 +1,72 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + // extend: { + // colors: { + // border: "hsl(var(--border))", + // input: "hsl(var(--input))", + // ring: "hsl(var(--ring))", + // background: "hsl(var(--background))", + // foreground: "hsl(var(--foreground))", + // primary: { + // DEFAULT: "hsl(var(--primary))", + // foreground: "hsl(var(--primary-foreground))", + // }, + // secondary: { + // DEFAULT: "hsl(var(--secondary))", + // foreground: "hsl(var(--secondary-foreground))", + // }, + // destructive: { + // DEFAULT: "hsl(var(--destructive))", + // foreground: "hsl(var(--destructive-foreground))", + // }, + // muted: { + // DEFAULT: "hsl(var(--muted))", + // foreground: "hsl(var(--muted-foreground))", + // }, + // accent: { + // DEFAULT: "hsl(var(--accent))", + // foreground: "hsl(var(--accent-foreground))", + // }, + // popover: { + // DEFAULT: "hsl(var(--popover))", + // foreground: "hsl(var(--popover-foreground))", + // }, + // card: { + // DEFAULT: "hsl(var(--card))", + // foreground: "hsl(var(--card-foreground))", + // }, + // }, + // borderRadius: { + // lg: "var(--radius)", + // md: "calc(var(--radius) - 2px)", + // sm: "calc(var(--radius) - 4px)", + // }, + // keyframes: { + // "accordion-down": { + // from: { height: "0" }, + // to: { height: "var(--radix-accordion-content-height)" }, + // }, + // "accordion-up": { + // from: { height: "var(--radix-accordion-content-height)" }, + // to: { height: "0" }, + // }, + // }, + // animation: { + // "accordion-down": "accordion-down 0.2s ease-out", + // "accordion-up": "accordion-up 0.2s ease-out", + // }, + // }, + }, + plugins: [require("tailwindcss-animate")], +} diff --git a/packages/storykit/tsconfig.json b/packages/storykit/tsconfig.json new file mode 100644 index 0000000..ca92804 --- /dev/null +++ b/packages/storykit/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@storykit/typescript-config/react-library.json", + "include": ["src"], + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["dist", "build", "node_modules"] +} From 564c51fc8c16ac2226c108cc223aee66d43b6927 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:37:41 -0700 Subject: [PATCH 68/74] archive package --- .eslintrc.js | 7 - .github/workflows/publish-package.yml | 36 - .husky/pre-commit | 4 - .nvmrc | 1 - .prettierignore | 6 - README.md | 201 - examples/next-app/.eslintrc.js | 9 - examples/next-app/.gitignore | 36 - examples/next-app/README.md | 36 - examples/next-app/app/layout.tsx | 21 - examples/next-app/app/page.tsx | 10 - examples/next-app/components/HomePage.tsx | 55 - examples/next-app/components/home.module.css | 22 - examples/next-app/next.config.mjs | 6 - examples/next-app/package.json | 34 - examples/next-app/tsconfig.json | 30 - package.json | 27 - packages/config-eslint/README.md | 3 - packages/config-eslint/library.js | 34 - packages/config-eslint/next.js | 35 - packages/config-eslint/package.json | 19 - packages/config-eslint/react-internal.js | 58 - packages/config-prettier/index.json | 10 - packages/config-prettier/package.json | 13 - packages/config-typescript/base.json | 20 - packages/config-typescript/nextjs.json | 21 - packages/config-typescript/package.json | 9 - packages/config-typescript/react-library.json | 13 - packages/storykit/.eslintrc.cjs | 13 - packages/storykit/.gitignore | 30 - .../storykit/.storybook/assets/story-logo.png | Bin 16720 -> 0 bytes packages/storykit/.storybook/global.css | 7 - packages/storykit/.storybook/main.ts | 33 - .../storykit/.storybook/manager-head.html | 1 - packages/storykit/.storybook/manager.ts | 7 - packages/storykit/.storybook/preview.ts | 34 - packages/storykit/.storybook/theme.ts | 42 - packages/storykit/package.json | 108 - packages/storykit/postcss.config.cjs | 7 - packages/storykit/rollup.config.js | 54 - .../components/Button/Button-css-modules.tsx | 45 - .../storykit/src/components/Button/Button.tsx | 44 - .../src/components/Button/__docs__/Button.mdx | 37 - .../Button/__docs__/Button.stories.tsx | 35 - .../Button/__tests__/Button.test.tsx | 9 - .../storykit/src/components/Button/index.ts | 1 - .../storykit/src/components/Button/styles.css | 21 - .../src/components/Button/styles.module.css | 21 - .../src/components/IpGraph/IpGraph.tsx | 90 - .../components/IpGraph/__docs__/Example.tsx | 26 - .../components/IpGraph/__docs__/IpGraph.mdx | 45 - .../IpGraph/__docs__/IpGraph.stories.tsx | 38 - .../storykit/src/components/IpGraph/index.ts | 1 - .../src/components/IpGraph/styles.css | 3 - .../IpPolicyAccordion/IpPolicyAccordion.tsx | 144 - .../IpPolicyAccordion/__docs__/Example.tsx | 27 - .../__docs__/IpPolicyAccordion.mdx | 32 - .../__docs__/IpPolicyAccordion.stories.tsx | 40 - .../components/IpPolicyAccordion/index.tsx | 1 - .../components/IpPolicyAccordion/styles.css | 70 - .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 104 - .../IpRoyaltyPieChart/__docs__/Example.tsx | 22 - .../__docs__/IpRoyaltyPieChart.mdx | 40 - .../__docs__/IpRoyaltyPieChart.stories.tsx | 38 - .../components/IpRoyaltyPieChart/index.tsx | 1 - .../components/IpRoyaltyPieChart/styles.css | 30 - .../src/components/IpWidget/IpWidget.tsx | 394 - .../components/IpWidget/__docs__/Example.tsx | 29 - .../components/IpWidget/__docs__/IpWidget.mdx | 34 - .../IpWidget/__docs__/IpWidget.stories.tsx | 41 - .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 - .../storykit/src/components/IpWidget/index.ts | 1 - .../src/components/IpWidget/styles.css | 218 - packages/storykit/src/components/index.ts | 5 - packages/storykit/src/declarations.d.ts | 4 - packages/storykit/src/global.css | 67 - packages/storykit/src/index.ts | 2 - packages/storykit/src/lib/api.ts | 49 - packages/storykit/src/lib/graph.ts | 122 - packages/storykit/src/lib/simplehash/index.ts | 39 - .../src/lib/simplehash/types/simplehash.d.ts | 143 - packages/storykit/src/lib/types.ts | 325 - packages/storykit/src/lib/utils.ts | 51 - .../IpAssetProvider/IpAssetProvider.tsx | 153 - .../IpAssetProvider/__docs__/Example.tsx | 59 - .../__docs__/IpAssetProvider.mdx | 79 - .../__docs__/IpAssetProvider.stories.tsx | 49 - .../src/providers/IpAssetProvider/index.tsx | 1 - packages/storykit/src/providers/index.ts | 1 - .../storykit/src/stories/Introduction.mdx | 201 - packages/storykit/src/stories/data/index.ts | 8 - packages/storykit/tailwind.config.js | 72 - packages/storykit/tsconfig.json | 10 - pnpm-lock.yaml | 17293 ---------------- pnpm-workspace.yaml | 3 - turbo.json | 20 - 96 files changed, 21559 deletions(-) delete mode 100644 .eslintrc.js delete mode 100644 .github/workflows/publish-package.yml delete mode 100644 .husky/pre-commit delete mode 100644 .nvmrc delete mode 100644 .prettierignore delete mode 100644 README.md delete mode 100644 examples/next-app/.eslintrc.js delete mode 100644 examples/next-app/.gitignore delete mode 100644 examples/next-app/README.md delete mode 100644 examples/next-app/app/layout.tsx delete mode 100644 examples/next-app/app/page.tsx delete mode 100644 examples/next-app/components/HomePage.tsx delete mode 100644 examples/next-app/components/home.module.css delete mode 100644 examples/next-app/next.config.mjs delete mode 100644 examples/next-app/package.json delete mode 100644 examples/next-app/tsconfig.json delete mode 100644 package.json delete mode 100644 packages/config-eslint/README.md delete mode 100644 packages/config-eslint/library.js delete mode 100644 packages/config-eslint/next.js delete mode 100644 packages/config-eslint/package.json delete mode 100644 packages/config-eslint/react-internal.js delete mode 100644 packages/config-prettier/index.json delete mode 100644 packages/config-prettier/package.json delete mode 100644 packages/config-typescript/base.json delete mode 100644 packages/config-typescript/nextjs.json delete mode 100644 packages/config-typescript/package.json delete mode 100644 packages/config-typescript/react-library.json delete mode 100644 packages/storykit/.eslintrc.cjs delete mode 100644 packages/storykit/.gitignore delete mode 100644 packages/storykit/.storybook/assets/story-logo.png delete mode 100644 packages/storykit/.storybook/global.css delete mode 100644 packages/storykit/.storybook/main.ts delete mode 100644 packages/storykit/.storybook/manager-head.html delete mode 100644 packages/storykit/.storybook/manager.ts delete mode 100644 packages/storykit/.storybook/preview.ts delete mode 100644 packages/storykit/.storybook/theme.ts delete mode 100644 packages/storykit/package.json delete mode 100644 packages/storykit/postcss.config.cjs delete mode 100644 packages/storykit/rollup.config.js delete mode 100644 packages/storykit/src/components/Button/Button-css-modules.tsx delete mode 100644 packages/storykit/src/components/Button/Button.tsx delete mode 100644 packages/storykit/src/components/Button/__docs__/Button.mdx delete mode 100644 packages/storykit/src/components/Button/__docs__/Button.stories.tsx delete mode 100644 packages/storykit/src/components/Button/__tests__/Button.test.tsx delete mode 100644 packages/storykit/src/components/Button/index.ts delete mode 100644 packages/storykit/src/components/Button/styles.css delete mode 100644 packages/storykit/src/components/Button/styles.module.css delete mode 100644 packages/storykit/src/components/IpGraph/IpGraph.tsx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx delete mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx delete mode 100644 packages/storykit/src/components/IpGraph/index.ts delete mode 100644 packages/storykit/src/components/IpGraph/styles.css delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx delete mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx delete mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/styles.css delete mode 100644 packages/storykit/src/components/IpWidget/IpWidget.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/Example.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx delete mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx delete mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx delete mode 100644 packages/storykit/src/components/IpWidget/index.ts delete mode 100644 packages/storykit/src/components/IpWidget/styles.css delete mode 100644 packages/storykit/src/components/index.ts delete mode 100644 packages/storykit/src/declarations.d.ts delete mode 100644 packages/storykit/src/global.css delete mode 100644 packages/storykit/src/index.ts delete mode 100644 packages/storykit/src/lib/api.ts delete mode 100644 packages/storykit/src/lib/graph.ts delete mode 100644 packages/storykit/src/lib/simplehash/index.ts delete mode 100644 packages/storykit/src/lib/simplehash/types/simplehash.d.ts delete mode 100644 packages/storykit/src/lib/types.ts delete mode 100644 packages/storykit/src/lib/utils.ts delete mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx delete mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx delete mode 100644 packages/storykit/src/providers/index.ts delete mode 100644 packages/storykit/src/stories/Introduction.mdx delete mode 100644 packages/storykit/src/stories/data/index.ts delete mode 100644 packages/storykit/tailwind.config.js delete mode 100644 packages/storykit/tsconfig.json delete mode 100644 pnpm-lock.yaml delete mode 100644 pnpm-workspace.yaml delete mode 100644 turbo.json diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 696cd38..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -// This configuration only applies to the package manager root. -/** @type {import("eslint").Linter.Config} */ -module.exports = { - root: true, - extends: ["@storykit/eslint-config/library.js"], - ignorePattern: ["apps/**", "packages/**"], -}; diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml deleted file mode 100644 index 5fb5cd2..0000000 --- a/.github/workflows/publish-package.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: publish on github - -on: - push: - branches: - - main - -jobs: - publish-gpr: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - uses: pnpm/action-setup@v2.0.1 - with: - version: 8.8.0 - - - uses: actions/setup-node@v1 - with: - node-version: 20.0.0 - cache: pnpm - registry-url: https://npm.pkg.github.com/ - scope: "@storyprotocol" - - - name: Install dependencies - run: pnpm install - - - name: Build - run: pnpm build - - - name: Publish to npm - run: | - cd packages/storykit - npm publish - env: - NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 80480ad..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -pnpm exec lint-staged \ No newline at end of file diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 2edeafb..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -20 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 18d0e64..0000000 --- a/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -dist -node_modules -coverage -examples -.next -*.hbs \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index c952590..0000000 --- a/README.md +++ /dev/null @@ -1,201 +0,0 @@ -import { Meta } from "@storybook/blocks" - -<Meta title="Introduction" /> - -# Storykit - -Plug-and-play React components for Story Protocol. - -## Installation - -_Storykit is a private package so you need repo access and a personal access token to use_ - -1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) - -2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: - -```bash -//npm.pkg.github.com/:_authToken=NPM_TOKEN -@storyprotocol/storykit:registry=https://npm.pkg.github.com -``` - -3 . Add `.npmrc` to your `.gitignore` to keep your access token private. - -4 . Install the package and the required dependencies: - -```bash -npm install @storyprotocol/storykit @tanstack/react-query -``` - -## Deploying on vercel - -To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: - -```bash -//npm.pkg.github.com/:_authToken=${NPM_TOKEN} -@storyprotocol/storykit:registry=https://npm.pkg.github.com -``` - -#### OR... - -You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. - -See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. - -## Dependencies - -Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. - -Some components have additional dependencies including: - -- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) -- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) - -See the individual component docs ro see if they require an additional dependency or install them all at once with: - -```bash -npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d -``` - -## Run locally - -### Storybook - -Run Storybook locally for component development and documentation: - -```bash -pnpm dev -``` - -Find the Storybook at [http://localhost:6006](http://localhost:6006) - -### Example app - -Run the next.js [example app](./examples/next-app/): - -```bash -pnpm build -pnpm dev-example -``` - -The dev server will be running at [http://localhost:3000](http://localhost:3000) - -### Linting and formatting - -Lint with eslint: - -```bash -pnpm lint -``` - -Format with prettier: - -```bash -pnpm format -``` - -## Usage - -Using Storykit in your React app - -### Include React Query - -React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. - -```typescript -// app/layout.tsx - -import Providers from "./Providers" - -export default function Layout({children}) { - return ( - <html> - <body> - <Providers>{children}</Providers> - </body> - </html> - ) -} -``` - -```typescript -// app/Providers.tsx - -"use client" - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" - -const queryClient = new QueryClient() - -export default function Providers({ children }) { - return ( - <QueryClientProvider client={queryClient}> - {children} - </QueryClientProvider> - ) -} - -``` - -### The IpAssetProvider - -The IpAssetProvider provides IP Asset data to child components. - -```typescript -import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; -``` - -### The IpGraph - -Some components require the IpAssetProvider to supply asset data - -```typescript -import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpGraph /> - </IpAssetProvider> - ); -}; -``` - -### The IpWidget - -The IpAssetProvider is already included in the IpWidget - -```typescript -import { IpWidget } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> - ) -} - -``` - -See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/examples/next-app/.eslintrc.js b/examples/next-app/.eslintrc.js deleted file mode 100644 index 044ac2f..0000000 --- a/examples/next-app/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {import("eslint").Linter.Config} */ -module.exports = { - root: true, - extends: ["@storykit/eslint-config/next.js"], - parser: "@typescript-eslint/parser", - // parserOptions: { - // project: true, - // }, -} diff --git a/examples/next-app/.gitignore b/examples/next-app/.gitignore deleted file mode 100644 index fd3dbb5..0000000 --- a/examples/next-app/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/examples/next-app/README.md b/examples/next-app/README.md deleted file mode 100644 index c403366..0000000 --- a/examples/next-app/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/examples/next-app/app/layout.tsx b/examples/next-app/app/layout.tsx deleted file mode 100644 index a9c3268..0000000 --- a/examples/next-app/app/layout.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import type { Metadata } from "next" -import { Inter } from "next/font/google" - -const inter = Inter({ subsets: ["latin"] }) - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -} - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode -}>) { - return ( - <html lang="en"> - <body className={inter.className}>{children}</body> - </html> - ) -} diff --git a/examples/next-app/app/page.tsx b/examples/next-app/app/page.tsx deleted file mode 100644 index abb3363..0000000 --- a/examples/next-app/app/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ - -import HomePage from "../components/HomePage" - -export default function Home() { - return ( - <div> - <HomePage /> - </div> - ) -} diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx deleted file mode 100644 index 1c84e5d..0000000 --- a/examples/next-app/components/HomePage.tsx +++ /dev/null @@ -1,55 +0,0 @@ -"use client" - -import { IpAssetProvider, useIpAssetContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph, Button } from "@storyprotocol/storykit" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React from "react" - -import styles from "./home.module.css" - -const queryClient = new QueryClient() - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - return ( - <> - {isNftDataLoading && <div>Fetching Asset...</div>} - {nftData && !isNftDataLoading ? <p>nft_id: {nftData?.nft_id}</p> : null} - </> - ) -} - -export default function Home() { - return ( - <> - <QueryClientProvider client={queryClient}> - <main className={styles.main}> - - <IpAssetProvider ipId="0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"> - <div className={`${styles.block} ${styles.padded}`}> - <IpPolicyAccordion size="medium" /> - </div> - </IpAssetProvider> - - {/* <Button variant="primary" size="medium">Primary Button</Button> */} - - <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> - <div className={`${styles.block} ${styles.padded}`}> - <ExampleComponent /> - </div> - <div className={`${styles.block} ${styles.padded}`}> - <IpRoyaltyPieChart /> - </div> - </IpAssetProvider> - - <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> - <div className={styles.block}> - <IpGraph width={400} height={300} /> - </div> - </IpAssetProvider> - - <IpWidget ipId={"0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"} /> - </main> - </QueryClientProvider> - </> - ) -} diff --git a/examples/next-app/components/home.module.css b/examples/next-app/components/home.module.css deleted file mode 100644 index ee1e8e6..0000000 --- a/examples/next-app/components/home.module.css +++ /dev/null @@ -1,22 +0,0 @@ -.main { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 1rem; - width: 100%; - padding: 4rem 0; -} - -.block { - background-color: #f9f9f9; - border-radius: 0.5rem; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - border: 1px solid #ddd; - overflow: hidden; - -} - -.padded { - padding: 1rem; -} diff --git a/examples/next-app/next.config.mjs b/examples/next-app/next.config.mjs deleted file mode 100644 index 96254fc..0000000 --- a/examples/next-app/next.config.mjs +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - // transpilePackages: ["@storyprotocol/storykit"], -} - -export default nextConfig diff --git a/examples/next-app/package.json b/examples/next-app/package.json deleted file mode 100644 index 8215bf4..0000000 --- a/examples/next-app/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "next-app", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "prettier": "@storykit/prettier-config", - "dependencies": { - "@storyprotocol/storykit": "workspace:*", - "@tanstack/react-query": "^5.28.9", - "next": "14.1.4", - "react": "^18", - "react-apexcharts": "^1.4.1", - "react-dom": "^18", - "react-force-graph-2d": "^1.25.4" - }, - "devDependencies": { - "@next/eslint-plugin-next": "^14.1.1", - "@storykit/eslint-config": "workspace:*", - "@storykit/prettier-config": "workspace:*", - "@storykit/typescript-config": "workspace:*", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8.57.0", - "eslint-config-next": "14.2.1", - "prettier": "^3.2.5", - "typescript": "^5" - } -} diff --git a/examples/next-app/tsconfig.json b/examples/next-app/tsconfig.json deleted file mode 100644 index 01d27bc..0000000 --- a/examples/next-app/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "extends": "@storykit/typescript-config/nextjs.json", - "compilerOptions": { - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": [ - "./*" - ] - }, - "allowJs": true, - "noEmit": true, - "incremental": true, - "resolveJsonModule": true, - "jsx": "preserve" - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - ".next/types/**/*.ts", - "next.config.js" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/package.json b/package.json deleted file mode 100644 index d1ac415..0000000 --- a/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "private": true, - "scripts": { - "build": "turbo run build --filter @storyprotocol/storykit", - "dev": "turbo run dev --filter @storyprotocol/storykit", - "dev-example": "turbo run dev --filter next-app", - "lint": "turbo run lint --filter @storyprotocol/storykit", - "lint-all": "turbo run lint", - "format": "turbo run format --filter @storyprotocol/storykit", - "prepare": "husky" - }, - "devDependencies": { - "@storykit/eslint-config": "workspace:*", - "eslint": "^8.57.0", - "husky": "^9.0.11", - "lint-staged": "^15.2.2", - "prettier": "^3.2.5", - "turbo": "^1.12.2" - }, - "lint-staged": { - "packages/*.{ts,tsx}": [ - "pnpm format", - "pnpm lint" - ] - }, - "packageManager": "pnpm@8.9.0" -} diff --git a/packages/config-eslint/README.md b/packages/config-eslint/README.md deleted file mode 100644 index d521cce..0000000 --- a/packages/config-eslint/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `@storykit/eslint-config` - -Collection of internal eslint configurations. diff --git a/packages/config-eslint/library.js b/packages/config-eslint/library.js deleted file mode 100644 index b93219d..0000000 --- a/packages/config-eslint/library.js +++ /dev/null @@ -1,34 +0,0 @@ -const { resolve } = require("node:path"); - -const project = resolve(process.cwd(), "tsconfig.json"); - -/** @type {import("eslint").Linter.Config} */ -module.exports = { - extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], - plugins: ["only-warn"], - globals: { - React: true, - JSX: true, - }, - env: { - node: true, - }, - settings: { - "import/resolver": { - typescript: { - project, - }, - }, - }, - ignorePatterns: [ - // Ignore dotfiles - ".*.js", - "node_modules/", - "dist/", - ], - overrides: [ - { - files: ["*.js?(x)", "*.cjs?(x)", "*.mjs?(x)", "*.ts?(x)"], - }, - ], -}; diff --git a/packages/config-eslint/next.js b/packages/config-eslint/next.js deleted file mode 100644 index 4c5c2d9..0000000 --- a/packages/config-eslint/next.js +++ /dev/null @@ -1,35 +0,0 @@ -const { resolve } = require("node:path"); - -const project = resolve(process.cwd(), "tsconfig.json"); - -/** @type {import("eslint").Linter.Config} */ -module.exports = { - // extends: [ - // "eslint:recommended", - // "prettier", - // require.resolve("@vercel/style-guide/eslint/next"), - // "eslint-config-turbo", - // ], - extends: ["next/core-web-vitals", "prettier"], - globals: { - React: true, - JSX: true, - }, - env: { - node: true, - }, - plugins: ["only-warn"], - settings: { - "import/resolver": { - typescript: { - project, - }, - }, - }, - ignorePatterns: [ - // Ignore dotfiles - ".*.js", - "node_modules/", - ], - overrides: [{ files: ["*.js?(x)", "*.ts?(x)"] }], -}; diff --git a/packages/config-eslint/package.json b/packages/config-eslint/package.json deleted file mode 100644 index ba694b5..0000000 --- a/packages/config-eslint/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@storykit/eslint-config", - "version": "0.0.0", - "private": true, - "files": [ - "library.js", - "next.js", - "react-internal.js" - ], - "devDependencies": { - "@vercel/style-guide": "^5.2.0", - "eslint-config-turbo": "^1.12.4", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-only-warn": "^1.1.0", - "@typescript-eslint/parser": "^7.1.0", - "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "^5.3.3" - } -} diff --git a/packages/config-eslint/react-internal.js b/packages/config-eslint/react-internal.js deleted file mode 100644 index 2639034..0000000 --- a/packages/config-eslint/react-internal.js +++ /dev/null @@ -1,58 +0,0 @@ -const { resolve } = require("node:path"); - -const project = resolve(process.cwd(), "tsconfig.json"); - -/* - * This is a custom ESLint configuration for use with - * internal (bundled by their consumer) libraries - * that utilize React. - * - * This config extends the Vercel Engineering Style Guide. - * For more information, see https://github.com/vercel/style-guide - * - */ - -/** @type {import("eslint").Linter.Config} */ -module.exports = { - extends: [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/eslint-recommended", - "prettier", - "plugin:prettier/recommended", - "plugin:react-hooks/recommended", - "plugin:storybook/recommended", - ], - // extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], - plugins: ["@typescript-eslint", "only-warn"], - globals: { - React: true, - JSX: true, - }, - env: { - browser: true, - }, - settings: { - "import/resolver": { - typescript: { - project, - }, - }, - }, - ignorePatterns: [ - // Ignore dotfiles - ".*.js", - ".*.cjs", - "node_modules/", - "dist/", - ], - overrides: [ - // Force ESLint to detect .tsx files - { files: ["*.js?(x)", "*.ts?(x)"] }, - ], - rules: { - "react/react-in-jsx-scope": "off", - "react/prop-types": "off", - }, -}; diff --git a/packages/config-prettier/index.json b/packages/config-prettier/index.json deleted file mode 100644 index 14232ba..0000000 --- a/packages/config-prettier/index.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "semi": false, - "printWidth": 120, - "importOrderSeparation": true, - "importOrderSortSpecifiers": true, - "importOrder": ["^[./]"], - "plugins": ["@trivago/prettier-plugin-sort-imports"] -} diff --git a/packages/config-prettier/package.json b/packages/config-prettier/package.json deleted file mode 100644 index 85a26b5..0000000 --- a/packages/config-prettier/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "@storykit/prettier-config", - "version": "0.1.0", - "private": true, - "main": "./index.json", - "devDependencies": { - "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "prettier": "^3.2.5" - }, - "peerDependencies": { - "prettier": "^3.2.5" - } -} diff --git a/packages/config-typescript/base.json b/packages/config-typescript/base.json deleted file mode 100644 index 2c7114f..0000000 --- a/packages/config-typescript/base.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", - "compilerOptions": { - "composite": false, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "inlineSources": false, - "isolatedModules": true, - "moduleResolution": "Bundler", - "noUnusedLocals": false, - "noUnusedParameters": false, - "preserveWatchOutput": true, - "skipLibCheck": true, - "strict": true - }, - "exclude": ["node_modules"] -} diff --git a/packages/config-typescript/nextjs.json b/packages/config-typescript/nextjs.json deleted file mode 100644 index 242e6c9..0000000 --- a/packages/config-typescript/nextjs.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", - "extends": "./base.json", - "compilerOptions": { - "plugins": [{ "name": "next" }], - - "declaration": false, - "declarationMap": false, - "incremental": true, - "jsx": "preserve", - "module": "esnext", - "noEmit": true, - "resolveJsonModule": true, - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "moduleResolution": "node" - }, - "include": ["src", "next-env.d.ts"], - "exclude": ["node_modules"] -} diff --git a/packages/config-typescript/package.json b/packages/config-typescript/package.json deleted file mode 100644 index 2f09e5a..0000000 --- a/packages/config-typescript/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@storykit/typescript-config", - "version": "0.0.0", - "private": true, - "license": "MIT", - "publishConfig": { - "access": "public" - } -} diff --git a/packages/config-typescript/react-library.json b/packages/config-typescript/react-library.json deleted file mode 100644 index 6d2a3bb..0000000 --- a/packages/config-typescript/react-library.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", - "extends": "./base.json", - "compilerOptions": { - "jsx": "react-jsx", - "module": "ESNext", - "outDir": "dist", - "declaration": true, - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"] - } -} diff --git a/packages/storykit/.eslintrc.cjs b/packages/storykit/.eslintrc.cjs deleted file mode 100644 index fc3bf2f..0000000 --- a/packages/storykit/.eslintrc.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/** @type {import("eslint").Linter.Config} */ -module.exports = { - root: true, - extends: ["@storykit/eslint-config/react-internal.js"], - parser: "@typescript-eslint/parser", - // parserOptions: { - // project: true, - // }, - // parserOptions: { - // project: "./tsconfig.json", - // tsconfigRootDir: __dirname, - // }, -} diff --git a/packages/storykit/.gitignore b/packages/storykit/.gitignore deleted file mode 100644 index 694a99f..0000000 --- a/packages/storykit/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -build -dist - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -*storybook.log -storybook-static - -.yalc -yalc.lock \ No newline at end of file diff --git a/packages/storykit/.storybook/assets/story-logo.png b/packages/storykit/.storybook/assets/story-logo.png deleted file mode 100644 index 6b8b039b7c6d087b1ecbc5af9276506f560c9536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16720 zcmeIZcUY6zw<sJ`K<S}|u0arlKq4)4#Q=&F1*Eqm^xg?YiU<S}U>p?@DFUL>VL$`{ zDGABUAWdm1NJwS?X(od}r09K_^83!cr+nwR&;9ef4`pY+Yp=cf-g~W`oU1k#{5(=T zAP|WE@+FiV2z1mF1maLS&IR;D>0F2h{vGqbV0{4uYAN8|M{|NeJgb2hFJ6tdvoJk* z+3cbYLQh8rc1|4u0$t+2*YEFapDhKVeJ)x1p;;Jul5tYn3a*@<_Ve*msPiYGr@{Ad zQEA6-6<wGWxz?|L72KcWU<Pw-cr=mYrm|s_n;1Eb5tGOd-pU@0rWU-?0I8~&J=M6d z&XK$2S7j<*pmIHkIK`n1PvbEK@rRvzEMWWkmd0;(C;aSwrY{&Aqiu<urx6JIk7M{U zQYjp|kYUgzeGuP-u#yZ&<!BnT?wvQ+`Ij7N2JK@&;}=k$_Sx$}pb1G($5+dHQlND~ z&}_?LBaai**zVlKd0vyF?-6V&h-0h@1aF!!4dA$>0=nv1t56Smd<8_a_feVR_~GLb z(2Jt6BGAujASOZt#{o(JftraAcus&4;Goib<uyNme&9Yj=7QA}69)a^4bmU7vVxN& zeiSC5s?>Y?h@7<aqN{58eLo%#2BUR0-)iG3D9;8@D-Lqyr9jgP;S0>Xs>`Pc)ZgrK zE-8!Wuq%$7N?r;87)EqDK!tP7pefJJAOButS52YS-Iq)Qfd+z|Y9}E3+|`zO{Z5Ko zAg~eW@gTrfMiZs+Sipm$wB(C5c39@UQGHO?xwOSr*MVCkUBga?n_@-7SwH_ER5y8c z4BP?INc)V7syU_#f5?CP)G5ch>yH#7I6Oh$@qdzZUj3dow8Hr`J)7s2^O4(6TSOlq zGS%crS8^@Y%wPMA(T-85Ry;0-$!C7JqFD3~;f3da3sf`nvjW&*{#YqY0BcHWA=6oi zJEr1--|rkEwoc`|Z2>u9WaI6kKT!L23HzgPkE8$8y=6qH+?^|m|4hmB_;13c-dj1Y zx}W!!d7=Y*%saJ^_p!<Q^w%vMb|X@t^LNi`bERHE`&`fm`6L;uDQPLOxzfMiR6hcm zcsxX<@#a89NHB^WJD1PvYTAjoK28ZHDEv6c_?9UWbwTYCTKVw>rDxt+w5y;&?_;V~ z=?|_7+-rsuUWC<Was}K{nmGY$78D>wB9AW7&duJkS-$ynjK8Tu;)0OWfH@M+OV43L z`!6XAr}JHSe2J&>yu&5+9}AYjyyrL{<T*gEUxNK47l=wR--c%2w*NWdH~lDy1mb>X zx5Z^;-rp-Xp2<tyG=CHsaIQEf-*j`FwS2mb&jUa8Xlq%gP11;1c0r@6blJWw``Bq| z;ey}H=y#x(gzcm*TmPycdHL-nvByDnMm0GTmiiZ7URpVAq|l>a|BK8y^Tj(=KVSY0 z>{DV`W|-HV=6>a)RhW{zqSxtp#rQiW*Jea@E#ZnkLZ2$Dd=*u#F0r$Icj=wAo_VL$ zr^@apb~T2zCfX&%sO#6L*Us2WTy?U4VJ~=X)c&)5Qh-)5FRV!1`bt$`fS;>gsA8z} z`pNYp4TSB&u!}p7v)_n(3VK;)Oz^axH#Irmdp`BjXWtpkWXan^t*k=C?H2raUx06k zZww;wfq+%2pO)qwy?nhpE~F5Q9QGsTRa;BTCx3<ZUz*3?y>6~)d54aEv)DLnP^h4a zS498btX7{{Z(V<}ezpF7h|Y%s*&)Z);kC>)^KJ09?6#X*enX#QSl#o|FgO1XAxZt) zowB5nY4wq?wz<<?L0ukk{_AD$G}jK+6t|`J0=Hwglh&Kw?;s;&ZV3bm3<~hdv?EKR zaKBxO{t|sxKS*{+Mi(g;**$tHvRhABVC2DYAWeo56ItV)+E`+c@Ak_<&WHZ>xTqMZ z-|qgd)n79b*lT~LfV|20CBdxQth=;ZwR`8r>>hdR)b8ugZzq;a%XLR?lwwOyEb%O@ zkK8Yv@A6i+yKj15Q5~lK!sD053yqSEj?>zWRQK|&-?#Ht2s;hSU9F$_bthmyTQBIm z3(aurax3V{?s`2(d-di3zo#i!W>HT?7Wm3>8_Fd`8D`^F4DTn%eM!ElhmLdxJ7&lZ zzU-Op{;^xlbG1jmJ8|#pj`VoAWAFMwSdwOsLic9({e%|@@q4)4$GcXncPr7P`wP+w zZnUm}om-!!O;US9dOK5KDFyqb2fu&2v;Sgup2wS;e2gggOt3@r5<l^{8lSr?PW?DP z5AWIIwY>V$L@vV3*#5eV(VeGXBzC5Enm(uA8>LfOSH8M^jpsDHkn3Ie$c$-7K7*3| z>GW@?pPzD|kLGe|@pY)ghzf{}2)FZm=i%oWytrzr!S5qzC4;;{D@)hl;uM5(HAu$5 zh$4kjI=c0+wJK$IA5rZbx$M1LOIb}ky;A*omkOMPBJHfeRKiojPR_hpE_C>|fx>qp z-9pSfG$&DOCKZn8Kr;`PQ^t#zx5i5^HlOOeIK}^o$jTijPf%wGTltfeFyak}1VmRo z%x!j)&B3Cu=UCyVZ~s{H<HZw?kGYtdnPyL1(>HZh?YT3ffiQ^-#=KCo(s7AX&iV0f zN!#g9wX+`iL(;#`T_k1O$R=t%xMyhCsq@v-@@g)kT3gIow)myi))agmy^Dqg{-9** zRvc$AXL2KXw@Gq>_=WhA$jwuM$)%GcMwkfF3%=A+$?{I+%|(0~xDXub66d1llIIfs zlgLkXKN;LR^=r+qnrEHv**v$fw)d~mtxYnwv{09ScTc3yzAW1J?)PUWs%-M&WIePJ zzeBnZ#fYvbmCkpaZc!!yZ?v|G%Ub?usiVX(gp)bHIY`%eJh@?o61h$$buV|<c3XTM z|9WLpUV<#@AYu6Sa?JCW5{w@y4YE5=;0+P>3rm%2mFt6F=(F^mM2j00-vV+he!2DI zW|sHG&Wh;d-`Kx1y7GRZ<SCK0er=<^)|P&~UI-eJ8Jc@@syenhyuoG4LqtYt`AnNF zUokS3PP&|PC#A%yjA$G7kgn~!c(==*@uaal%SzgyA@t?Wm!Cd)X!>aCjQWhIm3;kB z&(T`z*Hc_-)b;#zPl)-u1HGU0+=fDj@_u((G9UIZC@{3uZNh%*`>MK>T07=g(kOG) z#p5fQ;}z|T;DCHk3cDK~j;2D#E42wVge^joT8_(4oxfHD*-ai)*IapcA3b!ou*cQd z?`zG<g~?zixRbME%+%wFHJ4AVQLJADpL0IHze-<iZ;Eo$PMv%>`F>Jjirg6Jy85a; zYJD&EW$g6S(3I}<-lS9bqcG(;=A%<}3*-W@iB4F|oO36Op>*(MWH@)&LYgEk{h}k( zrA=%u=-n>PZKOTgL~+0EY0i9Gia~hN?*cREcdXx*X3Lw_tUkVLSH(EJ)p*rg|9<$L z$2d{THe@4ACE(L+)%)m_&tpBI4c8jFQpNUP29{61dU;^8Cn4)Cr)<FdN_(7Pl+Bl2 zCOcx1+#723VOZf;h5Pw_GV92~<h9>eWQK(exfF>zxBJ^G``b^q%kq(PQRXpEI*saY z?1ZCx*EfV>waWQTx|T}V?yFz>mjvDMoe^xzz#!xPZ}&&s<>J2X-vc`}dJK2IPq0o} zAK$86)d;)$ak)p2A^yALVCde5$@tlgiSKgky=|LoOW(Rq#DDnA-y6SaobvrsuhsY6 zvFqDu2ak3umPizfih^w;o8;t;Uw%I0VasouRDSRK0+U+1#4(!sRdaiEJIptJnwLQs zO@-k;{So!H?n2Z1#5YMB-RdcGdr#;MLm!4eLqC?{$`8Jwo3@UwUmT|P6*QFpXfn6! zzW;Tzm*Z&B=00buE(zEMpTu6Wvj%|@l|Z1hTOiOb(3Q3f0>#2XpcQWrNWTaKl87jI zdCd@baU$Z9OEd^1u6X#%aoO%P69nR-20A#$I9prkW5Yw$(LUiAUv*q)1ON>J8JgfC z(AZ$#n3EV^|G+RK=;y9p=*d7IBdC+MHQYMlqHjRprNk&-`$QWDY+^80&j)H^e9{o7 z4<HEjjX|Hpg@%Mh>*I`|f8x~#+K1g5(35|H!~`2bFC0#I(%Jgz$&2Apz9)6n5il$q z4nL`@r|yHsps^T?+R1b9a|jK%mIgu#28Ziw>gj7~o&5WO0@FqL`03lB%>SMY_+$hP zh>3~N*U*TMk5`Y^R1c5x*Ffm$>1n{vX`DL;10Z1031Km494sta;U5er-)L-9U_?w{ zc-YB9jA%@FY>W{UAoVXELL>f#HZ1yYIRO&Wz@Z~F5bE$lp8f>%!Tt*_A~q`I&&hqT z8onXEp}t`;(Eu#sU$7AY;W6RS0pb4%>VLid-zETLYi<3nIsQXhLPP&GMRbf=9Kgok z0{IW2qa6|=d^PNRqr+pPu)bz-0GSGh+(hVKjPgatghx4qhll*5sjL5xeDa*8I{c)v zH5wZjcF2UvzZv3-LdW<TK>@u18q<WG({VTl*VjVo!;z|R;4l0yQ0s7?K)-~44|+}? zuB(su-$4PZ@j=I+|9^pfu=;-CQK4vn<-kz1zpq9_m_PL7zXYj&F+3zZ3YZw6PV?XP zUk1*OQQ>}pA;61&cZU3vTx)Cn%VE(m=rFABWt0&V5RZCbppU*UU|8BZ+Hjbbrj8#> z3+v|#L&7z&Fr*J$%NLE&!@#xC|BOe4V`C4E;Bfq34&f7y1#tX-<oO`9b<o;qO&HS8 z7Y#cHpn#z@u?RqdXdPW`O<%0GuFgN$Y@-4JpG1fJTdapv`5aP(J*VZPhtYxg`04>v z`DpsVkXqV)Ftjh)$43{bjfG<nhlc;BE$Lqhj0Uuv@V6`3`$qoV3JE;<r}^lkv4?J9 z1jQcOgRc+t@9x0=NFM*4ng1RiAK(ih{V%NKui2x+{bJ(LQN9=a0onaG>`>!BBR?7) z_g@o_#QON5k#IkluAZ+ppiCc4n4T|M4+huKL+a|Hk=mMQ?SGj64~ahvP5+qq{~hsv ziv}Bj4)gZ~0<8x0|DK)yo^Ad`=f7v?|8T?qm+WX92H3ysOymDF!9U;qn_vtm^Up3I z!XGyOwYC5s{<S*!h5?d_0@fbu_C<LRNPYh@>VgA~W4-@G_mj*=Cd|)!C7RJA^)OBA zy(gItu3>c>y?3E^Rbhotdz4SkT5#iyPIc&;C!#roF;gd(vybhroo%zV9)2~d7d^81 zo&EZ$?WGsKAD0q7?v%{$d^kH~hx+qzcq#<`^SO8SuMSi-&tDzaYE1tIsr?@iKob8W zmqT-K_<w8+E0anMj#ng<;T(719Cc{b`fPp#f3P>~3pVx(+u{nGn-`AXi{#$uJIdx2 z$D9!NK98EH;Km|Oh%_rr^)D9XsuX3ZIP)q#@m8}`eGb3HSwzUh2?^4SXLCLvcnJvk zD+o0x=9nsA@AbuwE`{$aCWAhC2Ya7w@5`UzvZdmP7V^7r@t%N$WJ^A8$wIUcAwnXI z)WqU8Ow)5#g1)bj2*$ud@`srYAsNpR;tV(!7WgqtQRG74e|OIEb-wv9Lbj3W1?O%> zp@`>wU2^f)-vaJs(B=x0ea!8KRSn5br8+KCor%|b&}t-*A3dH841jeAR^xF{S7&)Q z@8A$ZX|oE&n~(D7Y5|8D)ox$RX<>)0*+|8J!3yVH3Za<EwqJjm5CB9)+HFzUCWXy# zN>_2iO3@HPgi&MP^$xx(Ev8G#&8l%E;WpHZ;EKMT$fk{R0>KOKa7yj{Q;>oqu+l0r ze38bpFVNc`-f~QpDAzLseu(C@RB%ccD=HA?Z4r%bhFpXU@bICX<DL06`c7JINoSZW z=vRH1nt5+YT5<Be=29pD@b~6#{`dpXXSe(MXT;o=<p_~RDfrI}Ikh+4Eo@~QA%)>G zcJ+v^KrlL9=GJ;MXJSlwX9xH`ExY3=Z(gzpD?ujx6rXgbD`eoDDvWee94jeK=a^0J zrR&UQRy*Iy)PF0*=Gvw-@8<RM<G>r*`VBcv3{K}<yMtX;%};9c3Q)((O&ia}wn?XE zWP4tY9y1gfC3i7pOLA9R9HLzVa-PkLhGZX&gil#ibTy<KwVe5wE>BBh!~7t?qy;VJ z1()SMzzfkT8>G(>oM8h!MLE9uB=?fM8}JL7?IZ;I(fFr`wG44eFy%-IFquo!#-_tQ zw`U%VC{wo((9QRh@u7o9b)t#f49T%94UAs9l@W=*9jx6g+(h<8a+^@g^Q=_KCaQ2b z27>bg?YiSjDW?V94h~)HrB-#y?=xPS6k0?w{|>}MhoTDiY&Fg{$-!Trs!OsWp^;J_ zq&q1Lq)gT(D|FwK{BxU%0EN)fHSQa}mN!o`V5^5oRJ|LSd1tB1h;q*viY)MZO{$rZ zzERwQ@XX$k^bi=dDUOBNP=CNX`}XM1LuBySW_g|}l2$jzC{>U(-{C?2x!G8NN@(sH z4|Q70m0%bq^J)$Tybx<2h}q|oSP<UlP@P!CxTjszu9DCg)McKjBH1&g+O+(SdkuI% zD`7mP>ncdeGmK7UqVYqzHBy?JupD-Pl<{YX%y=03#3%F2_aT<WE|_c&q|)8@b<1iz z39P`^Z%c+F3@K7y6C;kdPt*rT)Zhainl2@RUu9Gwtk=?;=nnM?m3wPBn-Rj>=2!Mx zTV^E62fxnPlP$5$Vjt6@S)3vD#?uQj!}_90l3#VmtJ=XQY$$Wk%21wCf2c9>ZA%6_ z$v#5s6=5lNS>Ogv{#CvNCYI%_L^nf9f2QETf*&B^eVI63O3g=}l5}oufBtUaI?2x6 zNEw}}`tk+SyMLnc^(Z06qxo3@WjUJ6bD~iF>E4AsHb@6-J7LZiN=cJ7Gpz4>%Q~?y z7-!cb9og<@#QojxxA!M3f~MR{a=B3`H!*!`9Fo_<n}}0erE7Hy-a*9_8q4I#V^fJ> z+bQQYg8YKAl_;y(c OA>d2h2*`%YU#!Xhw&mq*|0DT>4#O{nBnbF+)tIcF2=#3- zTQaf)Z;P(Pk2D(_XE%9=j;pWI9g^i%bJ-RT7aU6PDz%#yCFx?t(Z{!S|5(df3Y<EM z<Q+0YeGn^tAvi*QJ9uYHKbh-}nO1Oo2?0B<`o1BvDnejeh;`|6Um&h{C0W`jz{Vth z@TGZv3z8=|U_|IudO03%DO&to*M_Qux!xmQP7Z<=vyPPH7@19OQ{EwEGV!Tj<k>v! z4tbJnbuMjxTSIP`0_i)6puK9#?#4f}s?c+ztIjyL4XrYbzvMi#<!z#Tnz5VkwNK^` z7iV2cT2P&F*M3Ft3Z9B|_SkutCNkEfr#M0a4D4K{pA{(;du2R~x}Xf+O3*aU4y+7g zFcBqbreu@%(oem4*L9D2QO^y(JCVJTGD`h;Xz(K7duJ!YW0UztMXoPXb8xTlD?Oa@ z6x8_Ll>IZtC+WAhDVJxi?v)ml2TXM#tapm>FCN)Ob45t`0i24h=*n8;o^8l1pa(*0 zHyumxmn#Dga1zF+>9@-=1hGGDyQbMAY@>Dh-C~=Z(7MAfWtMXBzlyCqm;adWdF}an z<PoKufZi7i8AWRPX7V3%zKgOhS<o6FRXytc8rrLu)*kIykyNh*j0l(He1%p<W$xBz zzwq|Bc3&a#2mE#->|^#Xm2bZ=j+NjG@!4DSP~7cpslH#FAL#`%l;@TrLYiE92MbUr z7|)h+#Obm#D-#5fmKyvvPUmCZq}kII>IbIImt5Qos$2G9U=x8QI~=%>Idgpnr~d>? zTvQ`dTdtxeDz6rJ0Dg>`)9F94EY=bfM@~g!$3H32GI0DnfOkkzu_fCoES1+|CH$<! zFU!e2xD)N;^_mf#_-ED?i3doohb!ueS#UfDpEoE2GUef!-+(equxAAtUW_5+ut8<2 zborhmNkL6+EJc6-&|1^x`pr)Pfg{PuVn?BsIz6>7j655oVg07B$vs7xdPRiaA*jG= zVNMGA$W&jVGj}jLwmz$H<R|@n>bSC*A)*IovJIZ|lTDV{p_zkKttlrugn6G^<ZLqa zL!L<n(_`6QYHuGTMhfXn)N3$Cp_Pt3wUYx6$DX#%=5<9XG!D*n@Csr$3KNoDi*9N+ z>r4&C%?Lb1tCliAYsC3n945bS)$GN40r^2yxEI-SkDiIN*qcqi!@NBFHC_h48T({C zvdC{Prxkt@8Z=qw+C{%w%Ftyist<U<MTQI$6#dZRVXbez7TvUNmXD*h!d+UY2Cj8* zU4+V&ud~2kR#Gl@2yP<eH(QSIUQ3)o5~;}g^ydi9o|n_<IKhtuF{opr>Z@$U_t@j} z14AvPe)ahZktf8L)v!$AkjHwe5yD|&;ODE?8(vg7Z8lO}IzXuxYFt|p($n5NaRX?i z%#GsBkdR!Hq>xNVj%!&_Jod)iC%M_Qhlrz^h@+cuc>>~AwX#u&+U{8PWV758@6eF+ zhGtErW%clZ=SW+!r2)+sX}vd_Im%Fl)JY~WP9}T!zmsixQ(qS;mt}@pPrU9Qz4pXK zlNFdOm^w*(*Ky2=hUpgT3Z!Js$e&3FAz|7K#JNAIPt%UL6Os@|TU!PgFUTe@$4M0Q zS)INoGrSrDTBS|$@|32?r^j7!Vm5C*CFquhS2QV%tqz&^6+Q-B)?V9R@>Nck8A`#` z*Ci<1vF`WsWXNapCcph-pZlLH$L7Z}{ko54?t0+wd*8O09&oVgZytGpFeZdf){&n^ zyxfS?EldpgKu>M%9MK_~Fj6BpHu^H0E969)1>*X^Ge_-X+chK93hSm$Cres9o4+5a z#Pj8uV_<a-q~P+*aW`+HkaX>4DOdebwQj!qLFMB4eUi)LM0B@E`MBgZiF0|nL^T4r z@#XYgUlpjMbyHA%=8dts6x9gzkLeHeM-SL=IdT%*tf!r{$nLRlqF*q4X29qDz|Szv zEl<q|$FDQpDb6^TEGU82;hG3Xe7o68gNCGk!f}+{EF9UibI)qcbALe#8vZm0`SM86 z4Xv@3zuqF}s!tN_J_e8@d>;_`c}*UfOnI8laB*6ErC0PKowvgtrS;@$o(D5#OM2i; z1fSoE`xTa6x71GEv`>h?k0ilVGcnIFiRP>S)@~nUK_5iQ?x4?aiZgbQa@q9gj-wa# zhmhU84<$PjwSqYdF<?K26C2`5JQ@kzAU|4s-mKX^;VDS-QJXAjh!El#PSn|+swc2K zz~j$M_ntSaD%CpWv@#KD(_bx<<v&x;Z9Tx>K<x(~uunc&Q6sSxJPYnKx*!t|vLa<a zW@WJSUcYf^A2_iLj#WXVtwuo02nCp|#nAkowt3sgMn7w+WAWR97ZqbAdTgC66sn46 z{e}KFS?t7WR5$mP*!!9+PQF?TUbiY+vO*7E*Q(kk>$(hHvjw%&As$Y>%~s5c%@X&_ z?J=_t>(4<RaSED3hUAzg@zWfDX!aDXPYI%2X?f^(0GXEn=c%^MXW?=ajqnAulsSJ+ z<2<jLQ6EDyvPto+X>`d5>r6LC6LtONbSCmxdH+#;(h5@Gpz`wl1@HZ<(L8JUThHg4 zB2QTk>&bk7lCnzAgVgD1GWEdYV1Q;tN2jJck)0dby#AQmiB^Mg&~M{IEe#`)V9)$$ zBA+0wv?%{!Ox6<Jd%SIrCAEJkT8C6v%MzQd(_5uYLaIEe-WJ2V`i&xB*^03g1Mi!= zv-z9w`mO_^=^CmOt`?td-9Ln|@kh#9F!U8hGm*k36Wu8?c{!DVnk;ko21(!`HQB+n zgt-(g(62e+e^jQ{MU!a;9!K!3PiA|J)fq1>h|h(qtCQ{cu%M%mJ`fi??J%DI`{o7J zhEsI(9>$_{A*Lj4kLcb@3XXiTxSo|^cBbQ~JVk9wI$IXusBK(e5-{Q;(`5XXr8TV2 zxs!v>AFu0C@-E(;EhxwQ{Bwl(1{qR+HBUS-vJQVwiI!RPEa55R*lX=S=CWT@Wh!X< z%Xp^qvK|Gzw~gTX*q9=XKIa$ME6G-B2SPyi@zFuW+ULds7YY{Lb2JF}{5N$sctVJm zSE7%mg#T8Q9-jMbx)ImDSehU2-8haF{}@&cU<7s}OZX@JG((wN!;`^hrv}s}k<uE2 z+r<cu&x6;UAL&!k!NV?DcbJdx%gUMCp9Wo*oys4=El~Bj9xd&D2cn-zAyuOpIPQ@* zB?#nkd(@c@$=<8Ifiuprezb>>HzlPkp2>G&*^exuQ}PLBD5^@Et;tkBa?3f_&5T?- zbA&r^Diq1FBiSR@XTZ8K{7$foVAFi;KBgwonvz(%m9Xy`y~`4=uQ^Brma;~@E3DYp zfXbha8Q*Z0W=vppfVf|WITKQ?M~E~G6WU=Ib(m`^F*qS-^!tZ9JOJs+PP*n7U@t|- z4X8e!PeGn<O-Yll68#ee7QuOArA0{7jC@C1JjuJ#k8h!sU4#317$7K!VmxCNb5lC9 zbhn`{@jlITSTb9o`N8%l61u2Xk2m71I3Azx5Kt~hbSfV#(twuL=QZD1+~@J4q_LCk zGwwhfdSNYsiKw?(OeaA9rq3N|nvk)Qb%d<Zd#tTYy^H^XC3w7rXZ>x)i51N>vlRqK zFd9~$-U3mr>{=(vYGc8#Za$!UebrBSESZF@Tt2pgd62kOWxLf#+0lB+t<fLnICrd@ z=Z?0&&IrX0K$ZC1R&aN+u3B!7mgk%<=8P96z`3L05}FYva(z8eeJ73fLC7#$CFQi- z@R4L018<S7M5VHHuiPhd1WrJ!Czh#pldidUm}>P6k`EW)`*NhRZVB4SVf~}ifH_Uo z^;m8N)lijYM!$y&MI$6O5!^2pb~?mT$%c2K#kyh!L6jrO(ggDN--AkWcB(9HJVEQa z=bRdUYzD}}&L|~AlVvj;uppEyGMyAP)h`XViEbQ}XmLlyw0W*ye`c$(JAoa;N@oNX zEu#0Z9OB+OVf~{K{2P60;Ncm*@3xvLnew?*1_1|dcWPRPgE!6Yh+{erMPkGisqRSx z61kc(=_csTGhy;;6?#K}I|+kjo5qYu&b7uOEm<SFlG5G=GFhXvBgx#KNo9bbJ>9&! zcZW&3EzX8=(GgsZ&!#t9asuAl@zpw+P-;iznX<!)vSpug9^TZgw1{r(k4K@Ll-ov6 zir0>=%$(nOfRAmFFis0+7~phuE}W`#6=8lZjuaaau_b?ES0y&2%Z>?KpPg)~_9P+Y zbpuCGGTD<xh|&JW;#QD9%@aH>#<SjfBpUHp&Yl%B7s@w9NoOBdr~0>mcTo;lXq<g7 zhkO177D{bE;#%!=>)4s%HvQenV2;9P)3Hc?Qt>8qZG-gz^4auCv^q833^fhV2J*vp zCK3k)l!<(tIuy4Ev2VNvRZgfRYl`@aF7LdkEk!V*Dseskm&(hGu{uvx_~Vp$(!FAP zT3*o_OHcSi(1=V)dIGdESoFQWq#XI&);p<(QVCO}Ro2mN-VeC}<?9H?gU0?j`Y%NV zpKGT5W}LMGrIemcpLBdSzm7bbQQWG#y)#pm<y2LzXF@fDR@MQCKs(r+-H;5UJoi<) zNu+T;MGDv+2$of(kdU^9E*Tx5&55Vn26!dw!DCylw-k$6M(z!I2RQC2R;q!VbkK-l z$*tf2!o<1JhuM-OC^To?Uaw)FwV{+j%es$zsGFB@R|2ZH9hZ9Igsk5m$4&(6Sq>Kw znlM+R+o@o=Ih`4=RvXeN3N;M`pd6Q?YR{yF^9o*qo;QKjfCy&&7E+z!gl%*dBQRCB z-g{{Is_9(s{i>|J<ksOHoya^JLi0+3=}eTkuuJgEmYLhGH>Kf^jg63U4<WKTgJ&Xn zbc9%BE0Wa8PPCdtT_st&sKR&^9Xoz&xTQ0ZpPn)-)prIs7PSvtF?<t-6oL(Z72Xg7 zd(@11Dt=4zU3qTwvB0>BgzV;7@^%6j%yTVY>y<{RIZn!UT)sh}1y-IgpnqD?mVOcV z(HH3z%_Ea%ZCEcz#bAd!!A}YJ#_IvS^VpW%o+F>B&Q;Vhw)}oJp6Va{rDodjwdgur zUiX=;NxN9AG{FPz*dvZET;yl07FFrll2(n@z5+4vRTi+ToIcw&Z&Xx~f@KPHbKfv8 z*kWpTUnOHdK(Ldmf*rPPq;s>mr?w!3Vbok4nFFvU&Dbn2#)sm!14GTct~kA^i4p=+ z7Dx^RZw2*sF{48Wa$8avJ6K^G@{uZ%D_hF715}Mq4Gk4t*>ZX<vL2<m=nb1xZLWD{ zFE7ylWF_9jZ<X&N@`Og;OXbP%&~EWnjMuQ_fNo?temSV8mc<LK-YZVDhM6PfecH}p zzdg)qa{a^&{q{U?CH@Q-s%tiTuca`tUS*|?+p{u7F{~d`%CN<0mZhH>cFxsB#}0QM zGXZ4Y<fNTKFhQRg))VTYsg-0tMELl)NqhAjaaW?>p0ew8frzjF1lhs5Z50ty)I_ek zNl>vzx7_g3S65^%vgKYq)wA%{7<Ng!6WNPjPRtCN%_tB4_#S7VKA7EXKuMsxzNDJ7 z`O41HZ|_djk!AP@aV~g+34fU<Iknbgi-<J8*JK#|b3-0>tV(Z*<`2c7lpU6isEtWZ zQTCWdB}83sTdP0VYHvN_$T>x7bTk8Q-cyLa9q?2Uu&EnGr)wt)1R2W1osutdvcJ&a zK&Wet6ez^w!4*!ijeWKe_>mT!eDdv%qp5v8Y=sR<X%WHKIbY1N_|cwBt~BceUyipS z<=M39Yl(HOTb(PK;v%T)Q>1LB)UYJwx${Z6p9DS<O{2eYPXj2coMN+>dNO$9Qh$*U zOtr6bTBkGdf*M7*t+{2xo_1_s+(hhxM&d-UN+CY(AptE~I}M!A=P2H(-TX;`Q#U$H z4IgLTM{5puig=OFff1N5wNsNwd5h(cgJr6g!q5ua);&WH)8;07u<~5=3aV>(P>5%8 zbr3nOeq%-=o0j10wi!mz7`&)MzE-T6_BNsl54o0jJy_@rL+A@ZX)RZTd4Vr?yuLa` zG0Uurzs^?B_2p3W$fnv_hDWo))Eh~zNX|k+woLxhz!4Zb7Y~U{y#Co0NUVrjC-9F@ zV=-E)lTDe0I4x|m4yEGDjHTKDS3m+rt}nUGFvX}SulnWC%bDXw%h$@$R%E53T<c~d z9g4oQNRR%|4R${6XHBMSn-*4bgq#7zkUw4T@kNS_Qr?=0JfVjc<zE1gtL!opWYSI* z*yhN6NyHeZy&Yd=1y_*MHvVvw$rg8Av9CNY$Rir?DdavwkRHy{eL^~TgrEHq54oK< z$>2)nD7PpN7}#vqP#3Pce&xXOE`9v&GRb+;E&l?a)K|)3;%t-Y!ulbVga(!rd1?q4 z0o|${)oqr|pS-cr?{)Q&{GIXalrLDB-I#W5gzSCHRiZg*Wt!m03P>DRt&}tw<fosa zVk;Nj^RJ-D_{lnB0!uQaU@rE4Ijv{8-}ws~Iz=v?5gqM&;>;~wIhIhCSsHN<l6Sc9 zTKAo11vpZRYn?DT_-t6;{lSZI)XlLsL{22<6|+NRo~eUfO#YB(NooTJ-@+NqQtjl8 z86c9W=u;iK`FaO`fP{*BKS*rI(k53uxEWZhd+P#N&_JYDI8~D?ynm&5)5u*7YTjmg zkdpoaU9o|f!n)<|v3Qe(HK;?ZQ?rjX+nP<L#Hz+Ie6`cK`crblD@9Kdd7GWdmYNY# zj`&^|?hgSYYRTY>fRCwaF_OC_hVtAq*!(u+D@@PX#)MU@7s3_h)FeK2{?xa7{0N(^ zMQl3$-m5edeD)WtbM#1`HlS8jttFpi;fv<4OlVk~vCUxGB9X*P4$!tgc=AZ`+dbGM zR%bDn=8xnh(NB?-wXxzOqTnji3O!ZkiR9x$M1j-+7LIo@*qql5D}s<3w(GSX)A;r- zXy$^^qIWuEePe(cQNAqdH82dtI4Elcs~G2CBg)6oV4HqKhnJ>KKL<wZrL^iquyj4_ z+dK0aGb2At1!Opjb<JH#f6y1nUyX-|@eE6o-{BO$VPYTyFCw-4YUh#r4<UIQ1CJ6z z^K0nk2L?)YR6aHFs!1W^f>wl@em{`d?J^@jyS6NIpI+T@yn1}Ww40wW8P013t{N_d zI5b_JLGAa*$>0&SPIQjDm^OW2&tx~Qa=4YmIH<%F&M#alxus{G9nB1^zuFYrk_ia~ zBJNg_5)bPK52n>tQJ&jiz?Mid=nCqL%D6DN%Cch95U;xs%Z6Dh%&V~PB{pQh1_N4; z$3L4lE>e?=I;~VgHR`Y?ntvzg(rv~Af%*jgTJ>1x2=x>a91nT7LAsCdx<SEeBHrKa zxNuOG^)#pV9b^wE2T2wwm_ID1JI|hlLiJ56TIcda5VHR0C%0Fr?7YN=Y)?cn-$FcK z_D2WjyComijKYdk&F@6Bf@YO~0p=A3?)lS<OC>i4&C3+oh{9*1yUzARCB;U^UU7lG z(^VhBkfNE1YW=a!r_2eX4C{_7C{)Z{(;a8x6{e%ittL$R?cXh5JCp|kqjWSQ>UNDd zlO%hTXwD&zj5Q-#A^d)fEu4lQ0XQ(&F9Qx{-_38ZP}(6ti0w65*jdpOvnL0%9&@Ul zKh{0FtSy^eGhH6h1^E<48e&~n69<E3YsPxS89K@0qXQi5bBz?4yDvwfv$w=n5R!Ke zN8YdV;{7hT2f0y}qg&;5BP&925q~>O!HV3B$1gkgyqp&jr$y}_0je8u)VD2SI(?8Y zm1FPZ`c5WZZ<0U2w5de$ilZw5IZ4o?_@rfZNKczP6OGb>ujSru6r|G6&Yl6JWY=`t z7c#_B*gwwMKJb<)YAELBjr~$3-vc2a<UD$J_c;l0n=J~u1d{hHcPQdfq8N^2q<_-< zl?ofQeYJNrvKj*09!y7?0kV7Ssqg{*4R7LF!)@Oz^#pyxYS4TJRELEsRWO^ACj5;H zpIPMC5zV8S1~Si5Z2Qq20;)v!V0sm<dY7Lr;jC<ahrzsIcoHDXrfJ;wxFC&Vc2WNM zSjG{f<*jCpEf*m4PP(S6A|!&JIi=sHakKB;4!n^Ju?VCXA)SaiAL!mCYKMbQ$=P8z zxtc|JTZDL9+;50`=ipc7(&mAr9g^pUd6{g4RQ?+x+C9@?Fd#<e3I0%lcpJ?VjL9lR z^VZG|%V<yHclb{-H=7up#jVG`E1K6mWoSd8l?>6!xAj>kR<7lahX{Qq>}g@OlR*!c zQywl10hNHsdM}#PwMtZuu%hK%<^QBneJ`u|SoLBzm#qk30o6`1#lI{&75F+UnYTWS z;1?JpHn8Mm3I<<}I#^MMnllz*gA(NU$d-FNTY+fKMXY@ZK62%Sif4f?aMlG<B*1w7 zu_n1qxEIl{HIif7tk+K_Czy5p?n_b@j=wBpeXL2-9X|xb6YB$4<!czevUG)src4Qj zTL*9pBIcGUFdpG(B#yof8MfT#n+_atPCoX%LK6^r4)XXsd6XHpmYY(FmV0&c!Z_i- zV(gG-1o4e!29lpw8|xvH4_u*$x#c;2d8%(}`C5Tq(HZluUYgSkKWw<@W&vGkwpQ{E zf`hb7Le}S%wn)cO9lm_BT3V0*mdnzGX|}p&bqc3I--8ZU6iTbnY0r>bq~%EU$`^0Q zG{Z(=NF4Wa_jO+e6e-WmP$}MwDY@xHSKnG0e8__GVPr$<lV10|g9w%SNRISZ6g^6j z#^^Wp18x)G(6s&aNLj71SAUCn;f?0}UBk2lXor-^K%}ykzeY)x6T@aprCA|vqVyHM z4s~W%>=nVO7I4G#O=dLs&&;2D`n#1@`F2E9eg46ClkpBvba0A%vA9lXLMv>!J~22r z;_vMoQ|Sv7ptP_?-6uqVn*%^HFIsQIu6#H`)YUvo0?obUa`OYqa7`&$zIt&zy9q7L zN_~)B;QeIT#|fzKy%Xfl#pBJz-Y*5sR(dw|MaT38;<T0OMvXeIlTCJoHzp*@GNL2X z*iKnYuMYQ^mx@SE!63?Mnamo%ND-Oa2}0AD&Rwg)?3VP6IJLNIO<fUp@ToD<Hl{V2 zAq0C?+!sP`Jor`Gg>n9rg7AP5&ly`l%1_3OH(9~2?V3E899C1Mo>?z2#KbwGFI4W6 zntM%jeV!mgE#%C%Mc0zFua$0mG&MklScL3bfI)@B1Ml>Lz*dr&asK6(L*GeD2$!D4 zg=t_H&&_gCd!x4-sr)Jri}+<(`{)_E_;_eoAK+TL+rWLBJmt1&=)UOD6>YAjK`Puc z9;fr_*7J$aa{E@~sy)QWbV56MDMCrWv|!wq!x%506Q)IsW+e?T4<csHqfir#V<{#B z2P@MVx->0AepqRZL^geO#__;%Uv7thi#f_x+jx_(%fuuf^~VTWY5mdA_X}{yu5_Er z;=LL~`G`9OT>80IXS#O)b_z7-)foJWlo5$3e9p8f$=cG!a=e1kTMkZ?Q+P@P4fFfV zkn*F{-DT}R_!u$W64lFb{tUt5Xtj308J`2ktaJN<;sGN%NZIm1&GDx$B22XsK&?M6 z&fZi-8MdD)NpFp9zdR#vLQ%vCZc`}BTkN~av5lIMhFRoGO#ftwi^VPcp0|KaKTvOy zl3+|1AIij*DY=#txuOl;qxVK4fF!gSn`;q|OBQEjba=+kNS&eEm1GoP^|uGii*Csk zXyH$l`a`@Z(k&?B>3K4&IGRuAki1XV^Ela3+o)bY>%K^&s0omSfo=31S=R+W^mbY! zEMfRd7n;~D_%n-P-MsUCqH`5}ax)~$_yvL40+*t^2hKM;m0Mayegb{ZEWl(!0>cLN zkl>!fV3bn;gizNnwIhNo>9uOj`aCC^_r6$a-*dKtAN|5>a#VpAZ!kJE1V0Sq)JgW^ zPowX$1;Qj)WRIJpG==5y8#)8#-^Qc(Fe+Is#Ulvr&*U1+X#=rrw81b=)`rRl=%>?j z(j|YCHa}h!O{D6~aB*YR7Z*}y^SKd%L(M`%4GxukK13?6K99czJT(xs{Pw{{-vgk6 z7O7|hd@E||=do;Ks|lAz(q2Rb<da<AyBYD!-G+i48uBmPyC+5lVoC$~o}hufY?-6f z0GtcqQ!NZ5nrZN~#bl#Ph=98$5SYdxxd&!IOo(3?#k3*$xv}xXxDz9T_W-xE%M9YD z^+uL&yvaZSWtE~^zZBgv{_?0gX&>yL>l_=+6mVC4A1MAYy^7_JD1J@y2aM05`vh=B z85p`UhcBoSwT28B014Uc4ls4WucbCCQbho$P`-lXsrUN=b*^r}+8t`I_6X0DU!dkJ zOKz1D0-EZWT(hUjh{C$`8%Rhm<p)TEID;4RhFF6;K>@V#tLO@XSAH<I(#DAv?R>WK zK%LamVQ&Z)q{VcL%2SVk_hs$}jJ(3-114uxVVp`%LR^_Z>lot=%p8_5-Qw{CYLxB> z`4mn&OqkW2fD{9Qnv?+bP;5D-J?aA%E$$A1$K?lnp|$ZRJo7$~d;dr($-j@)Pf?+J zb;*3M(;FobfB>P$v$c2DI2(QKo(5x8*=&Mw1}FoN=hX(xaAyPt$JzJr-#@sQWF-{0 z00moqAkxNV?!pEwn2Ogj-?CEFM6WfeMrfr3#}pIh=_H(Fe&183KafuuWZzy~%gF#H z_^=g3!F0>_ARXI=UNCK5ON<k}7!k>!CU{gsU&!kL7~5+WzXuGm{b-lW%k3SzwF+Ex zLHGfIw*Av&$yc02Rz!*O_4$FwB3PwMD&=8>$;Vs9bHU(6>?ygvgAVRga>HRM^9pLu zJ@+$hvbcp;pf3<mUTC6rFvrI{GaNS$%cmqO9@CB=feXr$x7bLXiFa8MI*sRf6~(c} zi|A8+7`;NQo+WtFIX{}|9`Y;&CX+4CNCCJN?<sz9{0xS}_*M&@B}JKL#;J*pyA%SK zN94TvTCXl!UF-nO?=;(?qEpi4>08AuMxMDE-p(jg{ZFR;&RGSFtF!8I1qnEfe5xt9 zw1zCt0%Xw|+t>nZLqx~x(IpvOT1$D(K$LGYt7vskBSoli4OVrYu%L+mMzJ|er81AW z=WvuhRjh1v&nbU2L3~QvS_Xo1UHw=>N;ZiZ_*y76+<1g?0SFKqo6>6pk;p1MPVLNs z@vt7x2SA9|9ha@5S)NwZYG<{S>=(34vu7)lV1v{M<Opy@g+A_HARj#P9;fXJg<|fB z>VL3h+Lfd|B--pSHjzjCD@76KX7Qhj^4~@l;Mq>b1Ou%l?+_Rixad@|IZSbiIBiVm z$`cr3TFd0UpoxPOMuomfP`&kE<$i_IKhNE4)%KU|HV4G<qv;M?)~2t5ExIW6z_O&^ zB1_+08S|U;Ks8Q8pkKxLBvdYnE9^}PsksY}$Gzd1ThhhJmjNr=sCkwol5>=_%2ZGj zDs2>9*Gjv>a$F;PC&QG@bkAy6Y5g&q|5nRiRz~A}HA)3)e$R6*P-uEV@Nm#(i-OLS zkvJp119YDzpeAlR;ryk>i}#M1m^dTIy`Tx>FGDPC)=M;d8jQ9cE(-C{mw4Nf=hrPn zrHLvGL5TKEmmz2VL>VfyL)R)HJjH4ligaOQffNGYMVyc>Lw}#o3B!>E6f{JhqD6p8 zU^?1esa7j3DN;k7k~niT32hLPEeC8*)u_6Wyq0%soxC9?y61+;do5?OCYl7V<QWRm zRh{K8)=p=1c9@}vXB&P}dw#KQ^38?a7XEf}@4^GzS;`|ptV1{_P!LOs<ZmSNvw7uE zD(|bSC94BW)A<3ge)SokzQ(tE6}Qh7ar%|w`-bY2>e~&~F4ec60xfmB!fL#;_CJ{W zpLolL<okPbhosdkTbNKP1$*RrPu2IG<MUP#Ux=Gcla5sN^VZ=)p~NWIvpST*8Oetj zEb*c|1+7M@WL|3O(?y}k3V#)y>(s8Sj|DxCNtYv1eTXEj5FlrxuG1IfEX!z-O01t4 z5L(0t5m=zb1@+m2URsm$O-^T`7_?FyM(huQ6hzL5t};}dxmUgUt;ol$22OrV`<#Qv zTPXi?ITHHkQ>mW`1Wn+1=5Xq-p0n5g>Hx0D{0(CFKOlf4{zoo{<^U|+f0@VsBYT<n a&fRrhwlI8ou=?-|T$jykP>rVEH~$x3)0bud diff --git a/packages/storykit/.storybook/global.css b/packages/storykit/.storybook/global.css deleted file mode 100644 index 5ac59a8..0000000 --- a/packages/storykit/.storybook/global.css +++ /dev/null @@ -1,7 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -.sb-show-main { - @apply bg-white dark:bg-gray-900; -} diff --git a/packages/storykit/.storybook/main.ts b/packages/storykit/.storybook/main.ts deleted file mode 100644 index 65f7312..0000000 --- a/packages/storykit/.storybook/main.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { StorybookConfig } from "@storybook/react-webpack5" - -const path = require("path") - -const config: StorybookConfig = { - stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: [ - "@storybook/preset-create-react-app", - "@storybook/addon-onboarding", - "@storybook/addon-links", - "@storybook/addon-essentials", - "@chromatic-com/storybook", - "@storybook/addon-interactions", - "@storybook/addon-themes", - ], - framework: { - name: "@storybook/react-webpack5", - options: {}, - }, - docs: { - autodocs: "tag", - }, - webpackFinal: async (config) => { - if (config.resolve) { - config.resolve.alias = { - ...config.resolve.alias, - "@": path.resolve(__dirname, "../src"), - } - } - return config - }, -} -export default config diff --git a/packages/storykit/.storybook/manager-head.html b/packages/storykit/.storybook/manager-head.html deleted file mode 100644 index f5105bd..0000000 --- a/packages/storykit/.storybook/manager-head.html +++ /dev/null @@ -1 +0,0 @@ -<meta name="robots" content="noindex" /> diff --git a/packages/storykit/.storybook/manager.ts b/packages/storykit/.storybook/manager.ts deleted file mode 100644 index d0c47a0..0000000 --- a/packages/storykit/.storybook/manager.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { addons } from "@storybook/manager-api" - -import theme from "./theme" - -addons.setConfig({ - theme, -}) diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts deleted file mode 100644 index 7d21660..0000000 --- a/packages/storykit/.storybook/preview.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { withThemeByClassName } from "@storybook/addon-themes" -import type { Preview } from "@storybook/react" - -import "./global.css" -import theme from "./theme" - -const preview: Preview = { - parameters: { - options: { - theme, - storySort: { - order: ["Introduction", "*", "Example"], - }, - }, - backgrounds: { disable: true }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/i, - }, - }, - }, - decorators: [ - withThemeByClassName({ - themes: { - light: "", - dark: "dark", - }, - defaultTheme: "light", - }), - ], -} - -export default preview diff --git a/packages/storykit/.storybook/theme.ts b/packages/storykit/.storybook/theme.ts deleted file mode 100644 index f4651cb..0000000 --- a/packages/storykit/.storybook/theme.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { create } from "@storybook/theming/create" - -const logo = require("./assets/story-logo.png") - -export default create({ - base: "light", - // Typography - fontBase: '"Open Sans", sans-serif', - fontCode: "monospace", - - brandTitle: "Story Protocol", - brandUrl: "https://storykit.vercel.app/", - brandImage: logo, - brandTarget: "_self", - - // - colorPrimary: "#3A10E5", - colorSecondary: "#585C6D", - - // UI - appBg: "#ffffff", - appContentBg: "#ffffff", - appPreviewBg: "#ffffff", - appBorderColor: "#585C6D", - appBorderRadius: 4, - - // Text colors - textColor: "#10162F", - textInverseColor: "#ffffff", - - // Toolbar default and active colors - barTextColor: "#9E9E9E", - barSelectedColor: "#585C6D", - barHoverColor: "#585C6D", - barBg: "#ffffff", - - // Form colors - inputBg: "#ffffff", - inputBorder: "#10162F", - inputTextColor: "#10162F", - inputBorderRadius: 2, -}) diff --git a/packages/storykit/package.json b/packages/storykit/package.json deleted file mode 100644 index ee29996..0000000 --- a/packages/storykit/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@storyprotocol/storykit", - "author": "storyprotocol engineering <eng@storyprotocol.xyz>", - "version": "0.1.7", - "type": "module", - "exports": { - ".": { - "module": "./dist/storyprotocol-storykit.esm.js", - "default": "./dist/storyprotocol-storykit.cjs.js", - "types": "./dist/types.d.ts" - }, - "./package.json": "./package.json" - }, - "types": "dist/types.d.ts", - "files": [ - "dist" - ], - "publishConfig": { - "registry": "https://npm.pkg.github.com/@storyprotocol" - }, - "scripts": { - "test": "react-scripts test", - "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", - "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", - "dev": "storybook dev -p 6006", - "build-storybook": "storybook build", - "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports" - }, - "prettier": "@storykit/prettier-config", - "dependencies": { - "@emotion/is-prop-valid": "^1.2.2", - "@emotion/react": "^11.11.4", - "@headlessui/react": "^1.7.18", - "@radix-ui/react-accordion": "^1.1.2", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", - "lucide-react": "^0.364.0", - "react-icons": "^5.0.1", - "tailwind-merge": "^2.2.2", - "tailwindcss": "^3.4.1", - "tailwindcss-animate": "^1.0.7", - "viem": "^2.7.19" - }, - "devDependencies": { - "@chromatic-com/storybook": "^1.2.25", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^11.1.6", - "@storybook/addon-essentials": "^8.0.4", - "@storybook/addon-interactions": "^8.0.4", - "@storybook/addon-links": "^8.0.4", - "@storybook/addon-onboarding": "^8.0.4", - "@storybook/addon-styling-webpack": "^1.0.0", - "@storybook/addon-themes": "^8.0.4", - "@storybook/blocks": "^8.0.4", - "@storybook/manager-api": "^8.0.4", - "@storybook/preset-create-react-app": "^8.0.4", - "@storybook/react": "^8.0.4", - "@storybook/react-webpack5": "^8.0.4", - "@storybook/test": "^8.0.4", - "@storybook/theming": "^8.0.4", - "@storykit/eslint-config": "workspace:*", - "@storykit/prettier-config": "workspace:*", - "@storykit/typescript-config": "workspace:*", - "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", - "@tanstack/react-query": "^5.25.0", - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@turbo/gen": "^1.12.4", - "@types/eslint": "^8.56.5", - "@types/jest": "^29.5.12", - "@types/node": "^20.11.24", - "@types/react": "^18.2.61", - "@types/react-dom": "^18.2.19", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-storybook": "^0.8.0", - "postcss": "^8.4.38", - "postcss-nesting": "^12.1.2", - "prettier": "^3.2.5", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-apexcharts": "^1.4.1", - "react-dom": "^18.2.0", - "react-force-graph-2d": "^1.25.4", - "react-scripts": "5.0.1", - "rollup": "^4.13.1", - "rollup-plugin-dts": "^6.1.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-postcss": "^4.0.2", - "storybook": "^8.0.4", - "typescript": "^5.3.3", - "webpack": "^5.91.0" - }, - "peerDependencies": { - "@tanstack/react-query": "^5.25.0", - "react": ">=18.2.0", - "react-apexcharts": "^1.4.1", - "react-dom": ">=18.2.0", - "react-force-graph-2d": "^1.25.4", - "typescript": "^5.4.3" - } -} diff --git a/packages/storykit/postcss.config.cjs b/packages/storykit/postcss.config.cjs deleted file mode 100644 index 9615734..0000000 --- a/packages/storykit/postcss.config.cjs +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - plugins: { - "@tailwindcss/nesting": "postcss-nesting", - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js deleted file mode 100644 index 45f453e..0000000 --- a/packages/storykit/rollup.config.js +++ /dev/null @@ -1,54 +0,0 @@ -import commonjs from "@rollup/plugin-commonjs" -import resolve from "@rollup/plugin-node-resolve" -import terser from "@rollup/plugin-terser" -import typescript from "@rollup/plugin-typescript" -import dts from "rollup-plugin-dts" -import peerDepsExternal from "rollup-plugin-peer-deps-external" -import postcss from "rollup-plugin-postcss" - -// eslint-disable-next-line -const packageJson = require("./package.json") - -const config = [ - { - input: "src/index.ts", - output: [ - { - file: packageJson.exports["."].default, - format: "cjs", - sourcemap: true, - }, - { - file: packageJson.exports["."].module, - format: "esm", - sourcemap: true, - }, - ], - plugins: [ - peerDepsExternal(), - resolve(), - commonjs(), - typescript(), - terser(), - postcss({ - config: { - path: "./postcss.config.cjs", - }, - extensions: [".css"], - minimize: true, - inject: { - insertAt: "top", - }, - }), - ], - external: ["react/jsx-runtime"], - }, - { - input: "src/index.ts", - output: [{ file: "dist/types.d.ts", format: "es" }], - plugins: [dts.default()], - external: [/\.(css|less|scss)$/], - }, -] - -export default config diff --git a/packages/storykit/src/components/Button/Button-css-modules.tsx b/packages/storykit/src/components/Button/Button-css-modules.tsx deleted file mode 100644 index 987c681..0000000 --- a/packages/storykit/src/components/Button/Button-css-modules.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { cn } from "@/lib/utils" -import { type VariantProps, cva } from "class-variance-authority" -import React from "react" - -import "../../global.css" -import styles from "./styles.module.css" - -const button = cva(styles.skButton, { - variants: { - variant: { - primary: styles.primary, - secondary: styles.secondary, - }, - size: { - small: styles.small, - medium: styles.medium, - large: styles.large, - }, - }, - defaultVariants: { - variant: "primary", - size: "medium", - }, -}) - -export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & - VariantProps<typeof button> & { - variant?: "primary" | "secondary" - size?: "small" | "medium" | "large" - } - -type ButtonRef = React.ForwardedRef<HTMLButtonElement> - -const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { - return ( - // <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> - <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> - {children} - </button> - ) -}) - -Button.displayName = "Button" - -export default Button diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx deleted file mode 100644 index 7ea8640..0000000 --- a/packages/storykit/src/components/Button/Button.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { cn } from "@/lib/utils" -import { type VariantProps, cva } from "class-variance-authority" -import React from "react" - -import "../../global.css" -import "./styles.css" - -const button = cva("skButton", { - variants: { - variant: { - primary: "skButton--primary", - secondary: "skButton--secondary", - }, - size: { - small: "skButton--small", - medium: "skButton--medium", - large: "skButton--large", - }, - }, - defaultVariants: { - variant: "primary", - size: "medium", - }, -}) - -export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & - VariantProps<typeof button> & { - variant?: "primary" | "secondary" - size?: "small" | "medium" | "large" - } - -type ButtonRef = React.ForwardedRef<HTMLButtonElement> - -const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { - return ( - <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> - {children} - </button> - ) -}) - -Button.displayName = "Button" - -export default Button diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx deleted file mode 100644 index d204fc3..0000000 --- a/packages/storykit/src/components/Button/__docs__/Button.mdx +++ /dev/null @@ -1,37 +0,0 @@ -import * as ButtonStory from "./Button.stories" -import { Canvas, Meta } from "@storybook/blocks" - -<Meta of={ButtonStory} title="Example/Button" /> - -# Button - -Button component with different props. - -#### Example - -<Canvas of={ButtonStory.Primary} /> - -## Usage - -```ts -import { Button } from "@storyprotocol/storykit"; - -const Example = () => { - return ( - <Button - size="small" - variant="primary" - onClick={()=> console.log("Clicked")} - >hello</Button> - ); -}; - -export default Example; -``` - -#### Arguments - -- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. -- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. -- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. -- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx deleted file mode 100644 index 5661c8e..0000000 --- a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react" - -import Button from "../Button" - -const meta = { - title: "Example/Button", - component: Button, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, -} satisfies Meta<typeof Button> - -export default meta -type Story = StoryObj<typeof meta> - -export const Primary: Story = { - args: { - children: "Button", - variant: "primary", - size: "medium", - disabled: false, - }, -} - -export const Secondary: Story = { - args: { - children: "Button", - variant: "secondary", - size: "medium", - disabled: false, - }, -} diff --git a/packages/storykit/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx deleted file mode 100644 index 8f57dae..0000000 --- a/packages/storykit/src/components/Button/__tests__/Button.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import Button from "../Button" - -describe("Button", () => { - test("renders the Button component", () => { - render(<Button>hi</Button>) - }) -}) diff --git a/packages/storykit/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts deleted file mode 100644 index ae0694c..0000000 --- a/packages/storykit/src/components/Button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Button } from "./Button" diff --git a/packages/storykit/src/components/Button/styles.css b/packages/storykit/src/components/Button/styles.css deleted file mode 100644 index 384f0fc..0000000 --- a/packages/storykit/src/components/Button/styles.css +++ /dev/null @@ -1,21 +0,0 @@ -.skButton { - @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; - - &.skButton--primary { - @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; - } - - &.skButton--secondary { - @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; - } - - &.skButton--small { - @apply text-xs px-2 py-1; - } - &.skButton--medium { - @apply text-base px-4 py-2; - } - &.skButton--large { - @apply text-xl px-6 py-3; - } -} diff --git a/packages/storykit/src/components/Button/styles.module.css b/packages/storykit/src/components/Button/styles.module.css deleted file mode 100644 index d024632..0000000 --- a/packages/storykit/src/components/Button/styles.module.css +++ /dev/null @@ -1,21 +0,0 @@ -.skButton { - @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; - - &.primary { - @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; - } - - &.secondary { - @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; - } - - &.small { - @apply text-xs px-2 py-1; - } - &.medium { - @apply text-base px-4 py-2; - } - &.large { - @apply text-xl px-6 py-3; - } -} diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx deleted file mode 100644 index 2673224..0000000 --- a/packages/storykit/src/components/IpGraph/IpGraph.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react" - -import "../../global.css" -import { convertAssetToGraphFormat } from "../../lib/graph" -import { Asset } from "../../lib/types" -import { useIpAssetContext } from "../../providers" -import "./styles.css" - -export type IpGraphProps = { - width?: number - height?: number -} - -function IpGraph({ width = 500, height = 500 }: IpGraphProps) { - const { assetData } = useIpAssetContext() - const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [ForceGraph, setForceGraph] = useState<any>(null) - - useEffect(() => { - // ForceGraph will break SSR, and needs to be loaded dynamically - async function importForceGraphModule() { - const fg = await import("react-force-graph-2d") - setForceGraph(fg.default) - } - importForceGraphModule() - }, []) - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { - const isParent = node.level < 0 - const isSelf = node.level === 0 - const isChild = node.level > 0 - - let label - - if (node.isRoot) { - if (isParent) { - label = `${node.name} (Root / Parent)` - } else { - label = `${node.name} (Root)` - } - } else if (isParent) { - label = `${node.name} (Parent)` - } else if (isChild) { - label = `${node.name} (Child)` - } else { - label = `${node.name}` - } - - const fontSize = 12 / globalScale - const circleRadius = isSelf ? 6 : 3 // Radius of the circle - - // Set the font for the text - ctx.font = `${fontSize}px Sans-Serif` - - // Draw the circle - ctx.beginPath() - ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) - if (isSelf) { - ctx.fillStyle = "black" // Color of the circle - } else if (isParent) { - ctx.fillStyle = "grey" // Color of the circle - } else { - ctx.fillStyle = "lightgrey" // Color of the circle - } - - ctx.fill() - if (isSelf) { - ctx.strokeStyle = "lightblue" // Border color of the circle - ctx.stroke() - } - - // Draw the text next to the circle - ctx.fillText(label, node.x, node.y + 10) - } - - return ( - <div className="skIpGraph"> - {ForceGraph ? ( - <ForceGraph width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> - ) : null} - </div> - ) -} - -IpGraph.displayName = "IpGraph" - -export default IpGraph diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx deleted file mode 100644 index 6e98d12..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpGraph from "../IpGraph" - -const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ - ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, - width = 400, - height = 300, -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div className="flex h-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> - <IpGraph width={width} height={height} /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx deleted file mode 100644 index ad8a772..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx +++ /dev/null @@ -1,45 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpGraphStory from "./IpGraph.stories" - -<Meta of={IpGraphStory} /> - -# IpGraph - -Show IP Asset derivatives graph. - -#### Example - -<Canvas of={IpGraphStory.Select} /> - -<Controls /> - -## Dependencies - -The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). - -```bash -npm install react-force-graph-2d -``` - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpGraph /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **width**: _number_ - The width of the canvas -- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx deleted file mode 100644 index 049a105..0000000 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpGraph", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts deleted file mode 100644 index d038069..0000000 --- a/packages/storykit/src/components/IpGraph/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IpGraph/styles.css b/packages/storykit/src/components/IpGraph/styles.css deleted file mode 100644 index 1bae73e..0000000 --- a/packages/storykit/src/components/IpGraph/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -.skIpGraph { - @apply relative; -} diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx deleted file mode 100644 index bf01fc6..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { POLICY_TYPE } from "@/lib/types" -import { cn, getPolicyTypeByPILData } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" -import { cva } from "class-variance-authority" -import { CircleCheck, CircleMinus } from "lucide-react" -import { useState } from "react" -import { FaCaretDown, FaCaretUp } from "react-icons/fa6" - -import "../../global.css" -import "./styles.css" - -const CANS = { - REMIX: "Remix this work", - INCLUDE: "Include this work in their own work(s)", - CREDIT: "Credit you appropriately", - DISTRIBUTE: "Distribute their remix anywhere", - PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", - CREATOR_CREDIT: "Credit you as the creator", - PUBLISH: "Display / publish the work in any medium", -} - -const ShowCans = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] - break - default: - return [] - break - } -} - -const CANNOTS = { - RESELL: "Resell your original work", - COMMERCIALIZE: "Commercialize the remix", - CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", - CLAIM: "Claim your work as their own", - REMIX: "Create remixes of the commercial use.", -} - -const ShowCannots = ({ type }: { type: string }) => { - switch (type) { - case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.COMMERCIAL_USE: - return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] - break - case POLICY_TYPE.COMMERCIAL_REMIX: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] - break - case POLICY_TYPE.OPEN_DOMAIN: - return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] - break - default: - return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] - break - } -} - -const policiesStyles = cva("", { - variants: { - size: { - small: "skIpPolicyAccordion--small", - medium: "skIpPolicyAccordion--medium", - large: "skIpPolicyAccordion--large", - }, - }, -}) - -export type IpPolicyAccordionProps = { - size?: "small" | "medium" | "large" -} - -function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { - const { policyData } = useIpAssetContext() - const [expanded, setExpanded] = useState<number | null>(0) - - const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 - - return policyData?.length ? ( - <div className={cn("skIpPolicyAccordion", policiesStyles({ size }))}> - {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {(policyData as unknown as any[])?.map((policy, index) => ( - <div key={policy.id} className="skIpPolicyAccordion__item"> - <div - className="skIpPolicyAccordion__item-header" - onClick={() => setExpanded(expanded === index ? null : index)} - > - {getPolicyTypeByPILData(policy.licenseTerms)} - {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} - </div> - - <div - className={cn( - "skIpPolicyAccordion__item-list", - expanded === index && "skIpPolicyAccordion__item-list--expanded" - )} - > - <div className="skIpPolicyAccordion__properties"> - {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( - <> - <div className="skIpPolicyAccordion__item-list-title">Others Can</div> - <div className="skIpPolicyAccordion__list"> - {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( - <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--can"> - <CircleCheck width={iconWidth} /> - <span>{can}</span> - </div> - ))} - </div> - </> - ) : null} - <div className="skIpPolicyAccordion__item-list-title">Others Cannot</div> - <div className="skIpPolicyAccordion__list"> - {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( - <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--cannot"> - <CircleMinus width={iconWidth} /> - <span>{can}</span> - </div> - ))} - </div> - </div> - </div> - - {index < policyData.length - 1 && <div className="skIpPolicyAccordion__divider" />} - </div> - ))} - </div> - ) : ( - <div className="skIpPolicyAccordion skIpPolicyAccordion--no-policy">No Policy</div> - ) -} - -export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx deleted file mode 100644 index 5a4a58f..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpPolicyAccordion from "../IpPolicyAccordion" - -type Size = "small" | "medium" | "large" - -const Example: FC<{ ipId: Address; size: Size }> = ({ - ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, - size = "medium", -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div className="flex h-full w-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> - <IpPolicyAccordion size={size} /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx deleted file mode 100644 index fa8a1c9..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" - -<Meta of={IpPolicyAccordionStory} /> - -# IpPolicyAccordion - -Displays the IP Asset policies in a readable format (cans & cannots). - -#### Example - -<Canvas of={IpPolicyAccordionStory.Select} /> - -<Controls /> - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpPolicyAccordion } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpPolicyAccordion /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx deleted file mode 100644 index 00db34b..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpPolicyAccordion", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - size: "medium", - }, -} diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx deleted file mode 100644 index f05ad5a..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css deleted file mode 100644 index 0cefe8e..0000000 --- a/packages/storykit/src/components/IpPolicyAccordion/styles.css +++ /dev/null @@ -1,70 +0,0 @@ -.skIpPolicyAccordion { - @apply flex flex-col w-full min-w-48; - - .skIpPolicyAccordion__item { - @apply flex flex-col w-full; - } - - .skIpPolicyAccordion__item-header { - @apply flex w-full items-center justify-between cursor-pointer; - } - - .skIpPolicyAccordion__item-list { - @apply flex w-full items-center justify-between overflow-hidden h-0; - - &.skIpPolicyAccordion__item-list--expanded { - @apply h-auto; - } - } - - .skIpPolicyAccordion__properties { - @apply flex flex-col pt-2 gap-2; - } - - .skIpPolicyAccordion__item-list-title { - @apply font-bold; - } - - .skIpPolicyAccordion__list { - @apply flex flex-col; - } - - .skIpPolicyAccordion__property { - @apply flex w-full items-center gap-2; - - &.skIpPolicyAccordion__property--can > svg { - @apply text-green-500; - } - - &.skIpPolicyAccordion__property--cannot > svg { - @apply text-red-500; - } - } - - .skIpPolicyAccordion__divider { - @apply border-b border-gray-200 w-full my-2; - } - - &.skIpPolicyAccordion--small { - @apply text-sm; - } - - &.skIpPolicyAccordion--medium { - @apply text-base; - - .policy-list { - @apply gap-1; - } - } - - &.skIpPolicyAccordion--large { - @apply text-lg; - .policy-list { - @apply gap-2; - } - } - - &.skIpPolicyAccordion--no-policy { - @apply text-slate-400; - } -} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx deleted file mode 100644 index b4fbf52..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { shortenAddress } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" -import { useEffect, useState } from "react" -import { Address } from "viem" - -import "../../global.css" -import "./styles.css" - -function IpRoyaltyPieChart() { - const { royaltyData } = useIpAssetContext() - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const [Chart, setChart] = useState<any>(null) - useEffect(() => { - import("react-apexcharts").then((Component) => setChart(Component)) - }, []) - - let ApexChart = Chart - if (ApexChart?.default) ApexChart = ApexChart.default - if (ApexChart?.default) ApexChart = ApexChart.default - - if (royaltyData?.targetAncestors) { - const chart = { - options: { - chart: { - width: 300, - type: "pie" as `pie`, - }, - dataLabels: { - style: { - fontSize: "20px", - // fontFamily: "Inter, ui-sans-serif", - fontWeight: "400", - colors: ["#fff", "#fff", "#1f2937"], - }, - dropShadow: { - enabled: false, - }, - formatter: (value: number) => `${value.toFixed(1)} %`, - }, - // labels: ["Direct", "Organic search"], - plotOptions: { - pie: { - dataLabels: { - offset: -20, - }, - }, - }, - colors: ["#5f6060", "#494848"], - tooltip: { - enabled: true, - y: { - title: { - formatter: (value: Address) => shortenAddress(value), - }, - }, - }, - legend: { - show: false, - }, - labels: royaltyData?.targetAncestors, - responsive: [ - { - breakpoint: 480, - options: { - chart: { - width: 300, - }, - legend: { - position: "bottom", - }, - }, - }, - ], - }, - series: royaltyData?.targetRoyaltyAmount.map(Number), - } - - return ( - <div className="skIpRoyaltyPieChart"> - <div className="skIpRoyaltyPieChart__chart"> - {ApexChart ? ( - <ApexChart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> - ) : null} - </div> - <div className="skIpRoyaltyPieChart__key"> - <dl className="skIpRoyaltyPieChart__list"> - {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} - {royaltyData?.targetAncestors.map((target: any, i: any) => ( - <div key={target} className="skIpRoyaltyPieChart__item"> - <dt className="skIpRoyaltyPieChart__address">{shortenAddress(target)}</dt> - <dd className="skIpRoyaltyPieChart__value">{royaltyData.targetRoyaltyAmount[i]}</dd> - </div> - ))} - </dl> - </div> - </div> - ) - } - - return <div className="skIpRoyaltyPieChart skIpRoyaltyPieChart--empty">No Royalty Data</div> -} - -export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx deleted file mode 100644 index 3719043..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider } from "../../../providers" -import IpRoyaltyPieChart from "../IpRoyaltyPieChart" - -const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div className="flex h-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> - <IpRoyaltyPieChart /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx deleted file mode 100644 index 7bb1ab0..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx +++ /dev/null @@ -1,40 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" - -<Meta of={IpRoyaltyPieChartStory} /> - -# IpRoyaltyPieChart - -Displays the divisions of royalties for an IP Asset in a pie chart. - -#### Example - -<Canvas of={IpRoyaltyPieChartStory.Select} /> - -<Controls /> - -## Dependencies - -The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). - -```bash -npm install react-apexcharts -``` - -## Usage - -```ts -import { IpAssetProvider } from "@storyprotocol/storykit" -import { IpRoyaltyPieChart } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpRoyaltyPieChart /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx deleted file mode 100644 index c218f3f..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpRoyaltyPieChart", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: {}, - args: {}, - // tags: ["isHidden"], -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx deleted file mode 100644 index 80b6af8..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css deleted file mode 100644 index d59f690..0000000 --- a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css +++ /dev/null @@ -1,30 +0,0 @@ -.skIpRoyaltyPieChart { - @apply flex flex-col items-center justify-between; - - .skIpRoyaltyPieChart__chart { - @apply min-h-[230px]; - } - - .skIpRoyaltyPieChart__key { - @apply w-full min-w-[300px] px-2; - } - - .skIpRoyaltyPieChart__list { - @apply divide-y divide-gray-100 overflow-x-hidden text-sm leading-6; - } - - .skIpRoyaltyPieChart__item { - @apply flex justify-between gap-x-4 py-1; - } - - .skIpRoyaltyPieChart__address { - @apply text-xs capitalize text-gray-500; - } - .skIpRoyaltyPieChart__value { - @apply truncate text-gray-700; - } - - &.skIpRoyaltyPieChart--empty { - @apply items-start text-slate-400; - } -} diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx deleted file mode 100644 index 382949d..0000000 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ /dev/null @@ -1,394 +0,0 @@ -import { Menu, Transition } from "@headlessui/react" -import React, { Fragment, useState } from "react" -import { FaWandMagicSparkles } from "react-icons/fa6" -import { IoIosShareAlt } from "react-icons/io" -import { SiOpensea } from "react-icons/si" -import { TbLicense } from "react-icons/tb" -import { Address } from "viem" - -import "../../global.css" -import { cn, shortenAddress } from "../../lib/utils" -import { IpAssetProvider, useIpAssetContext } from "../../providers" -import { IpGraph } from "../IpGraph" -import { IpPolicyAccordion } from "../IpPolicyAccordion" -import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" -import "./styles.css" - -export type IpWidgetProps = { - ipId: Address - isBottomNav?: boolean -} - -export const IPA_CARD_TABS = [ - { id: "overview", label: "Overview" }, - { id: "licensing", label: "Licensing" }, - { id: "derivatives", label: "IP Graph" }, - { id: "royalty", label: "Royalty" }, -] - -const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { - return <IPAssetCardWrapper ipId={ipId} isBottomNav={isBottomNav} {...rest} /> -} - -function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { - const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) - - const _Tabs = () => ( - <div className={cn("skIpWidget__tabs", isBottomNav && "skIpWidget__tabs--bottom")}> - <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> - </div> - ) - - const _Card = () => ( - <div className="skIpWidget__card"> - <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> - </div> - ) - - return ( - <IpAssetProvider ipId={ipId} key={ipId}> - <div className="skIpWidget"> - {isBottomNav ? <_Card /> : <_Tabs />} - {isBottomNav ? <_Tabs /> : <_Card />} - </div> - </IpAssetProvider> - ) -} - -function Tabs({ - ipId, - activeTab, - setActiveTab, -}: { - ipId: Address - activeTab: string - setActiveTab: (tab: string) => void -}) { - return ( - <div className="skIpWidget__tabsContainer" id={ipId}> - <div className="skIpWidget__tabsInner"> - {IPA_CARD_TABS.map((tab) => ( - <button - key={`${ipId}-${tab.id}`} - onClick={() => setActiveTab(tab.id)} - className={cn("skIpWidget__tab", activeTab !== tab.id && "skIpWidget__tab--active")} - style={{ - WebkitTapHighlightColor: "transparent", - }} - > - {activeTab === tab.id && <span className="skIpWidget__activeTab" />} - {tab.label} - </button> - ))} - </div> - <button> - <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> - <g clipPath="url(#clip0_235_3)"> - <mask - id="mask0_235_3" - style={{ maskType: "luminance" }} - maskUnits="userSpaceOnUse" - x="0" - y="0" - width="512" - height="512" - > - <path d="M512 0H0V512H512V0Z" fill="white" /> - </mask> - <g mask="url(#mask0_235_3)"> - <path - d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" - fill="black" - /> - </g> - </g> - <defs> - <clipPath id="clip0_235_3"> - <rect width="512" height="512" fill="white" /> - </clipPath> - </defs> - </svg> - </button> - </div> - ) -} - -function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { - switch (activeTab) { - case "overview": - return <IPAssetOverview isBottomNav={isBottomNav} /> - case "licensing": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <div className="skIpWidget__policyContainer"> - <IpPolicyAccordion size="small" /> - </div> - </IPAssetLayout> - ) - case "derivatives": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <IpGraph width={370} height={250} /> - </IPAssetLayout> - ) - case "royalty": - return ( - <IPAssetLayout isBottomNav={isBottomNav}> - <IpRoyaltyPieChart /> - </IPAssetLayout> - ) - default: - return <IPAssetOverview /> - } -} - -function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { - return ( - <div className={cn("skIpWidget__ipAssetLayout", !isBottomNav && "skIpWidget__ipAssetLayout--topNav")}> - <IPAssetHeader /> - {children} - </div> - ) -} - -function IPAssetDropdownMenu() { - const { assetData } = useIpAssetContext() - return ( - <Menu as="div" className="skIpWidget__ipAssetDropdownMenu"> - <div> - <Menu.Button className="skIpWidget__ipAssetDropdownMenu__button"> - <svg - xmlns="http://www.w3.org/2000/svg" - width="24" - height="24" - viewBox="0 0 24 24" - fill="none" - stroke="currentColor" - strokeWidth="2" - strokeLinecap="round" - strokeLinejoin="round" - > - <circle cx="12" cy="12" r="1" /> - <circle cx="12" cy="5" r="1" /> - <circle cx="12" cy="19" r="1" /> - </svg> - </Menu.Button> - </div> - - <Transition - as={Fragment} - enter="transition ease-out duration-100" - enterFrom="transform opacity-0 scale-95" - enterTo="transform opacity-100 scale-100" - leave="transition ease-in duration-75" - leaveFrom="transform opacity-100 scale-100" - leaveTo="transform opacity-0 scale-95" - > - <Menu.Items className="skIpWidget__ipAssetDropdownMenu__items"> - {assetData?.rootIpIds?.[0]?.id && ( - <div className="skIpWidget__ipAssetDropdownMenu__rootIp"> - <p className="skIpWidget__ipAssetDropdownMenu__rootIp__title">Root IP</p> - <div className="skIpWidget__ipAssetDropdownMenu__rootIp__item"> - <img - src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} - alt={assetData?.rootIpIds?.[0]?.id as Address} - ></img> - <p>{shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)}</p> - </div> - </div> - )} - {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( - <div className="skIpWidget__ipAssetDropdownMenu__parentIp"> - <p className="skIpWidget__ipAssetDropdownMenu__parentIp__title">Parent IPs</p> - <div className="skIpWidget__ipAssetDropdownMenu__parentIp__item"> - <div className="skIpWidget__ipAssetDropdownMenu__parentIp__avatars"> - {assetData?.parentIpIds?.slice(0, 5).map((asset, index) => ( - <img - key={index} - style={{ - zIndex: ((assetData?.parentIpIds?.length as number) - index) * 10, - }} - src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} - alt={asset.id} - /> - ))} - </div> - <p className="skIpWidget__ipAssetDropdownMenu__parentIp__addresses"> - {assetData?.parentIpIds?.length === 1 - ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) - : `${assetData?.parentIpIds?.length} total `} - </p> - </div> - </div> - )} - {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( - <div className="skIpWidget__ipAssetDropdownMenu__childIp"> - <p className="skIpWidget__ipAssetDropdownMenu__childIp__title">Child IPs</p> - <div className="skIpWidget__ipAssetDropdownMenu__childIp__container"> - <div className="skIpWidget__ipAssetDropdownMenu__childIp__avatars"> - {assetData?.childIpIds?.slice(0, 5).map((asset, index) => ( - <img - key={index} - style={{ - zIndex: ((assetData?.childIpIds?.length as number) - index) * 5, - }} - src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} - alt={asset.id} - /> - ))} - </div> - <p className="skIpWidget__ipAssetDropdownMenu__childIp__addresses"> - {assetData?.childIpIds?.length === 1 - ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) - : `${assetData?.childIpIds?.length} total `} - </p> - </div> - </div> - )} - <div className="skIpWidget__ipAssetDropdownMenu__menu"> - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <FaWandMagicSparkles className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - Remix - </a> - )} - </Menu.Item> - - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <SiOpensea className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - View on Opensea - </a> - )} - </Menu.Item> - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <TbLicense className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - Buy License - </a> - )} - </Menu.Item> - <Menu.Item> - {({ active }) => ( - <a - href="#" - className={cn( - "skIpWidget__ipAssetDropdownMenu__menu__link", - active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" - )} - > - <IoIosShareAlt className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> - Share - </a> - )} - </Menu.Item> - </div> - </Menu.Items> - </Transition> - </Menu> - ) -} - -function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { - const { nftData, assetData } = useIpAssetContext() - return ( - <div className="skIpWidget__ipAssetHeader"> - <div className="skIpWidget__ipAssetHeader__inner"> - <div - className={cn("skIpWidget__ipAssetHeader__image", hideImage && "skIpWidget__ipAssetHeader__image--hidden")} - > - <img src={nftData?.image_url} /> - </div> - <div> - <div> - <h1 className="skIpWidget__ipAssetHeader__name"> - {assetData?.nftMetadata.name || nftData?.name || "Untitled"} - </h1> - <h2 className="skIpWidget__ipAssetHeader__owner"> - Owned by{" "} - <span className="skIpWidget__ipAssetHeader__owner__address"> - {shortenAddress(nftData?.owners[0].owner_address as string)} - </span> - </h2> - </div> - </div> - </div> - <IPAssetDropdownMenu /> - </div> - ) -} - -function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { - const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() - - const isLoading = isAssetDataLoading || isNftDataLoading - - const Title = () => - isLoading ? ( - <div className="skIpWidget__ipAssetOverview__titleLoading"> - <div></div> - <div></div> - </div> - ) : ( - <IPAssetHeader hideImage /> - ) - - const AssetImage = () => - isLoading ? ( - <div className="skIpWidget__ipAssetOverview__assetImage__loading"> - <div> - <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 18"> - <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> - </svg> - </div> - </div> - ) : ( - <div className="skIpWidget__ipAssetOverview__assetImage"> - <img src={nftData?.image_url} /> - </div> - ) - - const TitleBar = () => ( - <div - className={cn( - "skIpWidget__ipAssetOverview__titleBar", - isBottomNav && "skIpWidget__ipAssetOverview__titleBar--bottom" - )} - > - <Title /> - </div> - ) - - return ( - <div className="skIpWidget__ipAssetOverview"> - {isBottomNav && <TitleBar />} - <AssetImage /> - {!isBottomNav && <TitleBar />} - </div> - ) -} - -IpWidget.displayName = "IpWidget" - -export default IpWidget diff --git a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx deleted file mode 100644 index c23faf9..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import IpWidget from "../IpWidget" - -const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ - ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", - isBottomNav = false, -}) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpWidget ipId={ipId} isBottomNav={isBottomNav} /> - </div> - </QueryClientProvider> - ) -} - -export default Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx deleted file mode 100644 index e7797aa..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx +++ /dev/null @@ -1,34 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpWidgetStory from "./IpWidget.stories" - -<Meta of={IpWidgetStory} /> - -# IP Asset Widget - -IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. - -#### Example - -<Canvas of={IpWidgetStory.Select} /> - -<Controls /> - -## Usage - -```ts -import { IpWidget } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> - ); -}; - -export default ExamplePage; -``` - -#### Arguments - -- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. -- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx deleted file mode 100644 index 0385ca9..0000000 --- a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "IP Assets/IpWidget", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - argTypes: { - isBottomNav: { control: "boolean", defaultValue: true }, - }, - args: {}, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - isBottomNav: true, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - isBottomNav: true, - }, -} diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx deleted file mode 100644 index 86d2dd2..0000000 --- a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render } from "@testing-library/react" - -import IpWidget from "../IpWidget" - -describe("IpWidget", () => { - test("renders the IpWidget component", () => { - render(<IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} />) - }) -}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts deleted file mode 100644 index 00d52ff..0000000 --- a/packages/storykit/src/components/IpWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/IpWidget/styles.css b/packages/storykit/src/components/IpWidget/styles.css deleted file mode 100644 index e120f5a..0000000 --- a/packages/storykit/src/components/IpWidget/styles.css +++ /dev/null @@ -1,218 +0,0 @@ -.skIpWidget { - @apply flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg; - - .skIpWidget__card { - @apply flex size-full flex-auto flex-col p-2; - } - - .skIpWidget__tabs { - @apply w-full px-2 pt-2; - - &.skIpWidget__tabs--bottom { - @apply pb-2 pt-0; - } - - .skIpWidget__tabsContainer { - @apply flex space-x-1; - } - - .skIpWidget__tabsInner { - @apply flex w-full justify-between; - } - - .skIpWidget__tab { - @apply relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2; - - &.skIpWidget__tab--active { - @apply hover:text-black/60; - } - } - - .skIpWidget__activeTab { - @apply absolute inset-0 z-10 bg-white mix-blend-difference rounded-full; - } - } - - .skIpWidget__policyContainer { - @apply p-2; - - .skIpPolicyAccordion--no-policy { - @apply w-full items-center py-32; - } - } - - .skIpWidget__ipAssetLayout { - @apply flex gap-2 flex-col; - - .skIpWidget__ipAssetLayout--topNav { - @apply flex-col-reverse justify-between h-full flex-auto; - } - - .skIpRoyaltyPieChart--empty { - @apply w-full items-center py-32; - } - } - - .skIpWidget__ipAssetDropdownMenu { - @apply relative inline-block text-left; - - .skIpWidget__ipAssetDropdownMenu__button { - @apply inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm; - - svg { - @apply size-4 flex-none text-gray-600; - } - } - - .skIpWidget__ipAssetDropdownMenu__items { - @apply absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none; - } - - .skIpWidget__ipAssetDropdownMenu__rootIp { - @apply px-4 py-2; - - .skIpWidget__ipAssetDropdownMenu__rootIp__title { - @apply text-xs text-slate-400; - } - - .skIpWidget__ipAssetDropdownMenu__rootIp__item { - @apply flex items-center; - - > img { - @apply relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white; - } - - > p { - @apply truncate text-sm text-gray-900; - } - } - } - - .skIpWidget__ipAssetDropdownMenu__parentIp { - @apply px-4 py-2; - - .skIpWidget__ipAssetDropdownMenu__parentIp__title { - @apply text-xs text-slate-400; - } - - .skIpWidget__ipAssetDropdownMenu__parentIp__avatars { - @apply mr-3 -space-x-3; - - img { - @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; - } - } - .skIpWidget__ipAssetDropdownMenu__parentIp__addresses { - @apply truncate text-sm text-gray-900; - } - } - - .skIpWidget__ipAssetDropdownMenu__childIp { - @apply px-4 py-2; - - .skIpWidget__ipAssetDropdownMenu__childIp__title { - @apply text-xs text-slate-400; - } - .skIpWidget__ipAssetDropdownMenu__childIp__container { - @apply flex items-center; - } - .skIpWidget__ipAssetDropdownMenu__childIp__avatars { - @apply mr-3 -space-x-3; - - img { - @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; - } - } - .skIpWidget__ipAssetDropdownMenu__childIp__addresses { - @apply truncate text-sm text-gray-900; - } - } - - .skIpWidget__ipAssetDropdownMenu__menu { - @apply py-1; - - .skIpWidget__ipAssetDropdownMenu__menu__link { - @apply flex items-center px-4 py-2 text-sm text-gray-700; - - .skIpWidget__ipAssetDropdownMenu__menu__icon { - @apply mr-3 size-5 text-gray-400; - } - - &.skIpWidget__ipAssetDropdownMenu__menu__link--active { - @apply bg-gray-100 text-gray-900; - - .skIpWidget__ipAssetDropdownMenu__menu__icon { - @apply text-gray-500; - } - } - } - } - } - - .skIpWidget__ipAssetHeader { - @apply flex w-full flex-row justify-between; - - .skIpWidget__ipAssetHeader__inner { - @apply flex w-full flex-row justify-start gap-2; - } - - .skIpWidget__ipAssetHeader__image { - &.skIpWidget__ipAssetHeader__image--hidden { - @apply hidden; - } - img { - @apply size-10 rounded-md object-cover; - } - } - .skIpWidget__ipAssetHeader__name { - @apply font-semibold; - } - .skIpWidget__ipAssetHeader__owner { - @apply text-xs; - .skIpWidget__ipAssetHeader__owner__address { - @apply text-slate-400; - } - } - } - - .skIpWidget__ipAssetOverview { - @apply flex w-full flex-col items-start justify-start; - - .skIpWidget__ipAssetOverview__titleBar { - @apply flex w-full flex-row justify-between pt-1; - - &.skIpWidget__ipAssetOverview__titleBar--bottom { - @apply pb-1 pt-0; - } - } - - .skIpWidget__ipAssetOverview__titleLoading { - @apply flex animate-pulse flex-col gap-2; - div:nth-child(1) { - @apply h-4 w-20 rounded bg-slate-200; - } - div:nth-child(2) { - @apply h-3 w-32 rounded bg-slate-200; - } - } - - .skIpWidget__ipAssetOverview__assetImage { - @apply flex w-full justify-center text-center; - - img { - @apply rounded-md object-contain; - } - } - .skIpWidget__ipAssetOverview__assetImage__loading { - @apply w-full animate-pulse py-1; - - > div { - @apply flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700; - - > svg { - @apply size-10 text-slate-100 dark:text-slate-600; - } - } - } - } -} diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts deleted file mode 100644 index db39fd2..0000000 --- a/packages/storykit/src/components/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./Button" -export * from "./IpWidget" -export * from "./IpGraph" -export * from "./IpPolicyAccordion" -export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/declarations.d.ts b/packages/storykit/src/declarations.d.ts deleted file mode 100644 index a5ad056..0000000 --- a/packages/storykit/src/declarations.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "*.module.css" { - const classes: { [key: string]: string } - export default classes -} diff --git a/packages/storykit/src/global.css b/packages/storykit/src/global.css deleted file mode 100644 index 413f711..0000000 --- a/packages/storykit/src/global.css +++ /dev/null @@ -1,67 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* @layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; - - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; - - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 222.2 84% 4.9%; - - --radius: 0.5rem; - } - - .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; - - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; - - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; - - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; - - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; - - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; - - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; - - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; - - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 212.7 26.8% 83.9%; - } -} */ diff --git a/packages/storykit/src/index.ts b/packages/storykit/src/index.ts deleted file mode 100644 index 6efd0b2..0000000 --- a/packages/storykit/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./components" -export * from "./providers" diff --git a/packages/storykit/src/lib/api.ts b/packages/storykit/src/lib/api.ts deleted file mode 100644 index 562f0cb..0000000 --- a/packages/storykit/src/lib/api.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { QueryOptions, ResourceType } from "./types" - -const API_BASE_URL = - process.env.STORYBOOK_API_BASE_URL || process.env.NEXT_PUBLIC_API_BASE_URL || process.env.API_BASE_URL || "" -const API_KEY = - process.env.STORYBOOK_STORY_PROTOCOL_X_API_KEY || - process.env.NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY || - process.env.STORY_PROTOCOL_X_API_KEY || - "" - -export async function getResource(resourceName: ResourceType, resourceId: string) { - try { - const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { - method: "GET", - headers: { - "Content-Type": "application/json", - "x-api-key": API_KEY as string, - "X-CHAIN": "sepolia", - }, - }) - if (res.ok) { - return res.json() - } - } catch (error) { - console.error(error) - } -} - -export async function listResource(resourceName: ResourceType, options?: QueryOptions) { - try { - const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}`, { - method: "POST", - headers: { - "Content-Type": "application/json", - "x-api-key": API_KEY as string, - "X-CHAIN": "sepolia", - }, - cache: "no-cache", - ...(options && { body: JSON.stringify({ options }) }), - }) - if (res.ok) { - return res.json() - } else { - return res - } - } catch (error) { - console.error(error) - } -} diff --git a/packages/storykit/src/lib/graph.ts b/packages/storykit/src/lib/graph.ts deleted file mode 100644 index 09852aa..0000000 --- a/packages/storykit/src/lib/graph.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { Asset } from "@/lib/types" -import { Address } from "viem" - -export interface GraphNode { - id: string - name: string - val: number - tokenContract?: string | Address - tokenId?: string - level?: number - isRoot?: boolean -} - -interface Link { - source: string - target: string -} - -export interface GraphData { - nodes: GraphNode[] - links: Link[] -} - -export function convertJsonToGraphFormat(ipAssets: Asset[]): GraphData { - const nodes: GraphNode[] = [] - const links: Link[] = [] - - // Map ids to their corresponding objects for quick access - const idToObjectMap: { [id: string]: Asset } = {} - for (const obj of ipAssets) { - idToObjectMap[obj.id] = obj - } - - // Create nodes - for (const asset of ipAssets) { - const nodeName = asset.nftMetadata.name || "Untitled" - const node: GraphNode = { - id: asset.id, - name: nodeName, - val: 1, - tokenContract: asset.nftMetadata.tokenContract, - } - nodes.push(node) - - // Create links - if (asset.childIpIds) { - for (const childId of asset.childIpIds) { - const childObj = idToObjectMap[childId.id] - if (childObj && childObj.parentIpIds) { - for (const parentObj of childObj.parentIpIds) { - links.push({ - source: parentObj.id, - target: childObj.id, - }) - } - } - } - } - } - - return { nodes, links } -} - -export function convertAssetToGraphFormat(jsonData: Asset): GraphData { - const rootIpId = jsonData.rootIpIds?.[0]?.id - const nodes: GraphNode[] = [] - const links: Link[] = [] - - // Create node for the main object - const mainNode: GraphNode = { - id: jsonData.id, - name: jsonData.nftMetadata.name || "Untitled", - tokenContract: jsonData.nftMetadata.tokenContract, - tokenId: jsonData.nftMetadata.tokenId, - val: 1, - level: 0, - isRoot: rootIpId === undefined, - } - nodes.push(mainNode) - - // Add all childIpIds to nodes array and create links - if (jsonData.childIpIds) { - for (const child of jsonData.childIpIds) { - const childNode: GraphNode = { - id: child.id, - name: child.nftMetadata.name || "Untitled", - tokenContract: child.nftMetadata.tokenContract, - tokenId: child.nftMetadata.tokenId, - val: 1, - level: 1, - } - nodes.push(childNode) - - links.push({ - source: jsonData.id, - target: child.id, - }) - } - } - - // Add all parentIpIds to nodes array and create links - if (jsonData.parentIpIds) { - for (const parent of jsonData.parentIpIds) { - const parentNode: GraphNode = { - id: parent.id, - name: parent.nftMetadata.name || "Untitled", - tokenContract: parent.nftMetadata.tokenContract, - tokenId: parent.nftMetadata.tokenId, - val: 1, - level: -1, // assuming parent is one level up - isRoot: parent.id === rootIpId, - } - nodes.push(parentNode) - links.push({ - source: parent.id, - target: jsonData.id, - }) - } - } - - return { nodes, links } -} diff --git a/packages/storykit/src/lib/simplehash/index.ts b/packages/storykit/src/lib/simplehash/index.ts deleted file mode 100644 index 3e28a76..0000000 --- a/packages/storykit/src/lib/simplehash/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Address } from "viem" - -import { CollectionMetadata, NFTMetadata, NFTWalletResponse } from "./types/simplehash" - -const createRequestOptions = (): RequestInit => ({ - method: "GET", - headers: { - accept: "application/json", - "X-API-KEY": - process.env.STORYBOOK_SIMPLE_HASH_API_KEY || - process.env.NEXT_PUBLIC_SIMPLE_HASH_API_KEY || - process.env.SIMPLE_HASH_API_KEY || - "", - }, -}) - -export const getNFTByTokenId = async (contractAddress: Address, tokenId: string): Promise<NFTMetadata> => { - const options = createRequestOptions() - const url = `https://api.simplehash.com/api/v0/nfts/ethereum-sepolia/${contractAddress}/${tokenId}` - const response = await fetch(url, options) - const data = await response.json() - return data -} - -export const getCollectionByAddress = async (contractAddress: Address): Promise<CollectionMetadata> => { - const options = createRequestOptions() - const url = `https://api.simplehash.com/api/v0/nfts/collections/ethereum-sepolia/${contractAddress}` - const response = await fetch(url, options) - const data = await response.json() - return data.collections[0] -} - -export const getNFTByWallet = async (walletAddress: Address): Promise<NFTWalletResponse> => { - const options = createRequestOptions() - const url = `https://api.simplehash.com/api/v0/nfts/owners?chains=ethereum-sepolia&wallet_addresses=${walletAddress}` - const response = await fetch(url, options) - const data = await response.json() - return data -} diff --git a/packages/storykit/src/lib/simplehash/types/simplehash.d.ts b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts deleted file mode 100644 index c3dc429..0000000 --- a/packages/storykit/src/lib/simplehash/types/simplehash.d.ts +++ /dev/null @@ -1,143 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -export type NFTWalletResponse = { - next_cursor: string | null - next: string | null - previous: string | null - nfts: NFTMetadata[] -} - -export type NFTMetadata = { - nft_id: string - chain: string - contract_address: string - token_id: string - name: string - description: string - previews: { - image_small_url: string - image_medium_url: string - image_large_url: string - image_opengraph_url: string - blurhash: string - predominant_color: string - } - image_url: string - image_properties: { - width: number - height: number - size: number - mime_type: string - } - video_url: string | null - video_properties: any - audio_url: string | null - audio_properties: any - model_url: string | null - model_properties: any - other_url: string | null - other_properties: any - background_color: string | null - external_url: string | null - created_date: string - status: string - token_count: number - owner_count: number - owners: { - owner_address: string - quantity: number - quantity_string: string - first_acquired_date: string - last_acquired_date: string - }[] - contract: { - type: string - name: string - symbol: string - deployed_by: string - deployed_via_contract: string | null - owned_by: string - has_multiple_collections: boolean - } - collection: CollectionMetadata - last_sale: any - first_created: { - minted_to: string - quantity: number - quantity_string: string - timestamp: string - block_number: number - transaction: string - transaction_initiator: string - } - rarity: { - rank: number - score: number - unique_attributes: number - } - royalty: CollectionRoyalties[] - extra_metadata: { - attributes: { - trait_type: string - value: string - display_type: string | null - }[] - image_original_url: string - animation_original_url: string - metadata_original_url: string - } -} - -export type SPExtendedNFTMetadata = NFTMetadata & { - isRegistered?: boolean - ipId?: string -} - -export type CollectionResponse = { - next_cursor: string | null - next: string | null - previous: string | null - collections: CollectionMetadata[] -} - -export type CollectionMetadata = { - collection_id: string - name: string - description: string - image_url: string - banner_image_url: string - category: string - is_nsfw: boolean - external_url: string - twitter_username: string - discord_url: string - instagram_username: string - medium_username: string - telegram_url: string - marketplace_pages: MarketplacePage[] - metaplex_mint: string - metaplex_candy_machine: string - metaplex_first_verified_creator: string - floor_prices: any[] - top_bids: any[] - distinct_owner_count: number - distinct_nft_count: number - total_quantity: number - chains: string[] - top_contracts: string[] - collection_royalties: CollectionRoyalties[] -} - -export type MarketplacePage = { - marketplace_id: string - marketplace_name: string - marketplace_collection_id: string - collection_url: string - verified: boolean -} - -export type CollectionRoyalties = { - source: string - total_creator_fee_basis_points: number - recipients: any[] -} diff --git a/packages/storykit/src/lib/types.ts b/packages/storykit/src/lib/types.ts deleted file mode 100644 index c5d6b4a..0000000 --- a/packages/storykit/src/lib/types.ts +++ /dev/null @@ -1,325 +0,0 @@ -import { Address } from "viem" - -export const POLICY_TYPE = { - NON_COMMERCIAL_SOCIAL_REMIXING: "Non-Commercial Social Remixing", - COMMERCIAL_USE: "Commercial Use", - COMMERCIAL_REMIX: "Commercial Remix", - OPEN_DOMAIN: "Open Domain", - NO_DERIVATIVE: "No Derivative", -} - -export enum RESOURCE_TYPE { - ASSET = "assets", - COLLECTION = "collections", - DISPUTE = "disputes", - IPA_POLICY = "licenses/ip/terms", - LICENSE = "licenses/tokens", - LICENSE_MINT_FEES = "licenses/mintingfees", - LICENSE_OWNER = "licenses/owners", - MODULE = "modules", - PERMISSION = "permissions", - POLICY = "licenses/terms", - POLICY_FRAMEWORK = "licenses/templates", - ROYALTY = "royalties", - ROYALTY_PAY = "royalties/payments", - ROYALTY_POLICY = "royalties/policies", - ROYALTY_SPLIT = "royalties/splits", - TAGS = "tags", - TRANSACTION = "transactions", -} - -export type ResourceType = - | RESOURCE_TYPE.ASSET - | RESOURCE_TYPE.COLLECTION - | RESOURCE_TYPE.TRANSACTION - | RESOURCE_TYPE.LICENSE - | RESOURCE_TYPE.LICENSE_MINT_FEES - | RESOURCE_TYPE.LICENSE_OWNER - | RESOURCE_TYPE.MODULE - | RESOURCE_TYPE.POLICY - | RESOURCE_TYPE.PERMISSION - | RESOURCE_TYPE.POLICY_FRAMEWORK - | RESOURCE_TYPE.TAGS - | RESOURCE_TYPE.IPA_POLICY - | RESOURCE_TYPE.ROYALTY - | RESOURCE_TYPE.ROYALTY_PAY - | RESOURCE_TYPE.ROYALTY_POLICY - | RESOURCE_TYPE.ROYALTY_SPLIT - | RESOURCE_TYPE.DISPUTE - -export type PaginationOptions = { - limit?: number - offset?: number -} - -export type AssetFilterOptions = { - chainId?: string - metadataResolverAddress?: string - tokenContract?: string - tokenId?: string -} - -export type DisputeFilterOptions = { - currentTag?: string - initiator?: string - targetIpId?: string - targetTag?: string -} - -export type PermissionFilterOptions = { - signer?: string - to?: string -} - -export type PolicyFilterOptions = { - policyFrameworkManager?: string -} - -export type PolicyFrameworkFilterOptions = { - address?: string - name?: string -} - -export type RoyaltyFilterOptions = { - ipId?: string | null - royaltyPolicy?: string | null -} - -export type TagFilterOptions = { - ipId?: string - tag?: string -} -export type RoyaltyPayFilterOptions = { - ipId?: string - payerIpId?: string - receiverIpId?: string - sender?: string - token?: string -} - -export type ModuleFilterOptions = { - name?: string -} - -export type LicenseFilterOptions = { - licensorIpdId?: Address - policyId?: string -} - -export type LicenseFrameworkFilterOptions = { - creator?: string -} - -export type LicenseOwnerFilterOptions = { - owner?: string -} - -export type IPAPolicyFilterOptions = { - active?: string - inherited?: string - policyId?: string -} - -export type TransactionFilterOptions = { - actionType?: string - resourceId?: string -} - -export type FilterOptions = - | AssetFilterOptions - | DisputeFilterOptions - | PermissionFilterOptions - | PolicyFilterOptions - | PolicyFrameworkFilterOptions - | RoyaltyFilterOptions - | TagFilterOptions - | RoyaltyPayFilterOptions - | ModuleFilterOptions - | LicenseFilterOptions - | LicenseFrameworkFilterOptions - | LicenseOwnerFilterOptions - | IPAPolicyFilterOptions - | TransactionFilterOptions - -export type QueryOptions = { - pagination: PaginationOptions - where?: FilterOptions -} - -export type Transaction = { - id: string - createdAt: string - actionType: string - initiator: Address - ipId: Address - resourceId: Address - resourceType: string -} - -export type Asset = { - id: Address - parentIpIds: Asset[] | null - childIpIds: Asset[] | null - rootIpIds: Asset[] | null - nftMetadata: { - name: string - chainId: string - tokenContract: Address - tokenId: string - tokenUri: string - imageUrl: string - } - blockNumber: string - blockTimestamp: string -} - -export type Permission = { - id: string - permission: string - signer: Address - to: Address - func: string - blockNumber: string - blockTimestamp: string -} - -export type License = { - id: string - licensorIpId: Address - licenseTemplate: string - licenseTermsId: string - transferable: boolean - owner: Address - mintedAt: string - expiresAt: string - burntAt: string - blockNumber: string - blockTime: string -} - -export type PolicyFramework = { - id: string - name: string - metadataUri: string - blockNumber: string - blockTime: string -} - -export type Module = { - id: string - name: string - module: string - blockNumber: string - blockTimestamp: string - deletedAt: string -} - -export type Tag = { - id: string - uuid: string - ipId: Address - tag: string - deletedAt: string - blockNumber: string - blockTimestamp: string -} - -export type IPAPolicy = { - id: string - ipId: Address - licenseTemplate: string - licenseTermsId: string - blockNumber: string - blockTime: string -} - -export type RoyaltyPay = { - id: string - receiverIpId: Address - payerIpId: Address - sender: Address - token: Address - amount: string - blockNumber: string - blockTimestamp: string -} - -export type Royalty = { - id: string - ipId: Address - data: string - royaltyPolicy: Address - blockNumber: string - blockTimestamp: string -} - -export type RoyaltyPolicy = { - id: Address - ancestorsVault: Address - splitClone: Address - royaltyStack: string - targetAncestors: Address[] - targetRoyaltyAmount: string[] - blockNumber: string - blockTimestamp: string -} - -export type Dispute = { - id: string - targetIpId: Address - targetTag: Address - currentTag: Address - arbitrationPolicy: Address - evidenceLink: string - initiator: Address - data: string - blockNumber: string - blockTimestamp: string -} - -export type Collection = { - id: string - assetCount: string - licensesCount: string - resolvedDisputeCount: string - cancelledDisputeCount: string - raisedDisputeCount: string - judgedDisputeCount: string - blockNumber: string - blockTimestamp: string -} - -export type Policy = { - id: string - json: string - licenseTemplate: Address - blockNumber: string - blockTime: string -} - -export type PILType = { - commercialAttribution: boolean - commercialRevenueCelling: number - commercialRevenueShare: number - commercialUse: boolean - commercializerCheck: Address - currency: Address - derivativesAllowed: boolean - derivativesApproval: boolean - derivativesAttribution: boolean - derivativesReciprocal: boolean - derivativesRevenueCelling: number - expiration: string - URI: string -} - -export type RoyaltySplit = { - id: Address - holders: RoyaltyHolder[] - claimFromIPPoolArg: string -} - -export type RoyaltyHolder = { - id: Address - ownership: string -} diff --git a/packages/storykit/src/lib/utils.ts b/packages/storykit/src/lib/utils.ts deleted file mode 100644 index 4d6d29e..0000000 --- a/packages/storykit/src/lib/utils.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { type ClassValue, clsx } from "clsx" -import { twMerge } from "tailwind-merge" - -import { PILType, POLICY_TYPE } from "./types" - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)) -} - -export function shortenAddress(address: string, length = 4): string { - if (!address) { - return "" - } - if (address.length < 2 * length + 2) { - // Check if the address is too short to be shortened. - return address - } - - const start = address.substring(0, length + 2) - const end = address.substring(address.length - length) - return `${start}...${end}` -} - -export function camelize(str: string) { - return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) { - if (+match === 0) return "" // or if (/\s+/.test(match)) for white spaces - return index === 0 ? match.toLowerCase() : match.toUpperCase() - }) -} - -export function getPolicyTypeByPILData(pilData: PILType) { - const { derivativesAttribution, derivativesAllowed, commercialUse, derivativesReciprocal } = pilData - - if (commercialUse) { - if (!derivativesReciprocal) { - return POLICY_TYPE.COMMERCIAL_USE - } else { - return POLICY_TYPE.COMMERCIAL_REMIX - } - } else { - if (!derivativesAllowed) { - return POLICY_TYPE.NO_DERIVATIVE - } else { - if (derivativesAttribution) { - return POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING - } else { - return POLICY_TYPE.OPEN_DOMAIN - } - } - } -} diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx deleted file mode 100644 index 3375937..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { useQuery } from "@tanstack/react-query" -import React from "react" -import { Address } from "viem" - -import { getResource, listResource } from "../../lib/api" -import { getNFTByTokenId } from "../../lib/simplehash" -import { NFTMetadata } from "../../lib/simplehash/types/simplehash" -import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" -import { camelize } from "../../lib/utils" - -const IpAssetContext = React.createContext<{ - // activeTab: string - // setActiveTab: React.Dispatch<React.SetStateAction<string>> - assetData: Asset | undefined - nftData: NFTMetadata | undefined - isNftDataLoading: boolean - isAssetDataLoading: boolean - ipPolicyData: IPAPolicy[] | undefined - isIPAPolicyDataLoading: boolean - policyData: Policy[] | undefined - isPolicyDataLoading: boolean - licenseData: License[] | undefined - isLicenseDataLoading: boolean - royaltyData: RoyaltyPolicy | undefined - isRoyaltyDataLoading: boolean -} | null>(null) - -export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { - // Fetch asset data - const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ - queryKey: [RESOURCE_TYPE.ASSET, ipId], - queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), - }) - - const ipaPolicyQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - } - // Fetch IPPolicy data - const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ - queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), - }) - - async function fetchPolicyDetails(data: IPAPolicy[]) { - const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) - - const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) - const results = await Promise.all(requests) - - return results.map((result) => { - return { - ...result.data, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { - return { - ...acc, - [camelize(option.trait_type)]: - option.value === "true" ? true : option.value === "false" ? false : option.value, - } - }, {}), - } - }) - } - - const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ - queryKey: ["fetchPolicyDetails", ipPolicyData?.data], - queryFn: () => fetchPolicyDetails(ipPolicyData?.data), - enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), - }) - - const licenseQueryOptions = { - pagination: { - limit: 0, - offset: 0, - }, - where: { - licensorIpdId: ipId, - }, - } - // Fetch License Data - const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ - queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], - queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), - }) - - // Fetch Royalty Data - const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ - queryKey: [ - RESOURCE_TYPE.ROYALTY_POLICY, - { - pagination: { - limit: 0, - offset: 0, - }, - where: { - ipId, - }, - }, - ], - queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), - }) - - // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], - // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), - // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), - // }) - const { isLoading: isNftDataLoading, data: nftData } = useQuery({ - queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], - queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), - enabled: - Boolean(assetData) && - Boolean(assetData.data.nftMetadata.tokenContract) && - Boolean(assetData.data.nftMetadata.tokenId), - }) - - return ( - <IpAssetContext.Provider - value={{ - // activeTab, - // setActiveTab, - nftData, - isNftDataLoading, - assetData: assetData?.data, - isAssetDataLoading, - ipPolicyData: ipPolicyData?.data, - isIPAPolicyDataLoading, - policyData: policyData, - isPolicyDataLoading, - licenseData: licenseData?.data, - isLicenseDataLoading, - royaltyData: royaltyData?.data, - isRoyaltyDataLoading, - }} - > - {children} - </IpAssetContext.Provider> - ) -} - -export const useIpAssetContext = () => { - const context = React.useContext(IpAssetContext) - if (!context) { - throw new Error("useAccount must be used within an IpAssetProvider") - } - return context -} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx deleted file mode 100644 index a84a01b..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import React, { FC } from "react" -import { Address } from "viem" - -import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" - -const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { - const queryClient = new QueryClient() - return ( - <QueryClientProvider client={queryClient}> - <div - style={{ - display: "flex", - justifyContent: "center", - alignItems: "center", - height: "100%", - }} - > - <IpAssetProvider ipId={ipId}> - <ExampleComponent /> - </IpAssetProvider> - </div> - </QueryClientProvider> - ) -} - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - return ( - <> - {isNftDataLoading && <div>Fetching Asset...</div>} - {nftData && !isNftDataLoading ? ( - <div className="grid grid-cols-4 gap-4"> - <> - <div className="col-span-1 text-xs text-gray-600">nft_id</div> - <div className="col-span-3 text-sm">{nftData.nft_id}</div> - - <div className="col-span-1 text-xs text-gray-600">chain</div> - <div className="col-span-3 text-sm">{nftData.chain}</div> - - <div className="col-span-1 text-xs text-gray-600">contract_address</div> - <div className="col-span-3 text-sm">{nftData.contract_address}</div> - - <div className="col-span-1 text-xs text-gray-600">token_id</div> - <div className="col-span-3 text-sm">{nftData.token_id}</div> - - <div className="col-span-1 text-xs text-gray-600">name</div> - <div className="col-span-3 text-sm">{nftData.name}</div> - - <div className="col-span-1 text-xs text-gray-600">description</div> - <div className="col-span-3 text-sm">{nftData.description}</div> - </> - </div> - ) : null} - </> - ) -} - -export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx deleted file mode 100644 index cbfbf01..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import { Canvas, Controls, Meta } from "@storybook/blocks" - -import * as IpAssetProviderStory from "./IpAssetProvider.stories" - -<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> - -# IpAssetProvider - -Provides IP Asset data to children components. - -#### Example - -<Canvas of={IpAssetProviderStory.Select} /> - -<Controls /> - -## Usage - -```ts -// wrap your component with the IpAssetProvider - -import { IpAssetProvider } from "@storyprotocol/storykit" -import ExampleComponent from './ExampleComponent' - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -export default ExamplePage; -``` - -```ts -// in your component file, context provides IP asset state - -import { useIpAssetContext } from "@storyprotocol/storykit" - -const ExampleComponent = () => { - - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; - -export default ExampleComponent; -``` - -#### Provider data - -The IpAssetProvider provides the following data to its children: - -- **assetData** - The IP Asset data. -- **isAssetDataLoading** - IP Asset data loading state. -- **nftData** - The NFT Metadata. -- **isNftDataLoading** - NFT Metadata loading state. -- **ipPolicyData** - Policies attached to the IP Asset. -- **isIPAPolicyDataLoading** - Policy data loading state. -- **policyData** - The Policy details including the template id, address and terms. -- **isPolicyDataLoading** - Policy data loading state. -- **licenseData** - IP Asset minted Licenses. -- **isLicenseDataLoading** - License data loading state. -- **royaltyData** - The Royalty Policy data. -- **isRoyaltyDataLoading** - Royalty Policy data loading state. - -#### Arguments - -- **children** - The child component to provide the IP Asset context to. -- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx deleted file mode 100644 index cd7231b..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { PREVIEW_IP_ASSETS } from "@/stories/data" -import type { Meta, StoryObj } from "@storybook/react" - -import Example from "./Example" - -const meta = { - title: "Providers/IpAssetProvider", - component: Example, - parameters: { - layout: "centered", - }, - // tags: ["autodocs"], - // argTypes: {}, - // argTypes: { - // ipId: { - // options: [ - // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", - // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", - // ], - // // control: { type: "select" }, // Automatically inferred when 'options' is defined - // }, - // }, - // args: { - // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", - // }, -} satisfies Meta<typeof Example> - -export default meta -type Story = StoryObj<typeof meta> - -export const Select: Story = { - argTypes: { - ipId: { - options: PREVIEW_IP_ASSETS, - }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} -export const Input: Story = { - argTypes: { - ipId: { control: "text" }, - }, - args: { - ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, - }, -} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx deleted file mode 100644 index 8d5a16c..0000000 --- a/packages/storykit/src/stories/Introduction.mdx +++ /dev/null @@ -1,201 +0,0 @@ -import { Meta } from "@storybook/blocks" - -<Meta title="Introduction" /> - -# Storykit - -Plug-and-play React components for Story Protocol. - -## Installation - -_Storykit is a private package so you need repo access and a personal access token to use_ - -1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) - -2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: - -```bash -//npm.pkg.github.com/:_authToken=NPM_TOKEN -@storyprotocol/storykit:registry=https://npm.pkg.github.com -``` - -3 . Add `.npmrc` to your `.gitignore` to keep your access token private. - -4 . Install the package and the required dependencies: - -```bash -npm install @storyprotocol/storykit @tanstack/react-query -``` - -## Deploying on vercel - -To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: - -```bash -//npm.pkg.github.com/:_authToken=${NPM_TOKEN} -@storyprotocol/storykit:registry=https://npm.pkg.github.com -``` - -OR... - -You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. - -See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. - -## Dependencies - -Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. - -Some components have additional dependencies including: - -- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) -- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) - -See the individual component docs ro see if they require an additional dependency or install them all at once with: - -```bash -npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d -``` - -## Run locally - -### Storybook - -Run Storybook locally for component development and documentation: - -```bash -pnpm dev -``` - -Find the Storybook at [http://localhost:6006](http://localhost:6006) - -### Example app - -Run the next.js [example app](../examples/next-app/): - -```bash -pnpm build -pnpm dev-example -``` - -The dev server will be running at [http://localhost:3000](http://localhost:3000) - -### Linting and formatting - -Lint with eslint: - -```bash -pnpm lint -``` - -Format with prettier: - -```bash -pnpm format -``` - -## Usage - -Using Storykit in your React app - -### Include React Query - -React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. - -```typescript -// app/layout.tsx - -import Providers from "./Providers" - -export default function Layout({children}) { - return ( - <html> - <body> - <Providers>{children}</Providers> - </body> - </html> - ) -} -``` - -```typescript -// app/Providers.tsx - -"use client" - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" - -const queryClient = new QueryClient() - -export default function Providers({ children }) { - return ( - <QueryClientProvider client={queryClient}> - {children} - </QueryClientProvider> - ) -} - -``` - -### The IpAssetProvider - -The IpAssetProvider provides IP Asset data to child components. - -```typescript -import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <ExampleComponent /> - </IpAssetProvider> - ); -}; - -const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() - - return ( - <div> - {isNftDataLoading && <div>Fetching Asset...</div>} - - {nftData && !isNftDataLoading ? ( - <div>nft id: {nftData.nft_id}</div> - ) : null} - </div> - ); -}; -``` - -### The IpGraph - -Some components require the IpAssetProvider to supply asset data - -```typescript -import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> - <IpGraph /> - </IpAssetProvider> - ); -}; -``` - -### The IpWidget - -The IpAssetProvider is already included in the IpWidget - -```typescript -import { IpWidget } from "@storyprotocol/storykit" - -const ExamplePage = () => { - return ( - <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> - ) -} - -``` - -See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/packages/storykit/src/stories/data/index.ts b/packages/storykit/src/stories/data/index.ts deleted file mode 100644 index ec9074b..0000000 --- a/packages/storykit/src/stories/data/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const PREVIEW_IP_ASSETS = [ - "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", - "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", - "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", - "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", - "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", - "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", -] diff --git a/packages/storykit/tailwind.config.js b/packages/storykit/tailwind.config.js deleted file mode 100644 index 6211183..0000000 --- a/packages/storykit/tailwind.config.js +++ /dev/null @@ -1,72 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: ["class"], - content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], - prefix: "", - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - // extend: { - // colors: { - // border: "hsl(var(--border))", - // input: "hsl(var(--input))", - // ring: "hsl(var(--ring))", - // background: "hsl(var(--background))", - // foreground: "hsl(var(--foreground))", - // primary: { - // DEFAULT: "hsl(var(--primary))", - // foreground: "hsl(var(--primary-foreground))", - // }, - // secondary: { - // DEFAULT: "hsl(var(--secondary))", - // foreground: "hsl(var(--secondary-foreground))", - // }, - // destructive: { - // DEFAULT: "hsl(var(--destructive))", - // foreground: "hsl(var(--destructive-foreground))", - // }, - // muted: { - // DEFAULT: "hsl(var(--muted))", - // foreground: "hsl(var(--muted-foreground))", - // }, - // accent: { - // DEFAULT: "hsl(var(--accent))", - // foreground: "hsl(var(--accent-foreground))", - // }, - // popover: { - // DEFAULT: "hsl(var(--popover))", - // foreground: "hsl(var(--popover-foreground))", - // }, - // card: { - // DEFAULT: "hsl(var(--card))", - // foreground: "hsl(var(--card-foreground))", - // }, - // }, - // borderRadius: { - // lg: "var(--radius)", - // md: "calc(var(--radius) - 2px)", - // sm: "calc(var(--radius) - 4px)", - // }, - // keyframes: { - // "accordion-down": { - // from: { height: "0" }, - // to: { height: "var(--radix-accordion-content-height)" }, - // }, - // "accordion-up": { - // from: { height: "var(--radix-accordion-content-height)" }, - // to: { height: "0" }, - // }, - // }, - // animation: { - // "accordion-down": "accordion-down 0.2s ease-out", - // "accordion-up": "accordion-up 0.2s ease-out", - // }, - // }, - }, - plugins: [require("tailwindcss-animate")], -} diff --git a/packages/storykit/tsconfig.json b/packages/storykit/tsconfig.json deleted file mode 100644 index ca92804..0000000 --- a/packages/storykit/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@storykit/typescript-config/react-library.json", - "include": ["src"], - "compilerOptions": { - "paths": { - "@/*": ["./src/*"] - } - }, - "exclude": ["dist", "build", "node_modules"] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index c2d139e..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,17293 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@storykit/eslint-config': - specifier: workspace:* - version: link:packages/config-eslint - eslint: - specifier: ^8.57.0 - version: 8.57.0 - husky: - specifier: ^9.0.11 - version: 9.0.11 - lint-staged: - specifier: ^15.2.2 - version: 15.2.2 - prettier: - specifier: ^3.2.5 - version: 3.2.5 - turbo: - specifier: ^1.12.2 - version: 1.13.3 - - examples/next-app: - dependencies: - '@storyprotocol/storykit': - specifier: workspace:* - version: link:../../packages/storykit - '@tanstack/react-query': - specifier: ^5.28.9 - version: 5.32.0(react@18.3.0) - next: - specifier: 14.1.4 - version: 14.1.4(react-dom@18.3.0)(react@18.3.0) - react: - specifier: ^18 - version: 18.3.0 - react-apexcharts: - specifier: ^1.4.1 - version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) - react-dom: - specifier: ^18 - version: 18.3.0(react@18.3.0) - react-force-graph-2d: - specifier: ^1.25.4 - version: 1.25.4(react@18.3.0) - devDependencies: - '@next/eslint-plugin-next': - specifier: ^14.1.1 - version: 14.2.3 - '@storykit/eslint-config': - specifier: workspace:* - version: link:../../packages/config-eslint - '@storykit/prettier-config': - specifier: workspace:* - version: link:../../packages/config-prettier - '@storykit/typescript-config': - specifier: workspace:* - version: link:../../packages/config-typescript - '@types/node': - specifier: ^20 - version: 20.12.7 - '@types/react': - specifier: ^18 - version: 18.3.0 - '@types/react-dom': - specifier: ^18 - version: 18.3.0 - eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-next: - specifier: 14.2.1 - version: 14.2.1(eslint@8.57.0)(typescript@5.4.5) - prettier: - specifier: ^3.2.5 - version: 3.2.5 - typescript: - specifier: ^5 - version: 5.4.5 - - packages/config-eslint: - devDependencies: - '@typescript-eslint/eslint-plugin': - specifier: ^7.1.0 - version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: ^7.1.0 - version: 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@vercel/style-guide': - specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-config-turbo: - specifier: ^1.12.4 - version: 1.13.3(eslint@8.57.0) - eslint-plugin-only-warn: - specifier: ^1.1.0 - version: 1.1.0 - typescript: - specifier: ^5.3.3 - version: 5.4.5 - - packages/config-prettier: - devDependencies: - '@trivago/prettier-plugin-sort-imports': - specifier: ^4.3.0 - version: 4.3.0(prettier@3.2.5) - prettier: - specifier: ^3.2.5 - version: 3.2.5 - - packages/config-typescript: {} - - packages/storykit: - dependencies: - '@emotion/is-prop-valid': - specifier: ^1.2.2 - version: 1.2.2 - '@emotion/react': - specifier: ^11.11.4 - version: 11.11.4(@types/react@18.3.0)(react@18.3.0) - '@headlessui/react': - specifier: ^1.7.18 - version: 1.7.19(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-accordion': - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - class-variance-authority: - specifier: ^0.7.0 - version: 0.7.0 - clsx: - specifier: ^2.1.0 - version: 2.1.1 - lucide-react: - specifier: ^0.364.0 - version: 0.364.0(react@18.3.0) - react-icons: - specifier: ^5.0.1 - version: 5.1.0(react@18.3.0) - tailwind-merge: - specifier: ^2.2.2 - version: 2.3.0 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.3 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.3) - viem: - specifier: ^2.7.19 - version: 2.9.27(typescript@5.4.5) - devDependencies: - '@chromatic-com/storybook': - specifier: ^1.2.25 - version: 1.3.3(react@18.3.0) - '@rollup/plugin-commonjs': - specifier: ^25.0.7 - version: 25.0.7(rollup@4.16.4) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.16.4) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@4.16.4) - '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.16.4)(typescript@5.4.5) - '@storybook/addon-essentials': - specifier: ^8.0.4 - version: 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@storybook/addon-interactions': - specifier: ^8.0.4 - version: 8.0.9(@types/jest@29.5.12)(jest@27.5.1) - '@storybook/addon-links': - specifier: ^8.0.4 - version: 8.0.9(react@18.3.0) - '@storybook/addon-onboarding': - specifier: ^8.0.4 - version: 8.0.9 - '@storybook/addon-styling-webpack': - specifier: ^1.0.0 - version: 1.0.0(webpack@5.91.0) - '@storybook/addon-themes': - specifier: ^8.0.4 - version: 8.0.9 - '@storybook/blocks': - specifier: ^8.0.4 - version: 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@storybook/manager-api': - specifier: ^8.0.4 - version: 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/preset-create-react-app': - specifier: ^8.0.4 - version: 8.0.9(react-refresh@0.14.1)(react-scripts@5.0.1)(typescript@5.4.5)(webpack@5.91.0) - '@storybook/react': - specifier: ^8.0.4 - version: 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) - '@storybook/react-webpack5': - specifier: ^8.0.4 - version: 8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) - '@storybook/test': - specifier: ^8.0.4 - version: 8.0.9(@types/jest@29.5.12)(jest@27.5.1) - '@storybook/theming': - specifier: ^8.0.4 - version: 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storykit/eslint-config': - specifier: workspace:* - version: link:../config-eslint - '@storykit/prettier-config': - specifier: workspace:* - version: link:../config-prettier - '@storykit/typescript-config': - specifier: workspace:* - version: link:../config-typescript - '@tailwindcss/nesting': - specifier: 0.0.0-insiders.565cd3e - version: 0.0.0-insiders.565cd3e(postcss@8.4.38) - '@tanstack/react-query': - specifier: ^5.25.0 - version: 5.32.0(react@18.3.0) - '@testing-library/jest-dom': - specifier: ^5.17.0 - version: 5.17.0 - '@testing-library/react': - specifier: ^13.4.0 - version: 13.4.0(react-dom@18.3.0)(react@18.3.0) - '@testing-library/user-event': - specifier: ^13.5.0 - version: 13.5.0(@testing-library/dom@10.0.0) - '@turbo/gen': - specifier: ^1.12.4 - version: 1.13.3(@types/node@20.12.7)(typescript@5.4.5) - '@types/eslint': - specifier: ^8.56.5 - version: 8.56.10 - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 - '@types/node': - specifier: ^20.11.24 - version: 20.12.7 - '@types/react': - specifier: ^18.2.61 - version: 18.3.0 - '@types/react-dom': - specifier: ^18.2.19 - version: 18.3.0 - eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-plugin-prettier: - specifier: ^5.1.3 - version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) - eslint-plugin-react: - specifier: ^7.34.1 - version: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.1(eslint@8.57.0) - eslint-plugin-storybook: - specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.0)(typescript@5.4.5) - postcss: - specifier: ^8.4.38 - version: 8.4.38 - postcss-nesting: - specifier: ^12.1.2 - version: 12.1.2(postcss@8.4.38) - prettier: - specifier: ^3.2.5 - version: 3.2.5 - prop-types: - specifier: ^15.8.1 - version: 15.8.1 - react: - specifier: ^18.2.0 - version: 18.3.0 - react-apexcharts: - specifier: ^1.4.1 - version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) - react-dom: - specifier: ^18.2.0 - version: 18.3.0(react@18.3.0) - react-force-graph-2d: - specifier: ^1.25.4 - version: 1.25.4(react@18.3.0) - react-scripts: - specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) - rollup: - specifier: ^4.13.1 - version: 4.16.4 - rollup-plugin-dts: - specifier: ^6.1.0 - version: 6.1.0(rollup@4.16.4)(typescript@5.4.5) - rollup-plugin-peer-deps-external: - specifier: ^2.2.4 - version: 2.2.4(rollup@4.16.4) - rollup-plugin-postcss: - specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.38) - storybook: - specifier: ^8.0.4 - version: 8.0.9(react-dom@18.3.0)(react@18.3.0) - typescript: - specifier: ^5.3.3 - version: 5.4.5 - webpack: - specifier: ^5.91.0 - version: 5.91.0(esbuild@0.20.2) - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@adobe/css-tools@4.3.3: - resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} - dev: true - - /@adraffy/ens-normalize@1.10.0: - resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} - dev: false - - /@alloc/quick-lru@5.2.0: - 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'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - - /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.12.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: true - - /@aw-web-design/x-default-browser@1.4.126: - resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} - hasBin: true - dependencies: - default-browser-id: 3.0.0 - dev: true - - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 - - /@babel/compat-data@7.24.4: - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.24.4: - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.4 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@8.57.0): - resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.24.4 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - dev: true - - /@babel/generator@7.17.7: - resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - - /@babel/generator@7.24.4: - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: true - - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: true - - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: true - - /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.4): - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-plugin-utils@7.24.0: - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - dev: true - - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - dev: true - - /@babel/helpers@7.24.4: - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} - engines: {node: '>=6.9.0'} - requiresBuild: true - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - - /@babel/parser@7.24.4: - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.4): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.4): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - dev: true - - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.4): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.4): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - dev: true - - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.4): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - dev: true - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - dev: true - - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/template': 7.24.0 - dev: true - - /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 - dev: true - - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.4): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/types': 7.24.0 - dev: true - - /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - regenerator-transform: 0.15.2 - dev: true - - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4): - resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/preset-env@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) - core-js-compat: 3.37.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-flow@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/types': 7.24.0 - esutils: 2.0.3 - dev: true - - /@babel/preset-react@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.4) - dev: true - - /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) - dev: true - - /@babel/register@7.23.7(@babel/core@7.24.4): - resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - dev: true - - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: true - - /@babel/runtime-corejs3@7.24.4: - resolution: {integrity: sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==} - engines: {node: '>=6.9.0'} - dependencies: - core-js-pure: 3.37.0 - regenerator-runtime: 0.14.1 - dev: true - - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - dev: true - - /@babel/traverse@7.23.2: - resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/traverse@7.24.1: - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.17.0: - resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - /@base2/pretty-print-object@1.0.1: - resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} - dev: true - - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true - - /@chromatic-com/storybook@1.3.3(react@18.3.0): - resolution: {integrity: sha512-1y9r691T5vVGDZ0HY3YrCXUnvtrT2YrhDuvDZSvYSNUVpM/Imz6i1dnNMKb3eoI1qRsH55mI4zCt+Iq94NLedQ==} - engines: {node: '>=16.0.0', yarn: '>=1.22.18'} - dependencies: - chromatic: 11.3.0 - filesize: 10.1.1 - jsonfile: 6.1.0 - react-confetti: 6.1.0(react@18.3.0) - strip-ansi: 7.1.0 - transitivePeerDependencies: - - '@chromatic-com/cypress' - - '@chromatic-com/playwright' - - react - dev: true - - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: true - optional: true - - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@csstools/normalize.css@12.1.1: - resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} - dev: true - - /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.38): - resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /@csstools/postcss-color-function@1.1.1(postcss@8.4.38): - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.38): - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.38): - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.38): - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.38): - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.38): - resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.38): - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.38): - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.38): - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.38): - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.38): - resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.38): - resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} - engines: {node: ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-unset-value@1.0.2(postcss@8.4.38): - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - dev: true - - /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16): - resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.13 - dependencies: - postcss-selector-parser: 6.0.16 - dev: true - - /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.16): - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.10 - dependencies: - postcss-selector-parser: 6.0.16 - dev: true - - /@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16): - resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.13 - dependencies: - postcss-selector-parser: 6.0.16 - dev: true - - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: true - - /@emotion/babel-plugin@11.11.0: - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - dependencies: - '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.4 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.4 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - dev: false - - /@emotion/cache@11.11.0: - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - dev: false - - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: false - - /@emotion/is-prop-valid@1.2.2: - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - dependencies: - '@emotion/memoize': 0.8.1 - dev: false - - /@emotion/memoize@0.8.1: - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - dev: false - - /@emotion/react@11.11.4(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.4 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.0) - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.3.0 - hoist-non-react-statics: 3.3.2 - react: 18.3.0 - dev: false - - /@emotion/serialize@1.1.4: - resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.3 - dev: false - - /@emotion/sheet@1.2.2: - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: false - - /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: false - - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.0): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.3.0 - - /@emotion/utils@1.2.1: - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: false - - /@emotion/weak-memoize@0.3.1: - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: false - - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@fal-works/esbuild-plugin-global-externals@2.1.2: - resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} - dev: true - - /@headlessui/react@1.7.19(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} - engines: {node: '>=10'} - peerDependencies: - react: ^16 || ^17 || ^18 - react-dom: ^16 || ^17 || ^18 - dependencies: - '@tanstack/react-virtual': 3.4.0(react-dom@18.3.0)(react@18.3.0) - client-only: 0.0.1 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - dev: true - - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - dev: true - - /@jest/console@28.1.3: - resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 20.12.7 - chalk: 4.1.2 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - slash: 3.0.0 - dev: true - - /@jest/core@27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.5 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - jest-mock: 27.5.1 - dev: true - - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - dev: true - - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.12.7 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true - - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - dev: true - - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/schemas@28.1.3: - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@sinclair/typebox': 0.24.51 - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 - dev: true - - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-result@28.1.3: - resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/console': 28.1.3 - '@jest/types': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.24.4 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.7 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - dev: true - - /@jest/types@28.1.3: - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.7 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.7 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@leichtgewicht/ip-codec@2.0.5: - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - dev: true - - /@mdx-js/react@3.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 18.3.0 - react: 18.3.0 - dev: true - - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - dev: true - - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - dev: true - - /@ndelangen/get-tarball@3.0.9: - resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} - dependencies: - gunzip-maybe: 1.4.2 - pump: 3.0.0 - tar-fs: 2.1.1 - dev: true - - /@next/env@14.1.4: - resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} - dev: false - - /@next/eslint-plugin-next@14.2.1: - resolution: {integrity: sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==} - dependencies: - glob: 10.3.10 - dev: true - - /@next/eslint-plugin-next@14.2.3: - resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} - dependencies: - glob: 10.3.10 - dev: true - - /@next/swc-darwin-arm64@14.1.4: - resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-x64@14.1.4: - resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu@14.1.4: - resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-musl@14.1.4: - resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-gnu@14.1.4: - resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-musl@14.1.4: - resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-arm64-msvc@14.1.4: - resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-ia32-msvc@14.1.4: - resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-x64-msvc@14.1.4: - resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 - dev: true - - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - dependencies: - '@noble/hashes': 1.3.2 - dev: false - - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - optional: true - - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true - - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0): - resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.37.0 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.5.2 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 3.3.0 - source-map: 0.7.4 - webpack: 5.91.0(esbuild@0.20.2) - webpack-dev-server: 4.15.2(webpack@5.91.0) - dev: true - - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.1)(webpack@5.91.0): - resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.37.0 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.5.2 - loader-utils: 2.0.4 - react-refresh: 0.14.1 - schema-utils: 3.3.0 - source-map: 0.7.4 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /@radix-ui/primitive@1.0.1: - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - dependencies: - '@babel/runtime': 7.24.4 - dev: false - - /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@types/react': 18.3.0 - react: 18.3.0 - - /@radix-ui/react-context@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@types/react': 18.3.0 - react: 18.3.0 - dev: false - - /@radix-ui/react-direction@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@types/react': 18.3.0 - react: 18.3.0 - dev: false - - /@radix-ui/react-id@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - react: 18.3.0 - dev: false - - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@radix-ui/react-slot@1.0.2(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - react: 18.3.0 - - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@types/react': 18.3.0 - react: 18.3.0 - dev: false - - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.0)(react@18.3.0) - '@types/react': 18.3.0 - react: 18.3.0 - dev: false - - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.4 - '@types/react': 18.3.0 - react: 18.3.0 - dev: false - - /@rollup/plugin-babel@5.3.1(@babel/core@7.24.4)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.24.3 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - dev: true - - /@rollup/plugin-commonjs@25.0.7(rollup@4.16.4): - resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 - magic-string: 0.30.10 - rollup: 4.16.4 - dev: true - - /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - dev: true - - /@rollup/plugin-node-resolve@15.2.3(rollup@4.16.4): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 4.16.4 - dev: true - - /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - dev: true - - /@rollup/plugin-terser@0.4.4(rollup@4.16.4): - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - rollup: 4.16.4 - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.30.4 - dev: true - - /@rollup/plugin-typescript@11.1.6(rollup@4.16.4)(typescript@5.4.5): - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: '*' - typescript: '>=3.7.0' - peerDependenciesMeta: - rollup: - optional: true - tslib: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) - resolve: 1.22.8 - rollup: 4.16.4 - typescript: 5.4.5 - dev: true - - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: true - - /@rollup/pluginutils@5.1.0(rollup@4.16.4): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 4.16.4 - dev: true - - /@rollup/rollup-android-arm-eabi@4.16.4: - resolution: {integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-android-arm64@4.16.4: - resolution: {integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.16.4: - resolution: {integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.16.4: - resolution: {integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.16.4: - resolution: {integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-musleabihf@4.16.4: - resolution: {integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.16.4: - resolution: {integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-musl@4.16.4: - resolution: {integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-powerpc64le-gnu@4.16.4: - resolution: {integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-riscv64-gnu@4.16.4: - resolution: {integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-s390x-gnu@4.16.4: - resolution: {integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-gnu@4.16.4: - resolution: {integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-musl@4.16.4: - resolution: {integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-arm64-msvc@4.16.4: - resolution: {integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-ia32-msvc@4.16.4: - resolution: {integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-x64-msvc@4.16.4: - resolution: {integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rushstack/eslint-patch@1.10.2: - resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} - dev: true - - /@scure/base@1.1.6: - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - dev: false - - /@scure/bip32@1.3.2: - resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} - dependencies: - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.6 - dev: false - - /@scure/bip39@1.2.1: - resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} - dependencies: - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.6 - dev: false - - /@sinclair/typebox@0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - dev: true - - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - - /@sinonjs/commons@1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} - dependencies: - type-detect: 4.0.8 - dev: true - - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} - dependencies: - '@sinonjs/commons': 1.8.6 - dev: true - - /@storybook/addon-actions@8.0.9: - resolution: {integrity: sha512-+I3VTvlKdj8puHeS2tyaOVv9syDiNLneVZbTfqN+UDOK2i42NwvZr8PVwjTzMlEj9eePJdCZgiipz55xwts5bw==} - dependencies: - '@storybook/core-events': 8.0.9 - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - uuid: 9.0.1 - dev: true - - /@storybook/addon-backgrounds@8.0.9: - resolution: {integrity: sha512-pCDecACrVyxPaJKEWS0sHsRb8xw+IPCSxDM1TkjaAQ6zZ468A/dcUnqW+LVK8bSXgQwWzn23wqnqPFSy5yptuQ==} - dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-controls@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-wWdmd62UP/sfPm8M7aJjEA+kEXTUIR/QsYi9PoYBhBZcXiikZ4kNan7oD7GfsnzGGKHrBVfwQhO+TqaENGYytA==} - dependencies: - '@storybook/blocks': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - lodash: 4.17.21 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - encoding - - react - - react-dom - - supports-color - dev: true - - /@storybook/addon-docs@8.0.9: - resolution: {integrity: sha512-x7hX7UuzJtClu6XwU3SfpyFhuckVcgqgD6BU6Ihxl0zs+i4xp6iKVXYSnHFMRM1sgoeT8TjPxab35Ke8w8BVRw==} - dependencies: - '@babel/core': 7.24.4 - '@mdx-js/react': 3.0.1(@types/react@18.3.0)(react@18.3.0) - '@storybook/blocks': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@storybook/client-logger': 8.0.9 - '@storybook/components': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@storybook/csf-plugin': 8.0.9 - '@storybook/csf-tools': 8.0.9 - '@storybook/global': 5.0.0 - '@storybook/node-logger': 8.0.9 - '@storybook/preview-api': 8.0.9 - '@storybook/react-dom-shim': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/types': 8.0.9 - '@types/react': 18.3.0 - fs-extra: 11.2.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - rehype-external-links: 3.0.0 - rehype-slug: 6.0.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/addon-essentials@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-mwAgdfrOsTuTDcagvM7veBh+iayZIWmKOazzkhrIWbhYcrXOsweigD2UOVeHgAiAzJK49znr4FXTCKcE1hOWcw==} - dependencies: - '@storybook/addon-actions': 8.0.9 - '@storybook/addon-backgrounds': 8.0.9 - '@storybook/addon-controls': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@storybook/addon-docs': 8.0.9 - '@storybook/addon-highlight': 8.0.9 - '@storybook/addon-measure': 8.0.9 - '@storybook/addon-outline': 8.0.9 - '@storybook/addon-toolbars': 8.0.9 - '@storybook/addon-viewport': 8.0.9 - '@storybook/core-common': 8.0.9 - '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/node-logger': 8.0.9 - '@storybook/preview-api': 8.0.9 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - encoding - - react - - react-dom - - supports-color - dev: true - - /@storybook/addon-highlight@8.0.9: - resolution: {integrity: sha512-vaRHGDbx7dpNpQECAHk5wczlZO3ntstprGlqnZt0o7ylz6xB5+pTQwTuIFty0hwKv+3TPcskzzifATUyEOEmyg==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/addon-interactions@8.0.9(@types/jest@29.5.12)(jest@27.5.1): - resolution: {integrity: sha512-AMIdNcyM6DDAWvMitBJMqp1iPZND8AXB4QT4VZHGMKG2ngHNKktriEKpTfcRkfKPGTJs9T+71dWfm6/R4tticw==} - dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.0.9 - '@storybook/test': 8.0.9(@types/jest@29.5.12)(jest@27.5.1) - '@storybook/types': 8.0.9 - polished: 4.3.1 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@jest/globals' - - '@types/bun' - - '@types/jest' - - jest - - vitest - dev: true - - /@storybook/addon-links@8.0.9(react@18.3.0): - resolution: {integrity: sha512-FVt+AdW3JFSqbJzkKiqKsMRWqHXqEvCBqFs7lNfk3OW0w0jfv1iREtrxE0dVdJoUFQC9V/2Im/EpJ7UB3C2bNQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - dependencies: - '@storybook/csf': 0.1.5 - '@storybook/global': 5.0.0 - react: 18.3.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-measure@8.0.9: - resolution: {integrity: sha512-91svOOGEXmGG4USglwXLE3wtlUVgtbKJVxTKX7xRI+AC5JEEaKByVzP17/X8Qn/8HilUL7AfSQ0kCoqtPSJ5cA==} - dependencies: - '@storybook/global': 5.0.0 - tiny-invariant: 1.3.3 - dev: true - - /@storybook/addon-onboarding@8.0.9: - resolution: {integrity: sha512-gRPn8ooxTmdamfJgdkQR48pza67S83l2DDlZ3C1kuus19UO+eIFUEVZJbud9qQojq7jc8ztaYXiNObWdxKu29A==} - dev: true - - /@storybook/addon-outline@8.0.9: - resolution: {integrity: sha512-fQ+jm356TgUnz81IxsC99/aOesbLw3N5OQRJpo/A6kqbLMzlq3ybVzuXYCKC3f0ArgQRNh4NoMeJBMRFMtaWRw==} - dependencies: - '@storybook/global': 5.0.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-styling-webpack@1.0.0(webpack@5.91.0): - resolution: {integrity: sha512-jo1kzn7pi+NA+LZxrWoRvW6w7dXIKY/BjTG80XX2uU92lIKT+X1k/9vYk/0KPVK3Bsf4tO6ToAuqIRyOk7MHtg==} - peerDependencies: - webpack: ^5.0.0 - dependencies: - '@storybook/node-logger': 8.0.9 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /@storybook/addon-themes@8.0.9: - resolution: {integrity: sha512-aAbKIT//bqKbMeRLKtVStwndi+XrYxeg94tDKTFrIv2W1It6QJlO/5FMjI+cgtHHBi6w/4ThKDYwjupasaBdlg==} - dependencies: - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-toolbars@8.0.9: - resolution: {integrity: sha512-nNSBnnBOhQ+EJwkrIkK4ZBYPcozNmEH770CZ/6NK85SUJ6WEBZapE6ru33jIUokFGEvlOlNCeai0GUc++cQP8w==} - dev: true - - /@storybook/addon-viewport@8.0.9: - resolution: {integrity: sha512-Ao4+D56cO7biaw+iTlMU1FBec1idX0cmdosDeCFZin06MSawcPkeBlRBeruaSQYdLes8TBMdZPFgfuqI5yIk6g==} - dependencies: - memoizerific: 1.11.3 - dev: true - - /@storybook/blocks@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-F2zSrfSwzTFN7qW3zB80tG+EXtmfmCDC6Ird0F7tolszb6tOqJcAcBOwQbE2O0wI63sLu21qxzXgaKBMkiWvJg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/channels': 8.0.9 - '@storybook/client-logger': 8.0.9 - '@storybook/components': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) - '@storybook/core-events': 8.0.9 - '@storybook/csf': 0.1.5 - '@storybook/docs-tools': 8.0.9 - '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/preview-api': 8.0.9 - '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/types': 8.0.9 - '@types/lodash': 4.17.0 - color-convert: 2.0.1 - dequal: 2.0.3 - lodash: 4.17.21 - markdown-to-jsx: 7.3.2(react@18.3.0) - memoizerific: 1.11.3 - polished: 4.3.1 - react: 18.3.0 - react-colorful: 5.6.1(react-dom@18.3.0)(react@18.3.0) - react-dom: 18.3.0(react@18.3.0) - telejson: 7.2.0 - tocbot: 4.27.13 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - '@types/react' - - encoding - - supports-color - dev: true - - /@storybook/builder-manager@8.0.9: - resolution: {integrity: sha512-/PxDwZIfMc/PSRZcasb6SIdGr3azIlenzx7dBF7Imt8i4jLHiAf1t00GvghlfJsvsrn4DNp95rbRbXTDyTj7tQ==} - dependencies: - '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.0.9 - '@storybook/manager': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@types/ejs': 3.1.5 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) - browser-assert: 1.2.1 - ejs: 3.1.10 - esbuild: 0.20.2 - esbuild-plugin-alias: 0.2.1 - express: 4.19.2 - fs-extra: 11.2.0 - process: 0.11.10 - util: 0.12.5 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/builder-webpack5@8.0.9(esbuild@0.20.2)(typescript@5.4.5): - resolution: {integrity: sha512-bFxlxOO2x8n3TmmA9ACxzhmHxtRd0e68dA0w4AYkvEwBf2wScRQdWJIeS5k4JgRwtcUyFYAt+VcKyE1WMgyaVg==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@storybook/channels': 8.0.9 - '@storybook/client-logger': 8.0.9 - '@storybook/core-common': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/core-webpack': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@storybook/preview': 8.0.9 - '@storybook/preview-api': 8.0.9 - '@types/node': 18.19.31 - '@types/semver': 7.5.8 - browser-assert: 1.2.1 - case-sensitive-paths-webpack-plugin: 2.4.0 - cjs-module-lexer: 1.2.3 - constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.91.0) - es-module-lexer: 1.5.0 - express: 4.19.2 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.5)(webpack@5.91.0) - fs-extra: 11.2.0 - html-webpack-plugin: 5.6.0(webpack@5.91.0) - magic-string: 0.30.10 - path-browserify: 1.0.1 - process: 0.11.10 - semver: 7.6.0 - style-loader: 3.3.4(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) - ts-dedent: 2.2.0 - typescript: 5.4.5 - url: 0.11.3 - util: 0.12.5 - util-deprecate: 1.0.2 - webpack: 5.91.0(esbuild@0.20.2) - webpack-dev-middleware: 6.1.3(webpack@5.91.0) - webpack-hot-middleware: 2.26.1 - webpack-virtual-modules: 0.5.0 - transitivePeerDependencies: - - '@rspack/core' - - '@swc/core' - - encoding - - esbuild - - supports-color - - uglify-js - - webpack-cli - dev: true - - /@storybook/channels@8.0.9: - resolution: {integrity: sha512-7Lcfyy5CsLWWGhMPO9WG4jZ/Alzp0AjepFhEreYHRPtQrfttp6qMAjE/g1aHgun0qHCYWxwqIG4NLR/hqDNrXQ==} - dependencies: - '@storybook/client-logger': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/global': 5.0.0 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - dev: true - - /@storybook/cli@8.0.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-lilYTKn8F5YOePijqfRYFa5v2mHVIJxPCIgTn+OXAmAFbcizZ6P8P6niU4J/NXulgx68Ln1M7hYhFtTP25hVTw==} - hasBin: true - dependencies: - '@babel/core': 7.24.4 - '@babel/types': 7.24.0 - '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 8.0.9 - '@storybook/core-common': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/core-server': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/csf-tools': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@storybook/telemetry': 8.0.9 - '@storybook/types': 8.0.9 - '@types/semver': 7.5.8 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - commander: 6.2.1 - cross-spawn: 7.0.3 - detect-indent: 6.1.0 - envinfo: 7.12.0 - execa: 5.1.1 - find-up: 5.0.0 - fs-extra: 11.2.0 - get-npm-tarball-url: 2.1.0 - giget: 1.2.3 - globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.24.4) - leven: 3.1.0 - ora: 5.4.1 - prettier: 3.2.5 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - semver: 7.6.0 - strip-json-comments: 3.1.1 - tempy: 1.0.1 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@babel/preset-env' - - bufferutil - - encoding - - react - - react-dom - - supports-color - - utf-8-validate - dev: true - - /@storybook/client-logger@8.0.9: - resolution: {integrity: sha512-LzV/RHkbf07sRc1Jc0ff36RlapKf9Ul7/+9VMvVbI3hshH1CpmrZK4t/tsIdpX/EVOdJ1Gg5cES06PnleOAIPA==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/codemod@8.0.9: - resolution: {integrity: sha512-VBeGpSZSQpL6iyLLqceJSNGhdCqcNwv+xC/aWdDFOkmuE1YfbmNNwpa9QYv4ZFJ2QjUsm4iTWG60qK+9NXeSKA==} - dependencies: - '@babel/core': 7.24.4 - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/types': 7.24.0 - '@storybook/csf': 0.1.5 - '@storybook/csf-tools': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@storybook/types': 8.0.9 - '@types/cross-spawn': 6.0.6 - cross-spawn: 7.0.3 - globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.24.4) - lodash: 4.17.21 - prettier: 3.2.5 - recast: 0.23.6 - tiny-invariant: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/components@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-JcwBGADzIJs0PSzqykrrD2KHzNG9wtexUOKuidt+FSv9szpUhe3qBAXIHpdfBRl7mOJ9TRZ5rt+mukEnfncdzA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) - '@storybook/client-logger': 8.0.9 - '@storybook/csf': 0.1.5 - '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/types': 8.0.9 - memoizerific: 1.11.3 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - util-deprecate: 1.0.2 - transitivePeerDependencies: - - '@types/react' - dev: true - - /@storybook/core-common@8.0.9: - resolution: {integrity: sha512-Jmue+sfHFb4GTYBzyWYw1MygoJiQSfISIrKmNIzAmZ+oR9EOr+jpu/i/bH+uetZ2Hqg1AGhj1VB7OtJp9HQyWw==} - dependencies: - '@storybook/core-events': 8.0.9 - '@storybook/csf-tools': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@storybook/types': 8.0.9 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - esbuild: 0.20.2 - esbuild-register: 3.5.0(esbuild@0.20.2) - execa: 5.1.1 - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.2.0 - glob: 10.3.10 - handlebars: 4.7.8 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - semver: 7.6.0 - tempy: 1.0.1 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util: 0.12.5 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/core-events@8.0.9: - resolution: {integrity: sha512-DxSUx7wG9Qe3OFUBnv3OrYq48J8UWNo2DUR5/JecJCtp3n++L4fAEW3J0IF5FfxpQDMQSp1yTNjZ2PaWCMd2ag==} - dependencies: - ts-dedent: 2.2.0 - dev: true - - /@storybook/core-server@8.0.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-BIe1T5YUBl0GYxEjRoTQsvXD2pyuzL8rPTUD41zlzSQM0R8U6Iant9SzRms4u0+rKUm2mGxxKuODlUo5ewqaGA==} - dependencies: - '@aw-web-design/x-default-browser': 1.4.126 - '@babel/core': 7.24.4 - '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.0.9 - '@storybook/channels': 8.0.9 - '@storybook/core-common': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/csf': 0.1.5 - '@storybook/csf-tools': 8.0.9 - '@storybook/docs-mdx': 3.0.0 - '@storybook/global': 5.0.0 - '@storybook/manager': 8.0.9 - '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/node-logger': 8.0.9 - '@storybook/preview-api': 8.0.9 - '@storybook/telemetry': 8.0.9 - '@storybook/types': 8.0.9 - '@types/detect-port': 1.3.5 - '@types/node': 18.19.31 - '@types/pretty-hrtime': 1.0.3 - '@types/semver': 7.5.8 - better-opn: 3.0.2 - chalk: 4.1.2 - cli-table3: 0.6.4 - compression: 1.7.4 - detect-port: 1.5.1 - express: 4.19.2 - fs-extra: 11.2.0 - globby: 11.1.0 - ip: 2.0.1 - lodash: 4.17.21 - open: 8.4.2 - pretty-hrtime: 1.0.3 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - semver: 7.6.0 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util: 0.12.5 - util-deprecate: 1.0.2 - watchpack: 2.4.1 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - encoding - - react - - react-dom - - supports-color - - utf-8-validate - dev: true - - /@storybook/core-webpack@8.0.9: - resolution: {integrity: sha512-lehuuAmHt/p5z8lZkMW16Y/+uDEh+Z/tExItVadtjEY8jXDe2Ilr1Cts2lvzVNuuESEKd5bqsGJ1L4t9Bf25pg==} - dependencies: - '@storybook/core-common': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@storybook/types': 8.0.9 - '@types/node': 18.19.31 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/csf-plugin@8.0.9: - resolution: {integrity: sha512-pXaNCNi++kxKsqSWwvx215fPx8cNqvepLVxQ7B69qXLHj80DHn0Q3DFBO3sLXNiQMJ2JK4OYcTxMfuOiyzszKw==} - dependencies: - '@storybook/csf-tools': 8.0.9 - unplugin: 1.10.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf-tools@8.0.9: - resolution: {integrity: sha512-PiNMhL97giLytTdQwuhsZ92buVk4gy9H/8DtrDhUc45/1OmF95gogm6T2Yap729SIFwgpOcuq/U3aVo6d6swVQ==} - dependencies: - '@babel/generator': 7.24.4 - '@babel/parser': 7.24.4 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - '@storybook/csf': 0.1.5 - '@storybook/types': 8.0.9 - fs-extra: 11.2.0 - recast: 0.23.6 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf@0.0.1: - resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} - dependencies: - lodash: 4.17.21 - dev: true - - /@storybook/csf@0.1.5: - resolution: {integrity: sha512-pW7Dtk/bE2JGrAe/KuBY4Io02NBe/2CLP2DkgVgWlSwvEVdm/rbQyiwy8RaL0lQlJCv9CsGBY+n9HQG8d4bZjQ==} - dependencies: - type-fest: 2.19.0 - dev: true - - /@storybook/docs-mdx@3.0.0: - resolution: {integrity: sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ==} - dev: true - - /@storybook/docs-tools@8.0.9: - resolution: {integrity: sha512-OzogAeOmeHea/MxSPKRBWtOQVNSpoq+OOpimO9YRA5h5GBRJ2TUOGT44Gny6QT4ll5AvQA8fIiq9KezKcLekAg==} - dependencies: - '@storybook/core-common': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/preview-api': 8.0.9 - '@storybook/types': 8.0.9 - '@types/doctrine': 0.0.3 - assert: 2.1.0 - doctrine: 3.0.0 - lodash: 4.17.21 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/global@5.0.0: - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - dev: true - - /@storybook/icons@1.2.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: true - - /@storybook/instrumenter@8.0.9: - resolution: {integrity: sha512-Gw74dgpTU/2p7FG0s7DuVdqCbJ2MEcSuRJjDo7HcXRYcvWp7I6Ly+C0v7N5VaoS+kbBVerAhLKIHZgG/LZf1og==} - dependencies: - '@storybook/channels': 8.0.9 - '@storybook/client-logger': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.0.9 - '@vitest/utils': 1.5.2 - util: 0.12.5 - dev: true - - /@storybook/manager-api@8.0.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-99b3yKArDSvfabXL7QE3nA95e4DdW/5H/ZCcr6/E2qCQJayZ6G1v/WWamKXbiaTpkndulFmcb/+ZmnDXcweIIQ==} - dependencies: - '@storybook/channels': 8.0.9 - '@storybook/client-logger': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/csf': 0.1.5 - '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/router': 8.0.9 - '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/types': 8.0.9 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - store2: 2.14.3 - telejson: 7.2.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - react - - react-dom - dev: true - - /@storybook/manager@8.0.9: - resolution: {integrity: sha512-+NnRo+5JQFGNqveKrLtC0b+Z08Tae4m44iq292bPeZMpr9OkFsIkU0PBPsHTHPkrqC/zZXRNsCsTEgvu3p2OIA==} - dev: true - - /@storybook/node-logger@8.0.9: - resolution: {integrity: sha512-5ajMdZFrYrjGLJOVDq7dlEQNFsgeLHymt4dCK9MulL/ciXykmXUZXE3Bye0wFy+I2qqDVvrvR8uzCvSFvm5MAQ==} - dev: true - - /@storybook/preset-create-react-app@8.0.9(react-refresh@0.14.1)(react-scripts@5.0.1)(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-7IjDztstczSFoLlzhWt6MAE2IKVA1B2CLiXRVlw1aK9+dv5n0ctZQzRCwwvTQXdlI3ABSqB7Gn6khKJOBYUhlg==} - peerDependencies: - react-scripts: '>=5.0.0' - dependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.1)(webpack@5.91.0) - '@storybook/types': 8.0.9 - '@types/semver': 7.5.8 - pnp-webpack-plugin: 1.7.0(typescript@5.4.5) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) - semver: 7.6.0 - transitivePeerDependencies: - - '@types/webpack' - - react-refresh - - sockjs-client - - type-fest - - typescript - - webpack - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - - /@storybook/preset-react-webpack@8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): - resolution: {integrity: sha512-kkJG03ZOJXM8fhYJuvAX9+3QVwoOMnz1tj75M/45c9i6XafPrBi2imGZWjXzuKXMxg/KO9fS/Y0JZmDh7vPM9g==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@storybook/core-webpack': 8.0.9 - '@storybook/docs-tools': 8.0.9 - '@storybook/node-logger': 8.0.9 - '@storybook/react': 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0) - '@types/node': 18.19.31 - '@types/semver': 7.5.8 - find-up: 5.0.0 - fs-extra: 11.2.0 - magic-string: 0.30.10 - react: 18.3.0 - react-docgen: 7.0.3 - react-dom: 18.3.0(react@18.3.0) - resolve: 1.22.8 - semver: 7.6.0 - tsconfig-paths: 4.2.0 - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.20.2) - transitivePeerDependencies: - - '@swc/core' - - encoding - - esbuild - - supports-color - - uglify-js - - webpack-cli - dev: true - - /@storybook/preview-api@8.0.9: - resolution: {integrity: sha512-zHfX34bkAMzzmE7vbDzaqFwSW6ExiBD0HiO1L/IsHF55f0f7xV7IH8uJyFRrDTvAoW3ReSxZDMvvPpeydFPKGA==} - dependencies: - '@storybook/channels': 8.0.9 - '@storybook/client-logger': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/csf': 0.1.5 - '@storybook/global': 5.0.0 - '@storybook/types': 8.0.9 - '@types/qs': 6.9.15 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.12.1 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - dev: true - - /@storybook/preview@8.0.9: - resolution: {integrity: sha512-tFsR8xc8AYBZZrZw8enklFbSQt7ZAV+rv20BoxwDhd3q7fjXyK7O4moGPqUwBZ7rukTG13nPoISxr+VXAk/HYA==} - dev: true - - /@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} - peerDependencies: - typescript: '>= 4.x' - webpack: '>= 4' - dependencies: - debug: 4.3.4 - endent: 2.1.0 - find-cache-dir: 3.3.2 - flat-cache: 3.2.0 - micromatch: 4.0.5 - react-docgen-typescript: 2.2.2(typescript@5.4.5) - tslib: 2.6.2 - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.20.2) - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/react-dom-shim@8.0.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-8011KlRuG3obr5pZZ7bcEyYYNWF3tR596YadoMd267NPoHKvwAbKL1L/DNgb6kiYjZDUf9QfaKSCWW31k0kcRQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: true - - /@storybook/react-webpack5@8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): - resolution: {integrity: sha512-JJIEL7fXrSurzc/pUhvZMjwVZpKuWNwjq3N9jTjwy0GxN2lDEu6glHCyMglvij/GURWvm4eXsATHUfNf47B1AA==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '>= 4.2.x' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@storybook/builder-webpack5': 8.0.9(esbuild@0.20.2)(typescript@5.4.5) - '@storybook/preset-react-webpack': 8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) - '@storybook/react': 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) - '@types/node': 18.19.31 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - typescript: 5.4.5 - transitivePeerDependencies: - - '@rspack/core' - - '@swc/core' - - encoding - - esbuild - - supports-color - - uglify-js - - webpack-cli - dev: true - - /@storybook/react@8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): - resolution: {integrity: sha512-NeQ6suZG3HKikwe3Tx9cAIaRx7uP8FKCmlVvIiBg4LTTI5orCt94PPakvuZukZcbkqvcCnEBkebAzwUpn8PiJw==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '>= 4.2.x' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@storybook/client-logger': 8.0.9 - '@storybook/docs-tools': 8.0.9 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.0.9 - '@storybook/react-dom-shim': 8.0.9(react-dom@18.3.0)(react@18.3.0) - '@storybook/types': 8.0.9 - '@types/escodegen': 0.0.6 - '@types/estree': 0.0.51 - '@types/node': 18.19.31 - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - acorn-walk: 7.2.0 - escodegen: 2.1.0 - html-tags: 3.3.1 - lodash: 4.17.21 - prop-types: 15.8.1 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - react-element-to-jsx-string: 15.0.0(react-dom@18.3.0)(react@18.3.0) - semver: 7.6.0 - ts-dedent: 2.2.0 - type-fest: 2.19.0 - typescript: 5.4.5 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/router@8.0.9: - resolution: {integrity: sha512-aAOWxbM9J4mt+cp4o88T2PB29mgBBTOzU37/pUsTHYnKnR9XI4npXEXdN8Gv+ryqM0kj0AbBpz/llFlnR2MNNA==} - dependencies: - '@storybook/client-logger': 8.0.9 - memoizerific: 1.11.3 - qs: 6.12.1 - dev: true - - /@storybook/telemetry@8.0.9: - resolution: {integrity: sha512-AGGfcup06t+wxhBIkHd0iybieOh9PDVZQJ9oPct5JGB39+ni9wvs0WOD+MYlHbsjp8id7+aGkh6mYuYOvfck+Q==} - dependencies: - '@storybook/client-logger': 8.0.9 - '@storybook/core-common': 8.0.9 - '@storybook/csf-tools': 8.0.9 - chalk: 4.1.2 - detect-package-manager: 2.0.1 - fetch-retry: 5.0.6 - fs-extra: 11.2.0 - read-pkg-up: 7.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/test@8.0.9(@types/jest@29.5.12)(jest@27.5.1): - resolution: {integrity: sha512-bRd5tBJnPzR6UKbDXONWnFWtdkNOY99HMLDUWe5fTRo50GwkrpFBVqPflhdkruEeof0kAbBUbnoN2CIYgtnAFw==} - dependencies: - '@storybook/client-logger': 8.0.9 - '@storybook/core-events': 8.0.9 - '@storybook/instrumenter': 8.0.9 - '@storybook/preview-api': 8.0.9 - '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.2(@types/jest@29.5.12)(jest@27.5.1) - '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) - '@vitest/expect': 1.3.1 - '@vitest/spy': 1.5.2 - util: 0.12.5 - transitivePeerDependencies: - - '@jest/globals' - - '@types/bun' - - '@types/jest' - - jest - - vitest - dev: true - - /@storybook/theming@8.0.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-jgfDuYoiNMMirQiASN3Eg0hGDXsEtpdAcMxyShqYGwu9elxgD9yUnYC2nSckYsM74a3ZQ3JaViZ9ZFSe2FHmeQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.0) - '@storybook/client-logger': 8.0.9 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: true - - /@storybook/types@8.0.9: - resolution: {integrity: sha512-ew0EXzk9k4B557P1qIWYrnvUcgaE0WWA5qQS0AU8l+fRTp5nvl9O3SP/zNIB0SN1qDFO7dXr3idTNTyIikTcEQ==} - dependencies: - '@storybook/channels': 8.0.9 - '@types/express': 4.17.21 - file-system-cache: 2.3.0 - dev: true - - /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - dependencies: - ejs: 3.1.10 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.11 - dev: true - - /@svgr/babel-plugin-add-jsx-attribute@5.4.0: - resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: - resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: - resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: - resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-svg-dynamic-title@5.4.0: - resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-svg-em-dimensions@5.4.0: - resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-transform-react-native-svg@5.4.0: - resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-plugin-transform-svg-component@5.5.0: - resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} - engines: {node: '>=10'} - dev: true - - /@svgr/babel-preset@5.5.0: - resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} - engines: {node: '>=10'} - dependencies: - '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 - '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 - '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 - '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 - '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 - '@svgr/babel-plugin-transform-svg-component': 5.5.0 - dev: true - - /@svgr/core@5.5.0: - resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} - engines: {node: '>=10'} - dependencies: - '@svgr/plugin-jsx': 5.5.0 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@svgr/hast-util-to-babel-ast@5.5.0: - resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} - engines: {node: '>=10'} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@svgr/plugin-jsx@5.5.0: - resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.24.4 - '@svgr/babel-preset': 5.5.0 - '@svgr/hast-util-to-babel-ast': 5.5.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@svgr/plugin-svgo@5.5.0: - resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} - engines: {node: '>=10'} - dependencies: - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - svgo: 1.3.2 - dev: true - - /@svgr/webpack@5.5.0: - resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/preset-react': 7.24.1(@babel/core@7.24.4) - '@svgr/core': 5.5.0 - '@svgr/plugin-jsx': 5.5.0 - '@svgr/plugin-svgo': 5.5.0 - loader-utils: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} - dependencies: - tslib: 2.6.2 - dev: false - - /@tailwindcss/nesting@0.0.0-insiders.565cd3e(postcss@8.4.38): - resolution: {integrity: sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-nested: 5.0.6(postcss@8.4.38) - dev: true - - /@tanstack/query-core@5.32.0: - resolution: {integrity: sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw==} - - /@tanstack/react-query@5.32.0(react@18.3.0): - resolution: {integrity: sha512-+E3UudQtarnx9A6xhpgMZapyF+aJfNBGFMgI459FnduEZqT/9KhOWnMOneZahLRt52yzskSA0AuOyLkXHK0yBA==} - peerDependencies: - react: ^18.0.0 - dependencies: - '@tanstack/query-core': 5.32.0 - react: 18.3.0 - - /@tanstack/react-virtual@3.4.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-GZN4xn/Tg5w7gvYeVcMVCeL4pEyUhvg+Cp6KX2Z01C4FRNxIWMgIQ9ibgMarNQfo+gt0PVLcEER4A9sNv/jlow==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@tanstack/virtual-core': 3.4.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: false - - /@tanstack/virtual-core@3.4.0: - resolution: {integrity: sha512-75jXqXxqq5M5Veb9KP1STi8kA5u408uOOAefk2ftHDGCpUk3RP6zX++QqfbmHJTBiU72NQ+ghgCZVts/Wocz8Q==} - dev: false - - /@testing-library/dom@10.0.0: - resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} - engines: {node: '>=18'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.4 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - - /@testing-library/dom@8.20.1: - resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} - engines: {node: '>=12'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.4 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - - /@testing-library/dom@9.3.4: - resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.4 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - - /@testing-library/jest-dom@5.17.0: - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - dependencies: - '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.4 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.17.21 - redent: 3.0.0 - dev: true - - /@testing-library/jest-dom@6.4.2(@types/jest@29.5.12)(jest@27.5.1): - resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - peerDependencies: - '@jest/globals': '>= 28' - '@types/bun': latest - '@types/jest': '>= 28' - jest: '>= 28' - vitest: '>= 0.32' - peerDependenciesMeta: - '@jest/globals': - optional: true - '@types/bun': - optional: true - '@types/jest': - optional: true - jest: - optional: true - vitest: - optional: true - dependencies: - '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.4 - '@types/jest': 29.5.12 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - jest: 27.5.1 - lodash: 4.17.21 - redent: 3.0.0 - dev: true - - /@testing-library/react@13.4.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} - engines: {node: '>=12'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@babel/runtime': 7.24.4 - '@testing-library/dom': 8.20.1 - '@types/react-dom': 18.3.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: true - - /@testing-library/user-event@13.5.0(@testing-library/dom@10.0.0): - resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@babel/runtime': 7.24.4 - '@testing-library/dom': 10.0.0 - dev: true - - /@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4): - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@testing-library/dom': 9.3.4 - dev: true - - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - - /@tootallnate/quickjs-emscripten@0.23.0: - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - dev: true - - /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5): - resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} - peerDependencies: - '@vue/compiler-sfc': 3.x - prettier: 2.x - 3.x - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - dependencies: - '@babel/generator': 7.17.7 - '@babel/parser': 7.24.4 - '@babel/traverse': 7.23.2 - '@babel/types': 7.17.0 - javascript-natural-sort: 0.7.1 - lodash: 4.17.21 - prettier: 3.2.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true - - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true - - /@turbo/gen@1.13.3(@types/node@20.12.7)(typescript@5.4.5): - resolution: {integrity: sha512-l+EM1gGzckFMaaVQyj3BVRa0QJ+tpp8HfiHOhGpBWW3Vc0Hfj92AY87Di/7HGABa+HVY7ueatMi7DJG+zkJBYg==} - hasBin: true - dependencies: - '@turbo/workspaces': 1.13.3 - chalk: 2.4.2 - commander: 10.0.1 - fs-extra: 10.1.0 - inquirer: 8.2.6 - minimatch: 9.0.4 - node-plop: 0.26.3 - proxy-agent: 6.4.0 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) - update-check: 1.5.4 - validate-npm-package-name: 5.0.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - dev: true - - /@turbo/workspaces@1.13.3: - resolution: {integrity: sha512-QYZ8g3IVQebqNM8IsBlWYOWmOKjBZY55e6lx4EDOLuch1iWmyk+U8CLAI9UomMrSaKTs1Sx+PDkt63EgakvhUw==} - hasBin: true - dependencies: - chalk: 2.4.2 - commander: 10.0.1 - execa: 5.1.1 - fast-glob: 3.3.2 - fs-extra: 10.1.0 - gradient-string: 2.0.2 - inquirer: 8.2.6 - js-yaml: 4.1.0 - ora: 4.1.1 - rimraf: 3.0.2 - semver: 7.6.0 - update-check: 1.5.4 - dev: true - - /@tweenjs/tween.js@23.1.2: - resolution: {integrity: sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==} - - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - dev: true - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - dev: true - - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 - dev: true - - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} - dependencies: - '@babel/types': 7.24.0 - dev: true - - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.12.7 - dev: true - - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - dependencies: - '@types/express-serve-static-core': 4.19.0 - '@types/node': 20.12.7 - dev: true - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/cross-spawn@6.0.6: - resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/detect-port@1.3.5: - resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} - dev: true - - /@types/doctrine@0.0.3: - resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} - dev: true - - /@types/doctrine@0.0.9: - resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - dev: true - - /@types/ejs@3.1.5: - resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} - dev: true - - /@types/emscripten@1.39.10: - resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} - dev: true - - /@types/escodegen@0.0.6: - resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} - dev: true - - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 - dev: true - - /@types/eslint@8.56.10: - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: true - - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true - - /@types/estree@0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: true - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - - /@types/express-serve-static-core@4.19.0: - resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} - dependencies: - '@types/node': 20.12.7 - '@types/qs': 6.9.15 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: true - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 - dev: true - - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 20.12.7 - dev: true - - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/hast@3.0.4: - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - dependencies: - '@types/unist': 3.0.2 - dev: true - - /@types/html-minifier-terser@6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: true - - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true - - /@types/http-proxy@1.17.14: - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/inquirer@6.5.0: - resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} - dependencies: - '@types/through': 0.0.33 - rxjs: 6.6.7 - dev: true - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true - - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - - /@types/lodash@4.17.0: - resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} - dev: true - - /@types/mdx@2.0.13: - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - dev: true - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true - - /@types/minimatch@5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true - - /@types/node-forge@1.3.11: - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/node@18.19.31: - resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true - - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - /@types/prettier@2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - dev: true - - /@types/pretty-hrtime@1.0.3: - resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} - dev: true - - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - - /@types/q@1.5.8: - resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} - dev: true - - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true - - /@types/react-dom@18.3.0: - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - dependencies: - '@types/react': 18.3.0 - - /@types/react@18.3.0: - resolution: {integrity: sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==} - dependencies: - '@types/prop-types': 15.7.12 - csstype: 3.1.3 - - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true - - /@types/resolve@1.20.6: - resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - dev: true - - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: true - - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.12.7 - dev: true - - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - dependencies: - '@types/express': 4.17.21 - dev: true - - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.12.7 - '@types/send': 0.17.4 - dev: true - - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true - - /@types/testing-library__jest-dom@5.14.9: - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} - dependencies: - '@types/jest': 29.5.12 - dev: true - - /@types/through@0.0.33: - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/tinycolor2@1.4.6: - resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} - dev: true - - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: true - - /@types/unist@3.0.2: - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - dev: true - - /@types/uuid@9.0.8: - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true - - /@types/yargs@16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare-lite: 1.4.0 - semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - dev: true - - /@typescript-eslint/scope-manager@7.2.0: - resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - dev: true - - /@typescript-eslint/scope-manager@7.7.1: - resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/visitor-keys': 7.7.1 - dev: true - - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/types@7.2.0: - resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/types@7.7.1: - resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5): - resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5): - resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@7.2.0: - resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.2.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@7.7.1: - resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.7.1 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): - resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} - engines: {node: '>=16'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.24.4 - '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) - prettier: 3.2.5 - prettier-plugin-packagejson: 2.5.0(prettier@3.2.5) - typescript: 5.4.5 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /@vitest/expect@1.3.1: - resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} - dependencies: - '@vitest/spy': 1.3.1 - '@vitest/utils': 1.3.1 - chai: 4.4.1 - dev: true - - /@vitest/spy@1.3.1: - resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} - dependencies: - tinyspy: 2.2.1 - dev: true - - /@vitest/spy@1.5.2: - resolution: {integrity: sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==} - dependencies: - tinyspy: 2.2.1 - dev: true - - /@vitest/utils@1.3.1: - resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} - dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true - - /@vitest/utils@1.5.2: - resolution: {integrity: sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==} - dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true - - /@webassemblyjs/ast@1.12.1: - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true - - /@webassemblyjs/helper-buffer@1.12.1: - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - dev: true - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - dev: true - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true - - /@webassemblyjs/helper-wasm-section@1.12.1: - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 - dev: true - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: true - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - dev: true - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true - - /@webassemblyjs/wasm-edit@1.12.1: - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 - dev: true - - /@webassemblyjs/wasm-gen@1.12.1: - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: true - - /@webassemblyjs/wasm-opt@1.12.1: - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - dev: true - - /@webassemblyjs/wasm-parser@1.12.1: - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: true - - /@webassemblyjs/wast-printer@1.12.1: - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@xtuc/long': 4.2.2 - dev: true - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true - - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.20.2): - resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} - engines: {node: '>=14.15.0'} - peerDependencies: - esbuild: '>=0.10.0' - dependencies: - esbuild: 0.20.2 - tslib: 2.6.2 - dev: true - - /@yarnpkg/fslib@2.10.3: - resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - dependencies: - '@yarnpkg/libzip': 2.3.0 - tslib: 1.14.1 - dev: true - - /@yarnpkg/libzip@2.3.0: - resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - dependencies: - '@types/emscripten': 1.39.10 - tslib: 1.14.1 - dev: true - - /@yr/monotone-cubic-spline@1.0.3: - resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: true - - /abitype@1.0.0(typescript@5.4.5): - resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - dependencies: - typescript: 5.4.5 - dev: false - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: true - - /accessor-fn@1.5.0: - resolution: {integrity: sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==} - engines: {node: '>=12'} - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - - /acorn-import-assertions@1.9.0(acorn@8.11.3): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.11.3 - dev: true - - /acorn-jsx@5.3.2(acorn@7.4.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 7.4.1 - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true - - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.3.0 - dev: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: true - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: true - - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.12.0 - fast-deep-equal: 3.1.3 - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - - /ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} - dev: true - - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - /apexcharts@3.49.0: - resolution: {integrity: sha512-2T9HnbQFLCuYRPndQLmh+bEQFoz0meUbvASaGgiSKDuYhWcLBodJtIpKql2aOtMx4B/sHrWW0dm90HsW4+h2PQ==} - dependencies: - '@yr/monotone-cubic-spline': 1.0.3 - svg.draggable.js: 2.2.2 - svg.easing.js: 2.0.0 - svg.filter.js: 2.0.2 - svg.pathmorphing.js: 0.1.3 - svg.resize.js: 1.4.3 - svg.select.js: 3.0.1 - - /app-root-dir@1.0.2: - resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - dependencies: - deep-equal: 2.2.3 - dev: true - - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - dev: true - - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true - - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: true - - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: true - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true - - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - dependencies: - call-bind: 1.0.7 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.5 - util: 0.12.5 - dev: true - - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true - - /ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - dependencies: - tslib: 2.6.2 - dev: true - - /ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} - dependencies: - tslib: 2.6.2 - dev: true - - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true - - /autoprefixer@10.4.19(postcss@8.4.38): - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001612 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: true - - /babel-core@7.0.0-bridge.0(@babel/core@7.24.4): - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.4 - dev: true - - /babel-jest@27.5.1(@babel/core@7.24.4): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.24.4 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.24.4) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0): - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.24.4 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.24.0 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - dev: true - - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.24.4 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - - /babel-plugin-named-asset-import@0.3.8(@babel/core@7.24.4): - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} - peerDependencies: - '@babel/core': ^7.1.0 - dependencies: - '@babel/core': 7.24.4 - dev: true - - /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.4): - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) - core-js-compat: 3.37.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.4): - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-transform-react-remove-prop-types@0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: true - - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - dev: true - - /babel-preset-jest@27.5.1(@babel/core@7.24.4): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) - dev: true - - /babel-preset-react-app@10.0.1: - resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.4) - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/preset-react': 7.24.1(@babel/core@7.24.4) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) - '@babel/runtime': 7.24.4 - babel-plugin-macros: 3.1.0 - babel-plugin-transform-react-remove-prop-types: 0.4.24 - transitivePeerDependencies: - - supports-color - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - dev: true - - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true - - /better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} - dependencies: - open: 8.4.2 - dev: true - - /bezier-js@6.1.4: - resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} - - /bfj@7.1.0: - resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} - engines: {node: '>= 8.0.0'} - dependencies: - bluebird: 3.7.2 - check-types: 11.2.3 - hoopy: 0.1.4 - jsonpath: 1.1.1 - tryer: 1.0.1 - dev: true - - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true - - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true - - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true - - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /bonjour-service@1.2.1: - resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} - dependencies: - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: true - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true - - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - - /browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - dev: true - - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - - /browserify-zlib@0.1.4: - resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} - dependencies: - pako: 0.2.9 - dev: true - - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001612 - electron-to-chromium: 1.4.749 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) - dev: true - - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - - /builtins@5.1.0: - resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} - dependencies: - semver: 7.6.0 - dev: true - - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: false - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - /camel-case@3.0.0: - resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} - dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 - dev: true - - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: true - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001612 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: true - - /caniuse-lite@1.0.30001612: - resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==} - - /canvas-color-tracker@1.2.1: - resolution: {integrity: sha512-i5clg2pEdaWqHuEM/B74NZNLkHh5+OkXbA/T4iaBiaNDagkOCXkLNrhqUfdUugsRwuaNRU20e/OygzxWRor3yg==} - engines: {node: '>=12'} - dependencies: - tinycolor2: 1.6.0 - - /case-sensitive-paths-webpack-plugin@2.4.0: - resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} - engines: {node: '>=4'} - dev: true - - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - - /change-case@3.1.0: - resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} - dependencies: - camel-case: 3.0.0 - constant-case: 2.0.0 - dot-case: 2.1.1 - header-case: 1.0.1 - is-lower-case: 1.1.3 - is-upper-case: 1.1.2 - lower-case: 1.1.4 - lower-case-first: 1.0.2 - no-case: 2.3.2 - param-case: 2.1.1 - pascal-case: 2.0.1 - path-case: 2.1.1 - sentence-case: 2.1.1 - snake-case: 2.1.0 - swap-case: 1.1.2 - title-case: 2.1.1 - upper-case: 1.1.3 - upper-case-first: 1.1.2 - dev: true - - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true - - /char-regex@2.0.1: - resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} - engines: {node: '>=12.20'} - dev: true - - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true - - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /check-types@11.2.3: - resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} - dev: true - - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true - - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true - - /chromatic@11.3.0: - resolution: {integrity: sha512-q1ZtJDJrjLGnz60ivpC16gmd7KFzcaA4eTb7gcytCqbaKqlHhCFr1xQmcUDsm14CK7JsqdkFU6S+JQdOd2ZNJg==} - hasBin: true - peerDependencies: - '@chromatic-com/cypress': ^0.*.* || ^1.0.0 - '@chromatic-com/playwright': ^0.*.* || ^1.0.0 - peerDependenciesMeta: - '@chromatic-com/cypress': - optional: true - '@chromatic-com/playwright': - optional: true - dev: true - - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true - - /citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - dependencies: - consola: 3.2.3 - dev: true - - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true - - /class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} - dependencies: - clsx: 2.0.0 - dev: false - - /clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: true - - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - restore-cursor: 4.0.0 - dev: true - - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true - - /cli-table3@0.6.4: - resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: true - - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - dependencies: - slice-ansi: 5.0.0 - string-width: 7.1.0 - dev: true - - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true - - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - dev: true - - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true - - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - dev: false - - /clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - dev: false - - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - - /coa@2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} - engines: {node: '>= 4.0'} - dependencies: - '@types/q': 1.5.8 - chalk: 2.4.2 - q: 1.5.1 - dev: true - - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: true - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true - - /commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - dev: true - - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: true - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - /commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true - - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: true - - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true - - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true - - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /concat-with-sourcemaps@1.1.0: - resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} - dependencies: - source-map: 0.6.1 - dev: true - - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true - - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true - - /consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true - - /constant-case@2.0.0: - resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} - dependencies: - snake-case: 2.1.0 - upper-case: 1.1.3 - dev: true - - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true - - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: true - - /core-js-compat@3.37.0: - resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} - dependencies: - browserslist: 4.23.0 - dev: true - - /core-js-pure@3.37.0: - resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==} - requiresBuild: true - dev: true - - /core-js@3.37.0: - resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==} - requiresBuild: true - dev: true - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - - /cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: true - - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - - /css-blank-pseudo@3.0.3(postcss@8.4.38): - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /css-declaration-sorter@6.4.1(postcss@8.4.38): - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - dependencies: - postcss: 8.4.38 - dev: true - - /css-has-pseudo@3.0.4(postcss@8.4.38): - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /css-loader@6.11.0(webpack@5.91.0): - resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) - postcss-value-parser: 4.2.0 - semver: 7.6.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /css-minimizer-webpack-plugin@3.4.1(esbuild@0.20.2)(webpack@5.91.0): - resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@parcel/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - dependencies: - cssnano: 5.1.15(postcss@8.4.38) - esbuild: 0.20.2 - jest-worker: 27.5.1 - postcss: 8.4.38 - schema-utils: 4.2.0 - serialize-javascript: 6.0.2 - source-map: 0.6.1 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /css-prefers-color-scheme@6.0.3(postcss@8.4.38): - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - dev: true - - /css-select-base-adapter@0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: true - - /css-select@2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} - dependencies: - boolbase: 1.0.0 - css-what: 3.4.2 - domutils: 1.7.0 - nth-check: 1.0.2 - dev: true - - /css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: true - - /css-tree@1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.4 - source-map: 0.6.1 - dev: true - - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: true - - /css-what@3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} - engines: {node: '>= 6'} - dev: true - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: true - - /cssdb@7.11.2: - resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==} - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - /cssnano-preset-default@5.2.14(postcss@8.4.38): - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.38) - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-calc: 8.2.4(postcss@8.4.38) - postcss-colormin: 5.3.1(postcss@8.4.38) - postcss-convert-values: 5.1.3(postcss@8.4.38) - postcss-discard-comments: 5.1.2(postcss@8.4.38) - postcss-discard-duplicates: 5.1.0(postcss@8.4.38) - postcss-discard-empty: 5.1.1(postcss@8.4.38) - postcss-discard-overridden: 5.1.0(postcss@8.4.38) - postcss-merge-longhand: 5.1.7(postcss@8.4.38) - postcss-merge-rules: 5.1.4(postcss@8.4.38) - postcss-minify-font-values: 5.1.0(postcss@8.4.38) - postcss-minify-gradients: 5.1.1(postcss@8.4.38) - postcss-minify-params: 5.1.4(postcss@8.4.38) - postcss-minify-selectors: 5.2.1(postcss@8.4.38) - postcss-normalize-charset: 5.1.0(postcss@8.4.38) - postcss-normalize-display-values: 5.1.0(postcss@8.4.38) - postcss-normalize-positions: 5.1.1(postcss@8.4.38) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.38) - postcss-normalize-string: 5.1.0(postcss@8.4.38) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.38) - postcss-normalize-unicode: 5.1.1(postcss@8.4.38) - postcss-normalize-url: 5.1.0(postcss@8.4.38) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.38) - postcss-ordered-values: 5.1.3(postcss@8.4.38) - postcss-reduce-initial: 5.1.2(postcss@8.4.38) - postcss-reduce-transforms: 5.1.0(postcss@8.4.38) - postcss-svgo: 5.1.0(postcss@8.4.38) - postcss-unique-selectors: 5.1.1(postcss@8.4.38) - dev: true - - /cssnano-utils@3.1.0(postcss@8.4.38): - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: true - - /cssnano@5.1.15(postcss@8.4.38): - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.38) - lilconfig: 2.1.0 - postcss: 8.4.38 - yaml: 1.10.2 - dev: true - - /csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: true - - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - /d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - dependencies: - internmap: 2.0.3 - - /d3-binarytree@1.0.2: - resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} - - /d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - /d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - /d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - /d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - /d3-force-3d@3.0.5: - resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} - engines: {node: '>=12'} - dependencies: - d3-binarytree: 1.0.2 - d3-dispatch: 3.0.1 - d3-octree: 1.0.2 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - /d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - /d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - dependencies: - d3-color: 3.1.0 - - /d3-octree@1.0.2: - resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} - - /d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - /d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} - engines: {node: '>=12'} - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - /d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - /d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - /d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - dependencies: - d3-time: 3.1.0 - - /d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.4 - - /d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - /d3-transition@3.0.1(d3-selection@3.0.0): - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - /d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true - - /data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - dev: true - - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true - - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true - - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true - - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true - - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 - is-arguments: 1.1.1 - is-array-buffer: 3.0.4 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - side-channel: 1.0.6 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true - - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: true - - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: true - - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - dev: true - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true - - /defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: true - - /degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - dev: true - - /del@5.1.0: - resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} - engines: {node: '>=8'} - dependencies: - globby: 10.0.2 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 3.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - dev: true - - /del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true - - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true - - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true - - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true - - /detect-package-manager@2.0.1: - resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - - /detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: true - - /detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true - dependencies: - address: 1.2.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - dev: true - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: true - - /dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dev: true - - /dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: true - - /dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - dev: true - - /dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: true - - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: true - - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true - - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 5.0.0 - dev: true - - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: true - - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: true - - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: true - - /dot-case@2.1.1: - resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} - dependencies: - no-case: 2.3.2 - dev: true - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true - - /dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - dev: true - - /dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: true - - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: true - - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: true - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 2.3.8 - stream-shift: 1.0.3 - dev: true - - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true - - /ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.7 - dev: true - - /electron-to-chromium@1.4.749: - resolution: {integrity: sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q==} - dev: true - - /emittery@0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: true - - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: true - - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: true - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true - - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true - - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - - /endent@2.1.0: - resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} - dependencies: - dedent: 0.7.0 - fast-json-parse: 1.0.3 - objectorarray: 1.0.5 - dev: true - - /enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true - - /envinfo@7.12.0: - resolution: {integrity: sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - - /error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - dependencies: - stackframe: 1.3.4 - dev: true - - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - dev: true - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true - - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.3 - is-set: 2.0.3 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: true - - /es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 - dev: true - - /es-module-lexer@1.5.0: - resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} - dev: true - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - dev: true - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.2 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /esbuild-plugin-alias@0.2.1: - resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} - dev: true - - /esbuild-register@3.5.0(esbuild@0.20.2): - resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} - peerDependencies: - esbuild: '>=0.12 <1' - dependencies: - debug: 4.3.4 - esbuild: 0.20.2 - transitivePeerDependencies: - - supports-color - dev: true - - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - - /eslint-config-next@14.2.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 14.2.1 - '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) - typescript: 5.4.5 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-config-prettier@9.1.0(eslint@8.57.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.57.0 - dev: true - - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5): - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.24.4 - '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - babel-preset-react-app: 10.0.1 - confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /eslint-config-turbo@1.13.3(eslint@8.57.0): - resolution: {integrity: sha512-if/QtwEiWZ5b7Bg8yZBPSvS0TeCG2Zvfa/+XBYANS7uSYucjmW+BBC8enJB0PqpB/YLGGOumeo3x7h1Nuba9iw==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - eslint: 8.57.0 - eslint-plugin-turbo: 1.13.3(eslint@8.57.0) - dev: true - - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) - dev: true - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.16.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.16.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.57.0 - ignore: 5.3.1 - dev: true - - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0): - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) - eslint: 8.57.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5): - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - jest: 27.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.24.4 - aria-query: 5.3.0 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - dev: true - - /eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - dev: true - - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0): - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - dependencies: - eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - dev: true - - /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - dependencies: - '@types/eslint': 8.56.10 - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) - prettier: 3.2.5 - prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 - dev: true - - /eslint-plugin-react-hooks@4.6.1(eslint@8.57.0): - resolution: {integrity: sha512-Ck77j8hF7l9N4S/rzSLOWEKpn994YH6iwUK8fr9mXIaQvGpQYmOnQLbiue1u5kI5T1y+gdgqosnEAO9NCz0DBg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.57.0 - dev: true - - /eslint-plugin-react@7.34.1(eslint@8.57.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - dev: true - - /eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} - engines: {node: '>= 18'} - peerDependencies: - eslint: '>=6' - dependencies: - '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - requireindex: 1.2.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - dev: true - - /eslint-plugin-turbo@1.13.3(eslint@8.57.0): - resolution: {integrity: sha512-RjmlnqYsEqnJ+U3M3IS5jLJDjWv5NsvReCpsC61n5pJ4JMHTZ/lU0EIoL1ccuL1L5wP0APzdXdByBxERcPQ+Nw==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - dotenv: 16.0.3 - eslint: 8.57.0 - dev: true - - /eslint-plugin-unicorn@48.0.1(eslint@8.57.0): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.57.0 - esquery: 1.5.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.0.2 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - regjsparser: 0.10.0 - semver: 7.6.0 - strip-indent: 3.0.0 - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.91.0): - resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.56.10 - eslint: 8.57.0 - jest-worker: 28.1.3 - micromatch: 4.0.5 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true - - /esprima@1.2.2: - resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - dev: true - - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true - - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - dependencies: - '@types/estree': 1.0.5 - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true - - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: true - - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - dev: true - - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - /fast-json-parse@1.0.3: - resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - dependencies: - reusify: 1.0.4 - - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: true - - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: true - - /fetch-retry@5.0.6: - resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} - dev: true - - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /file-loader@6.2.0(webpack@5.91.0): - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /file-system-cache@2.3.0: - resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} - dependencies: - fs-extra: 11.1.1 - ramda: 0.29.0 - dev: true - - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: true - - /filesize@10.1.1: - resolution: {integrity: sha512-L0cdwZrKlwZQkMSFnCflJ6J2Y+5egO/p3vgRSDQGxQt++QbUZe5gMbRO6kg6gzwQDPvq2Fk9AmoxUNfZ5gdqaQ==} - engines: {node: '>= 10.4.0'} - dev: true - - /filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - dev: true - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false - - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true - - /flow-parser@0.235.1: - resolution: {integrity: sha512-s04193L4JE+ntEcQXbD6jxRRlyj9QXcgEl2W6xSjH4l9x4b0eHoCHfbYHjqf9LdZFUiM5LhgpiqsvLj/AyOyYQ==} - engines: {node: '>=0.4.0'} - dev: true - - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - - /force-graph@1.43.5: - resolution: {integrity: sha512-HveLELh9yhZXO/QOfaFS38vlwJZ/3sKu+jarfXzRmbmihSOH/BbRWnUvmg8wLFiYy6h4HlH4lkRfZRccHYmXgA==} - engines: {node: '>=12'} - dependencies: - '@tweenjs/tween.js': 23.1.2 - accessor-fn: 1.5.0 - bezier-js: 6.1.4 - canvas-color-tracker: 1.2.1 - d3-array: 3.2.4 - d3-drag: 3.0.0 - d3-force-3d: 3.0.5 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 - d3-selection: 3.0.0 - d3-zoom: 3.0.0 - index-array-by: 1.4.1 - kapsule: 1.14.5 - lodash-es: 4.17.21 - - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.24.2 - '@types/json-schema': 7.0.15 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - eslint: 8.57.0 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.3 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.6.0 - tapable: 1.1.3 - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} - peerDependencies: - typescript: '>3.6.0' - webpack: ^5.11.0 - dependencies: - '@babel/code-frame': 7.24.2 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - fs-extra: 10.1.0 - memfs: 3.5.3 - minimatch: 3.1.2 - node-abort-controller: 3.1.1 - schema-utils: 3.3.0 - semver: 7.6.0 - tapable: 2.2.1 - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true - - /fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true - - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /generic-names@4.0.0: - resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} - dependencies: - loader-utils: 3.2.1 - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - dev: true - - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - dev: true - - /get-npm-tarball-url@2.1.0: - resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} - engines: {node: '>=12.17'} - dev: true - - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: true - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true - - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true - - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - - /get-uri@6.0.3: - resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} - engines: {node: '>= 14'} - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.3.4 - fs-extra: 11.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /giget@1.2.3: - resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} - hasBin: true - dependencies: - citty: 0.1.6 - consola: 3.2.3 - defu: 6.1.4 - node-fetch-native: 1.6.4 - nypm: 0.3.8 - ohash: 1.1.3 - pathe: 1.1.2 - tar: 6.2.1 - dev: true - - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true - - /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true - - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: true - - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: true - - /globby@10.0.2: - resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} - engines: {node: '>=8'} - dependencies: - '@types/glob': 7.2.0 - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - glob: 7.2.3 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.4 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - /gradient-string@2.0.2: - resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - tinygradient: 1.1.5 - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /gunzip-maybe@1.4.2: - resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true - dependencies: - browserify-zlib: 0.1.4 - is-deflate: 1.0.0 - is-gzip: 1.0.0 - peek-stream: 1.1.3 - pumpify: 1.5.1 - through2: 2.0.5 - dev: true - - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: true - - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true - - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.17.4 - dev: true - - /harmony-reflect@1.6.2: - resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - dependencies: - es-define-property: 1.0.0 - dev: true - - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - - /hast-util-heading-rank@3.0.0: - resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} - dependencies: - '@types/hast': 3.0.4 - dev: true - - /hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - dependencies: - '@types/hast': 3.0.4 - dev: true - - /hast-util-to-string@3.0.0: - resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} - dependencies: - '@types/hast': 3.0.4 - dev: true - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - - /header-case@1.0.1: - resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} - dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 - dev: true - - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - dependencies: - react-is: 16.13.1 - dev: false - - /hoopy@0.1.4: - resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} - engines: {node: '>= 6.0.0'} - dev: true - - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: true - - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - - /html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - dev: true - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - - /html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.3 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.30.4 - dev: true - - /html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - dev: true - - /html-webpack-plugin@5.6.0(webpack@5.91.0): - resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: true - - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: true - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: true - - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true - - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-middleware@2.0.6(@types/express@4.17.21): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.14 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - transitivePeerDependencies: - - debug - dev: true - - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.6 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: true - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true - - /husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} - engines: {node: '>=18'} - hasBin: true - dev: true - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /icss-replace-symbols@1.1.0: - resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} - dev: true - - /icss-utils@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - dev: true - - /idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: true - - /identity-obj-proxy@3.0.0: - resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} - engines: {node: '>=4'} - dependencies: - harmony-reflect: 1.6.2 - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true - - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: true - - /import-cwd@3.0.0: - resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} - engines: {node: '>=8'} - dependencies: - import-from: 3.0.0 - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - /import-from@3.0.0: - resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /index-array-by@1.4.1: - resolution: {integrity: sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==} - engines: {node: '>=12'} - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true - - /inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - dev: true - - /inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 6.2.0 - dev: true - - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - dev: true - - /internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - dev: true - - /ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - dev: true - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true - - /ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - dev: true - - /is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.2 - - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-deflate@1.0.0: - resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.7 - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true - - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} - dependencies: - get-east-asian-width: 1.2.0 - dev: true - - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - - /is-gzip@1.0.0: - resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true - - /is-lower-case@1.1.3: - resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} - dependencies: - lower-case: 1.1.4 - dev: true - - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: true - - /is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true - - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true - - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true - - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - dependencies: - '@types/estree': 1.0.5 - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: true - - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true - - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.15 - dev: true - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /is-upper-case@1.1.2: - resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} - dependencies: - upper-case: 1.1.3 - dev: true - - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.7 - dev: true - - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true - - /isows@1.0.3(ws@8.13.0): - resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} - peerDependencies: - ws: '*' - dependencies: - ws: 8.13.0 - dev: false - - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - dev: true - - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: true - - /javascript-natural-sort@0.7.1: - resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - dev: true - - /jerrypick@1.1.1: - resolution: {integrity: sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==} - engines: {node: '>=12'} - - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.2 - dev: true - - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-cli@27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - import-local: 3.1.0 - jest-config: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jest-config@27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - dependencies: - '@babel/core': 7.24.4 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.24.4) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true - - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.7 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.24.2 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-message-util@28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.24.2 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.24.2 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - dev: true - - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 27.5.1 - dev: true - - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-regex-util@28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: true - - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.22.8 - resolve.exports: 1.1.1 - slash: 3.0.0 - dev: true - - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.2 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - execa: 5.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 20.12.7 - graceful-fs: 4.2.11 - dev: true - - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 7.24.4 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.5 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-util@28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 20.12.7 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.12.7 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: true - - /jest-watch-typeahead@1.1.0(jest@27.5.1): - resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1 - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.1.0 - dev: true - - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.7 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: true - - /jest-watcher@28.1.3: - resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/test-result': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 20.12.7 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.3 - string-length: 4.0.2 - dev: true - - /jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.12.7 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: true - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.12.7 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest-worker@28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@types/node': 20.12.7 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest@27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - import-local: 3.1.0 - jest-cli: 27.5.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true - - /jscodeshift@0.15.2(@babel/preset-env@7.24.4): - resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - peerDependenciesMeta: - '@babel/preset-env': - optional: true - dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/preset-flow': 7.24.1(@babel/core@7.24.4) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) - '@babel/register': 7.23.7(@babel/core@7.24.4) - babel-core: 7.0.0-bridge.0(@babel/core@7.24.4) - chalk: 4.1.2 - flow-parser: 0.235.1 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.23.6 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.11.3 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.9 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true - - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - - /jsonpath@1.1.1: - resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} - dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - dev: true - - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: true - - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 - dev: true - - /kapsule@1.14.5: - resolution: {integrity: sha512-H0iSpTynUzZw3tgraDmReprpFRmH5oP5GPmaNsurSwLx2H5iCpOMIkp5q+sfhB4Tz/UJd1E1IbEE9Z6ksnJ6RA==} - engines: {node: '>=12'} - dependencies: - lodash-es: 4.17.21 - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: true - - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true - - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - dependencies: - language-subtag-registry: 0.3.22 - dev: true - - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} - dependencies: - picocolors: 1.0.0 - shell-quote: 1.8.1 - dev: true - - /lazy-universal-dotenv@4.0.0: - resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} - engines: {node: '>=14.0.0'} - dependencies: - app-root-dir: 1.0.2 - dotenv: 16.0.3 - dotenv-expand: 10.0.0 - dev: true - - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true - - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: true - - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} - engines: {node: '>=14'} - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - /lint-staged@15.2.2: - resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} - engines: {node: '>=18.12.0'} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4 - execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.1 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /listr2@8.0.1: - resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} - engines: {node: '>=18.0.0'} - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.1 - wrap-ansi: 9.0.0 - dev: true - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true - - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: true - - /loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - dev: true - - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: true - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true - - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true - - /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - dev: true - - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true - - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /log-symbols@3.0.0: - resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} - engines: {node: '>=8'} - dependencies: - chalk: 2.4.2 - dev: true - - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} - engines: {node: '>=18'} - dependencies: - ansi-escapes: 6.2.1 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /lower-case-first@1.0.2: - resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} - dependencies: - lower-case: 1.1.4 - dev: true - - /lower-case@1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - dev: true - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 - dev: true - - /lru-cache@10.2.1: - resolution: {integrity: sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==} - engines: {node: 14 || >=16.14} - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true - - /lucide-react@0.364.0(react@18.3.0): - resolution: {integrity: sha512-eHfdbJExWtTaZ0tBMGtI7PA/MbqV5wt+o4/yitDce17tadH/75Gq3Tq8jSteb3LhLr0eay/j5YUuN4yXjnI3aw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.3.0 - dev: false - - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - dev: true - - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: true - - /magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - dependencies: - pify: 4.0.1 - semver: 5.7.2 - dev: true - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: true - - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - dependencies: - semver: 7.6.0 - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: true - - /map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - dev: true - - /markdown-to-jsx@7.3.2(react@18.3.0): - resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} - engines: {node: '>= 10'} - peerDependencies: - react: '>= 0.14.0' - dependencies: - react: 18.3.0 - dev: true - - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: true - - /mdn-data@2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} - dev: true - - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true - - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} - dependencies: - fs-monkey: 1.0.5 - dev: true - - /memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} - dependencies: - map-or-similar: 1.5.0 - dev: true - - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true - - /mini-css-extract-plugin@2.9.0(webpack@5.91.0): - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.2.0 - tapable: 2.2.1 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true - - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true - - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true - - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true - - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - dev: true - - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true - - /netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - dev: true - - /next@14.1.4(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - dependencies: - '@next/env': 14.1.4 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001612 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - styled-jsx: 5.1.1(react@18.3.0) - optionalDependencies: - '@next/swc-darwin-arm64': 14.1.4 - '@next/swc-darwin-x64': 14.1.4 - '@next/swc-linux-arm64-gnu': 14.1.4 - '@next/swc-linux-arm64-musl': 14.1.4 - '@next/swc-linux-x64-gnu': 14.1.4 - '@next/swc-linux-x64-musl': 14.1.4 - '@next/swc-win32-arm64-msvc': 14.1.4 - '@next/swc-win32-ia32-msvc': 14.1.4 - '@next/swc-win32-x64-msvc': 14.1.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - - /no-case@2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} - dependencies: - lower-case: 1.1.4 - dev: true - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: true - - /node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - dev: true - - /node-dir@0.1.17: - resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} - engines: {node: '>= 0.10.5'} - dependencies: - minimatch: 3.1.2 - dev: true - - /node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - dev: true - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true - - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true - - /node-plop@0.26.3: - resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} - engines: {node: '>=8.9.4'} - dependencies: - '@babel/runtime-corejs3': 7.24.4 - '@types/inquirer': 6.5.0 - change-case: 3.1.0 - del: 5.1.0 - globby: 10.0.2 - handlebars: 4.7.8 - inquirer: 7.3.3 - isbinaryfile: 4.0.10 - lodash.get: 4.4.2 - mkdirp: 0.5.6 - resolve: 1.22.8 - dev: true - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true - - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: true - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - dependencies: - boolbase: 1.0.0 - dev: true - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: true - - /nwsapi@2.2.9: - resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} - dev: true - - /nypm@0.3.8: - resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - dependencies: - citty: 0.1.6 - consola: 3.2.3 - execa: 8.0.1 - pathe: 1.1.2 - ufo: 1.5.3 - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} - dependencies: - array.prototype.reduce: 1.0.7 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - gopd: 1.0.1 - safe-array-concat: 1.1.2 - dev: true - - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - dev: true - - /object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /objectorarray@1.0.5: - resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} - dev: true - - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true - - /ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} - dev: true - - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: true - - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: true - - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /ora@4.1.1: - resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} - engines: {node: '>=8'} - dependencies: - chalk: 3.0.0 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - log-symbols: 3.0.0 - mute-stream: 0.0.8 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - dependencies: - aggregate-error: 3.1.0 - dev: true - - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - - /p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - dev: true - - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: true - - /p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - dependencies: - p-finally: 1.0.0 - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - - /pac-proxy-agent@7.0.1: - resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} - engines: {node: '>= 14'} - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.1 - debug: 4.3.4 - get-uri: 6.0.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.3 - transitivePeerDependencies: - - supports-color - dev: true - - /pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - dev: true - - /pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true - - /param-case@2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} - dependencies: - no-case: 2.3.2 - dev: true - - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.24.2 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true - - /pascal-case@2.0.1: - resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} - dependencies: - camel-case: 3.0.0 - upper-case-first: 1.1.2 - dev: true - - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true - - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - - /path-case@2.1.1: - resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} - dependencies: - no-case: 2.3.2 - dev: true - - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - /path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 10.2.1 - minipass: 7.0.4 - - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true - - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true - - /peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} - dependencies: - buffer-from: 1.1.2 - duplexify: 3.7.1 - through2: 2.0.5 - dev: true - - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: true - - /picocolors@0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - requiresBuild: true - dev: true - - /pify@5.0.0: - resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} - engines: {node: '>=10'} - dev: true - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - /pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - dependencies: - find-up: 3.0.0 - dev: true - - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true - - /pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - dev: true - - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - dependencies: - find-up: 3.0.0 - dev: true - - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true - - /pnp-webpack-plugin@1.7.0(typescript@5.4.5): - resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} - engines: {node: '>=6'} - dependencies: - ts-pnp: 1.2.0(typescript@5.4.5) - transitivePeerDependencies: - - typescript - dev: true - - /polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - dependencies: - '@babel/runtime': 7.24.4 - dev: true - - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true - - /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.38): - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-browser-comments@4.0.0(browserslist@4.23.0)(postcss@8.4.38): - resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} - engines: {node: '>=8'} - peerDependencies: - browserslist: '>=4' - postcss: '>=8' - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - dev: true - - /postcss-calc@8.2.4(postcss@8.4.38): - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-clamp@4.1.0(postcss@8.4.38): - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-color-functional-notation@4.2.4(postcss@8.4.38): - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-color-hex-alpha@8.0.4(postcss@8.4.38): - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-color-rebeccapurple@7.1.1(postcss@8.4.38): - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-colormin@5.3.1(postcss@8.4.38): - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-convert-values@5.1.3(postcss@8.4.38): - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-custom-media@8.0.2(postcss@8.4.38): - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-custom-properties@12.1.11(postcss@8.4.38): - resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-custom-selectors@6.0.3(postcss@8.4.38): - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-dir-pseudo-class@6.0.5(postcss@8.4.38): - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-discard-comments@5.1.2(postcss@8.4.38): - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-discard-duplicates@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-discard-empty@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-discard-overridden@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-double-position-gradients@3.1.2(postcss@8.4.38): - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-env-function@4.0.6(postcss@8.4.38): - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.38): - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} - peerDependencies: - postcss: ^8.1.4 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-focus-visible@6.0.4(postcss@8.4.38): - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-focus-within@5.0.4(postcss@8.4.38): - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-font-variant@5.0.0(postcss@8.4.38): - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-gap-properties@3.0.5(postcss@8.4.38): - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-image-set-function@4.0.7(postcss@8.4.38): - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-import@15.1.0(postcss@8.4.38): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - /postcss-initial@4.0.1(postcss@8.4.38): - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-js@4.0.1(postcss@8.4.38): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.38 - - /postcss-lab-function@4.2.1(postcss@8.4.38): - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-load-config@3.1.4(postcss@8.4.38): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.38 - yaml: 1.10.2 - dev: true - - /postcss-load-config@4.0.2(postcss@8.4.38): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.1.1 - postcss: 8.4.38 - yaml: 2.4.1 - - /postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.91.0): - resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 7.1.0 - klona: 2.0.6 - postcss: 8.4.38 - semver: 7.6.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /postcss-logical@5.0.4(postcss@8.4.38): - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-media-minmax@5.0.0(postcss@8.4.38): - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-merge-longhand@5.1.7(postcss@8.4.38): - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.38) - dev: true - - /postcss-merge-rules@5.1.4(postcss@8.4.38): - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-minify-font-values@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-minify-gradients@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-minify-params@5.1.4(postcss@8.4.38): - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-minify-selectors@5.2.1(postcss@8.4.38): - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): - resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-modules-scope@3.2.0(postcss@8.4.38): - resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-modules-values@4.0.0(postcss@8.4.38): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - dev: true - - /postcss-modules@4.3.1(postcss@8.4.38): - resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} - peerDependencies: - postcss: ^8.0.0 - dependencies: - generic-names: 4.0.0 - icss-replace-symbols: 1.1.0 - lodash.camelcase: 4.3.0 - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) - string-hash: 1.1.3 - dev: true - - /postcss-nested@5.0.6(postcss@8.4.38): - resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.38): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - - /postcss-nesting@10.2.0(postcss@8.4.38): - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-nesting@12.1.2(postcss@8.4.38): - resolution: {integrity: sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 - dependencies: - '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.16) - '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-normalize-charset@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-normalize-display-values@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-positions@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-string@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-unicode@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-url@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - normalize-url: 6.1.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize-whitespace@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-normalize@10.0.1(browserslist@4.23.0)(postcss@8.4.38): - resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} - engines: {node: '>= 12'} - peerDependencies: - browserslist: '>= 4' - postcss: '>= 8' - dependencies: - '@csstools/normalize.css': 12.1.1 - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-browser-comments: 4.0.0(browserslist@4.23.0)(postcss@8.4.38) - sanitize.css: 13.0.0 - dev: true - - /postcss-opacity-percentage@1.1.3(postcss@8.4.38): - resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-ordered-values@5.1.3(postcss@8.4.38): - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-overflow-shorthand@3.0.4(postcss@8.4.38): - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-page-break@3.0.4(postcss@8.4.38): - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-place@7.0.5(postcss@8.4.38): - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-preset-env@7.8.3(postcss@8.4.38): - resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.38) - '@csstools/postcss-color-function': 1.1.1(postcss@8.4.38) - '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.38) - '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.38) - '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.38) - '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.38) - '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.38) - '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.38) - '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.38) - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) - '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.38) - '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.38) - '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.38) - '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.38) - autoprefixer: 10.4.19(postcss@8.4.38) - browserslist: 4.23.0 - css-blank-pseudo: 3.0.3(postcss@8.4.38) - css-has-pseudo: 3.0.4(postcss@8.4.38) - css-prefers-color-scheme: 6.0.3(postcss@8.4.38) - cssdb: 7.11.2 - postcss: 8.4.38 - postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.38) - postcss-clamp: 4.1.0(postcss@8.4.38) - postcss-color-functional-notation: 4.2.4(postcss@8.4.38) - postcss-color-hex-alpha: 8.0.4(postcss@8.4.38) - postcss-color-rebeccapurple: 7.1.1(postcss@8.4.38) - postcss-custom-media: 8.0.2(postcss@8.4.38) - postcss-custom-properties: 12.1.11(postcss@8.4.38) - postcss-custom-selectors: 6.0.3(postcss@8.4.38) - postcss-dir-pseudo-class: 6.0.5(postcss@8.4.38) - postcss-double-position-gradients: 3.1.2(postcss@8.4.38) - postcss-env-function: 4.0.6(postcss@8.4.38) - postcss-focus-visible: 6.0.4(postcss@8.4.38) - postcss-focus-within: 5.0.4(postcss@8.4.38) - postcss-font-variant: 5.0.0(postcss@8.4.38) - postcss-gap-properties: 3.0.5(postcss@8.4.38) - postcss-image-set-function: 4.0.7(postcss@8.4.38) - postcss-initial: 4.0.1(postcss@8.4.38) - postcss-lab-function: 4.2.1(postcss@8.4.38) - postcss-logical: 5.0.4(postcss@8.4.38) - postcss-media-minmax: 5.0.0(postcss@8.4.38) - postcss-nesting: 10.2.0(postcss@8.4.38) - postcss-opacity-percentage: 1.1.3(postcss@8.4.38) - postcss-overflow-shorthand: 3.0.4(postcss@8.4.38) - postcss-page-break: 3.0.4(postcss@8.4.38) - postcss-place: 7.0.5(postcss@8.4.38) - postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.38) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.38) - postcss-selector-not: 6.0.1(postcss@8.4.38) - postcss-value-parser: 4.2.0 - dev: true - - /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.38): - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-reduce-initial@5.1.2(postcss@8.4.38): - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - caniuse-api: 3.0.0 - postcss: 8.4.38 - dev: true - - /postcss-reduce-transforms@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.38): - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} - peerDependencies: - postcss: ^8.0.3 - dependencies: - postcss: 8.4.38 - dev: true - - /postcss-selector-not@6.0.1(postcss@8.4.38): - resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - /postcss-svgo@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - dev: true - - /postcss-unique-selectors@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - /postcss@7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} - engines: {node: '>=6.0.0'} - dependencies: - picocolors: 0.2.1 - source-map: 0.6.1 - dev: true - - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - dev: false - - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.3.0 - dev: true - - /prettier-plugin-packagejson@2.5.0(prettier@3.2.5): - resolution: {integrity: sha512-6XkH3rpin5QEQodBSVNg+rBo4r91g/1mCaRwS1YGdQJZ6jwqrg2UchBsIG9tpS1yK1kNBvOt84OILsX8uHzBGg==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - dependencies: - prettier: 3.2.5 - sort-package-json: 2.10.0 - synckit: 0.9.0 - dev: true - - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - - /pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: true - - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true - - /pretty-format@28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.3.0 - dev: true - - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.0 - dev: true - - /pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - dev: true - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true - - /promise.series@0.2.0: - resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} - engines: {node: '>=0.12'} - dev: true - - /promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - dependencies: - asap: 2.0.6 - dev: true - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: true - - /proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - lru-cache: 7.18.3 - pac-proxy-agent: 7.0.1 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.3 - transitivePeerDependencies: - - supports-color - dev: true - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true - - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true - - /pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} - dependencies: - duplexify: 3.7.1 - inherits: 2.0.4 - pump: 2.0.1 - dev: true - - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: true - - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: true - - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: true - - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - dependencies: - performance-now: 2.1.0 - dev: true - - /ramda@0.29.0: - resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true - - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - dev: true - - /react-apexcharts@1.4.1(apexcharts@3.49.0)(react@18.3.0): - resolution: {integrity: sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==} - peerDependencies: - apexcharts: ^3.41.0 - react: '>=0.13' - dependencies: - apexcharts: 3.49.0 - prop-types: 15.8.1 - react: 18.3.0 - - /react-app-polyfill@3.0.0: - resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} - engines: {node: '>=14'} - dependencies: - core-js: 3.37.0 - object-assign: 4.1.1 - promise: 8.3.0 - raf: 3.4.1 - regenerator-runtime: 0.13.11 - whatwg-fetch: 3.6.20 - dev: true - - /react-colorful@5.6.1(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - dev: true - - /react-confetti@6.1.0(react@18.3.0): - resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} - engines: {node: '>=10.18'} - peerDependencies: - react: ^16.3.0 || ^17.0.1 || ^18.0.0 - dependencies: - react: 18.3.0 - tween-functions: 1.2.0 - dev: true - - /react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/code-frame': 7.24.2 - address: 1.2.2 - browserslist: 4.23.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0) - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.2.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.8.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.20.2) - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler - dev: true - - /react-docgen-typescript@2.2.2(typescript@5.4.5): - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} - peerDependencies: - typescript: '>= 4.3.x' - dependencies: - typescript: 5.4.5 - dev: true - - /react-docgen@7.0.3: - resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} - engines: {node: '>=16.14.0'} - dependencies: - '@babel/core': 7.24.4 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - '@types/doctrine': 0.0.9 - '@types/resolve': 1.20.6 - doctrine: 3.0.0 - resolve: 1.22.8 - strip-indent: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /react-dom@18.3.0(react@18.3.0): - resolution: {integrity: sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==} - peerDependencies: - react: ^18.3.0 - dependencies: - loose-envify: 1.4.0 - react: 18.3.0 - scheduler: 0.23.1 - - /react-element-to-jsx-string@15.0.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} - peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - dependencies: - '@base2/pretty-print-object': 1.0.1 - is-plain-object: 5.0.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - react-is: 18.1.0 - dev: true - - /react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - dev: true - - /react-force-graph-2d@1.25.4(react@18.3.0): - resolution: {integrity: sha512-Y1xwa79PHVZUedfa/TO+Cboq2hIc1flA1z4o1oraOu6qMS0r421vNpfjWhJPR6qJonNme3tzeVt5boEA7Ue8sg==} - engines: {node: '>=12'} - peerDependencies: - react: '*' - dependencies: - force-graph: 1.43.5 - prop-types: 15.8.1 - react: 18.3.0 - react-kapsule: 2.4.0(react@18.3.0) - - /react-icons@5.1.0(react@18.3.0): - resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} - peerDependencies: - react: '*' - dependencies: - react: 18.3.0 - dev: false - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true - - /react-is@18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} - dev: true - - /react-is@18.3.0: - resolution: {integrity: sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ==} - dev: true - - /react-kapsule@2.4.0(react@18.3.0): - resolution: {integrity: sha512-w4Yv9CgWdj8kWGQEPNWFGJJ08dYEZHZpiaFR/DgZjCMBNqv9wus2Gy1qvHVJmJbzvAZbq6jdvFC+NYzEqAlNhQ==} - engines: {node: '>=12'} - peerDependencies: - react: '>=16.13.1' - dependencies: - fromentries: 1.3.2 - jerrypick: 1.1.1 - react: 18.3.0 - - /react-refresh@0.11.0: - resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} - engines: {node: '>=0.10.0'} - dev: true - - /react-refresh@0.14.1: - resolution: {integrity: sha512-iZiRCtNGY3QYP3pYOSSBOvQmBpQTcJccr/VcK2blpJrpPTUDjeN51mxm5nsrkCzBwsbGUj+TN9q2oPz5E13FLg==} - engines: {node: '>=0.10.0'} - dev: true - - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5): - resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} - engines: {node: '>=14.0.0'} - hasBin: true - peerDependencies: - eslint: '*' - react: '>= 16' - typescript: ^3.2.1 || ^4 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.24.4 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0) - '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1(@babel/core@7.24.4) - babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0) - babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.4) - babel-preset-react-app: 10.0.1 - bfj: 7.1.0 - browserslist: 4.23.0 - camelcase: 6.3.0 - case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.11.0(webpack@5.91.0) - css-minimizer-webpack-plugin: 3.4.1(esbuild@0.20.2)(webpack@5.91.0) - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - eslint: 8.57.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5) - eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.91.0) - file-loader: 6.2.0(webpack@5.91.0) - fs-extra: 10.1.0 - html-webpack-plugin: 5.6.0(webpack@5.91.0) - identity-obj-proxy: 3.0.0 - jest: 27.5.1 - jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1) - mini-css-extract-plugin: 2.9.0(webpack@5.91.0) - postcss: 8.4.38 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.38) - postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.91.0) - postcss-normalize: 10.0.1(browserslist@4.23.0)(postcss@8.4.38) - postcss-preset-env: 7.8.3(postcss@8.4.38) - prompts: 2.4.2 - react: 18.3.0 - react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0) - react-refresh: 0.11.0 - resolve: 1.22.8 - resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(webpack@5.91.0) - semver: 7.6.0 - source-map-loader: 3.0.2(webpack@5.91.0) - style-loader: 3.3.4(webpack@5.91.0) - tailwindcss: 3.4.3 - terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.20.2) - webpack-dev-server: 4.15.2(webpack@5.91.0) - webpack-manifest-plugin: 4.1.1(webpack@5.91.0) - workbox-webpack-plugin: 6.6.0(webpack@5.91.0) - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@types/babel__core' - - '@types/webpack' - - bufferutil - - canvas - - clean-css - - csso - - debug - - esbuild - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - fibers - - node-notifier - - node-sass - - rework - - rework-visit - - sass - - sass-embedded - - sockjs-client - - supports-color - - ts-node - - type-fest - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - - /react@18.3.0: - resolution: {integrity: sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - - /recast@0.23.6: - resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} - engines: {node: '>= 4'} - dependencies: - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tiny-invariant: 1.3.3 - tslib: 2.6.2 - dev: true - - /recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: true - - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true - - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: true - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true - - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.24.4 - dev: true - - /regex-parser@2.3.0: - resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} - dev: true - - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true - - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - dev: true - - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: true - - /registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} - dependencies: - rc: 1.2.8 - safe-buffer: 5.2.1 - dev: true - - /registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} - engines: {node: '>=0.10.0'} - dependencies: - rc: 1.2.8 - dev: true - - /regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /rehype-external-links@3.0.0: - resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.2.0 - hast-util-is-element: 3.0.0 - is-absolute-url: 4.0.1 - space-separated-tokens: 2.0.2 - unist-util-visit: 5.0.0 - dev: true - - /rehype-slug@6.0.0: - resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} - dependencies: - '@types/hast': 3.0.4 - github-slugger: 2.0.0 - hast-util-heading-rank: 3.0.0 - hast-util-to-string: 3.0.0 - unist-util-visit: 5.0.0 - dev: true - - /relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: true - - /renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} - dev: true - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true - - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true - - /resolve-url-loader@4.0.0: - resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} - engines: {node: '>=8.9'} - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 7.0.39 - source-map: 0.6.1 - dev: true - - /resolve.exports@1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} - engines: {node: '>=10'} - dev: true - - /resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - dev: true - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: true - - /rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup-plugin-dts@6.1.0(rollup@4.16.4)(typescript@5.4.5): - resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - dependencies: - magic-string: 0.30.10 - rollup: 4.16.4 - typescript: 5.4.5 - optionalDependencies: - '@babel/code-frame': 7.24.2 - dev: true - - /rollup-plugin-peer-deps-external@2.2.4(rollup@4.16.4): - resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} - peerDependencies: - rollup: '*' - dependencies: - rollup: 4.16.4 - dev: true - - /rollup-plugin-postcss@4.0.2(postcss@8.4.38): - resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} - engines: {node: '>=10'} - peerDependencies: - postcss: 8.x - dependencies: - chalk: 4.1.2 - concat-with-sourcemaps: 1.1.0 - cssnano: 5.1.15(postcss@8.4.38) - import-cwd: 3.0.0 - p-queue: 6.6.2 - pify: 5.0.0 - postcss: 8.4.38 - postcss-load-config: 3.1.4(postcss@8.4.38) - postcss-modules: 4.3.1(postcss@8.4.38) - promise.series: 0.2.0 - resolve: 1.22.8 - rollup-pluginutils: 2.8.2 - safe-identifier: 0.4.2 - style-inject: 0.3.0 - transitivePeerDependencies: - - ts-node - dev: true - - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.24.2 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.30.4 - dev: true - - /rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - dependencies: - estree-walker: 0.6.1 - dev: true - - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /rollup@4.16.4: - resolution: {integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.16.4 - '@rollup/rollup-android-arm64': 4.16.4 - '@rollup/rollup-darwin-arm64': 4.16.4 - '@rollup/rollup-darwin-x64': 4.16.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.16.4 - '@rollup/rollup-linux-arm-musleabihf': 4.16.4 - '@rollup/rollup-linux-arm64-gnu': 4.16.4 - '@rollup/rollup-linux-arm64-musl': 4.16.4 - '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4 - '@rollup/rollup-linux-riscv64-gnu': 4.16.4 - '@rollup/rollup-linux-s390x-gnu': 4.16.4 - '@rollup/rollup-linux-x64-gnu': 4.16.4 - '@rollup/rollup-linux-x64-musl': 4.16.4 - '@rollup/rollup-win32-arm64-msvc': 4.16.4 - '@rollup/rollup-win32-ia32-msvc': 4.16.4 - '@rollup/rollup-win32-x64-msvc': 4.16.4 - fsevents: 2.3.3 - dev: true - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - - /rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - dependencies: - tslib: 1.14.1 - dev: true - - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.2 - dev: true - - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safe-identifier@0.4.2: - resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} - dev: true - - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - dev: true - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sanitize.css@13.0.0: - resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: true - - /sass-loader@12.6.0(webpack@5.91.0): - resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: true - - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - - /scheduler@0.23.1: - resolution: {integrity: sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==} - dependencies: - loose-envify: 1.4.0 - - /schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: true - - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true - - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - dev: true - - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /sentence-case@2.1.1: - resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} - dependencies: - no-case: 2.3.2 - upper-case-first: 1.1.2 - dev: true - - /serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - dependencies: - randombytes: 2.1.0 - dev: true - - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - dependencies: - randombytes: 2.1.0 - dev: true - - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: true - - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - dev: true - - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true - - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - dependencies: - kind-of: 6.0.3 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true - - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - dev: true - - /slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 - dev: true - - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - - /smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - dev: true - - /snake-case@2.1.0: - resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} - dependencies: - no-case: 2.3.2 - dev: true - - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: true - - /socks-proxy-agent@8.0.3: - resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - socks: 2.8.3 - transitivePeerDependencies: - - supports-color - dev: true - - /socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - dev: true - - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true - - /sort-package-json@2.10.0: - resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} - hasBin: true - dependencies: - detect-indent: 7.0.1 - detect-newline: 4.0.1 - get-stdin: 9.0.0 - git-hooks-list: 3.1.0 - globby: 13.2.2 - is-plain-obj: 4.1.0 - semver: 7.6.0 - sort-object-keys: 1.1.3 - dev: true - - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: true - - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - /source-map-loader@3.0.2(webpack@5.91.0): - resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.2.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true - - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: true - - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - - /space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - dev: true - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 - dev: true - - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true - - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 - dev: true - - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} - dev: true - - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.4 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: true - - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true - - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true - - /stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - dev: true - - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: true - - /stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: true - - /static-eval@2.0.2: - resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} - dependencies: - escodegen: 1.14.3 - dev: true - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true - - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - dependencies: - internal-slot: 1.0.7 - dev: true - - /store2@2.14.3: - resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} - dev: true - - /storybook@8.0.9(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-/Mvij0Br5bUwJpCvqAUZMEDIWmdRxEyllvVj8Ukw5lIWJePxfpSsz4px5jg9+R6B9tO8sQSqjg4HJvQ/pZk8Tg==} - hasBin: true - dependencies: - '@storybook/cli': 8.0.9(react-dom@18.3.0)(react@18.3.0) - transitivePeerDependencies: - - '@babel/preset-env' - - bufferutil - - encoding - - react - - react-dom - - supports-color - - utf-8-validate - dev: true - - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: true - - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false - - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true - - /string-hash@1.1.3: - resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - dev: true - - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true - - /string-length@5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - dependencies: - char-regex: 2.0.1 - strip-ansi: 7.1.0 - dev: true - - /string-natural-compare@3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: true - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - /string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} - engines: {node: '>=18'} - dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 - strip-ansi: 7.1.0 - dev: true - - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - dev: true - - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true - - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true - - /strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} - engines: {node: '>=12'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /style-inject@0.3.0: - resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} - dev: true - - /style-loader@3.3.4(webpack@5.91.0): - resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /styled-jsx@5.1.1(react@18.3.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - client-only: 0.0.1 - react: 18.3.0 - dev: false - - /stylehacks@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true - - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false - - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - commander: 4.1.1 - glob: 10.3.10 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - /svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: true - - /svg.draggable.js@2.2.2: - resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - - /svg.easing.js@2.0.0: - resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - - /svg.filter.js@2.0.2: - resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - - /svg.js@2.7.1: - resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} - - /svg.pathmorphing.js@0.1.3: - resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - - /svg.resize.js@1.4.3: - resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - svg.select.js: 2.1.2 - - /svg.select.js@2.1.2: - resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - - /svg.select.js@3.0.1: - resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} - engines: {node: '>= 0.8.0'} - dependencies: - svg.js: 2.7.1 - - /svgo@1.3.2: - resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true - dependencies: - chalk: 2.4.2 - coa: 2.0.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.37 - csso: 4.2.0 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.2.0 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: true - - /svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.0 - stable: 0.1.8 - dev: true - - /swap-case@1.1.2: - resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} - dependencies: - lower-case: 1.1.4 - upper-case: 1.1.3 - dev: true - - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - - /synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} - engines: {node: ^14.18.0 || >=16.0.0} - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.2 - dev: true - - /synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} - engines: {node: ^14.18.0 || >=16.0.0} - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.2 - dev: true - - /tailwind-merge@2.3.0: - resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} - dependencies: - '@babel/runtime': 7.24.4 - dev: false - - /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - dependencies: - tailwindcss: 3.4.3 - dev: false - - /tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) - postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.0.16 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: true - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true - - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.0 - tar-stream: 2.2.0 - dev: true - - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true - - /tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true - - /telejson@7.2.0: - resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} - dependencies: - memoizerific: 1.11.3 - dev: true - - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - - /temp@0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} - dependencies: - rimraf: 2.6.3 - dev: true - - /tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: true - - /tempy@1.0.1: - resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} - engines: {node: '>=10'} - dependencies: - del: 6.1.1 - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: true - - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: true - - /terser-webpack-plugin@5.3.10(esbuild@0.20.2)(webpack@5.91.0): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.20.2 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.30.4 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /terser@5.30.4: - resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - - /throat@6.0.2: - resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - dev: true - - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true - - /tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - dev: true - - /tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - - /tinygradient@1.1.5: - resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} - dependencies: - '@types/tinycolor2': 1.4.6 - tinycolor2: 1.6.0 - dev: true - - /tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} - dev: true - - /title-case@2.1.1: - resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} - dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 - dev: true - - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true - - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - - /tocbot@4.27.13: - resolution: {integrity: sha512-zS8GVVg14x/KBTxbvF6s3BNLltfMNZxTPaBpj+FjuwmnSv+ZK0trNN4uV5Ptw64NLFi2E30gt33+/a1Fkt3cWQ==} - dev: true - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true - - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true - - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.1 - dev: true - - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.3.1 - dev: true - - /tryer@1.0.1: - resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: true - - /ts-api-utils@1.3.0(typescript@5.4.5): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.4.5 - dev: true - - /ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - dev: true - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.7 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - - /ts-pnp@1.2.0(typescript@5.4.5): - resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} - engines: {node: '>=6'} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - typescript: 5.4.5 - dev: true - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - - /tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - /tsutils@3.21.0(typescript@5.4.5): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.4.5 - dev: true - - /turbo-darwin-64@1.13.3: - resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /turbo-darwin-arm64@1.13.3: - resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /turbo-linux-64@1.13.3: - resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /turbo-linux-arm64@1.13.3: - resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /turbo-windows-64@1.13.3: - resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /turbo-windows-arm64@1.13.3: - resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /turbo@1.13.3: - resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} - hasBin: true - optionalDependencies: - turbo-darwin-64: 1.13.3 - turbo-darwin-arm64: 1.13.3 - turbo-linux-64: 1.13.3 - turbo-linux-arm64: 1.13.3 - turbo-windows-64: 1.13.3 - turbo-windows-arm64: 1.13.3 - dev: true - - /tween-functions@1.2.0: - resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} - dev: true - - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true - - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: true - - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - dev: true - - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - - /ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - dev: true - - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - - /underscore@1.12.1: - resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: true - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: true - - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true - - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - - /unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - dependencies: - '@types/unist': 3.0.2 - dev: true - - /unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - dev: true - - /unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - dev: true - - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: true - - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true - - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true - - /unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} - engines: {node: '>=14.0.0'} - dependencies: - acorn: 8.11.3 - chokidar: 3.6.0 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.6.1 - dev: true - - /unquote@1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - dev: true - - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.0 - dev: true - - /update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} - dependencies: - registry-auth-token: 3.3.2 - registry-url: 3.1.0 - dev: true - - /upper-case-first@1.1.2: - resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} - dependencies: - upper-case: 1.1.3 - dev: true - - /upper-case@1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true - - /url@0.11.3: - resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} - dependencies: - punycode: 1.4.1 - qs: 6.12.1 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - /util.promisify@1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.8 - dev: true - - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - dev: true - - /utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: true - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: true - - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true - - /validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - builtins: 5.1.0 - dev: true - - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true - - /viem@2.9.27(typescript@5.4.5): - resolution: {integrity: sha512-C+5tispAKzUywf+G5fxNVxThtKrNtvDRvvF34hC10LeSsrd5l4tlKpf0B4xYVcpL0YYZd+YEordLzlWToPjUnQ==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.4.5) - isows: 1.0.3(ws@8.13.0) - typescript: 5.4.5 - ws: 8.13.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - dev: false - - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true - - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: true - - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: true - - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: true - - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.4 - dev: true - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true - - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true - - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - - /webpack-dev-middleware@5.3.4(webpack@5.91.0): - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /webpack-dev-middleware@6.1.3(webpack@5.91.0): - resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.91.0(esbuild@0.20.2) - dev: true - - /webpack-dev-server@4.15.2(webpack@5.91.0): - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.7 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 - ansi-html-community: 0.0.8 - bonjour-service: 1.2.1 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.19.2 - graceful-fs: 4.2.11 - html-entities: 2.5.2 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.2.0 - launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.91.0(esbuild@0.20.2) - webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: true - - /webpack-hot-middleware@2.26.1: - resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==} - dependencies: - ansi-html-community: 0.0.8 - html-entities: 2.5.2 - strip-ansi: 6.0.1 - dev: true - - /webpack-manifest-plugin@4.1.1(webpack@5.91.0): - resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} - engines: {node: '>=12.22.0'} - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - dependencies: - tapable: 2.2.1 - webpack: 5.91.0(esbuild@0.20.2) - webpack-sources: 2.3.1 - dev: true - - /webpack-sources@1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: true - - /webpack-sources@2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: true - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true - - /webpack-virtual-modules@0.5.0: - resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} - dev: true - - /webpack-virtual-modules@0.6.1: - resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} - dev: true - - /webpack@5.91.0(esbuild@0.20.2): - resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.0 - es-module-lexer: 1.5.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) - watchpack: 2.4.1 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: true - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: true - - /whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: true - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: true - - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: true - - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.3 - dev: true - - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true - - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true - - /workbox-background-sync@6.6.0: - resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: true - - /workbox-broadcast-update@6.6.0: - resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-build@6.6.0: - resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.24.4 - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/runtime': 7.24.4 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.4)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2(rollup@2.79.1) - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 6.6.0 - workbox-broadcast-update: 6.6.0 - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-google-analytics: 6.6.0 - workbox-navigation-preload: 6.6.0 - workbox-precaching: 6.6.0 - workbox-range-requests: 6.6.0 - workbox-recipes: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - workbox-streams: 6.6.0 - workbox-sw: 6.6.0 - workbox-window: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - /workbox-cacheable-response@6.6.0: - resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} - deprecated: workbox-background-sync@6.6.0 - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-core@6.6.0: - resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} - dev: true - - /workbox-expiration@6.6.0: - resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: true - - /workbox-google-analytics@6.6.0: - resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} - dependencies: - workbox-background-sync: 6.6.0 - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-navigation-preload@6.6.0: - resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-precaching@6.6.0: - resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-range-requests@6.6.0: - resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-recipes@6.6.0: - resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} - dependencies: - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-precaching: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-routing@6.6.0: - resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-strategies@6.6.0: - resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-streams@6.6.0: - resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - dev: true - - /workbox-sw@6.6.0: - resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} - dev: true - - /workbox-webpack-plugin@6.6.0(webpack@5.91.0): - resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - dependencies: - fast-json-stable-stringify: 2.1.0 - pretty-bytes: 5.6.0 - upath: 1.2.0 - webpack: 5.91.0(esbuild@0.20.2) - webpack-sources: 1.4.3 - workbox-build: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - /workbox-window@6.6.0: - resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 6.6.0 - dev: true - - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - /wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - dependencies: - ansi-styles: 6.2.1 - string-width: 7.1.0 - strip-ansi: 7.1.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - dependencies: - graceful-fs: 4.2.11 - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true - - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true - - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} - engines: {node: '>= 14'} - hasBin: true - - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 091d6e4..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - "examples/*" - - "packages/*" diff --git a/turbo.json b/turbo.json deleted file mode 100644 index 063726e..0000000 --- a/turbo.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://turborepo.org/schema.json", - "pipeline": { - "build": { - "dependsOn": ["^build"], - "outputs": ["dist/**", ".next/**", "!.next/cache/**"], - "cache": false - }, - "lint": { - "outputs": [] - }, - "dev": { - "cache": false, - "persistent": true - }, - "format": { - "cache": false - } - } -} From 8c3f6526d151153406c17477fb8a6f20577f0a88 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:40:07 -0700 Subject: [PATCH 69/74] reinstate package --- .eslintrc.js | 7 + .github/workflows/publish-package.yml | 36 + .husky/pre-commit | 4 + .nvmrc | 1 + .prettierignore | 6 + README.md | 201 + examples/next-app/.eslintrc.js | 9 + examples/next-app/.gitignore | 36 + examples/next-app/README.md | 36 + examples/next-app/app/layout.tsx | 21 + examples/next-app/app/page.tsx | 10 + examples/next-app/components/HomePage.tsx | 55 + examples/next-app/components/home.module.css | 22 + examples/next-app/next.config.mjs | 6 + examples/next-app/package.json | 34 + examples/next-app/tsconfig.json | 30 + package.json | 27 + packages/config-eslint/README.md | 3 + packages/config-eslint/library.js | 34 + packages/config-eslint/next.js | 35 + packages/config-eslint/package.json | 19 + packages/config-eslint/react-internal.js | 58 + packages/config-prettier/index.json | 10 + packages/config-prettier/package.json | 13 + packages/config-typescript/base.json | 20 + packages/config-typescript/nextjs.json | 21 + packages/config-typescript/package.json | 9 + packages/config-typescript/react-library.json | 13 + packages/storykit/.eslintrc.cjs | 13 + packages/storykit/.gitignore | 30 + .../storykit/.storybook/assets/story-logo.png | Bin 0 -> 16720 bytes packages/storykit/.storybook/global.css | 7 + packages/storykit/.storybook/main.ts | 33 + .../storykit/.storybook/manager-head.html | 1 + packages/storykit/.storybook/manager.ts | 7 + packages/storykit/.storybook/preview.ts | 34 + packages/storykit/.storybook/theme.ts | 42 + packages/storykit/package.json | 108 + packages/storykit/postcss.config.cjs | 7 + packages/storykit/rollup.config.js | 54 + .../components/Button/Button-css-modules.tsx | 45 + .../storykit/src/components/Button/Button.tsx | 44 + .../src/components/Button/__docs__/Button.mdx | 37 + .../Button/__docs__/Button.stories.tsx | 35 + .../Button/__tests__/Button.test.tsx | 9 + .../storykit/src/components/Button/index.ts | 1 + .../storykit/src/components/Button/styles.css | 21 + .../src/components/Button/styles.module.css | 21 + .../src/components/IpGraph/IpGraph.tsx | 90 + .../components/IpGraph/__docs__/Example.tsx | 26 + .../components/IpGraph/__docs__/IpGraph.mdx | 45 + .../IpGraph/__docs__/IpGraph.stories.tsx | 38 + .../storykit/src/components/IpGraph/index.ts | 1 + .../src/components/IpGraph/styles.css | 3 + .../IpPolicyAccordion/IpPolicyAccordion.tsx | 144 + .../IpPolicyAccordion/__docs__/Example.tsx | 27 + .../__docs__/IpPolicyAccordion.mdx | 32 + .../__docs__/IpPolicyAccordion.stories.tsx | 40 + .../components/IpPolicyAccordion/index.tsx | 1 + .../components/IpPolicyAccordion/styles.css | 70 + .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 104 + .../IpRoyaltyPieChart/__docs__/Example.tsx | 22 + .../__docs__/IpRoyaltyPieChart.mdx | 40 + .../__docs__/IpRoyaltyPieChart.stories.tsx | 38 + .../components/IpRoyaltyPieChart/index.tsx | 1 + .../components/IpRoyaltyPieChart/styles.css | 30 + .../src/components/IpWidget/IpWidget.tsx | 394 + .../components/IpWidget/__docs__/Example.tsx | 29 + .../components/IpWidget/__docs__/IpWidget.mdx | 34 + .../IpWidget/__docs__/IpWidget.stories.tsx | 41 + .../IpWidget/__tests__/IPAssetWidget.test.tsx | 9 + .../storykit/src/components/IpWidget/index.ts | 1 + .../src/components/IpWidget/styles.css | 218 + packages/storykit/src/components/index.ts | 5 + packages/storykit/src/declarations.d.ts | 4 + packages/storykit/src/global.css | 67 + packages/storykit/src/index.ts | 2 + packages/storykit/src/lib/api.ts | 49 + packages/storykit/src/lib/graph.ts | 122 + packages/storykit/src/lib/simplehash/index.ts | 39 + .../src/lib/simplehash/types/simplehash.d.ts | 143 + packages/storykit/src/lib/types.ts | 325 + packages/storykit/src/lib/utils.ts | 51 + .../IpAssetProvider/IpAssetProvider.tsx | 153 + .../IpAssetProvider/__docs__/Example.tsx | 59 + .../__docs__/IpAssetProvider.mdx | 79 + .../__docs__/IpAssetProvider.stories.tsx | 49 + .../src/providers/IpAssetProvider/index.tsx | 1 + packages/storykit/src/providers/index.ts | 1 + .../storykit/src/stories/Introduction.mdx | 201 + packages/storykit/src/stories/data/index.ts | 8 + packages/storykit/tailwind.config.js | 72 + packages/storykit/tsconfig.json | 10 + pnpm-lock.yaml | 17293 ++++++++++++++++ pnpm-workspace.yaml | 3 + src/components/Button/Button.tsx | 47 + src/components/Button/__docs__/Button.mdx | 37 + .../Button/__docs__/Button.stories.tsx | 35 + .../Button/__tests__/Button.test.tsx | 9 + src/components/Button/index.ts | 1 + src/components/IPAGraph/IPAGraph.tsx | 77 + src/components/IPAGraph/__docs__/Example.tsx | 26 + src/components/IPAGraph/__docs__/IPAGraph.mdx | 37 + .../IPAGraph/__docs__/IPAGraph.stories.tsx | 38 + src/components/IPAGraph/index.ts | 1 + src/components/IPAPolicies/IPAPolicies.tsx | 153 + .../IPAPolicies/__docs__/Example.tsx | 27 + .../IPAPolicies/__docs__/IPAPolicies.mdx | 32 + .../__docs__/IPAPolicies.stories.tsx | 40 + src/components/IPAPolicies/index.tsx | 1 + .../IPARoyaltyChart/IPARoyaltyChart.tsx | 92 + .../IPARoyaltyChart/__docs__/Example.tsx | 22 + .../__docs__/IPARoyaltyChart.mdx | 32 + .../__docs__/IPARoyaltyChart.stories.tsx | 38 + src/components/IPARoyaltyChart/index.tsx | 1 + .../IPAssetWidget/IPAssetWidget.tsx | 405 + .../IPAssetWidget/__docs__/Example.tsx | 29 + .../IPAssetWidget/__docs__/IPAssetWidget.mdx | 34 + .../__docs__/IPAssetWidget.stories.tsx | 41 + .../__tests__/IPAssetWidget.test.tsx | 9 + src/components/IPAssetWidget/index.ts | 1 + src/components/index.ts | 5 + src/global.css | 80 + src/index.ts | 2 + src/lib/api.ts | 49 + src/lib/graph.ts | 122 + src/lib/simplehash/index.ts | 39 + src/lib/simplehash/types/simplehash.d.ts | 143 + src/lib/types.ts | 325 + src/lib/utils.ts | 51 + .../IPAssetProvider/IPAssetProvider.tsx | 149 + .../IPAssetProvider/__docs__/Example.tsx | 59 + .../__docs__/IPAssetProvider.mdx | 62 + .../__docs__/IPAssetProvider.stories.tsx | 49 + src/providers/IPAssetProvider/index.tsx | 1 + src/providers/index.ts | 1 + src/stories/Introduction.mdx | 137 + src/stories/data/index.ts | 9 + turbo.json | 20 + 139 files changed, 24107 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .github/workflows/publish-package.yml create mode 100644 .husky/pre-commit create mode 100644 .nvmrc create mode 100644 .prettierignore create mode 100644 README.md create mode 100644 examples/next-app/.eslintrc.js create mode 100644 examples/next-app/.gitignore create mode 100644 examples/next-app/README.md create mode 100644 examples/next-app/app/layout.tsx create mode 100644 examples/next-app/app/page.tsx create mode 100644 examples/next-app/components/HomePage.tsx create mode 100644 examples/next-app/components/home.module.css create mode 100644 examples/next-app/next.config.mjs create mode 100644 examples/next-app/package.json create mode 100644 examples/next-app/tsconfig.json create mode 100644 package.json create mode 100644 packages/config-eslint/README.md create mode 100644 packages/config-eslint/library.js create mode 100644 packages/config-eslint/next.js create mode 100644 packages/config-eslint/package.json create mode 100644 packages/config-eslint/react-internal.js create mode 100644 packages/config-prettier/index.json create mode 100644 packages/config-prettier/package.json create mode 100644 packages/config-typescript/base.json create mode 100644 packages/config-typescript/nextjs.json create mode 100644 packages/config-typescript/package.json create mode 100644 packages/config-typescript/react-library.json create mode 100644 packages/storykit/.eslintrc.cjs create mode 100644 packages/storykit/.gitignore create mode 100644 packages/storykit/.storybook/assets/story-logo.png create mode 100644 packages/storykit/.storybook/global.css create mode 100644 packages/storykit/.storybook/main.ts create mode 100644 packages/storykit/.storybook/manager-head.html create mode 100644 packages/storykit/.storybook/manager.ts create mode 100644 packages/storykit/.storybook/preview.ts create mode 100644 packages/storykit/.storybook/theme.ts create mode 100644 packages/storykit/package.json create mode 100644 packages/storykit/postcss.config.cjs create mode 100644 packages/storykit/rollup.config.js create mode 100644 packages/storykit/src/components/Button/Button-css-modules.tsx create mode 100644 packages/storykit/src/components/Button/Button.tsx create mode 100644 packages/storykit/src/components/Button/__docs__/Button.mdx create mode 100644 packages/storykit/src/components/Button/__docs__/Button.stories.tsx create mode 100644 packages/storykit/src/components/Button/__tests__/Button.test.tsx create mode 100644 packages/storykit/src/components/Button/index.ts create mode 100644 packages/storykit/src/components/Button/styles.css create mode 100644 packages/storykit/src/components/Button/styles.module.css create mode 100644 packages/storykit/src/components/IpGraph/IpGraph.tsx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx create mode 100644 packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx create mode 100644 packages/storykit/src/components/IpGraph/index.ts create mode 100644 packages/storykit/src/components/IpGraph/styles.css create mode 100644 packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/index.tsx create mode 100644 packages/storykit/src/components/IpPolicyAccordion/styles.css create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/index.tsx create mode 100644 packages/storykit/src/components/IpRoyaltyPieChart/styles.css create mode 100644 packages/storykit/src/components/IpWidget/IpWidget.tsx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/Example.tsx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx create mode 100644 packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx create mode 100644 packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx create mode 100644 packages/storykit/src/components/IpWidget/index.ts create mode 100644 packages/storykit/src/components/IpWidget/styles.css create mode 100644 packages/storykit/src/components/index.ts create mode 100644 packages/storykit/src/declarations.d.ts create mode 100644 packages/storykit/src/global.css create mode 100644 packages/storykit/src/index.ts create mode 100644 packages/storykit/src/lib/api.ts create mode 100644 packages/storykit/src/lib/graph.ts create mode 100644 packages/storykit/src/lib/simplehash/index.ts create mode 100644 packages/storykit/src/lib/simplehash/types/simplehash.d.ts create mode 100644 packages/storykit/src/lib/types.ts create mode 100644 packages/storykit/src/lib/utils.ts create mode 100644 packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx create mode 100644 packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx create mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx create mode 100644 packages/storykit/src/providers/index.ts create mode 100644 packages/storykit/src/stories/Introduction.mdx create mode 100644 packages/storykit/src/stories/data/index.ts create mode 100644 packages/storykit/tailwind.config.js create mode 100644 packages/storykit/tsconfig.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 src/components/Button/Button.tsx create mode 100644 src/components/Button/__docs__/Button.mdx create mode 100644 src/components/Button/__docs__/Button.stories.tsx create mode 100644 src/components/Button/__tests__/Button.test.tsx create mode 100644 src/components/Button/index.ts create mode 100644 src/components/IPAGraph/IPAGraph.tsx create mode 100644 src/components/IPAGraph/__docs__/Example.tsx create mode 100644 src/components/IPAGraph/__docs__/IPAGraph.mdx create mode 100644 src/components/IPAGraph/__docs__/IPAGraph.stories.tsx create mode 100644 src/components/IPAGraph/index.ts create mode 100644 src/components/IPAPolicies/IPAPolicies.tsx create mode 100644 src/components/IPAPolicies/__docs__/Example.tsx create mode 100644 src/components/IPAPolicies/__docs__/IPAPolicies.mdx create mode 100644 src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx create mode 100644 src/components/IPAPolicies/index.tsx create mode 100644 src/components/IPARoyaltyChart/IPARoyaltyChart.tsx create mode 100644 src/components/IPARoyaltyChart/__docs__/Example.tsx create mode 100644 src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx create mode 100644 src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx create mode 100644 src/components/IPARoyaltyChart/index.tsx create mode 100644 src/components/IPAssetWidget/IPAssetWidget.tsx create mode 100644 src/components/IPAssetWidget/__docs__/Example.tsx create mode 100644 src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx create mode 100644 src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx create mode 100644 src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx create mode 100644 src/components/IPAssetWidget/index.ts create mode 100644 src/components/index.ts create mode 100644 src/global.css create mode 100644 src/index.ts create mode 100644 src/lib/api.ts create mode 100644 src/lib/graph.ts create mode 100644 src/lib/simplehash/index.ts create mode 100644 src/lib/simplehash/types/simplehash.d.ts create mode 100644 src/lib/types.ts create mode 100644 src/lib/utils.ts create mode 100644 src/providers/IPAssetProvider/IPAssetProvider.tsx create mode 100644 src/providers/IPAssetProvider/__docs__/Example.tsx create mode 100644 src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx create mode 100644 src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx create mode 100644 src/providers/IPAssetProvider/index.tsx create mode 100644 src/providers/index.ts create mode 100644 src/stories/Introduction.mdx create mode 100644 src/stories/data/index.ts create mode 100644 turbo.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..696cd38 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,7 @@ +// This configuration only applies to the package manager root. +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/library.js"], + ignorePattern: ["apps/**", "packages/**"], +}; diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml new file mode 100644 index 0000000..5fb5cd2 --- /dev/null +++ b/.github/workflows/publish-package.yml @@ -0,0 +1,36 @@ +name: publish on github + +on: + push: + branches: + - main + +jobs: + publish-gpr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: pnpm/action-setup@v2.0.1 + with: + version: 8.8.0 + + - uses: actions/setup-node@v1 + with: + node-version: 20.0.0 + cache: pnpm + registry-url: https://npm.pkg.github.com/ + scope: "@storyprotocol" + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm build + + - name: Publish to npm + run: | + cd packages/storykit + npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..80480ad --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +pnpm exec lint-staged \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..2edeafb --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..18d0e64 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +dist +node_modules +coverage +examples +.next +*.hbs \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c952590 --- /dev/null +++ b/README.md @@ -0,0 +1,201 @@ +import { Meta } from "@storybook/blocks" + +<Meta title="Introduction" /> + +# Storykit + +Plug-and-play React components for Story Protocol. + +## Installation + +_Storykit is a private package so you need repo access and a personal access token to use_ + +1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) + +2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: + +```bash +//npm.pkg.github.com/:_authToken=NPM_TOKEN +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +3 . Add `.npmrc` to your `.gitignore` to keep your access token private. + +4 . Install the package and the required dependencies: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query +``` + +## Deploying on vercel + +To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: + +```bash +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +#### OR... + +You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. + +See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. + +## Dependencies + +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. + +Some components have additional dependencies including: + +- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) +- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) + +See the individual component docs ro see if they require an additional dependency or install them all at once with: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d +``` + +## Run locally + +### Storybook + +Run Storybook locally for component development and documentation: + +```bash +pnpm dev +``` + +Find the Storybook at [http://localhost:6006](http://localhost:6006) + +### Example app + +Run the next.js [example app](./examples/next-app/): + +```bash +pnpm build +pnpm dev-example +``` + +The dev server will be running at [http://localhost:3000](http://localhost:3000) + +### Linting and formatting + +Lint with eslint: + +```bash +pnpm lint +``` + +Format with prettier: + +```bash +pnpm format +``` + +## Usage + +Using Storykit in your React app + +### Include React Query + +React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. + +```typescript +// app/layout.tsx + +import Providers from "./Providers" + +export default function Layout({children}) { + return ( + <html> + <body> + <Providers>{children}</Providers> + </body> + </html> + ) +} +``` + +```typescript +// app/Providers.tsx + +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export default function Providers({ children }) { + return ( + <QueryClientProvider client={queryClient}> + {children} + </QueryClientProvider> + ) +} + +``` + +### The IpAssetProvider + +The IpAssetProvider provides IP Asset data to child components. + +```typescript +import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; +``` + +### The IpGraph + +Some components require the IpAssetProvider to supply asset data + +```typescript +import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; +``` + +### The IpWidget + +The IpAssetProvider is already included in the IpWidget + +```typescript +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ) +} + +``` + +See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/examples/next-app/.eslintrc.js b/examples/next-app/.eslintrc.js new file mode 100644 index 0000000..044ac2f --- /dev/null +++ b/examples/next-app/.eslintrc.js @@ -0,0 +1,9 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/next.js"], + parser: "@typescript-eslint/parser", + // parserOptions: { + // project: true, + // }, +} diff --git a/examples/next-app/.gitignore b/examples/next-app/.gitignore new file mode 100644 index 0000000..fd3dbb5 --- /dev/null +++ b/examples/next-app/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/next-app/README.md b/examples/next-app/README.md new file mode 100644 index 0000000..c403366 --- /dev/null +++ b/examples/next-app/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/examples/next-app/app/layout.tsx b/examples/next-app/app/layout.tsx new file mode 100644 index 0000000..a9c3268 --- /dev/null +++ b/examples/next-app/app/layout.tsx @@ -0,0 +1,21 @@ +import type { Metadata } from "next" +import { Inter } from "next/font/google" + +const inter = Inter({ subsets: ["latin"] }) + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +} + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + <html lang="en"> + <body className={inter.className}>{children}</body> + </html> + ) +} diff --git a/examples/next-app/app/page.tsx b/examples/next-app/app/page.tsx new file mode 100644 index 0000000..abb3363 --- /dev/null +++ b/examples/next-app/app/page.tsx @@ -0,0 +1,10 @@ + +import HomePage from "../components/HomePage" + +export default function Home() { + return ( + <div> + <HomePage /> + </div> + ) +} diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx new file mode 100644 index 0000000..1c84e5d --- /dev/null +++ b/examples/next-app/components/HomePage.tsx @@ -0,0 +1,55 @@ +"use client" + +import { IpAssetProvider, useIpAssetContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph, Button } from "@storyprotocol/storykit" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React from "react" + +import styles from "./home.module.css" + +const queryClient = new QueryClient() + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + return ( + <> + {isNftDataLoading && <div>Fetching Asset...</div>} + {nftData && !isNftDataLoading ? <p>nft_id: {nftData?.nft_id}</p> : null} + </> + ) +} + +export default function Home() { + return ( + <> + <QueryClientProvider client={queryClient}> + <main className={styles.main}> + + <IpAssetProvider ipId="0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"> + <div className={`${styles.block} ${styles.padded}`}> + <IpPolicyAccordion size="medium" /> + </div> + </IpAssetProvider> + + {/* <Button variant="primary" size="medium">Primary Button</Button> */} + + <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> + <div className={`${styles.block} ${styles.padded}`}> + <ExampleComponent /> + </div> + <div className={`${styles.block} ${styles.padded}`}> + <IpRoyaltyPieChart /> + </div> + </IpAssetProvider> + + <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> + <div className={styles.block}> + <IpGraph width={400} height={300} /> + </div> + </IpAssetProvider> + + <IpWidget ipId={"0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"} /> + </main> + </QueryClientProvider> + </> + ) +} diff --git a/examples/next-app/components/home.module.css b/examples/next-app/components/home.module.css new file mode 100644 index 0000000..ee1e8e6 --- /dev/null +++ b/examples/next-app/components/home.module.css @@ -0,0 +1,22 @@ +.main { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 1rem; + width: 100%; + padding: 4rem 0; +} + +.block { + background-color: #f9f9f9; + border-radius: 0.5rem; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + border: 1px solid #ddd; + overflow: hidden; + +} + +.padded { + padding: 1rem; +} diff --git a/examples/next-app/next.config.mjs b/examples/next-app/next.config.mjs new file mode 100644 index 0000000..96254fc --- /dev/null +++ b/examples/next-app/next.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + // transpilePackages: ["@storyprotocol/storykit"], +} + +export default nextConfig diff --git a/examples/next-app/package.json b/examples/next-app/package.json new file mode 100644 index 0000000..8215bf4 --- /dev/null +++ b/examples/next-app/package.json @@ -0,0 +1,34 @@ +{ + "name": "next-app", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "prettier": "@storykit/prettier-config", + "dependencies": { + "@storyprotocol/storykit": "workspace:*", + "@tanstack/react-query": "^5.28.9", + "next": "14.1.4", + "react": "^18", + "react-apexcharts": "^1.4.1", + "react-dom": "^18", + "react-force-graph-2d": "^1.25.4" + }, + "devDependencies": { + "@next/eslint-plugin-next": "^14.1.1", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "eslint": "^8.57.0", + "eslint-config-next": "14.2.1", + "prettier": "^3.2.5", + "typescript": "^5" + } +} diff --git a/examples/next-app/tsconfig.json b/examples/next-app/tsconfig.json new file mode 100644 index 0000000..01d27bc --- /dev/null +++ b/examples/next-app/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "@storykit/typescript-config/nextjs.json", + "compilerOptions": { + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./*" + ] + }, + "allowJs": true, + "noEmit": true, + "incremental": true, + "resolveJsonModule": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "next.config.js" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d1ac415 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "private": true, + "scripts": { + "build": "turbo run build --filter @storyprotocol/storykit", + "dev": "turbo run dev --filter @storyprotocol/storykit", + "dev-example": "turbo run dev --filter next-app", + "lint": "turbo run lint --filter @storyprotocol/storykit", + "lint-all": "turbo run lint", + "format": "turbo run format --filter @storyprotocol/storykit", + "prepare": "husky" + }, + "devDependencies": { + "@storykit/eslint-config": "workspace:*", + "eslint": "^8.57.0", + "husky": "^9.0.11", + "lint-staged": "^15.2.2", + "prettier": "^3.2.5", + "turbo": "^1.12.2" + }, + "lint-staged": { + "packages/*.{ts,tsx}": [ + "pnpm format", + "pnpm lint" + ] + }, + "packageManager": "pnpm@8.9.0" +} diff --git a/packages/config-eslint/README.md b/packages/config-eslint/README.md new file mode 100644 index 0000000..d521cce --- /dev/null +++ b/packages/config-eslint/README.md @@ -0,0 +1,3 @@ +# `@storykit/eslint-config` + +Collection of internal eslint configurations. diff --git a/packages/config-eslint/library.js b/packages/config-eslint/library.js new file mode 100644 index 0000000..b93219d --- /dev/null +++ b/packages/config-eslint/library.js @@ -0,0 +1,34 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], + plugins: ["only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + { + files: ["*.js?(x)", "*.cjs?(x)", "*.mjs?(x)", "*.ts?(x)"], + }, + ], +}; diff --git a/packages/config-eslint/next.js b/packages/config-eslint/next.js new file mode 100644 index 0000000..4c5c2d9 --- /dev/null +++ b/packages/config-eslint/next.js @@ -0,0 +1,35 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + // extends: [ + // "eslint:recommended", + // "prettier", + // require.resolve("@vercel/style-guide/eslint/next"), + // "eslint-config-turbo", + // ], + extends: ["next/core-web-vitals", "prettier"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + plugins: ["only-warn"], + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + ], + overrides: [{ files: ["*.js?(x)", "*.ts?(x)"] }], +}; diff --git a/packages/config-eslint/package.json b/packages/config-eslint/package.json new file mode 100644 index 0000000..ba694b5 --- /dev/null +++ b/packages/config-eslint/package.json @@ -0,0 +1,19 @@ +{ + "name": "@storykit/eslint-config", + "version": "0.0.0", + "private": true, + "files": [ + "library.js", + "next.js", + "react-internal.js" + ], + "devDependencies": { + "@vercel/style-guide": "^5.2.0", + "eslint-config-turbo": "^1.12.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-only-warn": "^1.1.0", + "@typescript-eslint/parser": "^7.1.0", + "@typescript-eslint/eslint-plugin": "^7.1.0", + "typescript": "^5.3.3" + } +} diff --git a/packages/config-eslint/react-internal.js b/packages/config-eslint/react-internal.js new file mode 100644 index 0000000..2639034 --- /dev/null +++ b/packages/config-eslint/react-internal.js @@ -0,0 +1,58 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/* + * This is a custom ESLint configuration for use with + * internal (bundled by their consumer) libraries + * that utilize React. + * + * This config extends the Vercel Engineering Style Guide. + * For more information, see https://github.com/vercel/style-guide + * + */ + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/eslint-recommended", + "prettier", + "plugin:prettier/recommended", + "plugin:react-hooks/recommended", + "plugin:storybook/recommended", + ], + // extends: ["eslint:recommended", "prettier", "eslint-config-turbo"], + plugins: ["@typescript-eslint", "only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + browser: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + ".*.cjs", + "node_modules/", + "dist/", + ], + overrides: [ + // Force ESLint to detect .tsx files + { files: ["*.js?(x)", "*.ts?(x)"] }, + ], + rules: { + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + }, +}; diff --git a/packages/config-prettier/index.json b/packages/config-prettier/index.json new file mode 100644 index 0000000..14232ba --- /dev/null +++ b/packages/config-prettier/index.json @@ -0,0 +1,10 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": false, + "printWidth": 120, + "importOrderSeparation": true, + "importOrderSortSpecifiers": true, + "importOrder": ["^[./]"], + "plugins": ["@trivago/prettier-plugin-sort-imports"] +} diff --git a/packages/config-prettier/package.json b/packages/config-prettier/package.json new file mode 100644 index 0000000..85a26b5 --- /dev/null +++ b/packages/config-prettier/package.json @@ -0,0 +1,13 @@ +{ + "name": "@storykit/prettier-config", + "version": "0.1.0", + "private": true, + "main": "./index.json", + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "prettier": "^3.2.5" + }, + "peerDependencies": { + "prettier": "^3.2.5" + } +} diff --git a/packages/config-typescript/base.json b/packages/config-typescript/base.json new file mode 100644 index 0000000..2c7114f --- /dev/null +++ b/packages/config-typescript/base.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "compilerOptions": { + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "moduleResolution": "Bundler", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true + }, + "exclude": ["node_modules"] +} diff --git a/packages/config-typescript/nextjs.json b/packages/config-typescript/nextjs.json new file mode 100644 index 0000000..242e6c9 --- /dev/null +++ b/packages/config-typescript/nextjs.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Next.js", + "extends": "./base.json", + "compilerOptions": { + "plugins": [{ "name": "next" }], + + "declaration": false, + "declarationMap": false, + "incremental": true, + "jsx": "preserve", + "module": "esnext", + "noEmit": true, + "resolveJsonModule": true, + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "moduleResolution": "node" + }, + "include": ["src", "next-env.d.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/config-typescript/package.json b/packages/config-typescript/package.json new file mode 100644 index 0000000..2f09e5a --- /dev/null +++ b/packages/config-typescript/package.json @@ -0,0 +1,9 @@ +{ + "name": "@storykit/typescript-config", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/config-typescript/react-library.json b/packages/config-typescript/react-library.json new file mode 100644 index 0000000..6d2a3bb --- /dev/null +++ b/packages/config-typescript/react-library.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "React Library", + "extends": "./base.json", + "compilerOptions": { + "jsx": "react-jsx", + "module": "ESNext", + "outDir": "dist", + "declaration": true, + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"] + } +} diff --git a/packages/storykit/.eslintrc.cjs b/packages/storykit/.eslintrc.cjs new file mode 100644 index 0000000..fc3bf2f --- /dev/null +++ b/packages/storykit/.eslintrc.cjs @@ -0,0 +1,13 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ["@storykit/eslint-config/react-internal.js"], + parser: "@typescript-eslint/parser", + // parserOptions: { + // project: true, + // }, + // parserOptions: { + // project: "./tsconfig.json", + // tsconfigRootDir: __dirname, + // }, +} diff --git a/packages/storykit/.gitignore b/packages/storykit/.gitignore new file mode 100644 index 0000000..694a99f --- /dev/null +++ b/packages/storykit/.gitignore @@ -0,0 +1,30 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +build +dist + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +*storybook.log +storybook-static + +.yalc +yalc.lock \ No newline at end of file diff --git a/packages/storykit/.storybook/assets/story-logo.png b/packages/storykit/.storybook/assets/story-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8b039b7c6d087b1ecbc5af9276506f560c9536 GIT binary patch literal 16720 zcmeIZcUY6zw<sJ`K<S}|u0arlKq4)4#Q=&F1*Eqm^xg?YiU<S}U>p?@DFUL>VL$`{ zDGABUAWdm1NJwS?X(od}r09K_^83!cr+nwR&;9ef4`pY+Yp=cf-g~W`oU1k#{5(=T zAP|WE@+FiV2z1mF1maLS&IR;D>0F2h{vGqbV0{4uYAN8|M{|NeJgb2hFJ6tdvoJk* z+3cbYLQh8rc1|4u0$t+2*YEFapDhKVeJ)x1p;;Jul5tYn3a*@<_Ve*msPiYGr@{Ad zQEA6-6<wGWxz?|L72KcWU<Pw-cr=mYrm|s_n;1Eb5tGOd-pU@0rWU-?0I8~&J=M6d z&XK$2S7j<*pmIHkIK`n1PvbEK@rRvzEMWWkmd0;(C;aSwrY{&Aqiu<urx6JIk7M{U zQYjp|kYUgzeGuP-u#yZ&<!BnT?wvQ+`Ij7N2JK@&;}=k$_Sx$}pb1G($5+dHQlND~ z&}_?LBaai**zVlKd0vyF?-6V&h-0h@1aF!!4dA$>0=nv1t56Smd<8_a_feVR_~GLb z(2Jt6BGAujASOZt#{o(JftraAcus&4;Goib<uyNme&9Yj=7QA}69)a^4bmU7vVxN& zeiSC5s?>Y?h@7<aqN{58eLo%#2BUR0-)iG3D9;8@D-Lqyr9jgP;S0>Xs>`Pc)ZgrK zE-8!Wuq%$7N?r;87)EqDK!tP7pefJJAOButS52YS-Iq)Qfd+z|Y9}E3+|`zO{Z5Ko zAg~eW@gTrfMiZs+Sipm$wB(C5c39@UQGHO?xwOSr*MVCkUBga?n_@-7SwH_ER5y8c z4BP?INc)V7syU_#f5?CP)G5ch>yH#7I6Oh$@qdzZUj3dow8Hr`J)7s2^O4(6TSOlq zGS%crS8^@Y%wPMA(T-85Ry;0-$!C7JqFD3~;f3da3sf`nvjW&*{#YqY0BcHWA=6oi zJEr1--|rkEwoc`|Z2>u9WaI6kKT!L23HzgPkE8$8y=6qH+?^|m|4hmB_;13c-dj1Y zx}W!!d7=Y*%saJ^_p!<Q^w%vMb|X@t^LNi`bERHE`&`fm`6L;uDQPLOxzfMiR6hcm zcsxX<@#a89NHB^WJD1PvYTAjoK28ZHDEv6c_?9UWbwTYCTKVw>rDxt+w5y;&?_;V~ z=?|_7+-rsuUWC<Was}K{nmGY$78D>wB9AW7&duJkS-$ynjK8Tu;)0OWfH@M+OV43L z`!6XAr}JHSe2J&>yu&5+9}AYjyyrL{<T*gEUxNK47l=wR--c%2w*NWdH~lDy1mb>X zx5Z^;-rp-Xp2<tyG=CHsaIQEf-*j`FwS2mb&jUa8Xlq%gP11;1c0r@6blJWw``Bq| z;ey}H=y#x(gzcm*TmPycdHL-nvByDnMm0GTmiiZ7URpVAq|l>a|BK8y^Tj(=KVSY0 z>{DV`W|-HV=6>a)RhW{zqSxtp#rQiW*Jea@E#ZnkLZ2$Dd=*u#F0r$Icj=wAo_VL$ zr^@apb~T2zCfX&%sO#6L*Us2WTy?U4VJ~=X)c&)5Qh-)5FRV!1`bt$`fS;>gsA8z} z`pNYp4TSB&u!}p7v)_n(3VK;)Oz^axH#Irmdp`BjXWtpkWXan^t*k=C?H2raUx06k zZww;wfq+%2pO)qwy?nhpE~F5Q9QGsTRa;BTCx3<ZUz*3?y>6~)d54aEv)DLnP^h4a zS498btX7{{Z(V<}ezpF7h|Y%s*&)Z);kC>)^KJ09?6#X*enX#QSl#o|FgO1XAxZt) zowB5nY4wq?wz<<?L0ukk{_AD$G}jK+6t|`J0=Hwglh&Kw?;s;&ZV3bm3<~hdv?EKR zaKBxO{t|sxKS*{+Mi(g;**$tHvRhABVC2DYAWeo56ItV)+E`+c@Ak_<&WHZ>xTqMZ z-|qgd)n79b*lT~LfV|20CBdxQth=;ZwR`8r>>hdR)b8ugZzq;a%XLR?lwwOyEb%O@ zkK8Yv@A6i+yKj15Q5~lK!sD053yqSEj?>zWRQK|&-?#Ht2s;hSU9F$_bthmyTQBIm z3(aurax3V{?s`2(d-di3zo#i!W>HT?7Wm3>8_Fd`8D`^F4DTn%eM!ElhmLdxJ7&lZ zzU-Op{;^xlbG1jmJ8|#pj`VoAWAFMwSdwOsLic9({e%|@@q4)4$GcXncPr7P`wP+w zZnUm}om-!!O;US9dOK5KDFyqb2fu&2v;Sgup2wS;e2gggOt3@r5<l^{8lSr?PW?DP z5AWIIwY>V$L@vV3*#5eV(VeGXBzC5Enm(uA8>LfOSH8M^jpsDHkn3Ie$c$-7K7*3| z>GW@?pPzD|kLGe|@pY)ghzf{}2)FZm=i%oWytrzr!S5qzC4;;{D@)hl;uM5(HAu$5 zh$4kjI=c0+wJK$IA5rZbx$M1LOIb}ky;A*omkOMPBJHfeRKiojPR_hpE_C>|fx>qp z-9pSfG$&DOCKZn8Kr;`PQ^t#zx5i5^HlOOeIK}^o$jTijPf%wGTltfeFyak}1VmRo z%x!j)&B3Cu=UCyVZ~s{H<HZw?kGYtdnPyL1(>HZh?YT3ffiQ^-#=KCo(s7AX&iV0f zN!#g9wX+`iL(;#`T_k1O$R=t%xMyhCsq@v-@@g)kT3gIow)myi))agmy^Dqg{-9** zRvc$AXL2KXw@Gq>_=WhA$jwuM$)%GcMwkfF3%=A+$?{I+%|(0~xDXub66d1llIIfs zlgLkXKN;LR^=r+qnrEHv**v$fw)d~mtxYnwv{09ScTc3yzAW1J?)PUWs%-M&WIePJ zzeBnZ#fYvbmCkpaZc!!yZ?v|G%Ub?usiVX(gp)bHIY`%eJh@?o61h$$buV|<c3XTM z|9WLpUV<#@AYu6Sa?JCW5{w@y4YE5=;0+P>3rm%2mFt6F=(F^mM2j00-vV+he!2DI zW|sHG&Wh;d-`Kx1y7GRZ<SCK0er=<^)|P&~UI-eJ8Jc@@syenhyuoG4LqtYt`AnNF zUokS3PP&|PC#A%yjA$G7kgn~!c(==*@uaal%SzgyA@t?Wm!Cd)X!>aCjQWhIm3;kB z&(T`z*Hc_-)b;#zPl)-u1HGU0+=fDj@_u((G9UIZC@{3uZNh%*`>MK>T07=g(kOG) z#p5fQ;}z|T;DCHk3cDK~j;2D#E42wVge^joT8_(4oxfHD*-ai)*IapcA3b!ou*cQd z?`zG<g~?zixRbME%+%wFHJ4AVQLJADpL0IHze-<iZ;Eo$PMv%>`F>Jjirg6Jy85a; zYJD&EW$g6S(3I}<-lS9bqcG(;=A%<}3*-W@iB4F|oO36Op>*(MWH@)&LYgEk{h}k( zrA=%u=-n>PZKOTgL~+0EY0i9Gia~hN?*cREcdXx*X3Lw_tUkVLSH(EJ)p*rg|9<$L z$2d{THe@4ACE(L+)%)m_&tpBI4c8jFQpNUP29{61dU;^8Cn4)Cr)<FdN_(7Pl+Bl2 zCOcx1+#723VOZf;h5Pw_GV92~<h9>eWQK(exfF>zxBJ^G``b^q%kq(PQRXpEI*saY z?1ZCx*EfV>waWQTx|T}V?yFz>mjvDMoe^xzz#!xPZ}&&s<>J2X-vc`}dJK2IPq0o} zAK$86)d;)$ak)p2A^yALVCde5$@tlgiSKgky=|LoOW(Rq#DDnA-y6SaobvrsuhsY6 zvFqDu2ak3umPizfih^w;o8;t;Uw%I0VasouRDSRK0+U+1#4(!sRdaiEJIptJnwLQs zO@-k;{So!H?n2Z1#5YMB-RdcGdr#;MLm!4eLqC?{$`8Jwo3@UwUmT|P6*QFpXfn6! zzW;Tzm*Z&B=00buE(zEMpTu6Wvj%|@l|Z1hTOiOb(3Q3f0>#2XpcQWrNWTaKl87jI zdCd@baU$Z9OEd^1u6X#%aoO%P69nR-20A#$I9prkW5Yw$(LUiAUv*q)1ON>J8JgfC z(AZ$#n3EV^|G+RK=;y9p=*d7IBdC+MHQYMlqHjRprNk&-`$QWDY+^80&j)H^e9{o7 z4<HEjjX|Hpg@%Mh>*I`|f8x~#+K1g5(35|H!~`2bFC0#I(%Jgz$&2Apz9)6n5il$q z4nL`@r|yHsps^T?+R1b9a|jK%mIgu#28Ziw>gj7~o&5WO0@FqL`03lB%>SMY_+$hP zh>3~N*U*TMk5`Y^R1c5x*Ffm$>1n{vX`DL;10Z1031Km494sta;U5er-)L-9U_?w{ zc-YB9jA%@FY>W{UAoVXELL>f#HZ1yYIRO&Wz@Z~F5bE$lp8f>%!Tt*_A~q`I&&hqT z8onXEp}t`;(Eu#sU$7AY;W6RS0pb4%>VLid-zETLYi<3nIsQXhLPP&GMRbf=9Kgok z0{IW2qa6|=d^PNRqr+pPu)bz-0GSGh+(hVKjPgatghx4qhll*5sjL5xeDa*8I{c)v zH5wZjcF2UvzZv3-LdW<TK>@u18q<WG({VTl*VjVo!;z|R;4l0yQ0s7?K)-~44|+}? zuB(su-$4PZ@j=I+|9^pfu=;-CQK4vn<-kz1zpq9_m_PL7zXYj&F+3zZ3YZw6PV?XP zUk1*OQQ>}pA;61&cZU3vTx)Cn%VE(m=rFABWt0&V5RZCbppU*UU|8BZ+Hjbbrj8#> z3+v|#L&7z&Fr*J$%NLE&!@#xC|BOe4V`C4E;Bfq34&f7y1#tX-<oO`9b<o;qO&HS8 z7Y#cHpn#z@u?RqdXdPW`O<%0GuFgN$Y@-4JpG1fJTdapv`5aP(J*VZPhtYxg`04>v z`DpsVkXqV)Ftjh)$43{bjfG<nhlc;BE$Lqhj0Uuv@V6`3`$qoV3JE;<r}^lkv4?J9 z1jQcOgRc+t@9x0=NFM*4ng1RiAK(ih{V%NKui2x+{bJ(LQN9=a0onaG>`>!BBR?7) z_g@o_#QON5k#IkluAZ+ppiCc4n4T|M4+huKL+a|Hk=mMQ?SGj64~ahvP5+qq{~hsv ziv}Bj4)gZ~0<8x0|DK)yo^Ad`=f7v?|8T?qm+WX92H3ysOymDF!9U;qn_vtm^Up3I z!XGyOwYC5s{<S*!h5?d_0@fbu_C<LRNPYh@>VgA~W4-@G_mj*=Cd|)!C7RJA^)OBA zy(gItu3>c>y?3E^Rbhotdz4SkT5#iyPIc&;C!#roF;gd(vybhroo%zV9)2~d7d^81 zo&EZ$?WGsKAD0q7?v%{$d^kH~hx+qzcq#<`^SO8SuMSi-&tDzaYE1tIsr?@iKob8W zmqT-K_<w8+E0anMj#ng<;T(719Cc{b`fPp#f3P>~3pVx(+u{nGn-`AXi{#$uJIdx2 z$D9!NK98EH;Km|Oh%_rr^)D9XsuX3ZIP)q#@m8}`eGb3HSwzUh2?^4SXLCLvcnJvk zD+o0x=9nsA@AbuwE`{$aCWAhC2Ya7w@5`UzvZdmP7V^7r@t%N$WJ^A8$wIUcAwnXI z)WqU8Ow)5#g1)bj2*$ud@`srYAsNpR;tV(!7WgqtQRG74e|OIEb-wv9Lbj3W1?O%> zp@`>wU2^f)-vaJs(B=x0ea!8KRSn5br8+KCor%|b&}t-*A3dH841jeAR^xF{S7&)Q z@8A$ZX|oE&n~(D7Y5|8D)ox$RX<>)0*+|8J!3yVH3Za<EwqJjm5CB9)+HFzUCWXy# zN>_2iO3@HPgi&MP^$xx(Ev8G#&8l%E;WpHZ;EKMT$fk{R0>KOKa7yj{Q;>oqu+l0r ze38bpFVNc`-f~QpDAzLseu(C@RB%ccD=HA?Z4r%bhFpXU@bICX<DL06`c7JINoSZW z=vRH1nt5+YT5<Be=29pD@b~6#{`dpXXSe(MXT;o=<p_~RDfrI}Ikh+4Eo@~QA%)>G zcJ+v^KrlL9=GJ;MXJSlwX9xH`ExY3=Z(gzpD?ujx6rXgbD`eoDDvWee94jeK=a^0J zrR&UQRy*Iy)PF0*=Gvw-@8<RM<G>r*`VBcv3{K}<yMtX;%};9c3Q)((O&ia}wn?XE zWP4tY9y1gfC3i7pOLA9R9HLzVa-PkLhGZX&gil#ibTy<KwVe5wE>BBh!~7t?qy;VJ z1()SMzzfkT8>G(>oM8h!MLE9uB=?fM8}JL7?IZ;I(fFr`wG44eFy%-IFquo!#-_tQ zw`U%VC{wo((9QRh@u7o9b)t#f49T%94UAs9l@W=*9jx6g+(h<8a+^@g^Q=_KCaQ2b z27>bg?YiSjDW?V94h~)HrB-#y?=xPS6k0?w{|>}MhoTDiY&Fg{$-!Trs!OsWp^;J_ zq&q1Lq)gT(D|FwK{BxU%0EN)fHSQa}mN!o`V5^5oRJ|LSd1tB1h;q*viY)MZO{$rZ zzERwQ@XX$k^bi=dDUOBNP=CNX`}XM1LuBySW_g|}l2$jzC{>U(-{C?2x!G8NN@(sH z4|Q70m0%bq^J)$Tybx<2h}q|oSP<UlP@P!CxTjszu9DCg)McKjBH1&g+O+(SdkuI% zD`7mP>ncdeGmK7UqVYqzHBy?JupD-Pl<{YX%y=03#3%F2_aT<WE|_c&q|)8@b<1iz z39P`^Z%c+F3@K7y6C;kdPt*rT)Zhainl2@RUu9Gwtk=?;=nnM?m3wPBn-Rj>=2!Mx zTV^E62fxnPlP$5$Vjt6@S)3vD#?uQj!}_90l3#VmtJ=XQY$$Wk%21wCf2c9>ZA%6_ z$v#5s6=5lNS>Ogv{#CvNCYI%_L^nf9f2QETf*&B^eVI63O3g=}l5}oufBtUaI?2x6 zNEw}}`tk+SyMLnc^(Z06qxo3@WjUJ6bD~iF>E4AsHb@6-J7LZiN=cJ7Gpz4>%Q~?y z7-!cb9og<@#QojxxA!M3f~MR{a=B3`H!*!`9Fo_<n}}0erE7Hy-a*9_8q4I#V^fJ> z+bQQYg8YKAl_;y(c OA>d2h2*`%YU#!Xhw&mq*|0DT>4#O{nBnbF+)tIcF2=#3- zTQaf)Z;P(Pk2D(_XE%9=j;pWI9g^i%bJ-RT7aU6PDz%#yCFx?t(Z{!S|5(df3Y<EM z<Q+0YeGn^tAvi*QJ9uYHKbh-}nO1Oo2?0B<`o1BvDnejeh;`|6Um&h{C0W`jz{Vth z@TGZv3z8=|U_|IudO03%DO&to*M_Qux!xmQP7Z<=vyPPH7@19OQ{EwEGV!Tj<k>v! z4tbJnbuMjxTSIP`0_i)6puK9#?#4f}s?c+ztIjyL4XrYbzvMi#<!z#Tnz5VkwNK^` z7iV2cT2P&F*M3Ft3Z9B|_SkutCNkEfr#M0a4D4K{pA{(;du2R~x}Xf+O3*aU4y+7g zFcBqbreu@%(oem4*L9D2QO^y(JCVJTGD`h;Xz(K7duJ!YW0UztMXoPXb8xTlD?Oa@ z6x8_Ll>IZtC+WAhDVJxi?v)ml2TXM#tapm>FCN)Ob45t`0i24h=*n8;o^8l1pa(*0 zHyumxmn#Dga1zF+>9@-=1hGGDyQbMAY@>Dh-C~=Z(7MAfWtMXBzlyCqm;adWdF}an z<PoKufZi7i8AWRPX7V3%zKgOhS<o6FRXytc8rrLu)*kIykyNh*j0l(He1%p<W$xBz zzwq|Bc3&a#2mE#->|^#Xm2bZ=j+NjG@!4DSP~7cpslH#FAL#`%l;@TrLYiE92MbUr z7|)h+#Obm#D-#5fmKyvvPUmCZq}kII>IbIImt5Qos$2G9U=x8QI~=%>Idgpnr~d>? zTvQ`dTdtxeDz6rJ0Dg>`)9F94EY=bfM@~g!$3H32GI0DnfOkkzu_fCoES1+|CH$<! zFU!e2xD)N;^_mf#_-ED?i3doohb!ueS#UfDpEoE2GUef!-+(equxAAtUW_5+ut8<2 zborhmNkL6+EJc6-&|1^x`pr)Pfg{PuVn?BsIz6>7j655oVg07B$vs7xdPRiaA*jG= zVNMGA$W&jVGj}jLwmz$H<R|@n>bSC*A)*IovJIZ|lTDV{p_zkKttlrugn6G^<ZLqa zL!L<n(_`6QYHuGTMhfXn)N3$Cp_Pt3wUYx6$DX#%=5<9XG!D*n@Csr$3KNoDi*9N+ z>r4&C%?Lb1tCliAYsC3n945bS)$GN40r^2yxEI-SkDiIN*qcqi!@NBFHC_h48T({C zvdC{Prxkt@8Z=qw+C{%w%Ftyist<U<MTQI$6#dZRVXbez7TvUNmXD*h!d+UY2Cj8* zU4+V&ud~2kR#Gl@2yP<eH(QSIUQ3)o5~;}g^ydi9o|n_<IKhtuF{opr>Z@$U_t@j} z14AvPe)ahZktf8L)v!$AkjHwe5yD|&;ODE?8(vg7Z8lO}IzXuxYFt|p($n5NaRX?i z%#GsBkdR!Hq>xNVj%!&_Jod)iC%M_Qhlrz^h@+cuc>>~AwX#u&+U{8PWV758@6eF+ zhGtErW%clZ=SW+!r2)+sX}vd_Im%Fl)JY~WP9}T!zmsixQ(qS;mt}@pPrU9Qz4pXK zlNFdOm^w*(*Ky2=hUpgT3Z!Js$e&3FAz|7K#JNAIPt%UL6Os@|TU!PgFUTe@$4M0Q zS)INoGrSrDTBS|$@|32?r^j7!Vm5C*CFquhS2QV%tqz&^6+Q-B)?V9R@>Nck8A`#` z*Ci<1vF`WsWXNapCcph-pZlLH$L7Z}{ko54?t0+wd*8O09&oVgZytGpFeZdf){&n^ zyxfS?EldpgKu>M%9MK_~Fj6BpHu^H0E969)1>*X^Ge_-X+chK93hSm$Cres9o4+5a z#Pj8uV_<a-q~P+*aW`+HkaX>4DOdebwQj!qLFMB4eUi)LM0B@E`MBgZiF0|nL^T4r z@#XYgUlpjMbyHA%=8dts6x9gzkLeHeM-SL=IdT%*tf!r{$nLRlqF*q4X29qDz|Szv zEl<q|$FDQpDb6^TEGU82;hG3Xe7o68gNCGk!f}+{EF9UibI)qcbALe#8vZm0`SM86 z4Xv@3zuqF}s!tN_J_e8@d>;_`c}*UfOnI8laB*6ErC0PKowvgtrS;@$o(D5#OM2i; z1fSoE`xTa6x71GEv`>h?k0ilVGcnIFiRP>S)@~nUK_5iQ?x4?aiZgbQa@q9gj-wa# zhmhU84<$PjwSqYdF<?K26C2`5JQ@kzAU|4s-mKX^;VDS-QJXAjh!El#PSn|+swc2K zz~j$M_ntSaD%CpWv@#KD(_bx<<v&x;Z9Tx>K<x(~uunc&Q6sSxJPYnKx*!t|vLa<a zW@WJSUcYf^A2_iLj#WXVtwuo02nCp|#nAkowt3sgMn7w+WAWR97ZqbAdTgC66sn46 z{e}KFS?t7WR5$mP*!!9+PQF?TUbiY+vO*7E*Q(kk>$(hHvjw%&As$Y>%~s5c%@X&_ z?J=_t>(4<RaSED3hUAzg@zWfDX!aDXPYI%2X?f^(0GXEn=c%^MXW?=ajqnAulsSJ+ z<2<jLQ6EDyvPto+X>`d5>r6LC6LtONbSCmxdH+#;(h5@Gpz`wl1@HZ<(L8JUThHg4 zB2QTk>&bk7lCnzAgVgD1GWEdYV1Q;tN2jJck)0dby#AQmiB^Mg&~M{IEe#`)V9)$$ zBA+0wv?%{!Ox6<Jd%SIrCAEJkT8C6v%MzQd(_5uYLaIEe-WJ2V`i&xB*^03g1Mi!= zv-z9w`mO_^=^CmOt`?td-9Ln|@kh#9F!U8hGm*k36Wu8?c{!DVnk;ko21(!`HQB+n zgt-(g(62e+e^jQ{MU!a;9!K!3PiA|J)fq1>h|h(qtCQ{cu%M%mJ`fi??J%DI`{o7J zhEsI(9>$_{A*Lj4kLcb@3XXiTxSo|^cBbQ~JVk9wI$IXusBK(e5-{Q;(`5XXr8TV2 zxs!v>AFu0C@-E(;EhxwQ{Bwl(1{qR+HBUS-vJQVwiI!RPEa55R*lX=S=CWT@Wh!X< z%Xp^qvK|Gzw~gTX*q9=XKIa$ME6G-B2SPyi@zFuW+ULds7YY{Lb2JF}{5N$sctVJm zSE7%mg#T8Q9-jMbx)ImDSehU2-8haF{}@&cU<7s}OZX@JG((wN!;`^hrv}s}k<uE2 z+r<cu&x6;UAL&!k!NV?DcbJdx%gUMCp9Wo*oys4=El~Bj9xd&D2cn-zAyuOpIPQ@* zB?#nkd(@c@$=<8Ifiuprezb>>HzlPkp2>G&*^exuQ}PLBD5^@Et;tkBa?3f_&5T?- zbA&r^Diq1FBiSR@XTZ8K{7$foVAFi;KBgwonvz(%m9Xy`y~`4=uQ^Brma;~@E3DYp zfXbha8Q*Z0W=vppfVf|WITKQ?M~E~G6WU=Ib(m`^F*qS-^!tZ9JOJs+PP*n7U@t|- z4X8e!PeGn<O-Yll68#ee7QuOArA0{7jC@C1JjuJ#k8h!sU4#317$7K!VmxCNb5lC9 zbhn`{@jlITSTb9o`N8%l61u2Xk2m71I3Azx5Kt~hbSfV#(twuL=QZD1+~@J4q_LCk zGwwhfdSNYsiKw?(OeaA9rq3N|nvk)Qb%d<Zd#tTYy^H^XC3w7rXZ>x)i51N>vlRqK zFd9~$-U3mr>{=(vYGc8#Za$!UebrBSESZF@Tt2pgd62kOWxLf#+0lB+t<fLnICrd@ z=Z?0&&IrX0K$ZC1R&aN+u3B!7mgk%<=8P96z`3L05}FYva(z8eeJ73fLC7#$CFQi- z@R4L018<S7M5VHHuiPhd1WrJ!Czh#pldidUm}>P6k`EW)`*NhRZVB4SVf~}ifH_Uo z^;m8N)lijYM!$y&MI$6O5!^2pb~?mT$%c2K#kyh!L6jrO(ggDN--AkWcB(9HJVEQa z=bRdUYzD}}&L|~AlVvj;uppEyGMyAP)h`XViEbQ}XmLlyw0W*ye`c$(JAoa;N@oNX zEu#0Z9OB+OVf~{K{2P60;Ncm*@3xvLnew?*1_1|dcWPRPgE!6Yh+{erMPkGisqRSx z61kc(=_csTGhy;;6?#K}I|+kjo5qYu&b7uOEm<SFlG5G=GFhXvBgx#KNo9bbJ>9&! zcZW&3EzX8=(GgsZ&!#t9asuAl@zpw+P-;iznX<!)vSpug9^TZgw1{r(k4K@Ll-ov6 zir0>=%$(nOfRAmFFis0+7~phuE}W`#6=8lZjuaaau_b?ES0y&2%Z>?KpPg)~_9P+Y zbpuCGGTD<xh|&JW;#QD9%@aH>#<SjfBpUHp&Yl%B7s@w9NoOBdr~0>mcTo;lXq<g7 zhkO177D{bE;#%!=>)4s%HvQenV2;9P)3Hc?Qt>8qZG-gz^4auCv^q833^fhV2J*vp zCK3k)l!<(tIuy4Ev2VNvRZgfRYl`@aF7LdkEk!V*Dseskm&(hGu{uvx_~Vp$(!FAP zT3*o_OHcSi(1=V)dIGdESoFQWq#XI&);p<(QVCO}Ro2mN-VeC}<?9H?gU0?j`Y%NV zpKGT5W}LMGrIemcpLBdSzm7bbQQWG#y)#pm<y2LzXF@fDR@MQCKs(r+-H;5UJoi<) zNu+T;MGDv+2$of(kdU^9E*Tx5&55Vn26!dw!DCylw-k$6M(z!I2RQC2R;q!VbkK-l z$*tf2!o<1JhuM-OC^To?Uaw)FwV{+j%es$zsGFB@R|2ZH9hZ9Igsk5m$4&(6Sq>Kw znlM+R+o@o=Ih`4=RvXeN3N;M`pd6Q?YR{yF^9o*qo;QKjfCy&&7E+z!gl%*dBQRCB z-g{{Is_9(s{i>|J<ksOHoya^JLi0+3=}eTkuuJgEmYLhGH>Kf^jg63U4<WKTgJ&Xn zbc9%BE0Wa8PPCdtT_st&sKR&^9Xoz&xTQ0ZpPn)-)prIs7PSvtF?<t-6oL(Z72Xg7 zd(@11Dt=4zU3qTwvB0>BgzV;7@^%6j%yTVY>y<{RIZn!UT)sh}1y-IgpnqD?mVOcV z(HH3z%_Ea%ZCEcz#bAd!!A}YJ#_IvS^VpW%o+F>B&Q;Vhw)}oJp6Va{rDodjwdgur zUiX=;NxN9AG{FPz*dvZET;yl07FFrll2(n@z5+4vRTi+ToIcw&Z&Xx~f@KPHbKfv8 z*kWpTUnOHdK(Ldmf*rPPq;s>mr?w!3Vbok4nFFvU&Dbn2#)sm!14GTct~kA^i4p=+ z7Dx^RZw2*sF{48Wa$8avJ6K^G@{uZ%D_hF715}Mq4Gk4t*>ZX<vL2<m=nb1xZLWD{ zFE7ylWF_9jZ<X&N@`Og;OXbP%&~EWnjMuQ_fNo?temSV8mc<LK-YZVDhM6PfecH}p zzdg)qa{a^&{q{U?CH@Q-s%tiTuca`tUS*|?+p{u7F{~d`%CN<0mZhH>cFxsB#}0QM zGXZ4Y<fNTKFhQRg))VTYsg-0tMELl)NqhAjaaW?>p0ew8frzjF1lhs5Z50ty)I_ek zNl>vzx7_g3S65^%vgKYq)wA%{7<Ng!6WNPjPRtCN%_tB4_#S7VKA7EXKuMsxzNDJ7 z`O41HZ|_djk!AP@aV~g+34fU<Iknbgi-<J8*JK#|b3-0>tV(Z*<`2c7lpU6isEtWZ zQTCWdB}83sTdP0VYHvN_$T>x7bTk8Q-cyLa9q?2Uu&EnGr)wt)1R2W1osutdvcJ&a zK&Wet6ez^w!4*!ijeWKe_>mT!eDdv%qp5v8Y=sR<X%WHKIbY1N_|cwBt~BceUyipS z<=M39Yl(HOTb(PK;v%T)Q>1LB)UYJwx${Z6p9DS<O{2eYPXj2coMN+>dNO$9Qh$*U zOtr6bTBkGdf*M7*t+{2xo_1_s+(hhxM&d-UN+CY(AptE~I}M!A=P2H(-TX;`Q#U$H z4IgLTM{5puig=OFff1N5wNsNwd5h(cgJr6g!q5ua);&WH)8;07u<~5=3aV>(P>5%8 zbr3nOeq%-=o0j10wi!mz7`&)MzE-T6_BNsl54o0jJy_@rL+A@ZX)RZTd4Vr?yuLa` zG0Uurzs^?B_2p3W$fnv_hDWo))Eh~zNX|k+woLxhz!4Zb7Y~U{y#Co0NUVrjC-9F@ zV=-E)lTDe0I4x|m4yEGDjHTKDS3m+rt}nUGFvX}SulnWC%bDXw%h$@$R%E53T<c~d z9g4oQNRR%|4R${6XHBMSn-*4bgq#7zkUw4T@kNS_Qr?=0JfVjc<zE1gtL!opWYSI* z*yhN6NyHeZy&Yd=1y_*MHvVvw$rg8Av9CNY$Rir?DdavwkRHy{eL^~TgrEHq54oK< z$>2)nD7PpN7}#vqP#3Pce&xXOE`9v&GRb+;E&l?a)K|)3;%t-Y!ulbVga(!rd1?q4 z0o|${)oqr|pS-cr?{)Q&{GIXalrLDB-I#W5gzSCHRiZg*Wt!m03P>DRt&}tw<fosa zVk;Nj^RJ-D_{lnB0!uQaU@rE4Ijv{8-}ws~Iz=v?5gqM&;>;~wIhIhCSsHN<l6Sc9 zTKAo11vpZRYn?DT_-t6;{lSZI)XlLsL{22<6|+NRo~eUfO#YB(NooTJ-@+NqQtjl8 z86c9W=u;iK`FaO`fP{*BKS*rI(k53uxEWZhd+P#N&_JYDI8~D?ynm&5)5u*7YTjmg zkdpoaU9o|f!n)<|v3Qe(HK;?ZQ?rjX+nP<L#Hz+Ie6`cK`crblD@9Kdd7GWdmYNY# zj`&^|?hgSYYRTY>fRCwaF_OC_hVtAq*!(u+D@@PX#)MU@7s3_h)FeK2{?xa7{0N(^ zMQl3$-m5edeD)WtbM#1`HlS8jttFpi;fv<4OlVk~vCUxGB9X*P4$!tgc=AZ`+dbGM zR%bDn=8xnh(NB?-wXxzOqTnji3O!ZkiR9x$M1j-+7LIo@*qql5D}s<3w(GSX)A;r- zXy$^^qIWuEePe(cQNAqdH82dtI4Elcs~G2CBg)6oV4HqKhnJ>KKL<wZrL^iquyj4_ z+dK0aGb2At1!Opjb<JH#f6y1nUyX-|@eE6o-{BO$VPYTyFCw-4YUh#r4<UIQ1CJ6z z^K0nk2L?)YR6aHFs!1W^f>wl@em{`d?J^@jyS6NIpI+T@yn1}Ww40wW8P013t{N_d zI5b_JLGAa*$>0&SPIQjDm^OW2&tx~Qa=4YmIH<%F&M#alxus{G9nB1^zuFYrk_ia~ zBJNg_5)bPK52n>tQJ&jiz?Mid=nCqL%D6DN%Cch95U;xs%Z6Dh%&V~PB{pQh1_N4; z$3L4lE>e?=I;~VgHR`Y?ntvzg(rv~Af%*jgTJ>1x2=x>a91nT7LAsCdx<SEeBHrKa zxNuOG^)#pV9b^wE2T2wwm_ID1JI|hlLiJ56TIcda5VHR0C%0Fr?7YN=Y)?cn-$FcK z_D2WjyComijKYdk&F@6Bf@YO~0p=A3?)lS<OC>i4&C3+oh{9*1yUzARCB;U^UU7lG z(^VhBkfNE1YW=a!r_2eX4C{_7C{)Z{(;a8x6{e%ittL$R?cXh5JCp|kqjWSQ>UNDd zlO%hTXwD&zj5Q-#A^d)fEu4lQ0XQ(&F9Qx{-_38ZP}(6ti0w65*jdpOvnL0%9&@Ul zKh{0FtSy^eGhH6h1^E<48e&~n69<E3YsPxS89K@0qXQi5bBz?4yDvwfv$w=n5R!Ke zN8YdV;{7hT2f0y}qg&;5BP&925q~>O!HV3B$1gkgyqp&jr$y}_0je8u)VD2SI(?8Y zm1FPZ`c5WZZ<0U2w5de$ilZw5IZ4o?_@rfZNKczP6OGb>ujSru6r|G6&Yl6JWY=`t z7c#_B*gwwMKJb<)YAELBjr~$3-vc2a<UD$J_c;l0n=J~u1d{hHcPQdfq8N^2q<_-< zl?ofQeYJNrvKj*09!y7?0kV7Ssqg{*4R7LF!)@Oz^#pyxYS4TJRELEsRWO^ACj5;H zpIPMC5zV8S1~Si5Z2Qq20;)v!V0sm<dY7Lr;jC<ahrzsIcoHDXrfJ;wxFC&Vc2WNM zSjG{f<*jCpEf*m4PP(S6A|!&JIi=sHakKB;4!n^Ju?VCXA)SaiAL!mCYKMbQ$=P8z zxtc|JTZDL9+;50`=ipc7(&mAr9g^pUd6{g4RQ?+x+C9@?Fd#<e3I0%lcpJ?VjL9lR z^VZG|%V<yHclb{-H=7up#jVG`E1K6mWoSd8l?>6!xAj>kR<7lahX{Qq>}g@OlR*!c zQywl10hNHsdM}#PwMtZuu%hK%<^QBneJ`u|SoLBzm#qk30o6`1#lI{&75F+UnYTWS z;1?JpHn8Mm3I<<}I#^MMnllz*gA(NU$d-FNTY+fKMXY@ZK62%Sif4f?aMlG<B*1w7 zu_n1qxEIl{HIif7tk+K_Czy5p?n_b@j=wBpeXL2-9X|xb6YB$4<!czevUG)src4Qj zTL*9pBIcGUFdpG(B#yof8MfT#n+_atPCoX%LK6^r4)XXsd6XHpmYY(FmV0&c!Z_i- zV(gG-1o4e!29lpw8|xvH4_u*$x#c;2d8%(}`C5Tq(HZluUYgSkKWw<@W&vGkwpQ{E zf`hb7Le}S%wn)cO9lm_BT3V0*mdnzGX|}p&bqc3I--8ZU6iTbnY0r>bq~%EU$`^0Q zG{Z(=NF4Wa_jO+e6e-WmP$}MwDY@xHSKnG0e8__GVPr$<lV10|g9w%SNRISZ6g^6j z#^^Wp18x)G(6s&aNLj71SAUCn;f?0}UBk2lXor-^K%}ykzeY)x6T@aprCA|vqVyHM z4s~W%>=nVO7I4G#O=dLs&&;2D`n#1@`F2E9eg46ClkpBvba0A%vA9lXLMv>!J~22r z;_vMoQ|Sv7ptP_?-6uqVn*%^HFIsQIu6#H`)YUvo0?obUa`OYqa7`&$zIt&zy9q7L zN_~)B;QeIT#|fzKy%Xfl#pBJz-Y*5sR(dw|MaT38;<T0OMvXeIlTCJoHzp*@GNL2X z*iKnYuMYQ^mx@SE!63?Mnamo%ND-Oa2}0AD&Rwg)?3VP6IJLNIO<fUp@ToD<Hl{V2 zAq0C?+!sP`Jor`Gg>n9rg7AP5&ly`l%1_3OH(9~2?V3E899C1Mo>?z2#KbwGFI4W6 zntM%jeV!mgE#%C%Mc0zFua$0mG&MklScL3bfI)@B1Ml>Lz*dr&asK6(L*GeD2$!D4 zg=t_H&&_gCd!x4-sr)Jri}+<(`{)_E_;_eoAK+TL+rWLBJmt1&=)UOD6>YAjK`Puc z9;fr_*7J$aa{E@~sy)QWbV56MDMCrWv|!wq!x%506Q)IsW+e?T4<csHqfir#V<{#B z2P@MVx->0AepqRZL^geO#__;%Uv7thi#f_x+jx_(%fuuf^~VTWY5mdA_X}{yu5_Er z;=LL~`G`9OT>80IXS#O)b_z7-)foJWlo5$3e9p8f$=cG!a=e1kTMkZ?Q+P@P4fFfV zkn*F{-DT}R_!u$W64lFb{tUt5Xtj308J`2ktaJN<;sGN%NZIm1&GDx$B22XsK&?M6 z&fZi-8MdD)NpFp9zdR#vLQ%vCZc`}BTkN~av5lIMhFRoGO#ftwi^VPcp0|KaKTvOy zl3+|1AIij*DY=#txuOl;qxVK4fF!gSn`;q|OBQEjba=+kNS&eEm1GoP^|uGii*Csk zXyH$l`a`@Z(k&?B>3K4&IGRuAki1XV^Ela3+o)bY>%K^&s0omSfo=31S=R+W^mbY! zEMfRd7n;~D_%n-P-MsUCqH`5}ax)~$_yvL40+*t^2hKM;m0Mayegb{ZEWl(!0>cLN zkl>!fV3bn;gizNnwIhNo>9uOj`aCC^_r6$a-*dKtAN|5>a#VpAZ!kJE1V0Sq)JgW^ zPowX$1;Qj)WRIJpG==5y8#)8#-^Qc(Fe+Is#Ulvr&*U1+X#=rrw81b=)`rRl=%>?j z(j|YCHa}h!O{D6~aB*YR7Z*}y^SKd%L(M`%4GxukK13?6K99czJT(xs{Pw{{-vgk6 z7O7|hd@E||=do;Ks|lAz(q2Rb<da<AyBYD!-G+i48uBmPyC+5lVoC$~o}hufY?-6f z0GtcqQ!NZ5nrZN~#bl#Ph=98$5SYdxxd&!IOo(3?#k3*$xv}xXxDz9T_W-xE%M9YD z^+uL&yvaZSWtE~^zZBgv{_?0gX&>yL>l_=+6mVC4A1MAYy^7_JD1J@y2aM05`vh=B z85p`UhcBoSwT28B014Uc4ls4WucbCCQbho$P`-lXsrUN=b*^r}+8t`I_6X0DU!dkJ zOKz1D0-EZWT(hUjh{C$`8%Rhm<p)TEID;4RhFF6;K>@V#tLO@XSAH<I(#DAv?R>WK zK%LamVQ&Z)q{VcL%2SVk_hs$}jJ(3-114uxVVp`%LR^_Z>lot=%p8_5-Qw{CYLxB> z`4mn&OqkW2fD{9Qnv?+bP;5D-J?aA%E$$A1$K?lnp|$ZRJo7$~d;dr($-j@)Pf?+J zb;*3M(;FobfB>P$v$c2DI2(QKo(5x8*=&Mw1}FoN=hX(xaAyPt$JzJr-#@sQWF-{0 z00moqAkxNV?!pEwn2Ogj-?CEFM6WfeMrfr3#}pIh=_H(Fe&183KafuuWZzy~%gF#H z_^=g3!F0>_ARXI=UNCK5ON<k}7!k>!CU{gsU&!kL7~5+WzXuGm{b-lW%k3SzwF+Ex zLHGfIw*Av&$yc02Rz!*O_4$FwB3PwMD&=8>$;Vs9bHU(6>?ygvgAVRga>HRM^9pLu zJ@+$hvbcp;pf3<mUTC6rFvrI{GaNS$%cmqO9@CB=feXr$x7bLXiFa8MI*sRf6~(c} zi|A8+7`;NQo+WtFIX{}|9`Y;&CX+4CNCCJN?<sz9{0xS}_*M&@B}JKL#;J*pyA%SK zN94TvTCXl!UF-nO?=;(?qEpi4>08AuMxMDE-p(jg{ZFR;&RGSFtF!8I1qnEfe5xt9 zw1zCt0%Xw|+t>nZLqx~x(IpvOT1$D(K$LGYt7vskBSoli4OVrYu%L+mMzJ|er81AW z=WvuhRjh1v&nbU2L3~QvS_Xo1UHw=>N;ZiZ_*y76+<1g?0SFKqo6>6pk;p1MPVLNs z@vt7x2SA9|9ha@5S)NwZYG<{S>=(34vu7)lV1v{M<Opy@g+A_HARj#P9;fXJg<|fB z>VL3h+Lfd|B--pSHjzjCD@76KX7Qhj^4~@l;Mq>b1Ou%l?+_Rixad@|IZSbiIBiVm z$`cr3TFd0UpoxPOMuomfP`&kE<$i_IKhNE4)%KU|HV4G<qv;M?)~2t5ExIW6z_O&^ zB1_+08S|U;Ks8Q8pkKxLBvdYnE9^}PsksY}$Gzd1ThhhJmjNr=sCkwol5>=_%2ZGj zDs2>9*Gjv>a$F;PC&QG@bkAy6Y5g&q|5nRiRz~A}HA)3)e$R6*P-uEV@Nm#(i-OLS zkvJp119YDzpeAlR;ryk>i}#M1m^dTIy`Tx>FGDPC)=M;d8jQ9cE(-C{mw4Nf=hrPn zrHLvGL5TKEmmz2VL>VfyL)R)HJjH4ligaOQffNGYMVyc>Lw}#o3B!>E6f{JhqD6p8 zU^?1esa7j3DN;k7k~niT32hLPEeC8*)u_6Wyq0%soxC9?y61+;do5?OCYl7V<QWRm zRh{K8)=p=1c9@}vXB&P}dw#KQ^38?a7XEf}@4^GzS;`|ptV1{_P!LOs<ZmSNvw7uE zD(|bSC94BW)A<3ge)SokzQ(tE6}Qh7ar%|w`-bY2>e~&~F4ec60xfmB!fL#;_CJ{W zpLolL<okPbhosdkTbNKP1$*RrPu2IG<MUP#Ux=Gcla5sN^VZ=)p~NWIvpST*8Oetj zEb*c|1+7M@WL|3O(?y}k3V#)y>(s8Sj|DxCNtYv1eTXEj5FlrxuG1IfEX!z-O01t4 z5L(0t5m=zb1@+m2URsm$O-^T`7_?FyM(huQ6hzL5t};}dxmUgUt;ol$22OrV`<#Qv zTPXi?ITHHkQ>mW`1Wn+1=5Xq-p0n5g>Hx0D{0(CFKOlf4{zoo{<^U|+f0@VsBYT<n a&fRrhwlI8ou=?-|T$jykP>rVEH~$x3)0bud literal 0 HcmV?d00001 diff --git a/packages/storykit/.storybook/global.css b/packages/storykit/.storybook/global.css new file mode 100644 index 0000000..5ac59a8 --- /dev/null +++ b/packages/storykit/.storybook/global.css @@ -0,0 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.sb-show-main { + @apply bg-white dark:bg-gray-900; +} diff --git a/packages/storykit/.storybook/main.ts b/packages/storykit/.storybook/main.ts new file mode 100644 index 0000000..65f7312 --- /dev/null +++ b/packages/storykit/.storybook/main.ts @@ -0,0 +1,33 @@ +import type { StorybookConfig } from "@storybook/react-webpack5" + +const path = require("path") + +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/preset-create-react-app", + "@storybook/addon-onboarding", + "@storybook/addon-links", + "@storybook/addon-essentials", + "@chromatic-com/storybook", + "@storybook/addon-interactions", + "@storybook/addon-themes", + ], + framework: { + name: "@storybook/react-webpack5", + options: {}, + }, + docs: { + autodocs: "tag", + }, + webpackFinal: async (config) => { + if (config.resolve) { + config.resolve.alias = { + ...config.resolve.alias, + "@": path.resolve(__dirname, "../src"), + } + } + return config + }, +} +export default config diff --git a/packages/storykit/.storybook/manager-head.html b/packages/storykit/.storybook/manager-head.html new file mode 100644 index 0000000..f5105bd --- /dev/null +++ b/packages/storykit/.storybook/manager-head.html @@ -0,0 +1 @@ +<meta name="robots" content="noindex" /> diff --git a/packages/storykit/.storybook/manager.ts b/packages/storykit/.storybook/manager.ts new file mode 100644 index 0000000..d0c47a0 --- /dev/null +++ b/packages/storykit/.storybook/manager.ts @@ -0,0 +1,7 @@ +import { addons } from "@storybook/manager-api" + +import theme from "./theme" + +addons.setConfig({ + theme, +}) diff --git a/packages/storykit/.storybook/preview.ts b/packages/storykit/.storybook/preview.ts new file mode 100644 index 0000000..7d21660 --- /dev/null +++ b/packages/storykit/.storybook/preview.ts @@ -0,0 +1,34 @@ +import { withThemeByClassName } from "@storybook/addon-themes" +import type { Preview } from "@storybook/react" + +import "./global.css" +import theme from "./theme" + +const preview: Preview = { + parameters: { + options: { + theme, + storySort: { + order: ["Introduction", "*", "Example"], + }, + }, + backgrounds: { disable: true }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, + decorators: [ + withThemeByClassName({ + themes: { + light: "", + dark: "dark", + }, + defaultTheme: "light", + }), + ], +} + +export default preview diff --git a/packages/storykit/.storybook/theme.ts b/packages/storykit/.storybook/theme.ts new file mode 100644 index 0000000..f4651cb --- /dev/null +++ b/packages/storykit/.storybook/theme.ts @@ -0,0 +1,42 @@ +import { create } from "@storybook/theming/create" + +const logo = require("./assets/story-logo.png") + +export default create({ + base: "light", + // Typography + fontBase: '"Open Sans", sans-serif', + fontCode: "monospace", + + brandTitle: "Story Protocol", + brandUrl: "https://storykit.vercel.app/", + brandImage: logo, + brandTarget: "_self", + + // + colorPrimary: "#3A10E5", + colorSecondary: "#585C6D", + + // UI + appBg: "#ffffff", + appContentBg: "#ffffff", + appPreviewBg: "#ffffff", + appBorderColor: "#585C6D", + appBorderRadius: 4, + + // Text colors + textColor: "#10162F", + textInverseColor: "#ffffff", + + // Toolbar default and active colors + barTextColor: "#9E9E9E", + barSelectedColor: "#585C6D", + barHoverColor: "#585C6D", + barBg: "#ffffff", + + // Form colors + inputBg: "#ffffff", + inputBorder: "#10162F", + inputTextColor: "#10162F", + inputBorderRadius: 2, +}) diff --git a/packages/storykit/package.json b/packages/storykit/package.json new file mode 100644 index 0000000..ee29996 --- /dev/null +++ b/packages/storykit/package.json @@ -0,0 +1,108 @@ +{ + "name": "@storyprotocol/storykit", + "author": "storyprotocol engineering <eng@storyprotocol.xyz>", + "version": "0.1.7", + "type": "module", + "exports": { + ".": { + "module": "./dist/storyprotocol-storykit.esm.js", + "default": "./dist/storyprotocol-storykit.cjs.js", + "types": "./dist/types.d.ts" + }, + "./package.json": "./package.json" + }, + "types": "dist/types.d.ts", + "files": [ + "dist" + ], + "publishConfig": { + "registry": "https://npm.pkg.github.com/@storyprotocol" + }, + "scripts": { + "test": "react-scripts test", + "lint": "eslint . --ext .ts,.tsx --ignore-path ../../.prettierignore --fix", + "format": "prettier --write --parser typescript '**/*.{ts,tsx}'", + "dev": "storybook dev -p 6006", + "build-storybook": "storybook build", + "build": "rollup -c --bundleConfigAsCjs --inlineDynamicImports" + }, + "prettier": "@storykit/prettier-config", + "dependencies": { + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/react": "^11.11.4", + "@headlessui/react": "^1.7.18", + "@radix-ui/react-accordion": "^1.1.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "lucide-react": "^0.364.0", + "react-icons": "^5.0.1", + "tailwind-merge": "^2.2.2", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", + "viem": "^2.7.19" + }, + "devDependencies": { + "@chromatic-com/storybook": "^1.2.25", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@storybook/addon-essentials": "^8.0.4", + "@storybook/addon-interactions": "^8.0.4", + "@storybook/addon-links": "^8.0.4", + "@storybook/addon-onboarding": "^8.0.4", + "@storybook/addon-styling-webpack": "^1.0.0", + "@storybook/addon-themes": "^8.0.4", + "@storybook/blocks": "^8.0.4", + "@storybook/manager-api": "^8.0.4", + "@storybook/preset-create-react-app": "^8.0.4", + "@storybook/react": "^8.0.4", + "@storybook/react-webpack5": "^8.0.4", + "@storybook/test": "^8.0.4", + "@storybook/theming": "^8.0.4", + "@storykit/eslint-config": "workspace:*", + "@storykit/prettier-config": "workspace:*", + "@storykit/typescript-config": "workspace:*", + "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", + "@tanstack/react-query": "^5.25.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@turbo/gen": "^1.12.4", + "@types/eslint": "^8.56.5", + "@types/jest": "^29.5.12", + "@types/node": "^20.11.24", + "@types/react": "^18.2.61", + "@types/react-dom": "^18.2.19", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-storybook": "^0.8.0", + "postcss": "^8.4.38", + "postcss-nesting": "^12.1.2", + "prettier": "^3.2.5", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-apexcharts": "^1.4.1", + "react-dom": "^18.2.0", + "react-force-graph-2d": "^1.25.4", + "react-scripts": "5.0.1", + "rollup": "^4.13.1", + "rollup-plugin-dts": "^6.1.0", + "rollup-plugin-peer-deps-external": "^2.2.4", + "rollup-plugin-postcss": "^4.0.2", + "storybook": "^8.0.4", + "typescript": "^5.3.3", + "webpack": "^5.91.0" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.25.0", + "react": ">=18.2.0", + "react-apexcharts": "^1.4.1", + "react-dom": ">=18.2.0", + "react-force-graph-2d": "^1.25.4", + "typescript": "^5.4.3" + } +} diff --git a/packages/storykit/postcss.config.cjs b/packages/storykit/postcss.config.cjs new file mode 100644 index 0000000..9615734 --- /dev/null +++ b/packages/storykit/postcss.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + "@tailwindcss/nesting": "postcss-nesting", + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/storykit/rollup.config.js b/packages/storykit/rollup.config.js new file mode 100644 index 0000000..45f453e --- /dev/null +++ b/packages/storykit/rollup.config.js @@ -0,0 +1,54 @@ +import commonjs from "@rollup/plugin-commonjs" +import resolve from "@rollup/plugin-node-resolve" +import terser from "@rollup/plugin-terser" +import typescript from "@rollup/plugin-typescript" +import dts from "rollup-plugin-dts" +import peerDepsExternal from "rollup-plugin-peer-deps-external" +import postcss from "rollup-plugin-postcss" + +// eslint-disable-next-line +const packageJson = require("./package.json") + +const config = [ + { + input: "src/index.ts", + output: [ + { + file: packageJson.exports["."].default, + format: "cjs", + sourcemap: true, + }, + { + file: packageJson.exports["."].module, + format: "esm", + sourcemap: true, + }, + ], + plugins: [ + peerDepsExternal(), + resolve(), + commonjs(), + typescript(), + terser(), + postcss({ + config: { + path: "./postcss.config.cjs", + }, + extensions: [".css"], + minimize: true, + inject: { + insertAt: "top", + }, + }), + ], + external: ["react/jsx-runtime"], + }, + { + input: "src/index.ts", + output: [{ file: "dist/types.d.ts", format: "es" }], + plugins: [dts.default()], + external: [/\.(css|less|scss)$/], + }, +] + +export default config diff --git a/packages/storykit/src/components/Button/Button-css-modules.tsx b/packages/storykit/src/components/Button/Button-css-modules.tsx new file mode 100644 index 0000000..987c681 --- /dev/null +++ b/packages/storykit/src/components/Button/Button-css-modules.tsx @@ -0,0 +1,45 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" +import styles from "./styles.module.css" + +const button = cva(styles.skButton, { + variants: { + variant: { + primary: styles.primary, + secondary: styles.secondary, + }, + size: { + small: styles.small, + medium: styles.medium, + large: styles.large, + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, +}) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + // <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/packages/storykit/src/components/Button/Button.tsx b/packages/storykit/src/components/Button/Button.tsx new file mode 100644 index 0000000..7ea8640 --- /dev/null +++ b/packages/storykit/src/components/Button/Button.tsx @@ -0,0 +1,44 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" +import "./styles.css" + +const button = cva("skButton", { + variants: { + variant: { + primary: "skButton--primary", + secondary: "skButton--secondary", + }, + size: { + small: "skButton--small", + medium: "skButton--medium", + large: "skButton--large", + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, +}) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/packages/storykit/src/components/Button/__docs__/Button.mdx b/packages/storykit/src/components/Button/__docs__/Button.mdx new file mode 100644 index 0000000..d204fc3 --- /dev/null +++ b/packages/storykit/src/components/Button/__docs__/Button.mdx @@ -0,0 +1,37 @@ +import * as ButtonStory from "./Button.stories" +import { Canvas, Meta } from "@storybook/blocks" + +<Meta of={ButtonStory} title="Example/Button" /> + +# Button + +Button component with different props. + +#### Example + +<Canvas of={ButtonStory.Primary} /> + +## Usage + +```ts +import { Button } from "@storyprotocol/storykit"; + +const Example = () => { + return ( + <Button + size="small" + variant="primary" + onClick={()=> console.log("Clicked")} + >hello</Button> + ); +}; + +export default Example; +``` + +#### Arguments + +- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. +- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. +- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. +- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/packages/storykit/src/components/Button/__docs__/Button.stories.tsx b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx new file mode 100644 index 0000000..5661c8e --- /dev/null +++ b/packages/storykit/src/components/Button/__docs__/Button.stories.tsx @@ -0,0 +1,35 @@ +import type { Meta, StoryObj } from "@storybook/react" + +import Button from "../Button" + +const meta = { + title: "Example/Button", + component: Button, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, +} satisfies Meta<typeof Button> + +export default meta +type Story = StoryObj<typeof meta> + +export const Primary: Story = { + args: { + children: "Button", + variant: "primary", + size: "medium", + disabled: false, + }, +} + +export const Secondary: Story = { + args: { + children: "Button", + variant: "secondary", + size: "medium", + disabled: false, + }, +} diff --git a/packages/storykit/src/components/Button/__tests__/Button.test.tsx b/packages/storykit/src/components/Button/__tests__/Button.test.tsx new file mode 100644 index 0000000..8f57dae --- /dev/null +++ b/packages/storykit/src/components/Button/__tests__/Button.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import Button from "../Button" + +describe("Button", () => { + test("renders the Button component", () => { + render(<Button>hi</Button>) + }) +}) diff --git a/packages/storykit/src/components/Button/index.ts b/packages/storykit/src/components/Button/index.ts new file mode 100644 index 0000000..ae0694c --- /dev/null +++ b/packages/storykit/src/components/Button/index.ts @@ -0,0 +1 @@ +export { default as Button } from "./Button" diff --git a/packages/storykit/src/components/Button/styles.css b/packages/storykit/src/components/Button/styles.css new file mode 100644 index 0000000..384f0fc --- /dev/null +++ b/packages/storykit/src/components/Button/styles.css @@ -0,0 +1,21 @@ +.skButton { + @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; + + &.skButton--primary { + @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; + } + + &.skButton--secondary { + @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; + } + + &.skButton--small { + @apply text-xs px-2 py-1; + } + &.skButton--medium { + @apply text-base px-4 py-2; + } + &.skButton--large { + @apply text-xl px-6 py-3; + } +} diff --git a/packages/storykit/src/components/Button/styles.module.css b/packages/storykit/src/components/Button/styles.module.css new file mode 100644 index 0000000..d024632 --- /dev/null +++ b/packages/storykit/src/components/Button/styles.module.css @@ -0,0 +1,21 @@ +.skButton { + @apply rounded-md border focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50; + + &.primary { + @apply border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white; + } + + &.secondary { + @apply border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white; + } + + &.small { + @apply text-xs px-2 py-1; + } + &.medium { + @apply text-base px-4 py-2; + } + &.large { + @apply text-xl px-6 py-3; + } +} diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx new file mode 100644 index 0000000..2673224 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -0,0 +1,90 @@ +import React, { useEffect, useMemo, useState } from "react" + +import "../../global.css" +import { convertAssetToGraphFormat } from "../../lib/graph" +import { Asset } from "../../lib/types" +import { useIpAssetContext } from "../../providers" +import "./styles.css" + +export type IpGraphProps = { + width?: number + height?: number +} + +function IpGraph({ width = 500, height = 500 }: IpGraphProps) { + const { assetData } = useIpAssetContext() + const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [ForceGraph, setForceGraph] = useState<any>(null) + + useEffect(() => { + // ForceGraph will break SSR, and needs to be loaded dynamically + async function importForceGraphModule() { + const fg = await import("react-force-graph-2d") + setForceGraph(fg.default) + } + importForceGraphModule() + }, []) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { + const isParent = node.level < 0 + const isSelf = node.level === 0 + const isChild = node.level > 0 + + let label + + if (node.isRoot) { + if (isParent) { + label = `${node.name} (Root / Parent)` + } else { + label = `${node.name} (Root)` + } + } else if (isParent) { + label = `${node.name} (Parent)` + } else if (isChild) { + label = `${node.name} (Child)` + } else { + label = `${node.name}` + } + + const fontSize = 12 / globalScale + const circleRadius = isSelf ? 6 : 3 // Radius of the circle + + // Set the font for the text + ctx.font = `${fontSize}px Sans-Serif` + + // Draw the circle + ctx.beginPath() + ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) + if (isSelf) { + ctx.fillStyle = "black" // Color of the circle + } else if (isParent) { + ctx.fillStyle = "grey" // Color of the circle + } else { + ctx.fillStyle = "lightgrey" // Color of the circle + } + + ctx.fill() + if (isSelf) { + ctx.strokeStyle = "lightblue" // Border color of the circle + ctx.stroke() + } + + // Draw the text next to the circle + ctx.fillText(label, node.x, node.y + 10) + } + + return ( + <div className="skIpGraph"> + {ForceGraph ? ( + <ForceGraph width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> + ) : null} + </div> + ) +} + +IpGraph.displayName = "IpGraph" + +export default IpGraph diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx new file mode 100644 index 0000000..6e98d12 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx @@ -0,0 +1,26 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpGraph from "../IpGraph" + +const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + width = 400, + height = 300, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpGraph width={width} height={height} /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx new file mode 100644 index 0000000..ad8a772 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -0,0 +1,45 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpGraphStory from "./IpGraph.stories" + +<Meta of={IpGraphStory} /> + +# IpGraph + +Show IP Asset derivatives graph. + +#### Example + +<Canvas of={IpGraphStory.Select} /> + +<Controls /> + +## Dependencies + +The IP Graph also requires [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d). + +```bash +npm install react-force-graph-2d +``` + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **width**: _number_ - The width of the canvas +- **height**: _number_ - The height of the canvas diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx new file mode 100644 index 0000000..049a105 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpGraph", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IpGraph/index.ts b/packages/storykit/src/components/IpGraph/index.ts new file mode 100644 index 0000000..d038069 --- /dev/null +++ b/packages/storykit/src/components/IpGraph/index.ts @@ -0,0 +1 @@ +export { default as IpGraph } from "./IpGraph" diff --git a/packages/storykit/src/components/IpGraph/styles.css b/packages/storykit/src/components/IpGraph/styles.css new file mode 100644 index 0000000..1bae73e --- /dev/null +++ b/packages/storykit/src/components/IpGraph/styles.css @@ -0,0 +1,3 @@ +.skIpGraph { + @apply relative; +} diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx new file mode 100644 index 0000000..bf01fc6 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -0,0 +1,144 @@ +import { POLICY_TYPE } from "@/lib/types" +import { cn, getPolicyTypeByPILData } from "@/lib/utils" +import { useIpAssetContext } from "@/providers" +import { cva } from "class-variance-authority" +import { CircleCheck, CircleMinus } from "lucide-react" +import { useState } from "react" +import { FaCaretDown, FaCaretUp } from "react-icons/fa6" + +import "../../global.css" +import "./styles.css" + +const CANS = { + REMIX: "Remix this work", + INCLUDE: "Include this work in their own work(s)", + CREDIT: "Credit you appropriately", + DISTRIBUTE: "Distribute their remix anywhere", + PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", + CREATOR_CREDIT: "Credit you as the creator", + PUBLISH: "Display / publish the work in any medium", +} + +const ShowCans = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] + break + default: + return [] + break + } +} + +const CANNOTS = { + RESELL: "Resell your original work", + COMMERCIALIZE: "Commercialize the remix", + CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", + CLAIM: "Claim your work as their own", + REMIX: "Create remixes of the commercial use.", +} + +const ShowCannots = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] + break + default: + return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] + break + } +} + +const policiesStyles = cva("", { + variants: { + size: { + small: "skIpPolicyAccordion--small", + medium: "skIpPolicyAccordion--medium", + large: "skIpPolicyAccordion--large", + }, + }, +}) + +export type IpPolicyAccordionProps = { + size?: "small" | "medium" | "large" +} + +function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { + const { policyData } = useIpAssetContext() + const [expanded, setExpanded] = useState<number | null>(0) + + const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 + + return policyData?.length ? ( + <div className={cn("skIpPolicyAccordion", policiesStyles({ size }))}> + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {(policyData as unknown as any[])?.map((policy, index) => ( + <div key={policy.id} className="skIpPolicyAccordion__item"> + <div + className="skIpPolicyAccordion__item-header" + onClick={() => setExpanded(expanded === index ? null : index)} + > + {getPolicyTypeByPILData(policy.licenseTerms)} + {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} + </div> + + <div + className={cn( + "skIpPolicyAccordion__item-list", + expanded === index && "skIpPolicyAccordion__item-list--expanded" + )} + > + <div className="skIpPolicyAccordion__properties"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( + <> + <div className="skIpPolicyAccordion__item-list-title">Others Can</div> + <div className="skIpPolicyAccordion__list"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--can"> + <CircleCheck width={iconWidth} /> + <span>{can}</span> + </div> + ))} + </div> + </> + ) : null} + <div className="skIpPolicyAccordion__item-list-title">Others Cannot</div> + <div className="skIpPolicyAccordion__list"> + {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="skIpPolicyAccordion__property skIpPolicyAccordion__property--cannot"> + <CircleMinus width={iconWidth} /> + <span>{can}</span> + </div> + ))} + </div> + </div> + </div> + + {index < policyData.length - 1 && <div className="skIpPolicyAccordion__divider" />} + </div> + ))} + </div> + ) : ( + <div className="skIpPolicyAccordion skIpPolicyAccordion--no-policy">No Policy</div> + ) +} + +export default IpPolicyAccordion diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx new file mode 100644 index 0000000..5a4a58f --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx @@ -0,0 +1,27 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpPolicyAccordion from "../IpPolicyAccordion" + +type Size = "small" | "medium" | "large" + +const Example: FC<{ ipId: Address; size: Size }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + size = "medium", +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full w-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpPolicyAccordion size={size} /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx new file mode 100644 index 0000000..fa8a1c9 --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpPolicyAccordionStory from "./IpPolicyAccordion.stories" + +<Meta of={IpPolicyAccordionStory} /> + +# IpPolicyAccordion + +Displays the IP Asset policies in a readable format (cans & cannots). + +#### Example + +<Canvas of={IpPolicyAccordionStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpPolicyAccordion } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpPolicyAccordion /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx new file mode 100644 index 0000000..00db34b --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.stories.tsx @@ -0,0 +1,40 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpPolicyAccordion", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} diff --git a/packages/storykit/src/components/IpPolicyAccordion/index.tsx b/packages/storykit/src/components/IpPolicyAccordion/index.tsx new file mode 100644 index 0000000..f05ad5a --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/index.tsx @@ -0,0 +1 @@ +export { default as IpPolicyAccordion } from "./IpPolicyAccordion" diff --git a/packages/storykit/src/components/IpPolicyAccordion/styles.css b/packages/storykit/src/components/IpPolicyAccordion/styles.css new file mode 100644 index 0000000..0cefe8e --- /dev/null +++ b/packages/storykit/src/components/IpPolicyAccordion/styles.css @@ -0,0 +1,70 @@ +.skIpPolicyAccordion { + @apply flex flex-col w-full min-w-48; + + .skIpPolicyAccordion__item { + @apply flex flex-col w-full; + } + + .skIpPolicyAccordion__item-header { + @apply flex w-full items-center justify-between cursor-pointer; + } + + .skIpPolicyAccordion__item-list { + @apply flex w-full items-center justify-between overflow-hidden h-0; + + &.skIpPolicyAccordion__item-list--expanded { + @apply h-auto; + } + } + + .skIpPolicyAccordion__properties { + @apply flex flex-col pt-2 gap-2; + } + + .skIpPolicyAccordion__item-list-title { + @apply font-bold; + } + + .skIpPolicyAccordion__list { + @apply flex flex-col; + } + + .skIpPolicyAccordion__property { + @apply flex w-full items-center gap-2; + + &.skIpPolicyAccordion__property--can > svg { + @apply text-green-500; + } + + &.skIpPolicyAccordion__property--cannot > svg { + @apply text-red-500; + } + } + + .skIpPolicyAccordion__divider { + @apply border-b border-gray-200 w-full my-2; + } + + &.skIpPolicyAccordion--small { + @apply text-sm; + } + + &.skIpPolicyAccordion--medium { + @apply text-base; + + .policy-list { + @apply gap-1; + } + } + + &.skIpPolicyAccordion--large { + @apply text-lg; + .policy-list { + @apply gap-2; + } + } + + &.skIpPolicyAccordion--no-policy { + @apply text-slate-400; + } +} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx new file mode 100644 index 0000000..b4fbf52 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -0,0 +1,104 @@ +import { shortenAddress } from "@/lib/utils" +import { useIpAssetContext } from "@/providers" +import { useEffect, useState } from "react" +import { Address } from "viem" + +import "../../global.css" +import "./styles.css" + +function IpRoyaltyPieChart() { + const { royaltyData } = useIpAssetContext() + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [Chart, setChart] = useState<any>(null) + useEffect(() => { + import("react-apexcharts").then((Component) => setChart(Component)) + }, []) + + let ApexChart = Chart + if (ApexChart?.default) ApexChart = ApexChart.default + if (ApexChart?.default) ApexChart = ApexChart.default + + if (royaltyData?.targetAncestors) { + const chart = { + options: { + chart: { + width: 300, + type: "pie" as `pie`, + }, + dataLabels: { + style: { + fontSize: "20px", + // fontFamily: "Inter, ui-sans-serif", + fontWeight: "400", + colors: ["#fff", "#fff", "#1f2937"], + }, + dropShadow: { + enabled: false, + }, + formatter: (value: number) => `${value.toFixed(1)} %`, + }, + // labels: ["Direct", "Organic search"], + plotOptions: { + pie: { + dataLabels: { + offset: -20, + }, + }, + }, + colors: ["#5f6060", "#494848"], + tooltip: { + enabled: true, + y: { + title: { + formatter: (value: Address) => shortenAddress(value), + }, + }, + }, + legend: { + show: false, + }, + labels: royaltyData?.targetAncestors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 300, + }, + legend: { + position: "bottom", + }, + }, + }, + ], + }, + series: royaltyData?.targetRoyaltyAmount.map(Number), + } + + return ( + <div className="skIpRoyaltyPieChart"> + <div className="skIpRoyaltyPieChart__chart"> + {ApexChart ? ( + <ApexChart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> + ) : null} + </div> + <div className="skIpRoyaltyPieChart__key"> + <dl className="skIpRoyaltyPieChart__list"> + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {royaltyData?.targetAncestors.map((target: any, i: any) => ( + <div key={target} className="skIpRoyaltyPieChart__item"> + <dt className="skIpRoyaltyPieChart__address">{shortenAddress(target)}</dt> + <dd className="skIpRoyaltyPieChart__value">{royaltyData.targetRoyaltyAmount[i]}</dd> + </div> + ))} + </dl> + </div> + </div> + ) + } + + return <div className="skIpRoyaltyPieChart skIpRoyaltyPieChart--empty">No Royalty Data</div> +} + +export default IpRoyaltyPieChart diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx new file mode 100644 index 0000000..3719043 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx @@ -0,0 +1,22 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider } from "../../../providers" +import IpRoyaltyPieChart from "../IpRoyaltyPieChart" + +const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IpAssetProvider ipId={ipId}> + <IpRoyaltyPieChart /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx new file mode 100644 index 0000000..7bb1ab0 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -0,0 +1,40 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpRoyaltyPieChartStory from "./IpRoyaltyPieChart.stories" + +<Meta of={IpRoyaltyPieChartStory} /> + +# IpRoyaltyPieChart + +Displays the divisions of royalties for an IP Asset in a pie chart. + +#### Example + +<Canvas of={IpRoyaltyPieChartStory.Select} /> + +<Controls /> + +## Dependencies + +The IP Royalty Pie Chart also requires [react-apexcharts](https://www.npmjs.com/package/react-apexcharts). + +```bash +npm install react-apexcharts +``` + +## Usage + +```ts +import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpRoyaltyPieChart } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpRoyaltyPieChart /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx new file mode 100644 index 0000000..c218f3f --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpRoyaltyPieChart", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx new file mode 100644 index 0000000..80b6af8 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/index.tsx @@ -0,0 +1 @@ +export { default as IpRoyaltyPieChart } from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/styles.css b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css new file mode 100644 index 0000000..d59f690 --- /dev/null +++ b/packages/storykit/src/components/IpRoyaltyPieChart/styles.css @@ -0,0 +1,30 @@ +.skIpRoyaltyPieChart { + @apply flex flex-col items-center justify-between; + + .skIpRoyaltyPieChart__chart { + @apply min-h-[230px]; + } + + .skIpRoyaltyPieChart__key { + @apply w-full min-w-[300px] px-2; + } + + .skIpRoyaltyPieChart__list { + @apply divide-y divide-gray-100 overflow-x-hidden text-sm leading-6; + } + + .skIpRoyaltyPieChart__item { + @apply flex justify-between gap-x-4 py-1; + } + + .skIpRoyaltyPieChart__address { + @apply text-xs capitalize text-gray-500; + } + .skIpRoyaltyPieChart__value { + @apply truncate text-gray-700; + } + + &.skIpRoyaltyPieChart--empty { + @apply items-start text-slate-400; + } +} diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx new file mode 100644 index 0000000..382949d --- /dev/null +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -0,0 +1,394 @@ +import { Menu, Transition } from "@headlessui/react" +import React, { Fragment, useState } from "react" +import { FaWandMagicSparkles } from "react-icons/fa6" +import { IoIosShareAlt } from "react-icons/io" +import { SiOpensea } from "react-icons/si" +import { TbLicense } from "react-icons/tb" +import { Address } from "viem" + +import "../../global.css" +import { cn, shortenAddress } from "../../lib/utils" +import { IpAssetProvider, useIpAssetContext } from "../../providers" +import { IpGraph } from "../IpGraph" +import { IpPolicyAccordion } from "../IpPolicyAccordion" +import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" +import "./styles.css" + +export type IpWidgetProps = { + ipId: Address + isBottomNav?: boolean +} + +export const IPA_CARD_TABS = [ + { id: "overview", label: "Overview" }, + { id: "licensing", label: "Licensing" }, + { id: "derivatives", label: "IP Graph" }, + { id: "royalty", label: "Royalty" }, +] + +const IpWidget = ({ ipId, isBottomNav, ...rest }: IpWidgetProps) => { + return <IPAssetCardWrapper ipId={ipId} isBottomNav={isBottomNav} {...rest} /> +} + +function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { + const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) + + const _Tabs = () => ( + <div className={cn("skIpWidget__tabs", isBottomNav && "skIpWidget__tabs--bottom")}> + <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> + </div> + ) + + const _Card = () => ( + <div className="skIpWidget__card"> + <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> + </div> + ) + + return ( + <IpAssetProvider ipId={ipId} key={ipId}> + <div className="skIpWidget"> + {isBottomNav ? <_Card /> : <_Tabs />} + {isBottomNav ? <_Tabs /> : <_Card />} + </div> + </IpAssetProvider> + ) +} + +function Tabs({ + ipId, + activeTab, + setActiveTab, +}: { + ipId: Address + activeTab: string + setActiveTab: (tab: string) => void +}) { + return ( + <div className="skIpWidget__tabsContainer" id={ipId}> + <div className="skIpWidget__tabsInner"> + {IPA_CARD_TABS.map((tab) => ( + <button + key={`${ipId}-${tab.id}`} + onClick={() => setActiveTab(tab.id)} + className={cn("skIpWidget__tab", activeTab !== tab.id && "skIpWidget__tab--active")} + style={{ + WebkitTapHighlightColor: "transparent", + }} + > + {activeTab === tab.id && <span className="skIpWidget__activeTab" />} + {tab.label} + </button> + ))} + </div> + <button> + <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g clipPath="url(#clip0_235_3)"> + <mask + id="mask0_235_3" + style={{ maskType: "luminance" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="512" + height="512" + > + <path d="M512 0H0V512H512V0Z" fill="white" /> + </mask> + <g mask="url(#mask0_235_3)"> + <path + d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" + fill="black" + /> + </g> + </g> + <defs> + <clipPath id="clip0_235_3"> + <rect width="512" height="512" fill="white" /> + </clipPath> + </defs> + </svg> + </button> + </div> + ) +} + +function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { + switch (activeTab) { + case "overview": + return <IPAssetOverview isBottomNav={isBottomNav} /> + case "licensing": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <div className="skIpWidget__policyContainer"> + <IpPolicyAccordion size="small" /> + </div> + </IPAssetLayout> + ) + case "derivatives": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpGraph width={370} height={250} /> + </IPAssetLayout> + ) + case "royalty": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IpRoyaltyPieChart /> + </IPAssetLayout> + ) + default: + return <IPAssetOverview /> + } +} + +function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { + return ( + <div className={cn("skIpWidget__ipAssetLayout", !isBottomNav && "skIpWidget__ipAssetLayout--topNav")}> + <IPAssetHeader /> + {children} + </div> + ) +} + +function IPAssetDropdownMenu() { + const { assetData } = useIpAssetContext() + return ( + <Menu as="div" className="skIpWidget__ipAssetDropdownMenu"> + <div> + <Menu.Button className="skIpWidget__ipAssetDropdownMenu__button"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + > + <circle cx="12" cy="12" r="1" /> + <circle cx="12" cy="5" r="1" /> + <circle cx="12" cy="19" r="1" /> + </svg> + </Menu.Button> + </div> + + <Transition + as={Fragment} + enter="transition ease-out duration-100" + enterFrom="transform opacity-0 scale-95" + enterTo="transform opacity-100 scale-100" + leave="transition ease-in duration-75" + leaveFrom="transform opacity-100 scale-100" + leaveTo="transform opacity-0 scale-95" + > + <Menu.Items className="skIpWidget__ipAssetDropdownMenu__items"> + {assetData?.rootIpIds?.[0]?.id && ( + <div className="skIpWidget__ipAssetDropdownMenu__rootIp"> + <p className="skIpWidget__ipAssetDropdownMenu__rootIp__title">Root IP</p> + <div className="skIpWidget__ipAssetDropdownMenu__rootIp__item"> + <img + src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} + alt={assetData?.rootIpIds?.[0]?.id as Address} + ></img> + <p>{shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)}</p> + </div> + </div> + )} + {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( + <div className="skIpWidget__ipAssetDropdownMenu__parentIp"> + <p className="skIpWidget__ipAssetDropdownMenu__parentIp__title">Parent IPs</p> + <div className="skIpWidget__ipAssetDropdownMenu__parentIp__item"> + <div className="skIpWidget__ipAssetDropdownMenu__parentIp__avatars"> + {assetData?.parentIpIds?.slice(0, 5).map((asset, index) => ( + <img + key={index} + style={{ + zIndex: ((assetData?.parentIpIds?.length as number) - index) * 10, + }} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className="skIpWidget__ipAssetDropdownMenu__parentIp__addresses"> + {assetData?.parentIpIds?.length === 1 + ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) + : `${assetData?.parentIpIds?.length} total `} + </p> + </div> + </div> + )} + {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( + <div className="skIpWidget__ipAssetDropdownMenu__childIp"> + <p className="skIpWidget__ipAssetDropdownMenu__childIp__title">Child IPs</p> + <div className="skIpWidget__ipAssetDropdownMenu__childIp__container"> + <div className="skIpWidget__ipAssetDropdownMenu__childIp__avatars"> + {assetData?.childIpIds?.slice(0, 5).map((asset, index) => ( + <img + key={index} + style={{ + zIndex: ((assetData?.childIpIds?.length as number) - index) * 5, + }} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className="skIpWidget__ipAssetDropdownMenu__childIp__addresses"> + {assetData?.childIpIds?.length === 1 + ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) + : `${assetData?.childIpIds?.length} total `} + </p> + </div> + </div> + )} + <div className="skIpWidget__ipAssetDropdownMenu__menu"> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <FaWandMagicSparkles className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + Remix + </a> + )} + </Menu.Item> + + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <SiOpensea className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + View on Opensea + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <TbLicense className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + Buy License + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + "skIpWidget__ipAssetDropdownMenu__menu__link", + active ? "skIpWidget__ipAssetDropdownMenu__menu__link--active" : "" + )} + > + <IoIosShareAlt className="skIpWidget__ipAssetDropdownMenu__menu__icon" aria-hidden="true" /> + Share + </a> + )} + </Menu.Item> + </div> + </Menu.Items> + </Transition> + </Menu> + ) +} + +function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { + const { nftData, assetData } = useIpAssetContext() + return ( + <div className="skIpWidget__ipAssetHeader"> + <div className="skIpWidget__ipAssetHeader__inner"> + <div + className={cn("skIpWidget__ipAssetHeader__image", hideImage && "skIpWidget__ipAssetHeader__image--hidden")} + > + <img src={nftData?.image_url} /> + </div> + <div> + <div> + <h1 className="skIpWidget__ipAssetHeader__name"> + {assetData?.nftMetadata.name || nftData?.name || "Untitled"} + </h1> + <h2 className="skIpWidget__ipAssetHeader__owner"> + Owned by{" "} + <span className="skIpWidget__ipAssetHeader__owner__address"> + {shortenAddress(nftData?.owners[0].owner_address as string)} + </span> + </h2> + </div> + </div> + </div> + <IPAssetDropdownMenu /> + </div> + ) +} + +function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { + const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() + + const isLoading = isAssetDataLoading || isNftDataLoading + + const Title = () => + isLoading ? ( + <div className="skIpWidget__ipAssetOverview__titleLoading"> + <div></div> + <div></div> + </div> + ) : ( + <IPAssetHeader hideImage /> + ) + + const AssetImage = () => + isLoading ? ( + <div className="skIpWidget__ipAssetOverview__assetImage__loading"> + <div> + <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 18"> + <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> + </svg> + </div> + </div> + ) : ( + <div className="skIpWidget__ipAssetOverview__assetImage"> + <img src={nftData?.image_url} /> + </div> + ) + + const TitleBar = () => ( + <div + className={cn( + "skIpWidget__ipAssetOverview__titleBar", + isBottomNav && "skIpWidget__ipAssetOverview__titleBar--bottom" + )} + > + <Title /> + </div> + ) + + return ( + <div className="skIpWidget__ipAssetOverview"> + {isBottomNav && <TitleBar />} + <AssetImage /> + {!isBottomNav && <TitleBar />} + </div> + ) +} + +IpWidget.displayName = "IpWidget" + +export default IpWidget diff --git a/packages/storykit/src/components/IpWidget/__docs__/Example.tsx b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx new file mode 100644 index 0000000..c23faf9 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/Example.tsx @@ -0,0 +1,29 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import IpWidget from "../IpWidget" + +const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ + ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", + isBottomNav = false, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpWidget ipId={ipId} isBottomNav={isBottomNav} /> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx new file mode 100644 index 0000000..e7797aa --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.mdx @@ -0,0 +1,34 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpWidgetStory from "./IpWidget.stories" + +<Meta of={IpWidgetStory} /> + +# IP Asset Widget + +IP Asset card widget that displays IP data including the IpGraph, IpRoyaltyPieChart, and IpPolicyAccordion. + +#### Example + +<Canvas of={IpWidgetStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. +- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx new file mode 100644 index 0000000..0385ca9 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__docs__/IpWidget.stories.tsx @@ -0,0 +1,41 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "IP Assets/IpWidget", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: { + isBottomNav: { control: "boolean", defaultValue: true }, + }, + args: {}, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} diff --git a/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx new file mode 100644 index 0000000..86d2dd2 --- /dev/null +++ b/packages/storykit/src/components/IpWidget/__tests__/IPAssetWidget.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import IpWidget from "../IpWidget" + +describe("IpWidget", () => { + test("renders the IpWidget component", () => { + render(<IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} />) + }) +}) diff --git a/packages/storykit/src/components/IpWidget/index.ts b/packages/storykit/src/components/IpWidget/index.ts new file mode 100644 index 0000000..00d52ff --- /dev/null +++ b/packages/storykit/src/components/IpWidget/index.ts @@ -0,0 +1 @@ +export { default as IpWidget } from "./IpWidget" diff --git a/packages/storykit/src/components/IpWidget/styles.css b/packages/storykit/src/components/IpWidget/styles.css new file mode 100644 index 0000000..e120f5a --- /dev/null +++ b/packages/storykit/src/components/IpWidget/styles.css @@ -0,0 +1,218 @@ +.skIpWidget { + @apply flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg; + + .skIpWidget__card { + @apply flex size-full flex-auto flex-col p-2; + } + + .skIpWidget__tabs { + @apply w-full px-2 pt-2; + + &.skIpWidget__tabs--bottom { + @apply pb-2 pt-0; + } + + .skIpWidget__tabsContainer { + @apply flex space-x-1; + } + + .skIpWidget__tabsInner { + @apply flex w-full justify-between; + } + + .skIpWidget__tab { + @apply relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2; + + &.skIpWidget__tab--active { + @apply hover:text-black/60; + } + } + + .skIpWidget__activeTab { + @apply absolute inset-0 z-10 bg-white mix-blend-difference rounded-full; + } + } + + .skIpWidget__policyContainer { + @apply p-2; + + .skIpPolicyAccordion--no-policy { + @apply w-full items-center py-32; + } + } + + .skIpWidget__ipAssetLayout { + @apply flex gap-2 flex-col; + + .skIpWidget__ipAssetLayout--topNav { + @apply flex-col-reverse justify-between h-full flex-auto; + } + + .skIpRoyaltyPieChart--empty { + @apply w-full items-center py-32; + } + } + + .skIpWidget__ipAssetDropdownMenu { + @apply relative inline-block text-left; + + .skIpWidget__ipAssetDropdownMenu__button { + @apply inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm; + + svg { + @apply size-4 flex-none text-gray-600; + } + } + + .skIpWidget__ipAssetDropdownMenu__items { + @apply absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none; + } + + .skIpWidget__ipAssetDropdownMenu__rootIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__rootIp__title { + @apply text-xs text-slate-400; + } + + .skIpWidget__ipAssetDropdownMenu__rootIp__item { + @apply flex items-center; + + > img { + @apply relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white; + } + + > p { + @apply truncate text-sm text-gray-900; + } + } + } + + .skIpWidget__ipAssetDropdownMenu__parentIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__parentIp__title { + @apply text-xs text-slate-400; + } + + .skIpWidget__ipAssetDropdownMenu__parentIp__avatars { + @apply mr-3 -space-x-3; + + img { + @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; + } + } + .skIpWidget__ipAssetDropdownMenu__parentIp__addresses { + @apply truncate text-sm text-gray-900; + } + } + + .skIpWidget__ipAssetDropdownMenu__childIp { + @apply px-4 py-2; + + .skIpWidget__ipAssetDropdownMenu__childIp__title { + @apply text-xs text-slate-400; + } + .skIpWidget__ipAssetDropdownMenu__childIp__container { + @apply flex items-center; + } + .skIpWidget__ipAssetDropdownMenu__childIp__avatars { + @apply mr-3 -space-x-3; + + img { + @apply relative inline-block h-5 w-5 rounded-full ring-2 ring-white; + } + } + .skIpWidget__ipAssetDropdownMenu__childIp__addresses { + @apply truncate text-sm text-gray-900; + } + } + + .skIpWidget__ipAssetDropdownMenu__menu { + @apply py-1; + + .skIpWidget__ipAssetDropdownMenu__menu__link { + @apply flex items-center px-4 py-2 text-sm text-gray-700; + + .skIpWidget__ipAssetDropdownMenu__menu__icon { + @apply mr-3 size-5 text-gray-400; + } + + &.skIpWidget__ipAssetDropdownMenu__menu__link--active { + @apply bg-gray-100 text-gray-900; + + .skIpWidget__ipAssetDropdownMenu__menu__icon { + @apply text-gray-500; + } + } + } + } + } + + .skIpWidget__ipAssetHeader { + @apply flex w-full flex-row justify-between; + + .skIpWidget__ipAssetHeader__inner { + @apply flex w-full flex-row justify-start gap-2; + } + + .skIpWidget__ipAssetHeader__image { + &.skIpWidget__ipAssetHeader__image--hidden { + @apply hidden; + } + img { + @apply size-10 rounded-md object-cover; + } + } + .skIpWidget__ipAssetHeader__name { + @apply font-semibold; + } + .skIpWidget__ipAssetHeader__owner { + @apply text-xs; + .skIpWidget__ipAssetHeader__owner__address { + @apply text-slate-400; + } + } + } + + .skIpWidget__ipAssetOverview { + @apply flex w-full flex-col items-start justify-start; + + .skIpWidget__ipAssetOverview__titleBar { + @apply flex w-full flex-row justify-between pt-1; + + &.skIpWidget__ipAssetOverview__titleBar--bottom { + @apply pb-1 pt-0; + } + } + + .skIpWidget__ipAssetOverview__titleLoading { + @apply flex animate-pulse flex-col gap-2; + div:nth-child(1) { + @apply h-4 w-20 rounded bg-slate-200; + } + div:nth-child(2) { + @apply h-3 w-32 rounded bg-slate-200; + } + } + + .skIpWidget__ipAssetOverview__assetImage { + @apply flex w-full justify-center text-center; + + img { + @apply rounded-md object-contain; + } + } + .skIpWidget__ipAssetOverview__assetImage__loading { + @apply w-full animate-pulse py-1; + + > div { + @apply flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700; + + > svg { + @apply size-10 text-slate-100 dark:text-slate-600; + } + } + } + } +} diff --git a/packages/storykit/src/components/index.ts b/packages/storykit/src/components/index.ts new file mode 100644 index 0000000..db39fd2 --- /dev/null +++ b/packages/storykit/src/components/index.ts @@ -0,0 +1,5 @@ +export * from "./Button" +export * from "./IpWidget" +export * from "./IpGraph" +export * from "./IpPolicyAccordion" +export * from "./IpRoyaltyPieChart" diff --git a/packages/storykit/src/declarations.d.ts b/packages/storykit/src/declarations.d.ts new file mode 100644 index 0000000..a5ad056 --- /dev/null +++ b/packages/storykit/src/declarations.d.ts @@ -0,0 +1,4 @@ +declare module "*.module.css" { + const classes: { [key: string]: string } + export default classes +} diff --git a/packages/storykit/src/global.css b/packages/storykit/src/global.css new file mode 100644 index 0000000..413f711 --- /dev/null +++ b/packages/storykit/src/global.css @@ -0,0 +1,67 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* @layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } +} */ diff --git a/packages/storykit/src/index.ts b/packages/storykit/src/index.ts new file mode 100644 index 0000000..6efd0b2 --- /dev/null +++ b/packages/storykit/src/index.ts @@ -0,0 +1,2 @@ +export * from "./components" +export * from "./providers" diff --git a/packages/storykit/src/lib/api.ts b/packages/storykit/src/lib/api.ts new file mode 100644 index 0000000..562f0cb --- /dev/null +++ b/packages/storykit/src/lib/api.ts @@ -0,0 +1,49 @@ +import { QueryOptions, ResourceType } from "./types" + +const API_BASE_URL = + process.env.STORYBOOK_API_BASE_URL || process.env.NEXT_PUBLIC_API_BASE_URL || process.env.API_BASE_URL || "" +const API_KEY = + process.env.STORYBOOK_STORY_PROTOCOL_X_API_KEY || + process.env.NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY || + process.env.STORY_PROTOCOL_X_API_KEY || + "" + +export async function getResource(resourceName: ResourceType, resourceId: string) { + try { + const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { + method: "GET", + headers: { + "Content-Type": "application/json", + "x-api-key": API_KEY as string, + "X-CHAIN": "sepolia", + }, + }) + if (res.ok) { + return res.json() + } + } catch (error) { + console.error(error) + } +} + +export async function listResource(resourceName: ResourceType, options?: QueryOptions) { + try { + const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": API_KEY as string, + "X-CHAIN": "sepolia", + }, + cache: "no-cache", + ...(options && { body: JSON.stringify({ options }) }), + }) + if (res.ok) { + return res.json() + } else { + return res + } + } catch (error) { + console.error(error) + } +} diff --git a/packages/storykit/src/lib/graph.ts b/packages/storykit/src/lib/graph.ts new file mode 100644 index 0000000..09852aa --- /dev/null +++ b/packages/storykit/src/lib/graph.ts @@ -0,0 +1,122 @@ +import { Asset } from "@/lib/types" +import { Address } from "viem" + +export interface GraphNode { + id: string + name: string + val: number + tokenContract?: string | Address + tokenId?: string + level?: number + isRoot?: boolean +} + +interface Link { + source: string + target: string +} + +export interface GraphData { + nodes: GraphNode[] + links: Link[] +} + +export function convertJsonToGraphFormat(ipAssets: Asset[]): GraphData { + const nodes: GraphNode[] = [] + const links: Link[] = [] + + // Map ids to their corresponding objects for quick access + const idToObjectMap: { [id: string]: Asset } = {} + for (const obj of ipAssets) { + idToObjectMap[obj.id] = obj + } + + // Create nodes + for (const asset of ipAssets) { + const nodeName = asset.nftMetadata.name || "Untitled" + const node: GraphNode = { + id: asset.id, + name: nodeName, + val: 1, + tokenContract: asset.nftMetadata.tokenContract, + } + nodes.push(node) + + // Create links + if (asset.childIpIds) { + for (const childId of asset.childIpIds) { + const childObj = idToObjectMap[childId.id] + if (childObj && childObj.parentIpIds) { + for (const parentObj of childObj.parentIpIds) { + links.push({ + source: parentObj.id, + target: childObj.id, + }) + } + } + } + } + } + + return { nodes, links } +} + +export function convertAssetToGraphFormat(jsonData: Asset): GraphData { + const rootIpId = jsonData.rootIpIds?.[0]?.id + const nodes: GraphNode[] = [] + const links: Link[] = [] + + // Create node for the main object + const mainNode: GraphNode = { + id: jsonData.id, + name: jsonData.nftMetadata.name || "Untitled", + tokenContract: jsonData.nftMetadata.tokenContract, + tokenId: jsonData.nftMetadata.tokenId, + val: 1, + level: 0, + isRoot: rootIpId === undefined, + } + nodes.push(mainNode) + + // Add all childIpIds to nodes array and create links + if (jsonData.childIpIds) { + for (const child of jsonData.childIpIds) { + const childNode: GraphNode = { + id: child.id, + name: child.nftMetadata.name || "Untitled", + tokenContract: child.nftMetadata.tokenContract, + tokenId: child.nftMetadata.tokenId, + val: 1, + level: 1, + } + nodes.push(childNode) + + links.push({ + source: jsonData.id, + target: child.id, + }) + } + } + + // Add all parentIpIds to nodes array and create links + if (jsonData.parentIpIds) { + for (const parent of jsonData.parentIpIds) { + const parentNode: GraphNode = { + id: parent.id, + name: parent.nftMetadata.name || "Untitled", + tokenContract: parent.nftMetadata.tokenContract, + tokenId: parent.nftMetadata.tokenId, + val: 1, + level: -1, // assuming parent is one level up + isRoot: parent.id === rootIpId, + } + nodes.push(parentNode) + links.push({ + source: parent.id, + target: jsonData.id, + }) + } + } + + return { nodes, links } +} diff --git a/packages/storykit/src/lib/simplehash/index.ts b/packages/storykit/src/lib/simplehash/index.ts new file mode 100644 index 0000000..3e28a76 --- /dev/null +++ b/packages/storykit/src/lib/simplehash/index.ts @@ -0,0 +1,39 @@ +import { Address } from "viem" + +import { CollectionMetadata, NFTMetadata, NFTWalletResponse } from "./types/simplehash" + +const createRequestOptions = (): RequestInit => ({ + method: "GET", + headers: { + accept: "application/json", + "X-API-KEY": + process.env.STORYBOOK_SIMPLE_HASH_API_KEY || + process.env.NEXT_PUBLIC_SIMPLE_HASH_API_KEY || + process.env.SIMPLE_HASH_API_KEY || + "", + }, +}) + +export const getNFTByTokenId = async (contractAddress: Address, tokenId: string): Promise<NFTMetadata> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/ethereum-sepolia/${contractAddress}/${tokenId}` + const response = await fetch(url, options) + const data = await response.json() + return data +} + +export const getCollectionByAddress = async (contractAddress: Address): Promise<CollectionMetadata> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/collections/ethereum-sepolia/${contractAddress}` + const response = await fetch(url, options) + const data = await response.json() + return data.collections[0] +} + +export const getNFTByWallet = async (walletAddress: Address): Promise<NFTWalletResponse> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/owners?chains=ethereum-sepolia&wallet_addresses=${walletAddress}` + const response = await fetch(url, options) + const data = await response.json() + return data +} diff --git a/packages/storykit/src/lib/simplehash/types/simplehash.d.ts b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts new file mode 100644 index 0000000..c3dc429 --- /dev/null +++ b/packages/storykit/src/lib/simplehash/types/simplehash.d.ts @@ -0,0 +1,143 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export type NFTWalletResponse = { + next_cursor: string | null + next: string | null + previous: string | null + nfts: NFTMetadata[] +} + +export type NFTMetadata = { + nft_id: string + chain: string + contract_address: string + token_id: string + name: string + description: string + previews: { + image_small_url: string + image_medium_url: string + image_large_url: string + image_opengraph_url: string + blurhash: string + predominant_color: string + } + image_url: string + image_properties: { + width: number + height: number + size: number + mime_type: string + } + video_url: string | null + video_properties: any + audio_url: string | null + audio_properties: any + model_url: string | null + model_properties: any + other_url: string | null + other_properties: any + background_color: string | null + external_url: string | null + created_date: string + status: string + token_count: number + owner_count: number + owners: { + owner_address: string + quantity: number + quantity_string: string + first_acquired_date: string + last_acquired_date: string + }[] + contract: { + type: string + name: string + symbol: string + deployed_by: string + deployed_via_contract: string | null + owned_by: string + has_multiple_collections: boolean + } + collection: CollectionMetadata + last_sale: any + first_created: { + minted_to: string + quantity: number + quantity_string: string + timestamp: string + block_number: number + transaction: string + transaction_initiator: string + } + rarity: { + rank: number + score: number + unique_attributes: number + } + royalty: CollectionRoyalties[] + extra_metadata: { + attributes: { + trait_type: string + value: string + display_type: string | null + }[] + image_original_url: string + animation_original_url: string + metadata_original_url: string + } +} + +export type SPExtendedNFTMetadata = NFTMetadata & { + isRegistered?: boolean + ipId?: string +} + +export type CollectionResponse = { + next_cursor: string | null + next: string | null + previous: string | null + collections: CollectionMetadata[] +} + +export type CollectionMetadata = { + collection_id: string + name: string + description: string + image_url: string + banner_image_url: string + category: string + is_nsfw: boolean + external_url: string + twitter_username: string + discord_url: string + instagram_username: string + medium_username: string + telegram_url: string + marketplace_pages: MarketplacePage[] + metaplex_mint: string + metaplex_candy_machine: string + metaplex_first_verified_creator: string + floor_prices: any[] + top_bids: any[] + distinct_owner_count: number + distinct_nft_count: number + total_quantity: number + chains: string[] + top_contracts: string[] + collection_royalties: CollectionRoyalties[] +} + +export type MarketplacePage = { + marketplace_id: string + marketplace_name: string + marketplace_collection_id: string + collection_url: string + verified: boolean +} + +export type CollectionRoyalties = { + source: string + total_creator_fee_basis_points: number + recipients: any[] +} diff --git a/packages/storykit/src/lib/types.ts b/packages/storykit/src/lib/types.ts new file mode 100644 index 0000000..c5d6b4a --- /dev/null +++ b/packages/storykit/src/lib/types.ts @@ -0,0 +1,325 @@ +import { Address } from "viem" + +export const POLICY_TYPE = { + NON_COMMERCIAL_SOCIAL_REMIXING: "Non-Commercial Social Remixing", + COMMERCIAL_USE: "Commercial Use", + COMMERCIAL_REMIX: "Commercial Remix", + OPEN_DOMAIN: "Open Domain", + NO_DERIVATIVE: "No Derivative", +} + +export enum RESOURCE_TYPE { + ASSET = "assets", + COLLECTION = "collections", + DISPUTE = "disputes", + IPA_POLICY = "licenses/ip/terms", + LICENSE = "licenses/tokens", + LICENSE_MINT_FEES = "licenses/mintingfees", + LICENSE_OWNER = "licenses/owners", + MODULE = "modules", + PERMISSION = "permissions", + POLICY = "licenses/terms", + POLICY_FRAMEWORK = "licenses/templates", + ROYALTY = "royalties", + ROYALTY_PAY = "royalties/payments", + ROYALTY_POLICY = "royalties/policies", + ROYALTY_SPLIT = "royalties/splits", + TAGS = "tags", + TRANSACTION = "transactions", +} + +export type ResourceType = + | RESOURCE_TYPE.ASSET + | RESOURCE_TYPE.COLLECTION + | RESOURCE_TYPE.TRANSACTION + | RESOURCE_TYPE.LICENSE + | RESOURCE_TYPE.LICENSE_MINT_FEES + | RESOURCE_TYPE.LICENSE_OWNER + | RESOURCE_TYPE.MODULE + | RESOURCE_TYPE.POLICY + | RESOURCE_TYPE.PERMISSION + | RESOURCE_TYPE.POLICY_FRAMEWORK + | RESOURCE_TYPE.TAGS + | RESOURCE_TYPE.IPA_POLICY + | RESOURCE_TYPE.ROYALTY + | RESOURCE_TYPE.ROYALTY_PAY + | RESOURCE_TYPE.ROYALTY_POLICY + | RESOURCE_TYPE.ROYALTY_SPLIT + | RESOURCE_TYPE.DISPUTE + +export type PaginationOptions = { + limit?: number + offset?: number +} + +export type AssetFilterOptions = { + chainId?: string + metadataResolverAddress?: string + tokenContract?: string + tokenId?: string +} + +export type DisputeFilterOptions = { + currentTag?: string + initiator?: string + targetIpId?: string + targetTag?: string +} + +export type PermissionFilterOptions = { + signer?: string + to?: string +} + +export type PolicyFilterOptions = { + policyFrameworkManager?: string +} + +export type PolicyFrameworkFilterOptions = { + address?: string + name?: string +} + +export type RoyaltyFilterOptions = { + ipId?: string | null + royaltyPolicy?: string | null +} + +export type TagFilterOptions = { + ipId?: string + tag?: string +} +export type RoyaltyPayFilterOptions = { + ipId?: string + payerIpId?: string + receiverIpId?: string + sender?: string + token?: string +} + +export type ModuleFilterOptions = { + name?: string +} + +export type LicenseFilterOptions = { + licensorIpdId?: Address + policyId?: string +} + +export type LicenseFrameworkFilterOptions = { + creator?: string +} + +export type LicenseOwnerFilterOptions = { + owner?: string +} + +export type IPAPolicyFilterOptions = { + active?: string + inherited?: string + policyId?: string +} + +export type TransactionFilterOptions = { + actionType?: string + resourceId?: string +} + +export type FilterOptions = + | AssetFilterOptions + | DisputeFilterOptions + | PermissionFilterOptions + | PolicyFilterOptions + | PolicyFrameworkFilterOptions + | RoyaltyFilterOptions + | TagFilterOptions + | RoyaltyPayFilterOptions + | ModuleFilterOptions + | LicenseFilterOptions + | LicenseFrameworkFilterOptions + | LicenseOwnerFilterOptions + | IPAPolicyFilterOptions + | TransactionFilterOptions + +export type QueryOptions = { + pagination: PaginationOptions + where?: FilterOptions +} + +export type Transaction = { + id: string + createdAt: string + actionType: string + initiator: Address + ipId: Address + resourceId: Address + resourceType: string +} + +export type Asset = { + id: Address + parentIpIds: Asset[] | null + childIpIds: Asset[] | null + rootIpIds: Asset[] | null + nftMetadata: { + name: string + chainId: string + tokenContract: Address + tokenId: string + tokenUri: string + imageUrl: string + } + blockNumber: string + blockTimestamp: string +} + +export type Permission = { + id: string + permission: string + signer: Address + to: Address + func: string + blockNumber: string + blockTimestamp: string +} + +export type License = { + id: string + licensorIpId: Address + licenseTemplate: string + licenseTermsId: string + transferable: boolean + owner: Address + mintedAt: string + expiresAt: string + burntAt: string + blockNumber: string + blockTime: string +} + +export type PolicyFramework = { + id: string + name: string + metadataUri: string + blockNumber: string + blockTime: string +} + +export type Module = { + id: string + name: string + module: string + blockNumber: string + blockTimestamp: string + deletedAt: string +} + +export type Tag = { + id: string + uuid: string + ipId: Address + tag: string + deletedAt: string + blockNumber: string + blockTimestamp: string +} + +export type IPAPolicy = { + id: string + ipId: Address + licenseTemplate: string + licenseTermsId: string + blockNumber: string + blockTime: string +} + +export type RoyaltyPay = { + id: string + receiverIpId: Address + payerIpId: Address + sender: Address + token: Address + amount: string + blockNumber: string + blockTimestamp: string +} + +export type Royalty = { + id: string + ipId: Address + data: string + royaltyPolicy: Address + blockNumber: string + blockTimestamp: string +} + +export type RoyaltyPolicy = { + id: Address + ancestorsVault: Address + splitClone: Address + royaltyStack: string + targetAncestors: Address[] + targetRoyaltyAmount: string[] + blockNumber: string + blockTimestamp: string +} + +export type Dispute = { + id: string + targetIpId: Address + targetTag: Address + currentTag: Address + arbitrationPolicy: Address + evidenceLink: string + initiator: Address + data: string + blockNumber: string + blockTimestamp: string +} + +export type Collection = { + id: string + assetCount: string + licensesCount: string + resolvedDisputeCount: string + cancelledDisputeCount: string + raisedDisputeCount: string + judgedDisputeCount: string + blockNumber: string + blockTimestamp: string +} + +export type Policy = { + id: string + json: string + licenseTemplate: Address + blockNumber: string + blockTime: string +} + +export type PILType = { + commercialAttribution: boolean + commercialRevenueCelling: number + commercialRevenueShare: number + commercialUse: boolean + commercializerCheck: Address + currency: Address + derivativesAllowed: boolean + derivativesApproval: boolean + derivativesAttribution: boolean + derivativesReciprocal: boolean + derivativesRevenueCelling: number + expiration: string + URI: string +} + +export type RoyaltySplit = { + id: Address + holders: RoyaltyHolder[] + claimFromIPPoolArg: string +} + +export type RoyaltyHolder = { + id: Address + ownership: string +} diff --git a/packages/storykit/src/lib/utils.ts b/packages/storykit/src/lib/utils.ts new file mode 100644 index 0000000..4d6d29e --- /dev/null +++ b/packages/storykit/src/lib/utils.ts @@ -0,0 +1,51 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +import { PILType, POLICY_TYPE } from "./types" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} + +export function shortenAddress(address: string, length = 4): string { + if (!address) { + return "" + } + if (address.length < 2 * length + 2) { + // Check if the address is too short to be shortened. + return address + } + + const start = address.substring(0, length + 2) + const end = address.substring(address.length - length) + return `${start}...${end}` +} + +export function camelize(str: string) { + return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) { + if (+match === 0) return "" // or if (/\s+/.test(match)) for white spaces + return index === 0 ? match.toLowerCase() : match.toUpperCase() + }) +} + +export function getPolicyTypeByPILData(pilData: PILType) { + const { derivativesAttribution, derivativesAllowed, commercialUse, derivativesReciprocal } = pilData + + if (commercialUse) { + if (!derivativesReciprocal) { + return POLICY_TYPE.COMMERCIAL_USE + } else { + return POLICY_TYPE.COMMERCIAL_REMIX + } + } else { + if (!derivativesAllowed) { + return POLICY_TYPE.NO_DERIVATIVE + } else { + if (derivativesAttribution) { + return POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING + } else { + return POLICY_TYPE.OPEN_DOMAIN + } + } + } +} diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx new file mode 100644 index 0000000..3375937 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx @@ -0,0 +1,153 @@ +import { useQuery } from "@tanstack/react-query" +import React from "react" +import { Address } from "viem" + +import { getResource, listResource } from "../../lib/api" +import { getNFTByTokenId } from "../../lib/simplehash" +import { NFTMetadata } from "../../lib/simplehash/types/simplehash" +import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" +import { camelize } from "../../lib/utils" + +const IpAssetContext = React.createContext<{ + // activeTab: string + // setActiveTab: React.Dispatch<React.SetStateAction<string>> + assetData: Asset | undefined + nftData: NFTMetadata | undefined + isNftDataLoading: boolean + isAssetDataLoading: boolean + ipPolicyData: IPAPolicy[] | undefined + isIPAPolicyDataLoading: boolean + policyData: Policy[] | undefined + isPolicyDataLoading: boolean + licenseData: License[] | undefined + isLicenseDataLoading: boolean + royaltyData: RoyaltyPolicy | undefined + isRoyaltyDataLoading: boolean +} | null>(null) + +export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { + // Fetch asset data + const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ + queryKey: [RESOURCE_TYPE.ASSET, ipId], + queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), + }) + + const ipaPolicyQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + } + // Fetch IPPolicy data + const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ + queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), + }) + + async function fetchPolicyDetails(data: IPAPolicy[]) { + const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) + + const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) + const results = await Promise.all(requests) + + return results.map((result) => { + return { + ...result.data, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { + return { + ...acc, + [camelize(option.trait_type)]: + option.value === "true" ? true : option.value === "false" ? false : option.value, + } + }, {}), + } + }) + } + + const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ + queryKey: ["fetchPolicyDetails", ipPolicyData?.data], + queryFn: () => fetchPolicyDetails(ipPolicyData?.data), + enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), + }) + + const licenseQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + licensorIpdId: ipId, + }, + } + // Fetch License Data + const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ + queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), + }) + + // Fetch Royalty Data + const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ + queryKey: [ + RESOURCE_TYPE.ROYALTY_POLICY, + { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + }, + ], + queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), + }) + + // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], + // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), + // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + // }) + const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], + queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), + enabled: + Boolean(assetData) && + Boolean(assetData.data.nftMetadata.tokenContract) && + Boolean(assetData.data.nftMetadata.tokenId), + }) + + return ( + <IpAssetContext.Provider + value={{ + // activeTab, + // setActiveTab, + nftData, + isNftDataLoading, + assetData: assetData?.data, + isAssetDataLoading, + ipPolicyData: ipPolicyData?.data, + isIPAPolicyDataLoading, + policyData: policyData, + isPolicyDataLoading, + licenseData: licenseData?.data, + isLicenseDataLoading, + royaltyData: royaltyData?.data, + isRoyaltyDataLoading, + }} + > + {children} + </IpAssetContext.Provider> + ) +} + +export const useIpAssetContext = () => { + const context = React.useContext(IpAssetContext) + if (!context) { + throw new Error("useAccount must be used within an IpAssetProvider") + } + return context +} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx new file mode 100644 index 0000000..a84a01b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx @@ -0,0 +1,59 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" + +const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IpAssetProvider ipId={ipId}> + <ExampleComponent /> + </IpAssetProvider> + </div> + </QueryClientProvider> + ) +} + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + return ( + <> + {isNftDataLoading && <div>Fetching Asset...</div>} + {nftData && !isNftDataLoading ? ( + <div className="grid grid-cols-4 gap-4"> + <> + <div className="col-span-1 text-xs text-gray-600">nft_id</div> + <div className="col-span-3 text-sm">{nftData.nft_id}</div> + + <div className="col-span-1 text-xs text-gray-600">chain</div> + <div className="col-span-3 text-sm">{nftData.chain}</div> + + <div className="col-span-1 text-xs text-gray-600">contract_address</div> + <div className="col-span-3 text-sm">{nftData.contract_address}</div> + + <div className="col-span-1 text-xs text-gray-600">token_id</div> + <div className="col-span-3 text-sm">{nftData.token_id}</div> + + <div className="col-span-1 text-xs text-gray-600">name</div> + <div className="col-span-3 text-sm">{nftData.name}</div> + + <div className="col-span-1 text-xs text-gray-600">description</div> + <div className="col-span-3 text-sm">{nftData.description}</div> + </> + </div> + ) : null} + </> + ) +} + +export default Example diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx new file mode 100644 index 0000000..cbfbf01 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx @@ -0,0 +1,79 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IpAssetProviderStory from "./IpAssetProvider.stories" + +<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> + +# IpAssetProvider + +Provides IP Asset data to children components. + +#### Example + +<Canvas of={IpAssetProviderStory.Select} /> + +<Controls /> + +## Usage + +```ts +// wrap your component with the IpAssetProvider + +import { IpAssetProvider } from "@storyprotocol/storykit" +import ExampleComponent from './ExampleComponent' + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +export default ExamplePage; +``` + +```ts +// in your component file, context provides IP asset state + +import { useIpAssetContext } from "@storyprotocol/storykit" + +const ExampleComponent = () => { + + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; + +export default ExampleComponent; +``` + +#### Provider data + +The IpAssetProvider provides the following data to its children: + +- **assetData** - The IP Asset data. +- **isAssetDataLoading** - IP Asset data loading state. +- **nftData** - The NFT Metadata. +- **isNftDataLoading** - NFT Metadata loading state. +- **ipPolicyData** - Policies attached to the IP Asset. +- **isIPAPolicyDataLoading** - Policy data loading state. +- **policyData** - The Policy details including the template id, address and terms. +- **isPolicyDataLoading** - Policy data loading state. +- **licenseData** - IP Asset minted Licenses. +- **isLicenseDataLoading** - License data loading state. +- **royaltyData** - The Royalty Policy data. +- **isRoyaltyDataLoading** - Royalty Policy data loading state. + +#### Arguments + +- **children** - The child component to provide the IP Asset context to. +- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx new file mode 100644 index 0000000..cd7231b --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx @@ -0,0 +1,49 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Providers/IpAssetProvider", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + // argTypes: {}, + // argTypes: { + // ipId: { + // options: [ + // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", + // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", + // ], + // // control: { type: "select" }, // Automatically inferred when 'options' is defined + // }, + // }, + // args: { + // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // }, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/IpAssetProvider/index.tsx @@ -0,0 +1 @@ +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts new file mode 100644 index 0000000..fa172d4 --- /dev/null +++ b/packages/storykit/src/providers/index.ts @@ -0,0 +1 @@ +export * from "./IpAssetProvider" diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx new file mode 100644 index 0000000..8d5a16c --- /dev/null +++ b/packages/storykit/src/stories/Introduction.mdx @@ -0,0 +1,201 @@ +import { Meta } from "@storybook/blocks" + +<Meta title="Introduction" /> + +# Storykit + +Plug-and-play React components for Story Protocol. + +## Installation + +_Storykit is a private package so you need repo access and a personal access token to use_ + +1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) + +2 . Create an `.npmrc` file in the root of your project and add the following, replacing `NPM_TOKEN` with yout access token: + +```bash +//npm.pkg.github.com/:_authToken=NPM_TOKEN +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +3 . Add `.npmrc` to your `.gitignore` to keep your access token private. + +4 . Install the package and the required dependencies: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query +``` + +## Deploying on vercel + +To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: + +```bash +//npm.pkg.github.com/:_authToken=${NPM_TOKEN} +@storyprotocol/storykit:registry=https://npm.pkg.github.com +``` + +OR... + +You can add all the content of the `.npmrc` file, including your personal access token, to a `NPM_RC` vercel environment variable. + +See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with-vercel) for more information. + +## Dependencies + +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. + +Some components have additional dependencies including: + +- [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) +- [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) + +See the individual component docs ro see if they require an additional dependency or install them all at once with: + +```bash +npm install @storyprotocol/storykit @tanstack/react-query react-apexcharts react-force-graph-2d +``` + +## Run locally + +### Storybook + +Run Storybook locally for component development and documentation: + +```bash +pnpm dev +``` + +Find the Storybook at [http://localhost:6006](http://localhost:6006) + +### Example app + +Run the next.js [example app](../examples/next-app/): + +```bash +pnpm build +pnpm dev-example +``` + +The dev server will be running at [http://localhost:3000](http://localhost:3000) + +### Linting and formatting + +Lint with eslint: + +```bash +pnpm lint +``` + +Format with prettier: + +```bash +pnpm format +``` + +## Usage + +Using Storykit in your React app + +### Include React Query + +React Query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, we recommend doing this once in the root of the app. + +```typescript +// app/layout.tsx + +import Providers from "./Providers" + +export default function Layout({children}) { + return ( + <html> + <body> + <Providers>{children}</Providers> + </body> + </html> + ) +} +``` + +```typescript +// app/Providers.tsx + +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export default function Providers({ children }) { + return ( + <QueryClientProvider client={queryClient}> + {children} + </QueryClientProvider> + ) +} + +``` + +### The IpAssetProvider + +The IpAssetProvider provides IP Asset data to child components. + +```typescript +import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IpAssetProvider> + ); +}; + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIpAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; +``` + +### The IpGraph + +Some components require the IpAssetProvider to supply asset data + +```typescript +import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpGraph /> + </IpAssetProvider> + ); +}; +``` + +### The IpWidget + +The IpAssetProvider is already included in the IpWidget + +```typescript +import { IpWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IpWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ) +} + +``` + +See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/packages/storykit/src/stories/data/index.ts b/packages/storykit/src/stories/data/index.ts new file mode 100644 index 0000000..ec9074b --- /dev/null +++ b/packages/storykit/src/stories/data/index.ts @@ -0,0 +1,8 @@ +export const PREVIEW_IP_ASSETS = [ + "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", + "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", + "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", + "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", + "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", + "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", +] diff --git a/packages/storykit/tailwind.config.js b/packages/storykit/tailwind.config.js new file mode 100644 index 0000000..6211183 --- /dev/null +++ b/packages/storykit/tailwind.config.js @@ -0,0 +1,72 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + // extend: { + // colors: { + // border: "hsl(var(--border))", + // input: "hsl(var(--input))", + // ring: "hsl(var(--ring))", + // background: "hsl(var(--background))", + // foreground: "hsl(var(--foreground))", + // primary: { + // DEFAULT: "hsl(var(--primary))", + // foreground: "hsl(var(--primary-foreground))", + // }, + // secondary: { + // DEFAULT: "hsl(var(--secondary))", + // foreground: "hsl(var(--secondary-foreground))", + // }, + // destructive: { + // DEFAULT: "hsl(var(--destructive))", + // foreground: "hsl(var(--destructive-foreground))", + // }, + // muted: { + // DEFAULT: "hsl(var(--muted))", + // foreground: "hsl(var(--muted-foreground))", + // }, + // accent: { + // DEFAULT: "hsl(var(--accent))", + // foreground: "hsl(var(--accent-foreground))", + // }, + // popover: { + // DEFAULT: "hsl(var(--popover))", + // foreground: "hsl(var(--popover-foreground))", + // }, + // card: { + // DEFAULT: "hsl(var(--card))", + // foreground: "hsl(var(--card-foreground))", + // }, + // }, + // borderRadius: { + // lg: "var(--radius)", + // md: "calc(var(--radius) - 2px)", + // sm: "calc(var(--radius) - 4px)", + // }, + // keyframes: { + // "accordion-down": { + // from: { height: "0" }, + // to: { height: "var(--radix-accordion-content-height)" }, + // }, + // "accordion-up": { + // from: { height: "var(--radix-accordion-content-height)" }, + // to: { height: "0" }, + // }, + // }, + // animation: { + // "accordion-down": "accordion-down 0.2s ease-out", + // "accordion-up": "accordion-up 0.2s ease-out", + // }, + // }, + }, + plugins: [require("tailwindcss-animate")], +} diff --git a/packages/storykit/tsconfig.json b/packages/storykit/tsconfig.json new file mode 100644 index 0000000..ca92804 --- /dev/null +++ b/packages/storykit/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@storykit/typescript-config/react-library.json", + "include": ["src"], + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["dist", "build", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..c2d139e --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,17293 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@storykit/eslint-config': + specifier: workspace:* + version: link:packages/config-eslint + eslint: + specifier: ^8.57.0 + version: 8.57.0 + husky: + specifier: ^9.0.11 + version: 9.0.11 + lint-staged: + specifier: ^15.2.2 + version: 15.2.2 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + turbo: + specifier: ^1.12.2 + version: 1.13.3 + + examples/next-app: + dependencies: + '@storyprotocol/storykit': + specifier: workspace:* + version: link:../../packages/storykit + '@tanstack/react-query': + specifier: ^5.28.9 + version: 5.32.0(react@18.3.0) + next: + specifier: 14.1.4 + version: 14.1.4(react-dom@18.3.0)(react@18.3.0) + react: + specifier: ^18 + version: 18.3.0 + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) + react-dom: + specifier: ^18 + version: 18.3.0(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) + devDependencies: + '@next/eslint-plugin-next': + specifier: ^14.1.1 + version: 14.2.3 + '@storykit/eslint-config': + specifier: workspace:* + version: link:../../packages/config-eslint + '@storykit/prettier-config': + specifier: workspace:* + version: link:../../packages/config-prettier + '@storykit/typescript-config': + specifier: workspace:* + version: link:../../packages/config-typescript + '@types/node': + specifier: ^20 + version: 20.12.7 + '@types/react': + specifier: ^18 + version: 18.3.0 + '@types/react-dom': + specifier: ^18 + version: 18.3.0 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-next: + specifier: 14.2.1 + version: 14.2.1(eslint@8.57.0)(typescript@5.4.5) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + typescript: + specifier: ^5 + version: 5.4.5 + + packages/config-eslint: + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^7.1.0 + version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^7.1.0 + version: 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@vercel/style-guide': + specifier: ^5.2.0 + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-config-turbo: + specifier: ^1.12.4 + version: 1.13.3(eslint@8.57.0) + eslint-plugin-only-warn: + specifier: ^1.1.0 + version: 1.1.0 + typescript: + specifier: ^5.3.3 + version: 5.4.5 + + packages/config-prettier: + devDependencies: + '@trivago/prettier-plugin-sort-imports': + specifier: ^4.3.0 + version: 4.3.0(prettier@3.2.5) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + + packages/config-typescript: {} + + packages/storykit: + dependencies: + '@emotion/is-prop-valid': + specifier: ^1.2.2 + version: 1.2.2 + '@emotion/react': + specifier: ^11.11.4 + version: 11.11.4(@types/react@18.3.0)(react@18.3.0) + '@headlessui/react': + specifier: ^1.7.18 + version: 1.7.19(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-accordion': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.1 + lucide-react: + specifier: ^0.364.0 + version: 0.364.0(react@18.3.0) + react-icons: + specifier: ^5.0.1 + version: 5.1.0(react@18.3.0) + tailwind-merge: + specifier: ^2.2.2 + version: 2.3.0 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.3 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.3) + viem: + specifier: ^2.7.19 + version: 2.9.27(typescript@5.4.5) + devDependencies: + '@chromatic-com/storybook': + specifier: ^1.2.25 + version: 1.3.3(react@18.3.0) + '@rollup/plugin-commonjs': + specifier: ^25.0.7 + version: 25.0.7(rollup@4.16.4) + '@rollup/plugin-node-resolve': + specifier: ^15.2.3 + version: 15.2.3(rollup@4.16.4) + '@rollup/plugin-terser': + specifier: ^0.4.4 + version: 0.4.4(rollup@4.16.4) + '@rollup/plugin-typescript': + specifier: ^11.1.6 + version: 11.1.6(rollup@4.16.4)(typescript@5.4.5) + '@storybook/addon-essentials': + specifier: ^8.0.4 + version: 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/addon-interactions': + specifier: ^8.0.4 + version: 8.0.9(@types/jest@29.5.12)(jest@27.5.1) + '@storybook/addon-links': + specifier: ^8.0.4 + version: 8.0.9(react@18.3.0) + '@storybook/addon-onboarding': + specifier: ^8.0.4 + version: 8.0.9 + '@storybook/addon-styling-webpack': + specifier: ^1.0.0 + version: 1.0.0(webpack@5.91.0) + '@storybook/addon-themes': + specifier: ^8.0.4 + version: 8.0.9 + '@storybook/blocks': + specifier: ^8.0.4 + version: 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/manager-api': + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/preset-create-react-app': + specifier: ^8.0.4 + version: 8.0.9(react-refresh@0.14.1)(react-scripts@5.0.1)(typescript@5.4.5)(webpack@5.91.0) + '@storybook/react': + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/react-webpack5': + specifier: ^8.0.4 + version: 8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/test': + specifier: ^8.0.4 + version: 8.0.9(@types/jest@29.5.12)(jest@27.5.1) + '@storybook/theming': + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storykit/eslint-config': + specifier: workspace:* + version: link:../config-eslint + '@storykit/prettier-config': + specifier: workspace:* + version: link:../config-prettier + '@storykit/typescript-config': + specifier: workspace:* + version: link:../config-typescript + '@tailwindcss/nesting': + specifier: 0.0.0-insiders.565cd3e + version: 0.0.0-insiders.565cd3e(postcss@8.4.38) + '@tanstack/react-query': + specifier: ^5.25.0 + version: 5.32.0(react@18.3.0) + '@testing-library/jest-dom': + specifier: ^5.17.0 + version: 5.17.0 + '@testing-library/react': + specifier: ^13.4.0 + version: 13.4.0(react-dom@18.3.0)(react@18.3.0) + '@testing-library/user-event': + specifier: ^13.5.0 + version: 13.5.0(@testing-library/dom@10.0.0) + '@turbo/gen': + specifier: ^1.12.4 + version: 1.13.3(@types/node@20.12.7)(typescript@5.4.5) + '@types/eslint': + specifier: ^8.56.5 + version: 8.56.10 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + '@types/node': + specifier: ^20.11.24 + version: 20.12.7 + '@types/react': + specifier: ^18.2.61 + version: 18.3.0 + '@types/react-dom': + specifier: ^18.2.19 + version: 18.3.0 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + eslint-plugin-react: + specifier: ^7.34.1 + version: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.1(eslint@8.57.0) + eslint-plugin-storybook: + specifier: ^0.8.0 + version: 0.8.0(eslint@8.57.0)(typescript@5.4.5) + postcss: + specifier: ^8.4.38 + version: 8.4.38 + postcss-nesting: + specifier: ^12.1.2 + version: 12.1.2(postcss@8.4.38) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + react: + specifier: ^18.2.0 + version: 18.3.0 + react-apexcharts: + specifier: ^1.4.1 + version: 1.4.1(apexcharts@3.49.0)(react@18.3.0) + react-dom: + specifier: ^18.2.0 + version: 18.3.0(react@18.3.0) + react-force-graph-2d: + specifier: ^1.25.4 + version: 1.25.4(react@18.3.0) + react-scripts: + specifier: 5.0.1 + version: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) + rollup: + specifier: ^4.13.1 + version: 4.16.4 + rollup-plugin-dts: + specifier: ^6.1.0 + version: 6.1.0(rollup@4.16.4)(typescript@5.4.5) + rollup-plugin-peer-deps-external: + specifier: ^2.2.4 + version: 2.2.4(rollup@4.16.4) + rollup-plugin-postcss: + specifier: ^4.0.2 + version: 4.0.2(postcss@8.4.38) + storybook: + specifier: ^8.0.4 + version: 8.0.9(react-dom@18.3.0)(react@18.3.0) + typescript: + specifier: ^5.3.3 + version: 5.4.5 + webpack: + specifier: ^5.91.0 + version: 5.91.0(esbuild@0.20.2) + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@adobe/css-tools@4.3.3: + resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + dev: true + + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + + /@alloc/quick-lru@5.2.0: + 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'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + + /@aw-web-design/x-default-browser@1.4.126: + resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} + hasBin: true + dependencies: + default-browser-id: 3.0.0 + dev: true + + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@8.57.0): + resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + dev: true + + /@babel/generator@7.17.7: + resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.4): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: true + + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + dev: true + + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + engines: {node: '>=6.9.0'} + requiresBuild: true + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + dev: true + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.4): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.4): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 + dev: true + + /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.4): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/types': 7.24.0 + dev: true + + /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/preset-env@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) + core-js-compat: 3.37.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-flow@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/types': 7.24.0 + esutils: 2.0.3 + dev: true + + /@babel/preset-react@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.4) + dev: true + + /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + dev: true + + /@babel/register@7.23.7(@babel/core@7.24.4): + resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime-corejs3@7.24.4: + resolution: {integrity: sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.37.0 + regenerator-runtime: 0.14.1 + dev: true + + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + dev: true + + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@base2/pretty-print-object@1.0.1: + resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + dev: true + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@chromatic-com/storybook@1.3.3(react@18.3.0): + resolution: {integrity: sha512-1y9r691T5vVGDZ0HY3YrCXUnvtrT2YrhDuvDZSvYSNUVpM/Imz6i1dnNMKb3eoI1qRsH55mI4zCt+Iq94NLedQ==} + engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + dependencies: + chromatic: 11.3.0 + filesize: 10.1.1 + jsonfile: 6.1.0 + react-confetti: 6.1.0(react@18.3.0) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - react + dev: true + + /@colors/colors@1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@csstools/normalize.css@12.1.1: + resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} + dev: true + + /@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.38): + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /@csstools/postcss-color-function@1.1.1(postcss@8.4.38): + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.38): + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.38): + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.38): + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.38): + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /@csstools/postcss-nested-calc@1.0.0(postcss@8.4.38): + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.38): + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.38): + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.38): + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.38): + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.38): + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.38): + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-unset-value@1.0.2(postcss@8.4.38): + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + dev: true + + /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.16 + dev: true + + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + dependencies: + postcss-selector-parser: 6.0.16 + dev: true + + /@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.16 + dev: true + + /@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: true + + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.24.3 + '@babel/runtime': 7.24.4 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.4 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: false + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + dev: false + + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: false + + /@emotion/is-prop-valid@1.2.2: + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} + dependencies: + '@emotion/memoize': 0.8.1 + dev: false + + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: false + + /@emotion/react@11.11.4(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.4 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.3.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.0 + dev: false + + /@emotion/serialize@1.1.4: + resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.3 + dev: false + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: false + + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.3.0 + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: false + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: false + + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@fal-works/esbuild-plugin-global-externals@2.1.2: + resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} + dev: true + + /@headlessui/react@1.7.19(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} + engines: {node: '>=10'} + peerDependencies: + react: ^16 || ^17 || ^18 + react-dom: ^16 || ^17 || ^18 + dependencies: + '@tanstack/react-virtual': 3.4.0(react-dom@18.3.0)(react@18.3.0) + client-only: 0.0.1 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console@27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + dev: true + + /@jest/console@28.1.3: + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + dev: true + + /@jest/core@27.5.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /@jest/environment@27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + jest-mock: 27.5.1 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/fake-timers@27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 20.12.7 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: true + + /@jest/globals@27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + dev: true + + /@jest/reporters@27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 + dev: true + + /@jest/test-result@27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-result@28.1.3: + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer@27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/transform@27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.24.4 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.7 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + dev: true + + /@jest/types@28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.7 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.7 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: true + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@leichtgewicht/ip-codec@2.0.5: + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + dev: true + + /@mdx-js/react@3.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 18.3.0 + react: 18.3.0 + dev: true + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true + + /@ndelangen/get-tarball@3.0.9: + resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} + dependencies: + gunzip-maybe: 1.4.2 + pump: 3.0.0 + tar-fs: 2.1.1 + dev: true + + /@next/env@14.1.4: + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} + dev: false + + /@next/eslint-plugin-next@14.2.1: + resolution: {integrity: sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==} + dependencies: + glob: 10.3.10 + dev: true + + /@next/eslint-plugin-next@14.2.3: + resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} + dependencies: + glob: 10.3.10 + dev: true + + /@next/swc-darwin-arm64@14.1.4: + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@14.1.4: + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@14.1.4: + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@14.1.4: + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@14.1.4: + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@14.1.4: + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@14.1.4: + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@14.1.4: + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@14.1.4: + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: true + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true + + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0): + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.37.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.5.2 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.91.0(esbuild@0.20.2) + webpack-dev-server: 4.15.2(webpack@5.91.0) + dev: true + + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.1)(webpack@5.91.0): + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.37.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.5.2 + loader-utils: 2.0.4 + react-refresh: 0.14.1 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 + + /@radix-ui/react-context@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + react: 18.3.0 + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + react: 18.3.0 + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.0)(react@18.3.0) + '@types/react': 18.3.0 + react: 18.3.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.3.0 + react: 18.3.0 + dev: false + + /@rollup/plugin-babel@5.3.1(@babel/core@7.24.4)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.24.3 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-commonjs@25.0.7(rollup@4.16.4): + resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 8.1.0 + is-reference: 1.2.1 + magic-string: 0.30.10 + rollup: 4.16.4 + dev: true + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@15.2.3(rollup@4.16.4): + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 4.16.4 + dev: true + + /@rollup/plugin-replace@2.4.2(rollup@2.79.1): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-terser@0.4.4(rollup@4.16.4): + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + rollup: 4.16.4 + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.30.4 + dev: true + + /@rollup/plugin-typescript@11.1.6(rollup@4.16.4)(typescript@5.4.5): + resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + resolve: 1.22.8 + rollup: 4.16.4 + typescript: 5.4.5 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@5.1.0(rollup@4.16.4): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 4.16.4 + dev: true + + /@rollup/rollup-android-arm-eabi@4.16.4: + resolution: {integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.16.4: + resolution: {integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.16.4: + resolution: {integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.16.4: + resolution: {integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.16.4: + resolution: {integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.16.4: + resolution: {integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.16.4: + resolution: {integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.16.4: + resolution: {integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.16.4: + resolution: {integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.16.4: + resolution: {integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.16.4: + resolution: {integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.16.4: + resolution: {integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.16.4: + resolution: {integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.16.4: + resolution: {integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.16.4: + resolution: {integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.16.4: + resolution: {integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rushstack/eslint-patch@1.10.2: + resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} + dev: true + + /@scure/base@1.1.6: + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + dev: false + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.6 + dev: false + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.6 + dev: false + + /@sinclair/typebox@0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sinonjs/commons@1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + dependencies: + '@sinonjs/commons': 1.8.6 + dev: true + + /@storybook/addon-actions@8.0.9: + resolution: {integrity: sha512-+I3VTvlKdj8puHeS2tyaOVv9syDiNLneVZbTfqN+UDOK2i42NwvZr8PVwjTzMlEj9eePJdCZgiipz55xwts5bw==} + dependencies: + '@storybook/core-events': 8.0.9 + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + uuid: 9.0.1 + dev: true + + /@storybook/addon-backgrounds@8.0.9: + resolution: {integrity: sha512-pCDecACrVyxPaJKEWS0sHsRb8xw+IPCSxDM1TkjaAQ6zZ468A/dcUnqW+LVK8bSXgQwWzn23wqnqPFSy5yptuQ==} + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + ts-dedent: 2.2.0 + dev: true + + /@storybook/addon-controls@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-wWdmd62UP/sfPm8M7aJjEA+kEXTUIR/QsYi9PoYBhBZcXiikZ4kNan7oD7GfsnzGGKHrBVfwQhO+TqaENGYytA==} + dependencies: + '@storybook/blocks': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + lodash: 4.17.21 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - encoding + - react + - react-dom + - supports-color + dev: true + + /@storybook/addon-docs@8.0.9: + resolution: {integrity: sha512-x7hX7UuzJtClu6XwU3SfpyFhuckVcgqgD6BU6Ihxl0zs+i4xp6iKVXYSnHFMRM1sgoeT8TjPxab35Ke8w8BVRw==} + dependencies: + '@babel/core': 7.24.4 + '@mdx-js/react': 3.0.1(@types/react@18.3.0)(react@18.3.0) + '@storybook/blocks': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/client-logger': 8.0.9 + '@storybook/components': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/csf-plugin': 8.0.9 + '@storybook/csf-tools': 8.0.9 + '@storybook/global': 5.0.0 + '@storybook/node-logger': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@storybook/react-dom-shim': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 + '@types/react': 18.3.0 + fs-extra: 11.2.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + rehype-external-links: 3.0.0 + rehype-slug: 6.0.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/addon-essentials@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-mwAgdfrOsTuTDcagvM7veBh+iayZIWmKOazzkhrIWbhYcrXOsweigD2UOVeHgAiAzJK49znr4FXTCKcE1hOWcw==} + dependencies: + '@storybook/addon-actions': 8.0.9 + '@storybook/addon-backgrounds': 8.0.9 + '@storybook/addon-controls': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/addon-docs': 8.0.9 + '@storybook/addon-highlight': 8.0.9 + '@storybook/addon-measure': 8.0.9 + '@storybook/addon-outline': 8.0.9 + '@storybook/addon-toolbars': 8.0.9 + '@storybook/addon-viewport': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/node-logger': 8.0.9 + '@storybook/preview-api': 8.0.9 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - encoding + - react + - react-dom + - supports-color + dev: true + + /@storybook/addon-highlight@8.0.9: + resolution: {integrity: sha512-vaRHGDbx7dpNpQECAHk5wczlZO3ntstprGlqnZt0o7ylz6xB5+pTQwTuIFty0hwKv+3TPcskzzifATUyEOEmyg==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + + /@storybook/addon-interactions@8.0.9(@types/jest@29.5.12)(jest@27.5.1): + resolution: {integrity: sha512-AMIdNcyM6DDAWvMitBJMqp1iPZND8AXB4QT4VZHGMKG2ngHNKktriEKpTfcRkfKPGTJs9T+71dWfm6/R4tticw==} + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.0.9 + '@storybook/test': 8.0.9(@types/jest@29.5.12)(jest@27.5.1) + '@storybook/types': 8.0.9 + polished: 4.3.1 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest + dev: true + + /@storybook/addon-links@8.0.9(react@18.3.0): + resolution: {integrity: sha512-FVt+AdW3JFSqbJzkKiqKsMRWqHXqEvCBqFs7lNfk3OW0w0jfv1iREtrxE0dVdJoUFQC9V/2Im/EpJ7UB3C2bNQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + dependencies: + '@storybook/csf': 0.1.5 + '@storybook/global': 5.0.0 + react: 18.3.0 + ts-dedent: 2.2.0 + dev: true + + /@storybook/addon-measure@8.0.9: + resolution: {integrity: sha512-91svOOGEXmGG4USglwXLE3wtlUVgtbKJVxTKX7xRI+AC5JEEaKByVzP17/X8Qn/8HilUL7AfSQ0kCoqtPSJ5cA==} + dependencies: + '@storybook/global': 5.0.0 + tiny-invariant: 1.3.3 + dev: true + + /@storybook/addon-onboarding@8.0.9: + resolution: {integrity: sha512-gRPn8ooxTmdamfJgdkQR48pza67S83l2DDlZ3C1kuus19UO+eIFUEVZJbud9qQojq7jc8ztaYXiNObWdxKu29A==} + dev: true + + /@storybook/addon-outline@8.0.9: + resolution: {integrity: sha512-fQ+jm356TgUnz81IxsC99/aOesbLw3N5OQRJpo/A6kqbLMzlq3ybVzuXYCKC3f0ArgQRNh4NoMeJBMRFMtaWRw==} + dependencies: + '@storybook/global': 5.0.0 + ts-dedent: 2.2.0 + dev: true + + /@storybook/addon-styling-webpack@1.0.0(webpack@5.91.0): + resolution: {integrity: sha512-jo1kzn7pi+NA+LZxrWoRvW6w7dXIKY/BjTG80XX2uU92lIKT+X1k/9vYk/0KPVK3Bsf4tO6ToAuqIRyOk7MHtg==} + peerDependencies: + webpack: ^5.0.0 + dependencies: + '@storybook/node-logger': 8.0.9 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /@storybook/addon-themes@8.0.9: + resolution: {integrity: sha512-aAbKIT//bqKbMeRLKtVStwndi+XrYxeg94tDKTFrIv2W1It6QJlO/5FMjI+cgtHHBi6w/4ThKDYwjupasaBdlg==} + dependencies: + ts-dedent: 2.2.0 + dev: true + + /@storybook/addon-toolbars@8.0.9: + resolution: {integrity: sha512-nNSBnnBOhQ+EJwkrIkK4ZBYPcozNmEH770CZ/6NK85SUJ6WEBZapE6ru33jIUokFGEvlOlNCeai0GUc++cQP8w==} + dev: true + + /@storybook/addon-viewport@8.0.9: + resolution: {integrity: sha512-Ao4+D56cO7biaw+iTlMU1FBec1idX0cmdosDeCFZin06MSawcPkeBlRBeruaSQYdLes8TBMdZPFgfuqI5yIk6g==} + dependencies: + memoizerific: 1.11.3 + dev: true + + /@storybook/blocks@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-F2zSrfSwzTFN7qW3zB80tG+EXtmfmCDC6Ird0F7tolszb6tOqJcAcBOwQbE2O0wI63sLu21qxzXgaKBMkiWvJg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/components': 8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0) + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/docs-tools': 8.0.9 + '@storybook/global': 5.0.0 + '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/preview-api': 8.0.9 + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 + '@types/lodash': 4.17.0 + color-convert: 2.0.1 + dequal: 2.0.3 + lodash: 4.17.21 + markdown-to-jsx: 7.3.2(react@18.3.0) + memoizerific: 1.11.3 + polished: 4.3.1 + react: 18.3.0 + react-colorful: 5.6.1(react-dom@18.3.0)(react@18.3.0) + react-dom: 18.3.0(react@18.3.0) + telejson: 7.2.0 + tocbot: 4.27.13 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - encoding + - supports-color + dev: true + + /@storybook/builder-manager@8.0.9: + resolution: {integrity: sha512-/PxDwZIfMc/PSRZcasb6SIdGr3azIlenzx7dBF7Imt8i4jLHiAf1t00GvghlfJsvsrn4DNp95rbRbXTDyTj7tQ==} + dependencies: + '@fal-works/esbuild-plugin-global-externals': 2.1.2 + '@storybook/core-common': 8.0.9 + '@storybook/manager': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@types/ejs': 3.1.5 + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) + browser-assert: 1.2.1 + ejs: 3.1.10 + esbuild: 0.20.2 + esbuild-plugin-alias: 0.2.1 + express: 4.19.2 + fs-extra: 11.2.0 + process: 0.11.10 + util: 0.12.5 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/builder-webpack5@8.0.9(esbuild@0.20.2)(typescript@5.4.5): + resolution: {integrity: sha512-bFxlxOO2x8n3TmmA9ACxzhmHxtRd0e68dA0w4AYkvEwBf2wScRQdWJIeS5k4JgRwtcUyFYAt+VcKyE1WMgyaVg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/core-webpack': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/preview': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@types/node': 18.19.31 + '@types/semver': 7.5.8 + browser-assert: 1.2.1 + case-sensitive-paths-webpack-plugin: 2.4.0 + cjs-module-lexer: 1.2.3 + constants-browserify: 1.0.0 + css-loader: 6.11.0(webpack@5.91.0) + es-module-lexer: 1.5.0 + express: 4.19.2 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.5)(webpack@5.91.0) + fs-extra: 11.2.0 + html-webpack-plugin: 5.6.0(webpack@5.91.0) + magic-string: 0.30.10 + path-browserify: 1.0.1 + process: 0.11.10 + semver: 7.6.0 + style-loader: 3.3.4(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) + ts-dedent: 2.2.0 + typescript: 5.4.5 + url: 0.11.3 + util: 0.12.5 + util-deprecate: 1.0.2 + webpack: 5.91.0(esbuild@0.20.2) + webpack-dev-middleware: 6.1.3(webpack@5.91.0) + webpack-hot-middleware: 2.26.1 + webpack-virtual-modules: 0.5.0 + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - encoding + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: true + + /@storybook/channels@8.0.9: + resolution: {integrity: sha512-7Lcfyy5CsLWWGhMPO9WG4jZ/Alzp0AjepFhEreYHRPtQrfttp6qMAjE/g1aHgun0qHCYWxwqIG4NLR/hqDNrXQ==} + dependencies: + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/global': 5.0.0 + telejson: 7.2.0 + tiny-invariant: 1.3.3 + dev: true + + /@storybook/cli@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-lilYTKn8F5YOePijqfRYFa5v2mHVIJxPCIgTn+OXAmAFbcizZ6P8P6niU4J/NXulgx68Ln1M7hYhFtTP25hVTw==} + hasBin: true + dependencies: + '@babel/core': 7.24.4 + '@babel/types': 7.24.0 + '@ndelangen/get-tarball': 3.0.9 + '@storybook/codemod': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/core-server': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/csf-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/telemetry': 8.0.9 + '@storybook/types': 8.0.9 + '@types/semver': 7.5.8 + '@yarnpkg/fslib': 2.10.3 + '@yarnpkg/libzip': 2.3.0 + chalk: 4.1.2 + commander: 6.2.1 + cross-spawn: 7.0.3 + detect-indent: 6.1.0 + envinfo: 7.12.0 + execa: 5.1.1 + find-up: 5.0.0 + fs-extra: 11.2.0 + get-npm-tarball-url: 2.1.0 + giget: 1.2.3 + globby: 11.1.0 + jscodeshift: 0.15.2(@babel/preset-env@7.24.4) + leven: 3.1.0 + ora: 5.4.1 + prettier: 3.2.5 + prompts: 2.4.2 + read-pkg-up: 7.0.1 + semver: 7.6.0 + strip-json-comments: 3.1.1 + tempy: 1.0.1 + tiny-invariant: 1.3.3 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@babel/preset-env' + - bufferutil + - encoding + - react + - react-dom + - supports-color + - utf-8-validate + dev: true + + /@storybook/client-logger@8.0.9: + resolution: {integrity: sha512-LzV/RHkbf07sRc1Jc0ff36RlapKf9Ul7/+9VMvVbI3hshH1CpmrZK4t/tsIdpX/EVOdJ1Gg5cES06PnleOAIPA==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + + /@storybook/codemod@8.0.9: + resolution: {integrity: sha512-VBeGpSZSQpL6iyLLqceJSNGhdCqcNwv+xC/aWdDFOkmuE1YfbmNNwpa9QYv4ZFJ2QjUsm4iTWG60qK+9NXeSKA==} + dependencies: + '@babel/core': 7.24.4 + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/types': 7.24.0 + '@storybook/csf': 0.1.5 + '@storybook/csf-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/types': 8.0.9 + '@types/cross-spawn': 6.0.6 + cross-spawn: 7.0.3 + globby: 11.1.0 + jscodeshift: 0.15.2(@babel/preset-env@7.24.4) + lodash: 4.17.21 + prettier: 3.2.5 + recast: 0.23.6 + tiny-invariant: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/components@8.0.9(@types/react@18.3.0)(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-JcwBGADzIJs0PSzqykrrD2KHzNG9wtexUOKuidt+FSv9szpUhe3qBAXIHpdfBRl7mOJ9TRZ5rt+mukEnfncdzA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.0)(react@18.3.0) + '@storybook/client-logger': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/global': 5.0.0 + '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 + memoizerific: 1.11.3 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/core-common@8.0.9: + resolution: {integrity: sha512-Jmue+sfHFb4GTYBzyWYw1MygoJiQSfISIrKmNIzAmZ+oR9EOr+jpu/i/bH+uetZ2Hqg1AGhj1VB7OtJp9HQyWw==} + dependencies: + '@storybook/core-events': 8.0.9 + '@storybook/csf-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/types': 8.0.9 + '@yarnpkg/fslib': 2.10.3 + '@yarnpkg/libzip': 2.3.0 + chalk: 4.1.2 + cross-spawn: 7.0.3 + esbuild: 0.20.2 + esbuild-register: 3.5.0(esbuild@0.20.2) + execa: 5.1.1 + file-system-cache: 2.3.0 + find-cache-dir: 3.3.2 + find-up: 5.0.0 + fs-extra: 11.2.0 + glob: 10.3.10 + handlebars: 4.7.8 + lazy-universal-dotenv: 4.0.0 + node-fetch: 2.7.0 + picomatch: 2.3.1 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 + resolve-from: 5.0.0 + semver: 7.6.0 + tempy: 1.0.1 + tiny-invariant: 1.3.3 + ts-dedent: 2.2.0 + util: 0.12.5 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/core-events@8.0.9: + resolution: {integrity: sha512-DxSUx7wG9Qe3OFUBnv3OrYq48J8UWNo2DUR5/JecJCtp3n++L4fAEW3J0IF5FfxpQDMQSp1yTNjZ2PaWCMd2ag==} + dependencies: + ts-dedent: 2.2.0 + dev: true + + /@storybook/core-server@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-BIe1T5YUBl0GYxEjRoTQsvXD2pyuzL8rPTUD41zlzSQM0R8U6Iant9SzRms4u0+rKUm2mGxxKuODlUo5ewqaGA==} + dependencies: + '@aw-web-design/x-default-browser': 1.4.126 + '@babel/core': 7.24.4 + '@discoveryjs/json-ext': 0.5.7 + '@storybook/builder-manager': 8.0.9 + '@storybook/channels': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/csf-tools': 8.0.9 + '@storybook/docs-mdx': 3.0.0 + '@storybook/global': 5.0.0 + '@storybook/manager': 8.0.9 + '@storybook/manager-api': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/node-logger': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@storybook/telemetry': 8.0.9 + '@storybook/types': 8.0.9 + '@types/detect-port': 1.3.5 + '@types/node': 18.19.31 + '@types/pretty-hrtime': 1.0.3 + '@types/semver': 7.5.8 + better-opn: 3.0.2 + chalk: 4.1.2 + cli-table3: 0.6.4 + compression: 1.7.4 + detect-port: 1.5.1 + express: 4.19.2 + fs-extra: 11.2.0 + globby: 11.1.0 + ip: 2.0.1 + lodash: 4.17.21 + open: 8.4.2 + pretty-hrtime: 1.0.3 + prompts: 2.4.2 + read-pkg-up: 7.0.1 + semver: 7.6.0 + telejson: 7.2.0 + tiny-invariant: 1.3.3 + ts-dedent: 2.2.0 + util: 0.12.5 + util-deprecate: 1.0.2 + watchpack: 2.4.1 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - encoding + - react + - react-dom + - supports-color + - utf-8-validate + dev: true + + /@storybook/core-webpack@8.0.9: + resolution: {integrity: sha512-lehuuAmHt/p5z8lZkMW16Y/+uDEh+Z/tExItVadtjEY8jXDe2Ilr1Cts2lvzVNuuESEKd5bqsGJ1L4t9Bf25pg==} + dependencies: + '@storybook/core-common': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/types': 8.0.9 + '@types/node': 18.19.31 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/csf-plugin@8.0.9: + resolution: {integrity: sha512-pXaNCNi++kxKsqSWwvx215fPx8cNqvepLVxQ7B69qXLHj80DHn0Q3DFBO3sLXNiQMJ2JK4OYcTxMfuOiyzszKw==} + dependencies: + '@storybook/csf-tools': 8.0.9 + unplugin: 1.10.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/csf-tools@8.0.9: + resolution: {integrity: sha512-PiNMhL97giLytTdQwuhsZ92buVk4gy9H/8DtrDhUc45/1OmF95gogm6T2Yap729SIFwgpOcuq/U3aVo6d6swVQ==} + dependencies: + '@babel/generator': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + '@storybook/csf': 0.1.5 + '@storybook/types': 8.0.9 + fs-extra: 11.2.0 + recast: 0.23.6 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/csf@0.0.1: + resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + dependencies: + lodash: 4.17.21 + dev: true + + /@storybook/csf@0.1.5: + resolution: {integrity: sha512-pW7Dtk/bE2JGrAe/KuBY4Io02NBe/2CLP2DkgVgWlSwvEVdm/rbQyiwy8RaL0lQlJCv9CsGBY+n9HQG8d4bZjQ==} + dependencies: + type-fest: 2.19.0 + dev: true + + /@storybook/docs-mdx@3.0.0: + resolution: {integrity: sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ==} + dev: true + + /@storybook/docs-tools@8.0.9: + resolution: {integrity: sha512-OzogAeOmeHea/MxSPKRBWtOQVNSpoq+OOpimO9YRA5h5GBRJ2TUOGT44Gny6QT4ll5AvQA8fIiq9KezKcLekAg==} + dependencies: + '@storybook/core-common': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@storybook/types': 8.0.9 + '@types/doctrine': 0.0.3 + assert: 2.1.0 + doctrine: 3.0.0 + lodash: 4.17.21 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/global@5.0.0: + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + dev: true + + /@storybook/icons@1.2.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + + /@storybook/instrumenter@8.0.9: + resolution: {integrity: sha512-Gw74dgpTU/2p7FG0s7DuVdqCbJ2MEcSuRJjDo7HcXRYcvWp7I6Ly+C0v7N5VaoS+kbBVerAhLKIHZgG/LZf1og==} + dependencies: + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 8.0.9 + '@vitest/utils': 1.5.2 + util: 0.12.5 + dev: true + + /@storybook/manager-api@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-99b3yKArDSvfabXL7QE3nA95e4DdW/5H/ZCcr6/E2qCQJayZ6G1v/WWamKXbiaTpkndulFmcb/+ZmnDXcweIIQ==} + dependencies: + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/global': 5.0.0 + '@storybook/icons': 1.2.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/router': 8.0.9 + '@storybook/theming': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + store2: 2.14.3 + telejson: 7.2.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - react + - react-dom + dev: true + + /@storybook/manager@8.0.9: + resolution: {integrity: sha512-+NnRo+5JQFGNqveKrLtC0b+Z08Tae4m44iq292bPeZMpr9OkFsIkU0PBPsHTHPkrqC/zZXRNsCsTEgvu3p2OIA==} + dev: true + + /@storybook/node-logger@8.0.9: + resolution: {integrity: sha512-5ajMdZFrYrjGLJOVDq7dlEQNFsgeLHymt4dCK9MulL/ciXykmXUZXE3Bye0wFy+I2qqDVvrvR8uzCvSFvm5MAQ==} + dev: true + + /@storybook/preset-create-react-app@8.0.9(react-refresh@0.14.1)(react-scripts@5.0.1)(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-7IjDztstczSFoLlzhWt6MAE2IKVA1B2CLiXRVlw1aK9+dv5n0ctZQzRCwwvTQXdlI3ABSqB7Gn6khKJOBYUhlg==} + peerDependencies: + react-scripts: '>=5.0.0' + dependencies: + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.1)(webpack@5.91.0) + '@storybook/types': 8.0.9 + '@types/semver': 7.5.8 + pnp-webpack-plugin: 1.7.0(typescript@5.4.5) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5) + semver: 7.6.0 + transitivePeerDependencies: + - '@types/webpack' + - react-refresh + - sockjs-client + - type-fest + - typescript + - webpack + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@storybook/preset-react-webpack@8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-kkJG03ZOJXM8fhYJuvAX9+3QVwoOMnz1tj75M/45c9i6XafPrBi2imGZWjXzuKXMxg/KO9fS/Y0JZmDh7vPM9g==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/core-webpack': 8.0.9 + '@storybook/docs-tools': 8.0.9 + '@storybook/node-logger': 8.0.9 + '@storybook/react': 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0) + '@types/node': 18.19.31 + '@types/semver': 7.5.8 + find-up: 5.0.0 + fs-extra: 11.2.0 + magic-string: 0.30.10 + react: 18.3.0 + react-docgen: 7.0.3 + react-dom: 18.3.0(react@18.3.0) + resolve: 1.22.8 + semver: 7.6.0 + tsconfig-paths: 4.2.0 + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.20.2) + transitivePeerDependencies: + - '@swc/core' + - encoding + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: true + + /@storybook/preview-api@8.0.9: + resolution: {integrity: sha512-zHfX34bkAMzzmE7vbDzaqFwSW6ExiBD0HiO1L/IsHF55f0f7xV7IH8uJyFRrDTvAoW3ReSxZDMvvPpeydFPKGA==} + dependencies: + '@storybook/channels': 8.0.9 + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/csf': 0.1.5 + '@storybook/global': 5.0.0 + '@storybook/types': 8.0.9 + '@types/qs': 6.9.15 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.12.1 + tiny-invariant: 1.3.3 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/preview@8.0.9: + resolution: {integrity: sha512-tFsR8xc8AYBZZrZw8enklFbSQt7ZAV+rv20BoxwDhd3q7fjXyK7O4moGPqUwBZ7rukTG13nPoISxr+VXAk/HYA==} + dev: true + + /@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} + peerDependencies: + typescript: '>= 4.x' + webpack: '>= 4' + dependencies: + debug: 4.3.4 + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.2.0 + micromatch: 4.0.5 + react-docgen-typescript: 2.2.2(typescript@5.4.5) + tslib: 2.6.2 + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.20.2) + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/react-dom-shim@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-8011KlRuG3obr5pZZ7bcEyYYNWF3tR596YadoMd267NPoHKvwAbKL1L/DNgb6kiYjZDUf9QfaKSCWW31k0kcRQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + + /@storybook/react-webpack5@8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-JJIEL7fXrSurzc/pUhvZMjwVZpKuWNwjq3N9jTjwy0GxN2lDEu6glHCyMglvij/GURWvm4eXsATHUfNf47B1AA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '>= 4.2.x' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/builder-webpack5': 8.0.9(esbuild@0.20.2)(typescript@5.4.5) + '@storybook/preset-react-webpack': 8.0.9(esbuild@0.20.2)(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@storybook/react': 8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5) + '@types/node': 18.19.31 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + typescript: 5.4.5 + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - encoding + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: true + + /@storybook/react@8.0.9(react-dom@18.3.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-NeQ6suZG3HKikwe3Tx9cAIaRx7uP8FKCmlVvIiBg4LTTI5orCt94PPakvuZukZcbkqvcCnEBkebAzwUpn8PiJw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '>= 4.2.x' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/client-logger': 8.0.9 + '@storybook/docs-tools': 8.0.9 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 8.0.9 + '@storybook/react-dom-shim': 8.0.9(react-dom@18.3.0)(react@18.3.0) + '@storybook/types': 8.0.9 + '@types/escodegen': 0.0.6 + '@types/estree': 0.0.51 + '@types/node': 18.19.31 + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + escodegen: 2.1.0 + html-tags: 3.3.1 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + react-element-to-jsx-string: 15.0.0(react-dom@18.3.0)(react@18.3.0) + semver: 7.6.0 + ts-dedent: 2.2.0 + type-fest: 2.19.0 + typescript: 5.4.5 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/router@8.0.9: + resolution: {integrity: sha512-aAOWxbM9J4mt+cp4o88T2PB29mgBBTOzU37/pUsTHYnKnR9XI4npXEXdN8Gv+ryqM0kj0AbBpz/llFlnR2MNNA==} + dependencies: + '@storybook/client-logger': 8.0.9 + memoizerific: 1.11.3 + qs: 6.12.1 + dev: true + + /@storybook/telemetry@8.0.9: + resolution: {integrity: sha512-AGGfcup06t+wxhBIkHd0iybieOh9PDVZQJ9oPct5JGB39+ni9wvs0WOD+MYlHbsjp8id7+aGkh6mYuYOvfck+Q==} + dependencies: + '@storybook/client-logger': 8.0.9 + '@storybook/core-common': 8.0.9 + '@storybook/csf-tools': 8.0.9 + chalk: 4.1.2 + detect-package-manager: 2.0.1 + fetch-retry: 5.0.6 + fs-extra: 11.2.0 + read-pkg-up: 7.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/test@8.0.9(@types/jest@29.5.12)(jest@27.5.1): + resolution: {integrity: sha512-bRd5tBJnPzR6UKbDXONWnFWtdkNOY99HMLDUWe5fTRo50GwkrpFBVqPflhdkruEeof0kAbBUbnoN2CIYgtnAFw==} + dependencies: + '@storybook/client-logger': 8.0.9 + '@storybook/core-events': 8.0.9 + '@storybook/instrumenter': 8.0.9 + '@storybook/preview-api': 8.0.9 + '@testing-library/dom': 9.3.4 + '@testing-library/jest-dom': 6.4.2(@types/jest@29.5.12)(jest@27.5.1) + '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) + '@vitest/expect': 1.3.1 + '@vitest/spy': 1.5.2 + util: 0.12.5 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest + dev: true + + /@storybook/theming@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-jgfDuYoiNMMirQiASN3Eg0hGDXsEtpdAcMxyShqYGwu9elxgD9yUnYC2nSckYsM74a3ZQ3JaViZ9ZFSe2FHmeQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.0) + '@storybook/client-logger': 8.0.9 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + + /@storybook/types@8.0.9: + resolution: {integrity: sha512-ew0EXzk9k4B557P1qIWYrnvUcgaE0WWA5qQS0AU8l+fRTp5nvl9O3SP/zNIB0SN1qDFO7dXr3idTNTyIikTcEQ==} + dependencies: + '@storybook/channels': 8.0.9 + '@types/express': 4.17.21 + file-system-cache: 2.3.0 + dev: true + + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.11 + dev: true + + /@svgr/babel-plugin-add-jsx-attribute@5.4.0: + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-svg-dynamic-title@5.4.0: + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-svg-em-dimensions@5.4.0: + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-transform-react-native-svg@5.4.0: + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-plugin-transform-svg-component@5.5.0: + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} + dev: true + + /@svgr/babel-preset@5.5.0: + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} + engines: {node: '>=10'} + dependencies: + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 + dev: true + + /@svgr/core@5.5.0: + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@svgr/hast-util-to-babel-ast@5.5.0: + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@svgr/plugin-jsx@5.5.0: + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.24.4 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@svgr/plugin-svgo@5.5.0: + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} + dependencies: + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + svgo: 1.3.2 + dev: true + + /@svgr/webpack@5.5.0: + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-react': 7.24.1(@babel/core@7.24.4) + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@tailwindcss/nesting@0.0.0-insiders.565cd3e(postcss@8.4.38): + resolution: {integrity: sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-nested: 5.0.6(postcss@8.4.38) + dev: true + + /@tanstack/query-core@5.32.0: + resolution: {integrity: sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw==} + + /@tanstack/react-query@5.32.0(react@18.3.0): + resolution: {integrity: sha512-+E3UudQtarnx9A6xhpgMZapyF+aJfNBGFMgI459FnduEZqT/9KhOWnMOneZahLRt52yzskSA0AuOyLkXHK0yBA==} + peerDependencies: + react: ^18.0.0 + dependencies: + '@tanstack/query-core': 5.32.0 + react: 18.3.0 + + /@tanstack/react-virtual@3.4.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-GZN4xn/Tg5w7gvYeVcMVCeL4pEyUhvg+Cp6KX2Z01C4FRNxIWMgIQ9ibgMarNQfo+gt0PVLcEER4A9sNv/jlow==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@tanstack/virtual-core': 3.4.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: false + + /@tanstack/virtual-core@3.4.0: + resolution: {integrity: sha512-75jXqXxqq5M5Veb9KP1STi8kA5u408uOOAefk2ftHDGCpUk3RP6zX++QqfbmHJTBiU72NQ+ghgCZVts/Wocz8Q==} + dev: false + + /@testing-library/dom@10.0.0: + resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} + engines: {node: '>=18'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.4 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + + /@testing-library/dom@8.20.1: + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.4 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + + /@testing-library/dom@9.3.4: + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.4 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + + /@testing-library/jest-dom@5.17.0: + resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} + dependencies: + '@adobe/css-tools': 4.3.3 + '@babel/runtime': 7.24.4 + '@types/testing-library__jest-dom': 5.14.9 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 + dev: true + + /@testing-library/jest-dom@6.4.2(@types/jest@29.5.12)(jest@27.5.1): + resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + peerDependencies: + '@jest/globals': '>= 28' + '@types/bun': latest + '@types/jest': '>= 28' + jest: '>= 28' + vitest: '>= 0.32' + peerDependenciesMeta: + '@jest/globals': + optional: true + '@types/bun': + optional: true + '@types/jest': + optional: true + jest: + optional: true + vitest: + optional: true + dependencies: + '@adobe/css-tools': 4.3.3 + '@babel/runtime': 7.24.4 + '@types/jest': 29.5.12 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + jest: 27.5.1 + lodash: 4.17.21 + redent: 3.0.0 + dev: true + + /@testing-library/react@13.4.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} + engines: {node: '>=12'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/runtime': 7.24.4 + '@testing-library/dom': 8.20.1 + '@types/react-dom': 18.3.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + + /@testing-library/user-event@13.5.0(@testing-library/dom@10.0.0): + resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@babel/runtime': 7.24.4 + '@testing-library/dom': 10.0.0 + dev: true + + /@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4): + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@testing-library/dom': 9.3.4 + dev: true + + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true + + /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5): + resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@babel/generator': 7.17.7 + '@babel/parser': 7.24.4 + '@babel/traverse': 7.23.2 + '@babel/types': 7.17.0 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.2.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@turbo/gen@1.13.3(@types/node@20.12.7)(typescript@5.4.5): + resolution: {integrity: sha512-l+EM1gGzckFMaaVQyj3BVRa0QJ+tpp8HfiHOhGpBWW3Vc0Hfj92AY87Di/7HGABa+HVY7ueatMi7DJG+zkJBYg==} + hasBin: true + dependencies: + '@turbo/workspaces': 1.13.3 + chalk: 2.4.2 + commander: 10.0.1 + fs-extra: 10.1.0 + inquirer: 8.2.6 + minimatch: 9.0.4 + node-plop: 0.26.3 + proxy-agent: 6.4.0 + ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + update-check: 1.5.4 + validate-npm-package-name: 5.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - supports-color + - typescript + dev: true + + /@turbo/workspaces@1.13.3: + resolution: {integrity: sha512-QYZ8g3IVQebqNM8IsBlWYOWmOKjBZY55e6lx4EDOLuch1iWmyk+U8CLAI9UomMrSaKTs1Sx+PDkt63EgakvhUw==} + hasBin: true + dependencies: + chalk: 2.4.2 + commander: 10.0.1 + execa: 5.1.1 + fast-glob: 3.3.2 + fs-extra: 10.1.0 + gradient-string: 2.0.2 + inquirer: 8.2.6 + js-yaml: 4.1.0 + ora: 4.1.1 + rimraf: 3.0.2 + semver: 7.6.0 + update-check: 1.5.4 + dev: true + + /@tweenjs/tween.js@23.1.2: + resolution: {integrity: sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==} + + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: true + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.5 + dev: true + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + dev: true + + /@types/babel__traverse@7.20.5: + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.12.7 + dev: true + + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + dependencies: + '@types/express-serve-static-core': 4.19.0 + '@types/node': 20.12.7 + dev: true + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/cross-spawn@6.0.6: + resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/detect-port@1.3.5: + resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} + dev: true + + /@types/doctrine@0.0.3: + resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} + dev: true + + /@types/doctrine@0.0.9: + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + dev: true + + /@types/ejs@3.1.5: + resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} + dev: true + + /@types/emscripten@1.39.10: + resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} + dev: true + + /@types/escodegen@0.0.6: + resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} + dev: true + + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.56.10 + '@types/estree': 1.0.5 + dev: true + + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true + + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/estree@0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} + dependencies: + '@types/node': 20.12.7 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: true + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.0 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.12.7 + dev: true + + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.2 + dev: true + + /@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: true + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: true + + /@types/http-proxy@1.17.14: + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/inquirer@6.5.0: + resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + dependencies: + '@types/through': 0.0.33 + rxjs: 6.6.7 + dev: true + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: true + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: true + + /@types/jest@29.5.12: + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + dev: true + + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + dev: true + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/node@18.19.31: + resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/pretty-hrtime@1.0.3: + resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} + dev: true + + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + /@types/q@1.5.8: + resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} + dev: true + + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + dev: true + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: true + + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + dependencies: + '@types/react': 18.3.0 + + /@types/react@18.3.0: + resolution: {integrity: sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==} + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + dev: true + + /@types/resolve@1.20.6: + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + dev: true + + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: true + + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.12.7 + dev: true + + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + dependencies: + '@types/express': 4.17.21 + dev: true + + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 20.12.7 + '@types/send': 0.17.4 + dev: true + + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true + + /@types/testing-library__jest-dom@5.14.9: + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + dependencies: + '@types/jest': 29.5.12 + dev: true + + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/tinycolor2@1.4.6: + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + dev: true + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: true + + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: true + + /@types/uuid@9.0.8: + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + dev: true + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 20.12.7 + dev: true + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@16.0.9: + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare-lite: 1.4.0 + semver: 7.6.0 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true + + /@typescript-eslint/scope-manager@7.2.0: + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + dev: true + + /@typescript-eslint/scope-manager@7.7.1: + resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@7.2.0: + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@7.7.1: + resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.0 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5): + resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + eslint: 8.57.0 + eslint-scope: 5.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.2.0: + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.7.1: + resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.7.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.24.4 + '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) + prettier: 3.2.5 + prettier-plugin-packagejson: 2.5.0(prettier@3.2.5) + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + + /@vitest/expect@1.3.1: + resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + dependencies: + '@vitest/spy': 1.3.1 + '@vitest/utils': 1.3.1 + chai: 4.4.1 + dev: true + + /@vitest/spy@1.3.1: + resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + dependencies: + tinyspy: 2.2.1 + dev: true + + /@vitest/spy@1.5.2: + resolution: {integrity: sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==} + dependencies: + tinyspy: 2.2.1 + dev: true + + /@vitest/utils@1.3.1: + resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@vitest/utils@1.5.2: + resolution: {integrity: sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + dev: true + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + dev: true + + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + dev: true + + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + dev: true + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.20.2): + resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} + engines: {node: '>=14.15.0'} + peerDependencies: + esbuild: '>=0.10.0' + dependencies: + esbuild: 0.20.2 + tslib: 2.6.2 + dev: true + + /@yarnpkg/fslib@2.10.3: + resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} + engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + dependencies: + '@yarnpkg/libzip': 2.3.0 + tslib: 1.14.1 + dev: true + + /@yarnpkg/libzip@2.3.0: + resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} + engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + dependencies: + '@types/emscripten': 1.39.10 + tslib: 1.14.1 + dev: true + + /@yr/monotone-cubic-spline@1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + + /abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + dev: true + + /abitype@1.0.0(typescript@5.4.5): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.4.5 + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: true + + /accessor-fn@1.5.0: + resolution: {integrity: sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==} + engines: {node: '>=12'} + + /acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: true + + /acorn-import-assertions@1.9.0(acorn@8.11.3): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn-jsx@5.3.2(acorn@7.4.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: true + + /adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.3.0 + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: true + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + dev: true + + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /apexcharts@3.49.0: + resolution: {integrity: sha512-2T9HnbQFLCuYRPndQLmh+bEQFoz0meUbvASaGgiSKDuYhWcLBodJtIpKql2aOtMx4B/sHrWW0dm90HsW4+h2PQ==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + + /app-root-dir@1.0.2: + resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: true + + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.0.7 + dev: true + + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: true + + /ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: true + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001612 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /babel-core@7.0.0-bridge.0(@babel/core@7.24.4): + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + dev: true + + /babel-jest@27.5.1(@babel/core@7.24.4): + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.24.4 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.24.4) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0): + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.24.4 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.24.0 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.5 + dev: true + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.24.4 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.24.4): + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.24.4 + dev: true + + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.4): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) + core-js-compat: 3.37.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.4): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + dev: true + + /babel-preset-jest@27.5.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + dev: true + + /babel-preset-react-app@10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.4) + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-react': 7.24.1(@babel/core@7.24.4) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/runtime': 7.24.4 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + dev: true + + /batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: true + + /better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + dependencies: + open: 8.4.2 + dev: true + + /bezier-js@6.1.4: + resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} + + /bfj@7.1.0: + resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} + engines: {node: '>= 8.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + dev: true + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} + dependencies: + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + dev: true + + /browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: true + + /browserify-zlib@0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + dependencies: + pako: 0.2.9 + dev: true + + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001612 + electron-to-chromium: 1.4.749 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + dependencies: + semver: 7.6.0 + dev: true + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: true + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001612 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + + /caniuse-lite@1.0.30001612: + resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==} + + /canvas-color-tracker@1.2.1: + resolution: {integrity: sha512-i5clg2pEdaWqHuEM/B74NZNLkHh5+OkXbA/T4iaBiaNDagkOCXkLNrhqUfdUugsRwuaNRU20e/OygzxWRor3yg==} + engines: {node: '>=12'} + dependencies: + tinycolor2: 1.6.0 + + /case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: true + + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /change-case@3.1.0: + resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + dependencies: + camel-case: 3.0.0 + constant-case: 2.0.0 + dot-case: 2.1.1 + header-case: 1.0.1 + is-lower-case: 1.1.3 + is-upper-case: 1.1.2 + lower-case: 1.1.4 + lower-case-first: 1.0.2 + no-case: 2.3.2 + param-case: 2.1.1 + pascal-case: 2.0.1 + path-case: 2.1.1 + sentence-case: 2.1.1 + snake-case: 2.1.0 + swap-case: 1.1.2 + title-case: 2.1.1 + upper-case: 1.1.3 + upper-case-first: 1.1.2 + dev: true + + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + + /char-regex@2.0.1: + resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} + engines: {node: '>=12.20'} + dev: true + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /chromatic@11.3.0: + resolution: {integrity: sha512-q1ZtJDJrjLGnz60ivpC16gmd7KFzcaA4eTb7gcytCqbaKqlHhCFr1xQmcUDsm14CK7JsqdkFU6S+JQdOd2ZNJg==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + dev: true + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + dependencies: + consola: 3.2.3 + dev: true + + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: true + + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false + + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true + + /cli-table3@0.6.4: + resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==} + engines: {node: 10.* || >= 12.*} + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + dev: true + + /cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + dependencies: + slice-ansi: 5.0.0 + string-width: 7.1.0 + dev: true + + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + dev: false + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /coa@2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.8 + chalk: 2.4.2 + q: 1.5.1 + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + /commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: true + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: true + + /constant-case@2.0.0: + resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + dependencies: + snake-case: 2.1.0 + upper-case: 1.1.3 + dev: true + + /constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: true + + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: true + + /core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} + dependencies: + browserslist: 4.23.0 + dev: true + + /core-js-pure@3.37.0: + resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==} + requiresBuild: true + dev: true + + /core-js@3.37.0: + resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==} + requiresBuild: true + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /css-blank-pseudo@3.0.3(postcss@8.4.38): + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /css-declaration-sorter@6.4.1(postcss@8.4.38): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.38 + dev: true + + /css-has-pseudo@3.0.4(postcss@8.4.38): + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /css-loader@6.11.0(webpack@5.91.0): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) + postcss-value-parser: 4.2.0 + semver: 7.6.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /css-minimizer-webpack-plugin@3.4.1(esbuild@0.20.2)(webpack@5.91.0): + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.15(postcss@8.4.38) + esbuild: 0.20.2 + jest-worker: 27.5.1 + postcss: 8.4.38 + schema-utils: 4.2.0 + serialize-javascript: 6.0.2 + source-map: 0.6.1 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /css-prefers-color-scheme@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + dev: true + + /css-select-base-adapter@0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: true + + /css-select@2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + + /css-tree@1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: true + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-what@3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: true + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: true + + /cssdb@7.11.2: + resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==} + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + /cssnano-preset-default@5.2.14(postcss@8.4.38): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.38) + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-calc: 8.2.4(postcss@8.4.38) + postcss-colormin: 5.3.1(postcss@8.4.38) + postcss-convert-values: 5.1.3(postcss@8.4.38) + postcss-discard-comments: 5.1.2(postcss@8.4.38) + postcss-discard-duplicates: 5.1.0(postcss@8.4.38) + postcss-discard-empty: 5.1.1(postcss@8.4.38) + postcss-discard-overridden: 5.1.0(postcss@8.4.38) + postcss-merge-longhand: 5.1.7(postcss@8.4.38) + postcss-merge-rules: 5.1.4(postcss@8.4.38) + postcss-minify-font-values: 5.1.0(postcss@8.4.38) + postcss-minify-gradients: 5.1.1(postcss@8.4.38) + postcss-minify-params: 5.1.4(postcss@8.4.38) + postcss-minify-selectors: 5.2.1(postcss@8.4.38) + postcss-normalize-charset: 5.1.0(postcss@8.4.38) + postcss-normalize-display-values: 5.1.0(postcss@8.4.38) + postcss-normalize-positions: 5.1.1(postcss@8.4.38) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.38) + postcss-normalize-string: 5.1.0(postcss@8.4.38) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.38) + postcss-normalize-unicode: 5.1.1(postcss@8.4.38) + postcss-normalize-url: 5.1.0(postcss@8.4.38) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.38) + postcss-ordered-values: 5.1.3(postcss@8.4.38) + postcss-reduce-initial: 5.1.2(postcss@8.4.38) + postcss-reduce-transforms: 5.1.0(postcss@8.4.38) + postcss-svgo: 5.1.0(postcss@8.4.38) + postcss-unique-selectors: 5.1.1(postcss@8.4.38) + dev: true + + /cssnano-utils@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /cssnano@5.1.15(postcss@8.4.38): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.38) + lilconfig: 2.1.0 + postcss: 8.4.38 + yaml: 1.10.2 + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + + /cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true + + /cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: true + + /cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + + /d3-binarytree@1.0.2: + resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + /d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + /d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + /d3-force-3d@3.0.5: + resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} + engines: {node: '>=12'} + dependencies: + d3-binarytree: 1.0.2 + d3-dispatch: 3.0.1 + d3-octree: 1.0.2 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + /d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + + /d3-octree@1.0.2: + resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} + + /d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + /d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + /d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + /d3-transition@3.0.1(d3-selection@3.0.0): + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + /d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + dev: true + + /data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true + + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: true + + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: true + + /del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + + /del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + dependencies: + globby: 11.1.0 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: true + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: true + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: true + + /detect-package-manager@2.0.1: + resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.2.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: true + + /detect-port@1.5.1: + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + hasBin: true + dependencies: + address: 1.2.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + /diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: true + + /dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dev: true + + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: true + + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: true + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + dependencies: + webidl-conversions: 5.0.0 + dev: true + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + + /dot-case@2.1.1: + resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + dependencies: + no-case: 2.3.2 + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: true + + /dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: true + + /dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: true + + /dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: true + + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.8 + stream-shift: 1.0.3 + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: true + + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + + /electron-to-chromium@1.4.749: + resolution: {integrity: sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q==} + dev: true + + /emittery@0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + dev: true + + /emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + dev: true + + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /endent@2.1.0: + resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} + dependencies: + dedent: 0.7.0 + fast-json-parse: 1.0.3 + objectorarray: 1.0.5 + dev: true + + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /envinfo@7.12.0: + resolution: {integrity: sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: true + + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.3 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + dev: true + + /es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild-plugin-alias@0.2.1: + resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} + dev: true + + /esbuild-register@3.5.0(esbuild@0.20.2): + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /eslint-config-next@14.2.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 14.2.1 + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-config-prettier@9.1.0(eslint@8.57.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.57.0 + dev: true + + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5): + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.24.4 + '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 8.57.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.1(eslint@8.57.0) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + + /eslint-config-turbo@1.13.3(eslint@8.57.0): + resolution: {integrity: sha512-if/QtwEiWZ5b7Bg8yZBPSvS0TeCG2Zvfa/+XBYANS7uSYucjmW+BBC8enJB0PqpB/YLGGOumeo3x7h1Nuba9iw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + eslint: 8.57.0 + eslint-plugin-turbo: 1.13.3(eslint@8.57.0) + dev: true + + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.16.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.16.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.57.0 + ignore: 5.3.1 + dev: true + + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0): + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + eslint: 8.57.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5): + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + jest: 27.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.24.4 + aria-query: 5.3.0 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + dev: true + + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + dependencies: + eslint: 8.57.0 + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + dev: true + + /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + '@types/eslint': 8.56.10 + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) + prettier: 3.2.5 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + dev: true + + /eslint-plugin-react-hooks@4.6.1(eslint@8.57.0): + resolution: {integrity: sha512-Ck77j8hF7l9N4S/rzSLOWEKpn994YH6iwUK8fr9mXIaQvGpQYmOnQLbiue1u5kI5T1y+gdgqosnEAO9NCz0DBg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.57.0 + dev: true + + /eslint-plugin-react@7.34.1(eslint@8.57.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + dev: true + + /eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} + engines: {node: '>= 18'} + peerDependencies: + eslint: '>=6' + dependencies: + '@storybook/csf': 0.0.1 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + requireindex: 1.2.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + dev: true + + /eslint-plugin-turbo@1.13.3(eslint@8.57.0): + resolution: {integrity: sha512-RjmlnqYsEqnJ+U3M3IS5jLJDjWv5NsvReCpsC61n5pJ4JMHTZ/lU0EIoL1ccuL1L5wP0APzdXdByBxERcPQ+Nw==} + peerDependencies: + eslint: '>6.6.0' + dependencies: + dotenv: 16.0.3 + eslint: 8.57.0 + dev: true + + /eslint-plugin-unicorn@48.0.1(eslint@8.57.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.57.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.0 + strip-indent: 3.0.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.91.0): + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.56.10 + eslint: 8.57.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.2.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: true + + /esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: true + + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + dev: true + + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + + /express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-parse@1.0.3: + resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + + /faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: true + + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + + /fetch-retry@5.0.6: + resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} + dev: true + + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /file-loader@6.2.0(webpack@5.91.0): + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + dependencies: + fs-extra: 11.1.1 + ramda: 0.29.0 + dev: true + + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + + /filesize@10.1.1: + resolution: {integrity: sha512-L0cdwZrKlwZQkMSFnCflJ6J2Y+5egO/p3vgRSDQGxQt++QbUZe5gMbRO6kg6gzwQDPvq2Fk9AmoxUNfZ5gdqaQ==} + engines: {node: '>= 10.4.0'} + dev: true + + /filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: true + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + + /flow-parser@0.235.1: + resolution: {integrity: sha512-s04193L4JE+ntEcQXbD6jxRRlyj9QXcgEl2W6xSjH4l9x4b0eHoCHfbYHjqf9LdZFUiM5LhgpiqsvLj/AyOyYQ==} + engines: {node: '>=0.4.0'} + dev: true + + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /force-graph@1.43.5: + resolution: {integrity: sha512-HveLELh9yhZXO/QOfaFS38vlwJZ/3sKu+jarfXzRmbmihSOH/BbRWnUvmg8wLFiYy6h4HlH4lkRfZRccHYmXgA==} + engines: {node: '>=12'} + dependencies: + '@tweenjs/tween.js': 23.1.2 + accessor-fn: 1.5.0 + bezier-js: 6.1.4 + canvas-color-tracker: 1.2.1 + d3-array: 3.2.4 + d3-drag: 3.0.0 + d3-force-3d: 3.0.5 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + index-array-by: 1.4.1 + kapsule: 1.14.5 + lodash-es: 4.17.21 + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.24.2 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + eslint: 8.57.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.6.0 + tapable: 1.1.3 + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + dependencies: + '@babel/code-frame': 7.24.2 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.0 + tapable: 2.2.1 + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: true + + /fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + dependencies: + loader-utils: 3.2.1 + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true + + /get-npm-tarball-url@2.1.0: + resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} + engines: {node: '>=12.17'} + dev: true + + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: true + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.4 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.8 + ohash: 1.1.3 + pathe: 1.1.2 + tar: 6.2.1 + dev: true + + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.0.4 + path-scurry: 1.10.2 + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /gradient-string@2.0.2: + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + tinygradient: 1.1.5 + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + dependencies: + browserify-zlib: 0.1.4 + is-deflate: 1.0.0 + is-gzip: 1.0.0 + peek-stream: 1.1.3 + pumpify: 1.5.1 + through2: 2.0.5 + dev: true + + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + + /handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: true + + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + dev: true + + /harmony-reflect@1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + dependencies: + '@types/hast': 3.0.4 + dev: true + + /hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + dependencies: + '@types/hast': 3.0.4 + dev: true + + /hast-util-to-string@3.0.0: + resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + dependencies: + '@types/hast': 3.0.4 + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /header-case@1.0.1: + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + + /hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + dev: true + + /html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: true + + /html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + dev: true + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.30.4 + dev: true + + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: true + + /html-webpack-plugin@5.6.0(webpack@5.91.0): + resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: true + + /http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: true + + /http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: true + + /http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: true + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /http-proxy-middleware@2.0.6(@types/express@4.17.21): + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.14 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: true + + /http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.6 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /husky@9.0.11: + resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + engines: {node: '>=18'} + hasBin: true + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + dev: true + + /icss-utils@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + dev: true + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: true + + /identity-obj-proxy@3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + dependencies: + harmony-reflect: 1.6.2 + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: true + + /import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /index-array-by@1.4.1: + resolution: {integrity: sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==} + engines: {node: '>=12'} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + dev: true + + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + dev: true + + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true + + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true + + /ip@2.0.1: + resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} + dev: true + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: true + + /ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + dev: true + + /is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + dependencies: + get-east-asian-width: 1.2.0 + dev: true + + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-lower-case@1.1.3: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + + /is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: true + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: true + + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-upper-case@1.1.2: + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + dependencies: + upper-case: 1.1.3 + dev: true + + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + dev: true + + /jerrypick@1.1.1: + resolution: {integrity: sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==} + engines: {node: '>=12'} + + /jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 + dev: true + + /jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.24.4 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1(@babel/core@7.24.4) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: true + + /jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.12.7 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.24.2 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-message-util@28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.24.2 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.24.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 + dev: true + + /jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-regex-util@28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.8 + resolve.exports: 1.1.1 + slash: 3.0.0 + dev: true + + /jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.11 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 20.12.7 + graceful-fs: 4.2.11 + dev: true + + /jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.20.5 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.11 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-util@28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + dev: true + + /jest-watch-typeahead@1.1.0(jest@27.5.1): + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.1.0 + dev: true + + /jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 + dev: true + + /jest-watcher@28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 + dev: true + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.12.7 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.12.7 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest-worker@28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': 20.12.7 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + import-local: 3.1.0 + jest-cli: 27.5.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true + + /jscodeshift@0.15.2(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + peerDependenciesMeta: + '@babel/preset-env': + optional: true + dependencies: + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-flow': 7.24.1(@babel/core@7.24.4) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/register': 7.23.7(@babel/core@7.24.4) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.4) + chalk: 4.1.2 + flow-parser: 0.235.1 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.23.6 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.11.3 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.9 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + dev: true + + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + dev: true + + /kapsule@1.14.5: + resolution: {integrity: sha512-H0iSpTynUzZw3tgraDmReprpFRmH5oP5GPmaNsurSwLx2H5iCpOMIkp5q+sfhB4Tz/UJd1E1IbEE9Z6ksnJ6RA==} + engines: {node: '>=12'} + dependencies: + lodash-es: 4.17.21 + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: true + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + dependencies: + picocolors: 1.0.0 + shell-quote: 1.8.1 + dev: true + + /lazy-universal-dotenv@4.0.0: + resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} + engines: {node: '>=14.0.0'} + dependencies: + app-root-dir: 1.0.2 + dotenv: 16.0.3 + dotenv-expand: 10.0.0 + dev: true + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /lint-staged@15.2.2: + resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} + engines: {node: '>=18.12.0'} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.1.0 + debug: 4.3.4 + execa: 8.0.1 + lilconfig: 3.0.0 + listr2: 8.0.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /listr2@8.0.1: + resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} + engines: {node: '>=18.0.0'} + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.3.1 + wrap-ansi: 9.0.0 + dev: true + + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true + + /loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: true + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + dependencies: + chalk: 2.4.2 + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} + dependencies: + ansi-escapes: 6.2.1 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lower-case-first@1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: true + + /lru-cache@10.2.1: + resolution: {integrity: sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==} + engines: {node: 14 || >=16.14} + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + + /lucide-react@0.364.0(react@18.3.0): + resolution: {integrity: sha512-eHfdbJExWtTaZ0tBMGtI7PA/MbqV5wt+o4/yitDce17tadH/75Gq3Tq8jSteb3LhLr0eay/j5YUuN4yXjnI3aw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.3.0 + dev: false + + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: true + + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.6.0 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + + /map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + dev: true + + /markdown-to-jsx@7.3.2(react@18.3.0): + resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} + engines: {node: '>= 10'} + peerDependencies: + react: '>= 0.14.0' + dependencies: + react: 18.3.0 + dev: true + + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + + /mdn-data@2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: true + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: true + + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.5 + dev: true + + /memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + dependencies: + map-or-similar: 1.5.0 + dev: true + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /mini-css-extract-plugin@2.9.0(webpack@5.91.0): + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.2.0 + tapable: 2.2.1 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + dev: true + + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: true + + /next@14.1.4(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.1.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001612 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + styled-jsx: 5.1.1(react@18.3.0) + optionalDependencies: + '@next/swc-darwin-arm64': 14.1.4 + '@next/swc-darwin-x64': 14.1.4 + '@next/swc-linux-arm64-gnu': 14.1.4 + '@next/swc-linux-arm64-musl': 14.1.4 + '@next/swc-linux-x64-gnu': 14.1.4 + '@next/swc-linux-x64-musl': 14.1.4 + '@next/swc-win32-arm64-msvc': 14.1.4 + '@next/swc-win32-ia32-msvc': 14.1.4 + '@next/swc-win32-x64-msvc': 14.1.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: true + + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true + + /node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: 3.1.2 + dev: true + + /node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + dev: true + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: true + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-plop@0.26.3: + resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} + engines: {node: '>=8.9.4'} + dependencies: + '@babel/runtime-corejs3': 7.24.4 + '@types/inquirer': 6.5.0 + change-case: 3.1.0 + del: 5.1.0 + globby: 10.0.2 + handlebars: 4.7.8 + inquirer: 7.3.3 + isbinaryfile: 4.0.10 + lodash.get: 4.4.2 + mkdirp: 0.5.6 + resolve: 1.22.8 + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: true + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} + dev: true + + /nypm@0.3.8: + resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + ufo: 1.5.3 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.7 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + gopd: 1.0.1 + safe-array-concat: 1.1.2 + dev: true + + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true + + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /objectorarray@1.0.5: + resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + dev: true + + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: true + + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + dev: true + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: true + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /ora@4.1.1: + resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} + engines: {node: '>=8'} + dependencies: + chalk: 3.0.0 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + log-symbols: 3.0.0 + mute-stream: 0.0.8 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: true + + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.4 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + dev: true + + /pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + dev: true + + /param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + dependencies: + no-case: 2.3.2 + dev: true + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.24.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: true + + /pascal-case@2.0.1: + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + dependencies: + camel-case: 3.0.0 + upper-case-first: 1.1.2 + dev: true + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: true + + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + + /path-case@2.1.1: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + dependencies: + no-case: 2.3.2 + dev: true + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.1 + minipass: 7.0.4 + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + dependencies: + buffer-from: 1.1.2 + duplexify: 3.7.1 + through2: 2.0.5 + dev: true + + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: true + + /picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + requiresBuild: true + dev: true + + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + /pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + dev: true + + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: true + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /pnp-webpack-plugin@1.7.0(typescript@5.4.5): + resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} + engines: {node: '>=6'} + dependencies: + ts-pnp: 1.2.0(typescript@5.4.5) + transitivePeerDependencies: + - typescript + dev: true + + /polished@4.3.1: + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} + dependencies: + '@babel/runtime': 7.24.4 + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.38): + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-browser-comments@4.0.0(browserslist@4.23.0)(postcss@8.4.38): + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' + dependencies: + browserslist: 4.23.0 + postcss: 8.4.38 + dev: true + + /postcss-calc@8.2.4(postcss@8.4.38): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-clamp@4.1.0(postcss@8.4.38): + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-functional-notation@4.2.4(postcss@8.4.38): + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-hex-alpha@8.0.4(postcss@8.4.38): + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-rebeccapurple@7.1.1(postcss@8.4.38): + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@5.3.1(postcss@8.4.38): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@5.1.3(postcss@8.4.38): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-media@8.0.2(postcss@8.4.38): + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-properties@12.1.11(postcss@8.4.38): + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-selectors@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-dir-pseudo-class@6.0.5(postcss@8.4.38): + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-discard-comments@5.1.2(postcss@8.4.38): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-duplicates@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-empty@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-overridden@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-double-position-gradients@3.1.2(postcss@8.4.38): + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-env-function@4.0.6(postcss@8.4.38): + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-flexbugs-fixes@5.0.2(postcss@8.4.38): + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-focus-visible@6.0.4(postcss@8.4.38): + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-focus-within@5.0.4(postcss@8.4.38): + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-font-variant@5.0.0(postcss@8.4.38): + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-gap-properties@3.0.5(postcss@8.4.38): + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-image-set-function@4.0.7(postcss@8.4.38): + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-import@15.1.0(postcss@8.4.38): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + /postcss-initial@4.0.1(postcss@8.4.38): + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-js@4.0.1(postcss@8.4.38): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.38 + + /postcss-lab-function@4.2.1(postcss@8.4.38): + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-load-config@3.1.4(postcss@8.4.38): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.38 + yaml: 1.10.2 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.1 + + /postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.91.0): + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.38 + semver: 7.6.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /postcss-logical@5.0.4(postcss@8.4.38): + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-media-minmax@5.0.0(postcss@8.4.38): + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-merge-longhand@5.1.7(postcss@8.4.38): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.38) + dev: true + + /postcss-merge-rules@5.1.4(postcss@8.4.38): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-minify-font-values@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@5.1.4(postcss@8.4.38): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@5.2.1(postcss@8.4.38): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.38): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + dev: true + + /postcss-modules@4.3.1(postcss@8.4.38): + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) + string-hash: 1.1.3 + dev: true + + /postcss-nested@5.0.6(postcss@8.4.38): + resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.38): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + + /postcss-nesting@10.2.0(postcss@8.4.38): + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-nesting@12.1.2(postcss@8.4.38): + resolution: {integrity: sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.16) + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-normalize-charset@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-normalize-display-values@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize@10.0.1(browserslist@4.23.0)(postcss@8.4.38): + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' + dependencies: + '@csstools/normalize.css': 12.1.1 + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-browser-comments: 4.0.0(browserslist@4.23.0)(postcss@8.4.38) + sanitize.css: 13.0.0 + dev: true + + /postcss-opacity-percentage@1.1.3(postcss@8.4.38): + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-ordered-values@5.1.3(postcss@8.4.38): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-overflow-shorthand@3.0.4(postcss@8.4.38): + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-page-break@3.0.4(postcss@8.4.38): + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-place@7.0.5(postcss@8.4.38): + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-preset-env@7.8.3(postcss@8.4.38): + resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.38) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.38) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.38) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.38) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.38) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.38) + '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.38) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.38) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.38) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.38) + '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.38) + '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.38) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.38) + autoprefixer: 10.4.19(postcss@8.4.38) + browserslist: 4.23.0 + css-blank-pseudo: 3.0.3(postcss@8.4.38) + css-has-pseudo: 3.0.4(postcss@8.4.38) + css-prefers-color-scheme: 6.0.3(postcss@8.4.38) + cssdb: 7.11.2 + postcss: 8.4.38 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.38) + postcss-clamp: 4.1.0(postcss@8.4.38) + postcss-color-functional-notation: 4.2.4(postcss@8.4.38) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.38) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.38) + postcss-custom-media: 8.0.2(postcss@8.4.38) + postcss-custom-properties: 12.1.11(postcss@8.4.38) + postcss-custom-selectors: 6.0.3(postcss@8.4.38) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.38) + postcss-double-position-gradients: 3.1.2(postcss@8.4.38) + postcss-env-function: 4.0.6(postcss@8.4.38) + postcss-focus-visible: 6.0.4(postcss@8.4.38) + postcss-focus-within: 5.0.4(postcss@8.4.38) + postcss-font-variant: 5.0.0(postcss@8.4.38) + postcss-gap-properties: 3.0.5(postcss@8.4.38) + postcss-image-set-function: 4.0.7(postcss@8.4.38) + postcss-initial: 4.0.1(postcss@8.4.38) + postcss-lab-function: 4.2.1(postcss@8.4.38) + postcss-logical: 5.0.4(postcss@8.4.38) + postcss-media-minmax: 5.0.0(postcss@8.4.38) + postcss-nesting: 10.2.0(postcss@8.4.38) + postcss-opacity-percentage: 1.1.3(postcss@8.4.38) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.38) + postcss-page-break: 3.0.4(postcss@8.4.38) + postcss-place: 7.0.5(postcss@8.4.38) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.38) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.38) + postcss-selector-not: 6.0.1(postcss@8.4.38) + postcss-value-parser: 4.2.0 + dev: true + + /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.38): + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-reduce-initial@5.1.2(postcss@8.4.38): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + caniuse-api: 3.0.0 + postcss: 8.4.38 + dev: true + + /postcss-reduce-transforms@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.38): + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-selector-not@6.0.1(postcss@8.4.38): + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-svgo@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + + /postcss-unique-selectors@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: true + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: false + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier-plugin-packagejson@2.5.0(prettier@3.2.5): + resolution: {integrity: sha512-6XkH3rpin5QEQodBSVNg+rBo4r91g/1mCaRwS1YGdQJZ6jwqrg2UchBsIG9tpS1yK1kNBvOt84OILsX8uHzBGg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + dependencies: + prettier: 3.2.5 + sort-package-json: 2.10.0 + synckit: 0.9.0 + dev: true + + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + dev: true + + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + + /pretty-format@28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.3.0 + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.0 + dev: true + + /pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + dev: true + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: true + + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + + /pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: true + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + dev: true + + /qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + dev: true + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: true + + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: true + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: true + + /react-apexcharts@1.4.1(apexcharts@3.49.0)(react@18.3.0): + resolution: {integrity: sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==} + peerDependencies: + apexcharts: ^3.41.0 + react: '>=0.13' + dependencies: + apexcharts: 3.49.0 + prop-types: 15.8.1 + react: 18.3.0 + + /react-app-polyfill@3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + dependencies: + core-js: 3.37.0 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.11 + whatwg-fetch: 3.6.20 + dev: true + + /react-colorful@5.6.1(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + + /react-confetti@6.1.0(react@18.3.0): + resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} + engines: {node: '>=10.18'} + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 + dependencies: + react: 18.3.0 + tween-functions: 1.2.0 + dev: true + + /react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/code-frame': 7.24.2 + address: 1.2.2 + browserslist: 4.23.0 + chalk: 4.1.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0) + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.21 + is-root: 2.1.0 + loader-utils: 3.2.1 + open: 8.4.2 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.8.1 + strip-ansi: 6.0.1 + text-table: 0.2.0 + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.20.2) + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + dev: true + + /react-docgen-typescript@2.2.2(typescript@5.4.5): + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + peerDependencies: + typescript: '>= 4.3.x' + dependencies: + typescript: 5.4.5 + dev: true + + /react-docgen@7.0.3: + resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/core': 7.24.4 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.5 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.8 + strip-indent: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /react-dom@18.3.0(react@18.3.0): + resolution: {integrity: sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==} + peerDependencies: + react: ^18.3.0 + dependencies: + loose-envify: 1.4.0 + react: 18.3.0 + scheduler: 0.23.1 + + /react-element-to-jsx-string@15.0.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} + peerDependencies: + react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + dependencies: + '@base2/pretty-print-object': 1.0.1 + is-plain-object: 5.0.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + react-is: 18.1.0 + dev: true + + /react-error-overlay@6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: true + + /react-force-graph-2d@1.25.4(react@18.3.0): + resolution: {integrity: sha512-Y1xwa79PHVZUedfa/TO+Cboq2hIc1flA1z4o1oraOu6qMS0r421vNpfjWhJPR6qJonNme3tzeVt5boEA7Ue8sg==} + engines: {node: '>=12'} + peerDependencies: + react: '*' + dependencies: + force-graph: 1.43.5 + prop-types: 15.8.1 + react: 18.3.0 + react-kapsule: 2.4.0(react@18.3.0) + + /react-icons@5.1.0(react@18.3.0): + resolution: {integrity: sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==} + peerDependencies: + react: '*' + dependencies: + react: 18.3.0 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + + /react-is@18.1.0: + resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} + dev: true + + /react-is@18.3.0: + resolution: {integrity: sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ==} + dev: true + + /react-kapsule@2.4.0(react@18.3.0): + resolution: {integrity: sha512-w4Yv9CgWdj8kWGQEPNWFGJJ08dYEZHZpiaFR/DgZjCMBNqv9wus2Gy1qvHVJmJbzvAZbq6jdvFC+NYzEqAlNhQ==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.13.1' + dependencies: + fromentries: 1.3.2 + jerrypick: 1.1.1 + react: 18.3.0 + + /react-refresh@0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: true + + /react-refresh@0.14.1: + resolution: {integrity: sha512-iZiRCtNGY3QYP3pYOSSBOvQmBpQTcJccr/VcK2blpJrpPTUDjeN51mxm5nsrkCzBwsbGUj+TN9q2oPz5E13FLg==} + engines: {node: '>=0.10.0'} + dev: true + + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(esbuild@0.20.2)(eslint@8.57.0)(react@18.3.0)(typescript@5.4.5): + resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} + engines: {node: '>=14.0.0'} + hasBin: true + peerDependencies: + eslint: '*' + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.24.4 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.2)(webpack@5.91.0) + '@svgr/webpack': 5.5.0 + babel-jest: 27.5.1(@babel/core@7.24.4) + babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0) + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.4) + babel-preset-react-app: 10.0.1 + bfj: 7.1.0 + browserslist: 4.23.0 + camelcase: 6.3.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + css-loader: 6.11.0(webpack@5.91.0) + css-minimizer-webpack-plugin: 3.4.1(esbuild@0.20.2)(webpack@5.91.0) + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + eslint: 8.57.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.5) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.91.0) + file-loader: 6.2.0(webpack@5.91.0) + fs-extra: 10.1.0 + html-webpack-plugin: 5.6.0(webpack@5.91.0) + identity-obj-proxy: 3.0.0 + jest: 27.5.1 + jest-resolve: 27.5.1 + jest-watch-typeahead: 1.1.0(jest@27.5.1) + mini-css-extract-plugin: 2.9.0(webpack@5.91.0) + postcss: 8.4.38 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.38) + postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.91.0) + postcss-normalize: 10.0.1(browserslist@4.23.0)(postcss@8.4.38) + postcss-preset-env: 7.8.3(postcss@8.4.38) + prompts: 2.4.2 + react: 18.3.0 + react-app-polyfill: 3.0.0 + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.4.5)(webpack@5.91.0) + react-refresh: 0.11.0 + resolve: 1.22.8 + resolve-url-loader: 4.0.0 + sass-loader: 12.6.0(webpack@5.91.0) + semver: 7.6.0 + source-map-loader: 3.0.2(webpack@5.91.0) + style-loader: 3.3.4(webpack@5.91.0) + tailwindcss: 3.4.3 + terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.20.2) + webpack-dev-server: 4.15.2(webpack@5.91.0) + webpack-manifest-plugin: 4.1.1(webpack@5.91.0) + workbox-webpack-plugin: 6.6.0(webpack@5.91.0) + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@types/babel__core' + - '@types/webpack' + - bufferutil + - canvas + - clean-css + - csso + - debug + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - fibers + - node-notifier + - node-sass + - rework + - rework-visit + - sass + - sass-embedded + - sockjs-client + - supports-color + - ts-node + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /react@18.3.0: + resolution: {integrity: sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /recast@0.23.6: + resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.6.2 + dev: true + + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: true + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.24.4 + dev: true + + /regex-parser@2.3.0: + resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + dev: true + + /registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + dependencies: + rc: 1.2.8 + dev: true + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /rehype-external-links@3.0.0: + resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.2.0 + hast-util-is-element: 3.0.0 + is-absolute-url: 4.0.1 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + dev: true + + /rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.0 + unist-util-visit: 5.0.0 + dev: true + + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true + + /renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + dev: true + + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve-url-loader@4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + dev: true + + /resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + dev: true + + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + dev: true + + /rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup-plugin-dts@6.1.0(rollup@4.16.4)(typescript@5.4.5): + resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 + dependencies: + magic-string: 0.30.10 + rollup: 4.16.4 + typescript: 5.4.5 + optionalDependencies: + '@babel/code-frame': 7.24.2 + dev: true + + /rollup-plugin-peer-deps-external@2.2.4(rollup@4.16.4): + resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} + peerDependencies: + rollup: '*' + dependencies: + rollup: 4.16.4 + dev: true + + /rollup-plugin-postcss@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.4.38) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.4.38 + postcss-load-config: 3.1.4(postcss@8.4.38) + postcss-modules: 4.3.1(postcss@8.4.38) + promise.series: 0.2.0 + resolve: 1.22.8 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + dev: true + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.24.2 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.30.4 + dev: true + + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /rollup@4.16.4: + resolution: {integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.16.4 + '@rollup/rollup-android-arm64': 4.16.4 + '@rollup/rollup-darwin-arm64': 4.16.4 + '@rollup/rollup-darwin-x64': 4.16.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.16.4 + '@rollup/rollup-linux-arm-musleabihf': 4.16.4 + '@rollup/rollup-linux-arm64-gnu': 4.16.4 + '@rollup/rollup-linux-arm64-musl': 4.16.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4 + '@rollup/rollup-linux-riscv64-gnu': 4.16.4 + '@rollup/rollup-linux-s390x-gnu': 4.16.4 + '@rollup/rollup-linux-x64-gnu': 4.16.4 + '@rollup/rollup-linux-x64-musl': 4.16.4 + '@rollup/rollup-win32-arm64-msvc': 4.16.4 + '@rollup/rollup-win32-ia32-msvc': 4.16.4 + '@rollup/rollup-win32-x64-msvc': 4.16.4 + fsevents: 2.3.3 + dev: true + + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + dev: true + + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /sanitize.css@13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + dev: true + + /sass-loader@12.6.0(webpack@5.91.0): + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + + /saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: true + + /scheduler@0.23.1: + resolution: {integrity: sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==} + dependencies: + loose-envify: 1.4.0 + + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + dev: true + + /select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: true + + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + dev: true + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /sentence-case@2.1.1: + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + dependencies: + no-case: 2.3.2 + upper-case-first: 1.1.2 + dev: true + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: true + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: true + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true + + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + dev: true + + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + + /smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + dev: true + + /snake-case@2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + dependencies: + no-case: 2.3.2 + dev: true + + /sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: true + + /socks-proxy-agent@8.0.3: + resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: true + + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-package-json@2.10.0: + resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} + hasBin: true + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + semver: 7.6.0 + sort-object-keys: 1.1.3 + dev: true + + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + /source-map-loader@3.0.2(webpack@5.91.0): + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.2.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.17 + dev: true + + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.17 + dev: true + + /spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + dev: true + + /spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: true + + /static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + dependencies: + escodegen: 1.14.3 + dev: true + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: true + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: true + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.7 + dev: true + + /store2@2.14.3: + resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} + dev: true + + /storybook@8.0.9(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-/Mvij0Br5bUwJpCvqAUZMEDIWmdRxEyllvVj8Ukw5lIWJePxfpSsz4px5jg9+R6B9tO8sQSqjg4HJvQ/pZk8Tg==} + hasBin: true + dependencies: + '@storybook/cli': 8.0.9(react-dom@18.3.0)(react@18.3.0) + transitivePeerDependencies: + - '@babel/preset-env' + - bufferutil + - encoding + - react + - react-dom + - supports-color + - utf-8-validate + dev: true + + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + dev: true + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + + /string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + dev: true + + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + + /string-length@5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + dependencies: + char-regex: 2.0.1 + strip-ansi: 7.1.0 + dev: true + + /string-natural-compare@3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + /string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + dev: true + + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: true + + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + dev: true + + /style-loader@3.3.4(webpack@5.91.0): + resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /styled-jsx@5.1.1(react@18.3.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.3.0 + dev: false + + /stylehacks@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: true + + /svg.draggable.js@2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + + /svg.easing.js@2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + + /svg.filter.js@2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + + /svg.js@2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + + /svg.pathmorphing.js@0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + + /svg.resize.js@1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + + /svg.select.js@2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + + /svg.select.js@3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + + /svgo@1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.2.0 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: true + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + + /swap-case@1.1.2: + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + dependencies: + lower-case: 1.1.4 + upper-case: 1.1.3 + dev: true + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + + /synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + dev: true + + /synckit@0.9.0: + resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + dev: true + + /tailwind-merge@2.3.0: + resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.4.3 + dev: false + + /tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.0.16 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + + /telejson@7.2.0: + resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + dependencies: + memoizerific: 1.11.3 + dev: true + + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: true + + /temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + dependencies: + rimraf: 2.6.3 + dev: true + + /tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + + /tempy@1.0.1: + resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} + engines: {node: '>=10'} + dependencies: + del: 6.1.1 + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + + /terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: true + + /terser-webpack-plugin@5.3.10(esbuild@0.20.2)(webpack@5.91.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.20.2 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.30.4 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /terser@5.30.4: + resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.11.3 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + + /throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + dev: true + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: true + + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + dev: true + + /tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + /tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + dependencies: + '@types/tinycolor2': 1.4.6 + tinycolor2: 1.6.0 + dev: true + + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + + /title-case@2.1.1: + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /tocbot@4.27.13: + resolution: {integrity: sha512-zS8GVVg14x/KBTxbvF6s3BNLltfMNZxTPaBpj+FjuwmnSv+ZK0trNN4uV5Ptw64NLFi2E30gt33+/a1Fkt3cWQ==} + dev: true + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: true + + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.1 + dev: true + + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.1 + dev: true + + /tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: true + + /ts-api-utils@1.3.0(typescript@5.4.5): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.4.5 + dev: true + + /ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.12.7 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-pnp@1.2.0(typescript@5.4.5): + resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} + engines: {node: '>=6'} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.4.5 + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tsutils@3.21.0(typescript@5.4.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.4.5 + dev: true + + /turbo-darwin-64@1.13.3: + resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-arm64@1.13.3: + resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-64@1.13.3: + resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm64@1.13.3: + resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-64@1.13.3: + resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-arm64@1.13.3: + resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo@1.13.3: + resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} + hasBin: true + optionalDependencies: + turbo-darwin-64: 1.13.3 + turbo-darwin-arm64: 1.13.3 + turbo-linux-64: 1.13.3 + turbo-linux-arm64: 1.13.3 + turbo-windows-64: 1.13.3 + turbo-windows-arm64: 1.13.3 + dev: true + + /tween-functions@1.2.0: + resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} + dev: true + + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: true + + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: true + + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.2 + dev: true + + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: true + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: true + + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: true + + /unplugin@1.10.1: + resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + engines: {node: '>=14.0.0'} + dependencies: + acorn: 8.11.3 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + dev: true + + /unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 + dev: true + + /update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + dev: true + + /upper-case-first@1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + dependencies: + upper-case: 1.1.3 + dev: true + + /upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + + /url@0.11.3: + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} + dependencies: + punycode: 1.4.1 + qs: 6.12.1 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util.promisify@1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.8 + dev: true + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true + + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: true + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: true + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 1.9.0 + source-map: 0.7.4 + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /validate-npm-package-name@5.0.0: + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + builtins: 5.1.0 + dev: true + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /viem@2.9.27(typescript@5.4.5): + resolution: {integrity: sha512-C+5tispAKzUywf+G5fxNVxThtKrNtvDRvvF34hC10LeSsrd5l4tlKpf0B4xYVcpL0YYZd+YEordLzlWToPjUnQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 1.0.0(typescript@5.4.5) + isows: 1.0.3(ws@8.13.0) + typescript: 5.4.5 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: true + + /w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: true + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: true + + /wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + + /webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: true + + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: true + + /webpack-dev-middleware@5.3.4(webpack@5.91.0): + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /webpack-dev-middleware@6.1.3(webpack@5.91.0): + resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.91.0(esbuild@0.20.2) + dev: true + + /webpack-dev-server@4.15.2(webpack@5.91.0): + resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.7 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.10 + ansi-html-community: 0.0.8 + bonjour-service: 1.2.1 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.19.2 + graceful-fs: 4.2.11 + html-entities: 2.5.2 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.6.1 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.2.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.91.0(esbuild@0.20.2) + webpack-dev-middleware: 5.3.4(webpack@5.91.0) + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: true + + /webpack-hot-middleware@2.26.1: + resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==} + dependencies: + ansi-html-community: 0.0.8 + html-entities: 2.5.2 + strip-ansi: 6.0.1 + dev: true + + /webpack-manifest-plugin@4.1.1(webpack@5.91.0): + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.91.0(esbuild@0.20.2) + webpack-sources: 2.3.1 + dev: true + + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + + /webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + dev: true + + /webpack@5.91.0(esbuild@0.20.2): + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.16.0 + es-module-lexer: 1.5.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: true + + /websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: true + + /whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: true + + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: true + + /whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: true + + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: true + + /workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.24.4 + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/runtime': 7.24.4 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.4)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + dev: true + + /workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + dev: true + + /workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + dependencies: + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: true + + /workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: true + + /workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} + dependencies: + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + dev: true + + /workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} + dependencies: + workbox-core: 6.6.0 + dev: true + + /workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + dev: true + + /workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} + dev: true + + /workbox-webpack-plugin@6.6.0(webpack@5.91.0): + resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.91.0(esbuild@0.20.2) + webpack-sources: 1.4.3 + workbox-build: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 6.6.0 + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + /wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + string-width: 7.1.0 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: true + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..091d6e4 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "examples/*" + - "packages/*" diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx new file mode 100644 index 0000000..41c8a15 --- /dev/null +++ b/src/components/Button/Button.tsx @@ -0,0 +1,47 @@ +import { cn } from "@/lib/utils" +import { type VariantProps, cva } from "class-variance-authority" +import React from "react" + +import "../../global.css" + +const button = cva( + "rounded-md border px-4 py-2 focus:outline-none focus:ring focus:ring-gray-300 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + primary: + "border-blue-500 bg-blue-500 text-white hover:bg-blue-700 dark:border-white dark:bg-white dark:text-blue-700 dark:hover:bg-blue-500 dark:hover:text-white", + secondary: "border-blue-500 text-blue-500 hover:bg-blue-500 hover:text-white", + }, + size: { + small: "text-sm", + medium: "text-base", + large: "text-lg", + }, + }, + defaultVariants: { + variant: "primary", + size: "medium", + }, + } +) + +export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & + VariantProps<typeof button> & { + variant?: "primary" | "secondary" + size?: "small" | "medium" | "large" + } + +type ButtonRef = React.ForwardedRef<HTMLButtonElement> + +const Button = React.forwardRef(({ children, className, variant, size, ...rest }: ButtonProps, ref: ButtonRef) => { + return ( + <button ref={ref} className={cn(button({ variant, size, className }))} {...rest}> + {children} + </button> + ) +}) + +Button.displayName = "Button" + +export default Button diff --git a/src/components/Button/__docs__/Button.mdx b/src/components/Button/__docs__/Button.mdx new file mode 100644 index 0000000..d204fc3 --- /dev/null +++ b/src/components/Button/__docs__/Button.mdx @@ -0,0 +1,37 @@ +import * as ButtonStory from "./Button.stories" +import { Canvas, Meta } from "@storybook/blocks" + +<Meta of={ButtonStory} title="Example/Button" /> + +# Button + +Button component with different props. + +#### Example + +<Canvas of={ButtonStory.Primary} /> + +## Usage + +```ts +import { Button } from "@storyprotocol/storykit"; + +const Example = () => { + return ( + <Button + size="small" + variant="primary" + onClick={()=> console.log("Clicked")} + >hello</Button> + ); +}; + +export default Example; +``` + +#### Arguments + +- **children** - The content of the button. It can be a string, a ReactNode, or an array of ReactNodes. +- **variant** - A string, 'primary' or 'secondary', that defines the color scheme of the button. +- **size** - A string with one of three possible values: "small," "medium," or "large." It defines the size or dimensions of the button. +- Other normal button props, such as `onClick`, `disabled`, etc. diff --git a/src/components/Button/__docs__/Button.stories.tsx b/src/components/Button/__docs__/Button.stories.tsx new file mode 100644 index 0000000..5661c8e --- /dev/null +++ b/src/components/Button/__docs__/Button.stories.tsx @@ -0,0 +1,35 @@ +import type { Meta, StoryObj } from "@storybook/react" + +import Button from "../Button" + +const meta = { + title: "Example/Button", + component: Button, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, +} satisfies Meta<typeof Button> + +export default meta +type Story = StoryObj<typeof meta> + +export const Primary: Story = { + args: { + children: "Button", + variant: "primary", + size: "medium", + disabled: false, + }, +} + +export const Secondary: Story = { + args: { + children: "Button", + variant: "secondary", + size: "medium", + disabled: false, + }, +} diff --git a/src/components/Button/__tests__/Button.test.tsx b/src/components/Button/__tests__/Button.test.tsx new file mode 100644 index 0000000..8f57dae --- /dev/null +++ b/src/components/Button/__tests__/Button.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import Button from "../Button" + +describe("Button", () => { + test("renders the Button component", () => { + render(<Button>hi</Button>) + }) +}) diff --git a/src/components/Button/index.ts b/src/components/Button/index.ts new file mode 100644 index 0000000..ae0694c --- /dev/null +++ b/src/components/Button/index.ts @@ -0,0 +1 @@ +export { default as Button } from "./Button" diff --git a/src/components/IPAGraph/IPAGraph.tsx b/src/components/IPAGraph/IPAGraph.tsx new file mode 100644 index 0000000..e1cd9d2 --- /dev/null +++ b/src/components/IPAGraph/IPAGraph.tsx @@ -0,0 +1,77 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { useMemo } from "react" +import ForceGraph2D from "react-force-graph-2d" + +import "../../global.css" +import { convertAssetToGraphFormat } from "../../lib/graph" +import { Asset } from "../../lib/types" +import { useIPAssetContext } from "../../providers" + +export type IPAGraphProps = { + width?: number + height?: number +} + +function IPAGraph({ width = 500, height = 500 }: IPAGraphProps) { + const { assetData } = useIPAssetContext() + const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const nodeCanvasObject = (node: any, ctx: any, globalScale: any) => { + const isParent = node.level < 0 + const isSelf = node.level === 0 + const isChild = node.level > 0 + + let label + + if (node.isRoot) { + if (isParent) { + label = `${node.name} (Root / Parent)` + } else { + label = `${node.name} (Root)` + } + } else if (isParent) { + label = `${node.name} (Parent)` + } else if (isChild) { + label = `${node.name} (Child)` + } else { + label = `${node.name}` + } + + const fontSize = 12 / globalScale + const circleRadius = isSelf ? 6 : 3 // Radius of the circle + + // Set the font for the text + ctx.font = `${fontSize}px Sans-Serif` + + // Draw the circle + ctx.beginPath() + ctx.arc(node.x, node.y, circleRadius, 0, 2 * Math.PI, false) + if (isSelf) { + ctx.fillStyle = "black" // Color of the circle + } else if (isParent) { + ctx.fillStyle = "grey" // Color of the circle + } else { + ctx.fillStyle = "lightgrey" // Color of the circle + } + + ctx.fill() + if (isSelf) { + ctx.strokeStyle = "lightblue" // Border color of the circle + ctx.stroke() + } + + // Draw the text next to the circle + ctx.fillText(label, node.x, node.y + 10) + } + + return ( + <div className="relative"> + <ForceGraph2D width={width} height={height} graphData={formattedGraphData} nodeCanvasObject={nodeCanvasObject} /> + </div> + ) +} + +IPAGraph.displayName = "IPAGraph" + +export default IPAGraph diff --git a/src/components/IPAGraph/__docs__/Example.tsx b/src/components/IPAGraph/__docs__/Example.tsx new file mode 100644 index 0000000..a1242c3 --- /dev/null +++ b/src/components/IPAGraph/__docs__/Example.tsx @@ -0,0 +1,26 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IPAssetProvider } from "../../../providers" +import IPAGraph from "../IPAGraph" + +const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + width = 400, + height = 300, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IPAssetProvider ipId={ipId}> + <IPAGraph width={width} height={height} /> + </IPAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/src/components/IPAGraph/__docs__/IPAGraph.mdx b/src/components/IPAGraph/__docs__/IPAGraph.mdx new file mode 100644 index 0000000..166f3ff --- /dev/null +++ b/src/components/IPAGraph/__docs__/IPAGraph.mdx @@ -0,0 +1,37 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IPAGraphStory from "./IPAGraph.stories" + +<Meta of={IPAGraphStory} title="Components/IPAGraph" /> + +# IPA Graph + +Show Asset derivatives graph + +#### Example + +<Canvas of={IPAGraphStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPAGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IPAGraph /> + </IPAssetProvider> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **width**: _number_ - The width of the canvas +- **height**: _number_ - The height of the canvas diff --git a/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx b/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx new file mode 100644 index 0000000..86255ff --- /dev/null +++ b/src/components/IPAGraph/__docs__/IPAGraph.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Components/IPAGraph", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/src/components/IPAGraph/index.ts b/src/components/IPAGraph/index.ts new file mode 100644 index 0000000..64d2b1c --- /dev/null +++ b/src/components/IPAGraph/index.ts @@ -0,0 +1 @@ +export { default as IPAGraph } from "./IPAGraph" diff --git a/src/components/IPAPolicies/IPAPolicies.tsx b/src/components/IPAPolicies/IPAPolicies.tsx new file mode 100644 index 0000000..a2347ca --- /dev/null +++ b/src/components/IPAPolicies/IPAPolicies.tsx @@ -0,0 +1,153 @@ +import { POLICY_TYPE } from "@/lib/types" +import { cn, getPolicyTypeByPILData } from "@/lib/utils" +import { useIPAssetContext } from "@/providers" +import { cva } from "class-variance-authority" +import { CircleCheck, CircleMinus } from "lucide-react" +import { useState } from "react" +import { FaCaretDown, FaCaretUp } from "react-icons/fa6" + +import "../../global.css" + +const CANS = { + REMIX: "Remix this work", + INCLUDE: "Include this work in their own work(s)", + CREDIT: "Credit you appropriately", + DISTRIBUTE: "Distribute their remix anywhere", + PURCHASE_RIGHTS: "Purchase the right to use your creation (for a price you set) and register it into Story Protocol", + CREATOR_CREDIT: "Credit you as the creator", + PUBLISH: "Display / publish the work in any medium", +} + +const ShowCans = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANS.PURCHASE_RIGHTS, CANS.CREATOR_CREDIT, CANS.PUBLISH] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANS.REMIX, CANS.INCLUDE, CANS.CREDIT, CANS.DISTRIBUTE] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANS.REMIX, CANS.INCLUDE, CANS.DISTRIBUTE, CANS.PUBLISH] + break + default: + return [] + break + } +} + +const CANNOTS = { + RESELL: "Resell your original work", + COMMERCIALIZE: "Commercialize the remix", + CLAIM_AS_ORIGINAL: "Claim credit for the remix (as original work)", + CLAIM: "Claim your work as their own", + REMIX: "Create remixes of the commercial use.", +} + +const ShowCannots = ({ type }: { type: string }) => { + switch (type) { + case POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.COMMERCIAL_USE: + return [CANNOTS.CLAIM, CANNOTS.REMIX, CANNOTS.RESELL] + break + case POLICY_TYPE.COMMERCIAL_REMIX: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL] + break + case POLICY_TYPE.OPEN_DOMAIN: + return [CANNOTS.RESELL, CANNOTS.COMMERCIALIZE, CANNOTS.CLAIM_AS_ORIGINAL, CANNOTS.CLAIM] + break + default: + return [CANNOTS.RESELL, CANNOTS.CLAIM, CANNOTS.REMIX] + break + } +} + +const policiesStyles = cva("flex flex-col w-full min-w-48", { + variants: { + size: { + small: "text-sm", + medium: "text-base", + large: "text-lg", + }, + }, +}) + +const listStyles = cva("flex flex-col", { + variants: { + size: { + small: "", + medium: "gap-1", + large: "gap-2", + }, + }, +}) + +export type IPAPoliciesProps = { + size?: "small" | "medium" | "large" +} + +function IPAPolicies({ size = "medium" }: IPAPoliciesProps) { + const { policyData } = useIPAssetContext() + const [expanded, setExpanded] = useState<number | null>(0) + + const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 + + return policyData?.length ? ( + <div className={policiesStyles({ size })}> + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {(policyData as unknown as any[])?.map((policy, index) => ( + <div key={policy.id} className="flex flex-col w-full"> + <div + className="flex w-full items-center justify-between cursor-pointer" + onClick={() => setExpanded(expanded === index ? null : index)} + > + {getPolicyTypeByPILData(policy.licenseTerms)} + {expanded === index ? <FaCaretUp width={12} /> : <FaCaretDown width={12} />} + </div> + + <div + className={cn( + "flex w-full items-center justify-between overflow-hidden", + expanded === index ? "h-auto" : "h-0" + )} + > + <div className="flex flex-col pt-2 gap-2"> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).length ? ( + <> + <div className="font-bold">Others Can</div> + <div className={listStyles({ size })}> + {ShowCans({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="flex w-full items-center gap-2"> + <CircleCheck width={iconWidth} className="text-green-500" /> + <span>{can}</span> + </div> + ))} + </div> + </> + ) : null} + <div className="font-bold">Others Cannot</div> + <div className={listStyles({ size })}> + {ShowCannots({ type: getPolicyTypeByPILData(policy.licenseTerms) }).map((can, index) => ( + <div key={index} className="flex w-full items-center gap-2"> + <CircleMinus width={iconWidth} className="text-red-500" /> + <span>{can}</span> + </div> + ))} + </div> + </div> + </div> + + {index < policyData.length - 1 && <div className="border-b border-gray-200 w-full my-2" />} + </div> + ))} + </div> + ) : ( + <div className="flex h-60 flex-col items-center justify-center text-slate-400">No Policy</div> + ) +} + +export default IPAPolicies diff --git a/src/components/IPAPolicies/__docs__/Example.tsx b/src/components/IPAPolicies/__docs__/Example.tsx new file mode 100644 index 0000000..fd9cfb5 --- /dev/null +++ b/src/components/IPAPolicies/__docs__/Example.tsx @@ -0,0 +1,27 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IPAssetProvider } from "../../../providers" +import IPAPolicies from "../IPAPolicies" + +type Size = "small" | "medium" | "large" + +const Example: FC<{ ipId: Address; size: Size }> = ({ + ipId = PREVIEW_IP_ASSETS[0] as `0x${string}`, + size = "medium", +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full w-full items-center justify-center"> + <IPAssetProvider ipId={ipId}> + <IPAPolicies size={size} /> + </IPAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/src/components/IPAPolicies/__docs__/IPAPolicies.mdx b/src/components/IPAPolicies/__docs__/IPAPolicies.mdx new file mode 100644 index 0000000..4b6db76 --- /dev/null +++ b/src/components/IPAPolicies/__docs__/IPAPolicies.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IPAPoliciesStory from "./IPAPolicies.stories" + +<Meta of={IPAPoliciesStory} title="Components/IPAPolicies" /> + +# IPA Policy List + +Show Asset derivatives graph + +#### Example + +<Canvas of={IPAPoliciesStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPAPolicies } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IPAPolicies /> + </IPAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx b/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx new file mode 100644 index 0000000..a538f05 --- /dev/null +++ b/src/components/IPAPolicies/__docs__/IPAPolicies.stories.tsx @@ -0,0 +1,40 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Components/IPAPolicies", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + size: "medium", + }, +} diff --git a/src/components/IPAPolicies/index.tsx b/src/components/IPAPolicies/index.tsx new file mode 100644 index 0000000..c4bb6eb --- /dev/null +++ b/src/components/IPAPolicies/index.tsx @@ -0,0 +1 @@ +export { default as IPAPolicies } from "./IPAPolicies" diff --git a/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx b/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx new file mode 100644 index 0000000..84e646a --- /dev/null +++ b/src/components/IPARoyaltyChart/IPARoyaltyChart.tsx @@ -0,0 +1,92 @@ +import { shortenAddress } from "@/lib/utils" +import { useIPAssetContext } from "@/providers" +import Chart from "react-apexcharts" +import { Address } from "viem" + +import "../../global.css" + +function IPARoyaltyChart() { + // const Chart = dynamic(() => import("react-apexcharts"), { ssr: false }) + + const { royaltyData } = useIPAssetContext() + + if (royaltyData?.targetAncestors) { + const chart = { + options: { + chart: { + width: 300, + type: "pie" as `pie`, + }, + dataLabels: { + style: { + fontSize: "20px", + // fontFamily: "Inter, ui-sans-serif", + fontWeight: "400", + colors: ["#fff", "#fff", "#1f2937"], + }, + dropShadow: { + enabled: false, + }, + formatter: (value: number) => `${value.toFixed(1)} %`, + }, + // labels: ["Direct", "Organic search"], + plotOptions: { + pie: { + dataLabels: { + offset: -20, + }, + }, + }, + colors: ["#5f6060", "#494848"], + tooltip: { + enabled: true, + y: { + title: { + formatter: (value: Address) => shortenAddress(value), + }, + }, + }, + legend: { + show: false, + }, + labels: royaltyData?.targetAncestors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 300, + }, + legend: { + position: "bottom", + }, + }, + }, + ], + }, + series: royaltyData?.targetRoyaltyAmount.map(Number), + } + + return ( + <div className="flex flex-col items-center justify-between"> + <div className="min-h-[230px]"> + <Chart options={chart.options} series={chart.series} type="pie" height={250} width="300" /> + </div> + <div className="w-full min-w-[300px] px-2"> + <dl className="divide-y divide-gray-100 overflow-x-hidden text-sm leading-6"> + {royaltyData?.targetAncestors.map((target, i) => ( + <div key={target} className="flex justify-between gap-x-4 py-1"> + <dt className="text-xs capitalize text-gray-500">{shortenAddress(target)}</dt> + <dd className="truncate text-gray-700">{royaltyData.targetRoyaltyAmount[i]}</dd> + </div> + ))} + </dl> + </div> + </div> + ) + } + + return <div className="flex h-60 flex-col items-center justify-center text-slate-400">No Royalty Data</div> +} + +export default IPARoyaltyChart diff --git a/src/components/IPARoyaltyChart/__docs__/Example.tsx b/src/components/IPARoyaltyChart/__docs__/Example.tsx new file mode 100644 index 0000000..1528c00 --- /dev/null +++ b/src/components/IPARoyaltyChart/__docs__/Example.tsx @@ -0,0 +1,22 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IPAssetProvider } from "../../../providers" +import IPARoyaltyChart from "../IPARoyaltyChart" + +const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div className="flex h-full items-center justify-center"> + <IPAssetProvider ipId={ipId}> + <IPARoyaltyChart /> + </IPAssetProvider> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx b/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx new file mode 100644 index 0000000..90771c2 --- /dev/null +++ b/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.mdx @@ -0,0 +1,32 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IPARoyaltyChartStory from "./IPARoyaltyChart.stories" + +<Meta of={IPARoyaltyChartStory} title="Components/IPARoyaltyChart" /> + +# IPA Royalty Chart + +Show Asset derivatives graph + +#### Example + +<Canvas of={IPARoyaltyChartStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IPAssetProvider } from "@storyprotocol/storykit" +import { IPARoyaltyChart } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IPARoyaltyChart /> + </IPAssetProvider> + ); +}; + +export default ExamplePage; +``` diff --git a/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx b/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx new file mode 100644 index 0000000..0e0d7e6 --- /dev/null +++ b/src/components/IPARoyaltyChart/__docs__/IPARoyaltyChart.stories.tsx @@ -0,0 +1,38 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Components/IPARoyaltyChart", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: {}, + args: {}, + // tags: ["isHidden"], +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[1] as `0x${string}`, + }, +} diff --git a/src/components/IPARoyaltyChart/index.tsx b/src/components/IPARoyaltyChart/index.tsx new file mode 100644 index 0000000..da02f2b --- /dev/null +++ b/src/components/IPARoyaltyChart/index.tsx @@ -0,0 +1 @@ +export { default as IPARoyaltyChart } from "./IPARoyaltyChart" diff --git a/src/components/IPAssetWidget/IPAssetWidget.tsx b/src/components/IPAssetWidget/IPAssetWidget.tsx new file mode 100644 index 0000000..3ff3c8b --- /dev/null +++ b/src/components/IPAssetWidget/IPAssetWidget.tsx @@ -0,0 +1,405 @@ +import { Menu, Transition } from "@headlessui/react" +import React, { Fragment, useState } from "react" +import { FaWandMagicSparkles } from "react-icons/fa6" +import { IoIosShareAlt } from "react-icons/io" +import { SiOpensea } from "react-icons/si" +import { TbLicense } from "react-icons/tb" +import { Address } from "viem" + +import "../../global.css" +import { cn, shortenAddress } from "../../lib/utils" +import { IPAssetProvider, useIPAssetContext } from "../../providers" +import { IPAGraph } from "../IPAGraph" +import { IPAPolicies } from "../IPAPolicies" +import { IPARoyaltyChart } from "../IPARoyaltyChart" + +export type IPAssetWidgetProps = { + ipId: Address + isBottomNav?: boolean +} + +export const IPA_CARD_TABS = [ + { id: "overview", label: "Overview" }, + { id: "licensing", label: "Licensing" }, + { id: "derivatives", label: "IP Graph" }, + { id: "royalty", label: "Royalty" }, +] + +const IPAssetWidget = ({ ipId, isBottomNav, ...rest }: IPAssetWidgetProps) => { + return <IPAssetCardWrapper ipId={ipId} isBottomNav={isBottomNav} {...rest} /> +} + +function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBottomNav?: boolean }) { + const [activeTab, setActiveTab] = useState(IPA_CARD_TABS[0].id) + + const _Tabs = () => ( + <div className={cn("w-full px-2", isBottomNav ? "pb-2" : "pt-2")}> + <Tabs ipId={ipId} activeTab={activeTab} setActiveTab={setActiveTab} /> + </div> + ) + + const _Card = () => ( + <div className="flex size-full flex-auto flex-col p-2"> + <IPAssetCard isBottomNav={isBottomNav} activeTab={activeTab} /> + </div> + ) + + return ( + <IPAssetProvider ipId={ipId} key={ipId}> + <div className="flex min-h-[410px] w-[390px] flex-col items-start justify-between gap-0 rounded-xl border-2 bg-white shadow-lg"> + {isBottomNav ? <_Card /> : <_Tabs />} + {isBottomNav ? <_Tabs /> : <_Card />} + </div> + </IPAssetProvider> + ) +} + +function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; isBottomNav?: boolean }) { + return ( + <div className={cn("flex gap-2", isBottomNav ? "flex-col" : "flex-col-reverse justify-between h-full flex-auto")}> + <IPAssetHeader /> + {children} + </div> + ) +} + +function IPAssetDropdownMenu() { + const { assetData } = useIPAssetContext() + return ( + <Menu as="div" className="relative inline-block text-left"> + <div> + <Menu.Button className="inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white p-2 text-sm font-semibold text-gray-900 hover:bg-gray-100 hover:shadow-sm"> + <svg + className="size-4 flex-none text-gray-600" + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + > + <circle cx="12" cy="12" r="1" /> + <circle cx="12" cy="5" r="1" /> + <circle cx="12" cy="19" r="1" /> + </svg> + </Menu.Button> + </div> + + <Transition + as={Fragment} + enter="transition ease-out duration-100" + enterFrom="transform opacity-0 scale-95" + enterTo="transform opacity-100 scale-100" + leave="transition ease-in duration-75" + leaveFrom="transform opacity-100 scale-100" + leaveTo="transform opacity-0 scale-95" + > + <Menu.Items className="absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none"> + {assetData?.rootIpIds?.[0]?.id && ( + <div className="px-4 py-2"> + <p className="text-xs text-slate-400">Root IP</p> + <div className="flex items-center"> + <img + className="relative z-10 mr-3 inline-block size-5 rounded-full ring-2 ring-white " + src={`https://cdn.stamp.fyi/avatar/eth:${assetData?.rootIpIds?.[0]?.id}?s=300`} + alt={assetData?.rootIpIds?.[0]?.id as Address} + ></img> + <p className="truncate text-sm text-gray-900"> + {shortenAddress(assetData?.rootIpIds?.[0]?.id as Address)} + </p> + </div> + </div> + )} + {assetData?.parentIpIds && assetData?.parentIpIds?.length > 0 && ( + <div className="px-4 py-2"> + <p className="text-xs text-slate-400">Parent IPs</p> + <div className="flex items-center"> + <div className="mr-3 -space-x-3"> + {assetData?.parentIpIds + ?.slice(0, 5) + .map((asset, index) => ( + <img + key={index} + className={cn( + "relative inline-block h-5 w-5 rounded-full ring-2 ring-white", + `z-${((assetData?.parentIpIds?.length as number) - index) * 10}` + )} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className=" truncate text-sm text-gray-900"> + {assetData?.parentIpIds?.length === 1 + ? shortenAddress(assetData?.parentIpIds?.[0]?.id as Address) + : `${assetData?.parentIpIds?.length} total `} + </p> + </div> + </div> + )} + {assetData?.childIpIds && assetData?.childIpIds?.length > 0 && ( + <div className="px-4 py-2"> + <p className="text-xs text-slate-400">Child IPs</p> + <div className="flex items-center"> + <div className="mr-3 -space-x-3"> + {assetData?.childIpIds + ?.slice(0, 5) + .map((asset, index) => ( + <img + key={index} + className={cn( + "relative inline-block h-5 w-5 rounded-full ring-2 ring-white", + `z-${((assetData?.childIpIds?.length as number) - index) * 5}` + )} + src={`https://cdn.stamp.fyi/avatar/eth:${asset.id}?s=300`} + alt={asset.id} + /> + ))} + </div> + <p className=" truncate text-sm text-gray-900"> + {assetData?.childIpIds?.length === 1 + ? shortenAddress(assetData?.childIpIds?.[0]?.id as Address) + : `${assetData?.childIpIds?.length} total `} + </p> + </div> + </div> + )} + <div className="py-1"> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <FaWandMagicSparkles + className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" + aria-hidden="true" + /> + Remix + </a> + )} + </Menu.Item> + + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <SiOpensea className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + View on Opensea + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <TbLicense className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + Buy License + </a> + )} + </Menu.Item> + <Menu.Item> + {({ active }) => ( + <a + href="#" + className={cn( + active ? "bg-gray-100 text-gray-900" : "text-gray-700", + "group flex items-center px-4 py-2 text-sm" + )} + > + <IoIosShareAlt className="mr-3 size-5 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> + Share + </a> + )} + </Menu.Item> + </div> + </Menu.Items> + </Transition> + </Menu> + ) +} + +function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { + const { nftData, assetData } = useIPAssetContext() + return ( + <div className="flex w-full flex-row justify-between"> + <div className="flex w-full flex-row justify-start gap-2"> + <div className={cn("", hideImage ? "hidden" : "")}> + <img src={nftData?.image_url} className="size-10 rounded-md object-cover" /> + </div> + <div> + <div> + <h1 className="font-semibold">{assetData?.nftMetadata.name || nftData?.name || "Untitled"}</h1> + <h2 className="text-xs"> + Owned by{" "} + <span className="text-slate-400">{shortenAddress(nftData?.owners[0].owner_address as string)}</span> + </h2> + </div> + </div> + </div> + <IPAssetDropdownMenu /> + </div> + ) +} + +function Tabs({ + ipId, + activeTab, + setActiveTab, +}: { + ipId: Address + activeTab: string + setActiveTab: (tab: string) => void +}) { + return ( + <div className="flex space-x-1" id={ipId}> + <div className="flex w-full justify-between"> + {IPA_CARD_TABS.map((tab) => ( + <button + key={`${ipId}-${tab.id}`} + onClick={() => setActiveTab(tab.id)} + className={`${ + activeTab === tab.id ? "" : "hover:text-black/60" + } relative rounded-full px-2.5 py-1.5 text-sm font-medium text-black outline-gray-400 transition focus-visible:outline-2`} + style={{ + WebkitTapHighlightColor: "transparent", + }} + > + {activeTab === tab.id && ( + <span className="absolute inset-0 z-10 bg-white mix-blend-difference rounded-full" /> + )} + {tab.label} + </button> + ))} + </div> + <button> + <svg width="36" height="36" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> + <g clipPath="url(#clip0_235_3)"> + <mask + id="mask0_235_3" + style={{ maskType: "luminance" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="512" + height="512" + > + <path d="M512 0H0V512H512V0Z" fill="white" /> + </mask> + <g mask="url(#mask0_235_3)"> + <path + d="M379 310.002C379 378.237 324.186 419 256.553 419C188.919 419 141.841 378.68 133 327.282H195.329C202.181 346.778 224.504 360.956 256.553 360.956C292.137 360.956 317.776 343.012 317.776 311.11C317.776 279.208 292.801 262.814 256.332 262.814V307.787C187.593 307.787 134.989 268.796 134.989 203.663C134.989 138.53 185.604 94 256.774 94C324.186 94 370.601 134.099 375.243 183.502H315.124C310.261 165.779 290.59 152.265 258.1 152.265C218.536 152.265 196.655 170.653 196.655 201.89C196.655 233.127 221.852 248.192 256.332 248.192V201.004C331.038 201.004 379 245.755 379 310.002Z" + fill="black" + /> + </g> + </g> + <defs> + <clipPath id="clip0_235_3"> + <rect width="512" height="512" fill="white" /> + </clipPath> + </defs> + </svg> + </button> + </div> + ) +} + +function IPAssetCard({ isBottomNav, activeTab }: { isBottomNav?: boolean; activeTab: string }) { + switch (activeTab) { + case "overview": + return <IPAssetOverview isBottomNav={isBottomNav} /> + case "licensing": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <div className="p-2"> + <IPAPolicies size="small" /> + </div> + </IPAssetLayout> + ) + case "derivatives": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IPAGraph width={370} height={250} /> + </IPAssetLayout> + ) + case "royalty": + return ( + <IPAssetLayout isBottomNav={isBottomNav}> + <IPARoyaltyChart /> + </IPAssetLayout> + ) + default: + return <IPAssetOverview /> + } +} + +function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { + const { nftData, isAssetDataLoading, isNftDataLoading } = useIPAssetContext() + + const isLoading = isAssetDataLoading || isNftDataLoading + + const Title = () => + isLoading ? ( + <div className="flex animate-pulse flex-col gap-2"> + <div className="h-4 w-20 rounded bg-slate-200"></div> + <div className="h-3 w-32 rounded bg-slate-200"></div> + </div> + ) : ( + <IPAssetHeader hideImage /> + ) + + const AssetImage = () => + isLoading ? ( + <div className="w-full animate-pulse py-1"> + <div className="flex h-64 items-center justify-center rounded bg-slate-200 dark:bg-slate-700"> + <svg + className="size-10 text-slate-100 dark:text-slate-600" + aria-hidden="true" + xmlns="http://www.w3.org/2000/svg" + fill="currentColor" + viewBox="0 0 20 18" + > + <path d="M18 0H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2Zm-5.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm4.376 10.481A1 1 0 0 1 16 15H4a1 1 0 0 1-.895-1.447l3.5-7A1 1 0 0 1 7.468 6a.965.965 0 0 1 .9.5l2.775 4.757 1.546-1.887a1 1 0 0 1 1.618.1l2.541 4a1 1 0 0 1 .028 1.011Z" /> + </svg> + </div> + </div> + ) : ( + <div className="flex w-full justify-center text-center"> + <img src={nftData?.image_url} className="rounded-md object-contain" /> + </div> + ) + + const TitleBar = () => ( + <div className={cn("flex w-full flex-row justify-between", isBottomNav ? "pb-1" : "pt-1")}> + <Title /> + </div> + ) + + return ( + <div className="flex w-full flex-col items-start justify-start"> + {isBottomNav && <TitleBar />} + <AssetImage /> + {!isBottomNav && <TitleBar />} + </div> + ) +} + +IPAssetWidget.displayName = "IPAssetWidget" + +export default IPAssetWidget diff --git a/src/components/IPAssetWidget/__docs__/Example.tsx b/src/components/IPAssetWidget/__docs__/Example.tsx new file mode 100644 index 0000000..1dd0c12 --- /dev/null +++ b/src/components/IPAssetWidget/__docs__/Example.tsx @@ -0,0 +1,29 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import IPAssetWidget from "../IPAssetWidget" + +const Example: FC<{ ipId: Address; isBottomNav?: boolean }> = ({ + ipId = PREVIEW_IP_ASSETS[1] as "0x${string}", + isBottomNav = false, +}) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IPAssetWidget ipId={ipId} isBottomNav={isBottomNav} /> + </div> + </QueryClientProvider> + ) +} + +export default Example diff --git a/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx b/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx new file mode 100644 index 0000000..3b2f904 --- /dev/null +++ b/src/components/IPAssetWidget/__docs__/IPAssetWidget.mdx @@ -0,0 +1,34 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IPAssetWidgetStory from "./IPAssetWidget.stories" + +<Meta of={IPAssetWidgetStory} title="Components/IPAssetWidget" /> + +# IP Asset Widget + +Button component with different props. + +#### Example + +<Canvas of={IPAssetWidgetStory.Select} /> + +<Controls /> + +## Usage + +```ts +import { IPAssetWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ); +}; + +export default ExamplePage; +``` + +#### Arguments + +- **ipId**: _string_ - The IP Asset Id, an Address starting 0x. +- **isBottomNav**: _boolean_ - Position of Tabs diff --git a/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx b/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx new file mode 100644 index 0000000..fa72f35 --- /dev/null +++ b/src/components/IPAssetWidget/__docs__/IPAssetWidget.stories.tsx @@ -0,0 +1,41 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Components/IPAssetWidget", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + argTypes: { + isBottomNav: { control: "boolean", defaultValue: true }, + }, + args: {}, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + isBottomNav: true, + }, +} diff --git a/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx b/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx new file mode 100644 index 0000000..c378014 --- /dev/null +++ b/src/components/IPAssetWidget/__tests__/IPAssetWidget.test.tsx @@ -0,0 +1,9 @@ +import { render } from "@testing-library/react" + +import IPAssetWidget from "../IPAssetWidget" + +describe("IPAssetWidget", () => { + test("renders the IPAssetWidget component", () => { + render(<IPAssetWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}></IPAssetWidget>) + }) +}) diff --git a/src/components/IPAssetWidget/index.ts b/src/components/IPAssetWidget/index.ts new file mode 100644 index 0000000..ae0aa99 --- /dev/null +++ b/src/components/IPAssetWidget/index.ts @@ -0,0 +1 @@ +export { default as IPAssetWidget } from "./IPAssetWidget" diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..aa5a038 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,5 @@ +export * from "./Button" +export * from "./IPAssetWidget" +export * from "./IPAGraph" +export * from "./IPAPolicies" +export * from "./IPARoyaltyChart" diff --git a/src/global.css b/src/global.css new file mode 100644 index 0000000..c8b8c3e --- /dev/null +++ b/src/global.css @@ -0,0 +1,80 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} + +.sb-show-main { + @apply bg-white dark:bg-gray-900; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..6efd0b2 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from "./components" +export * from "./providers" diff --git a/src/lib/api.ts b/src/lib/api.ts new file mode 100644 index 0000000..562f0cb --- /dev/null +++ b/src/lib/api.ts @@ -0,0 +1,49 @@ +import { QueryOptions, ResourceType } from "./types" + +const API_BASE_URL = + process.env.STORYBOOK_API_BASE_URL || process.env.NEXT_PUBLIC_API_BASE_URL || process.env.API_BASE_URL || "" +const API_KEY = + process.env.STORYBOOK_STORY_PROTOCOL_X_API_KEY || + process.env.NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY || + process.env.STORY_PROTOCOL_X_API_KEY || + "" + +export async function getResource(resourceName: ResourceType, resourceId: string) { + try { + const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}/${resourceId}`, { + method: "GET", + headers: { + "Content-Type": "application/json", + "x-api-key": API_KEY as string, + "X-CHAIN": "sepolia", + }, + }) + if (res.ok) { + return res.json() + } + } catch (error) { + console.error(error) + } +} + +export async function listResource(resourceName: ResourceType, options?: QueryOptions) { + try { + const res = await fetch(`${API_BASE_URL}/api/v1/${resourceName}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": API_KEY as string, + "X-CHAIN": "sepolia", + }, + cache: "no-cache", + ...(options && { body: JSON.stringify({ options }) }), + }) + if (res.ok) { + return res.json() + } else { + return res + } + } catch (error) { + console.error(error) + } +} diff --git a/src/lib/graph.ts b/src/lib/graph.ts new file mode 100644 index 0000000..09852aa --- /dev/null +++ b/src/lib/graph.ts @@ -0,0 +1,122 @@ +import { Asset } from "@/lib/types" +import { Address } from "viem" + +export interface GraphNode { + id: string + name: string + val: number + tokenContract?: string | Address + tokenId?: string + level?: number + isRoot?: boolean +} + +interface Link { + source: string + target: string +} + +export interface GraphData { + nodes: GraphNode[] + links: Link[] +} + +export function convertJsonToGraphFormat(ipAssets: Asset[]): GraphData { + const nodes: GraphNode[] = [] + const links: Link[] = [] + + // Map ids to their corresponding objects for quick access + const idToObjectMap: { [id: string]: Asset } = {} + for (const obj of ipAssets) { + idToObjectMap[obj.id] = obj + } + + // Create nodes + for (const asset of ipAssets) { + const nodeName = asset.nftMetadata.name || "Untitled" + const node: GraphNode = { + id: asset.id, + name: nodeName, + val: 1, + tokenContract: asset.nftMetadata.tokenContract, + } + nodes.push(node) + + // Create links + if (asset.childIpIds) { + for (const childId of asset.childIpIds) { + const childObj = idToObjectMap[childId.id] + if (childObj && childObj.parentIpIds) { + for (const parentObj of childObj.parentIpIds) { + links.push({ + source: parentObj.id, + target: childObj.id, + }) + } + } + } + } + } + + return { nodes, links } +} + +export function convertAssetToGraphFormat(jsonData: Asset): GraphData { + const rootIpId = jsonData.rootIpIds?.[0]?.id + const nodes: GraphNode[] = [] + const links: Link[] = [] + + // Create node for the main object + const mainNode: GraphNode = { + id: jsonData.id, + name: jsonData.nftMetadata.name || "Untitled", + tokenContract: jsonData.nftMetadata.tokenContract, + tokenId: jsonData.nftMetadata.tokenId, + val: 1, + level: 0, + isRoot: rootIpId === undefined, + } + nodes.push(mainNode) + + // Add all childIpIds to nodes array and create links + if (jsonData.childIpIds) { + for (const child of jsonData.childIpIds) { + const childNode: GraphNode = { + id: child.id, + name: child.nftMetadata.name || "Untitled", + tokenContract: child.nftMetadata.tokenContract, + tokenId: child.nftMetadata.tokenId, + val: 1, + level: 1, + } + nodes.push(childNode) + + links.push({ + source: jsonData.id, + target: child.id, + }) + } + } + + // Add all parentIpIds to nodes array and create links + if (jsonData.parentIpIds) { + for (const parent of jsonData.parentIpIds) { + const parentNode: GraphNode = { + id: parent.id, + name: parent.nftMetadata.name || "Untitled", + tokenContract: parent.nftMetadata.tokenContract, + tokenId: parent.nftMetadata.tokenId, + val: 1, + level: -1, // assuming parent is one level up + isRoot: parent.id === rootIpId, + } + nodes.push(parentNode) + links.push({ + source: parent.id, + target: jsonData.id, + }) + } + } + + return { nodes, links } +} diff --git a/src/lib/simplehash/index.ts b/src/lib/simplehash/index.ts new file mode 100644 index 0000000..3e28a76 --- /dev/null +++ b/src/lib/simplehash/index.ts @@ -0,0 +1,39 @@ +import { Address } from "viem" + +import { CollectionMetadata, NFTMetadata, NFTWalletResponse } from "./types/simplehash" + +const createRequestOptions = (): RequestInit => ({ + method: "GET", + headers: { + accept: "application/json", + "X-API-KEY": + process.env.STORYBOOK_SIMPLE_HASH_API_KEY || + process.env.NEXT_PUBLIC_SIMPLE_HASH_API_KEY || + process.env.SIMPLE_HASH_API_KEY || + "", + }, +}) + +export const getNFTByTokenId = async (contractAddress: Address, tokenId: string): Promise<NFTMetadata> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/ethereum-sepolia/${contractAddress}/${tokenId}` + const response = await fetch(url, options) + const data = await response.json() + return data +} + +export const getCollectionByAddress = async (contractAddress: Address): Promise<CollectionMetadata> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/collections/ethereum-sepolia/${contractAddress}` + const response = await fetch(url, options) + const data = await response.json() + return data.collections[0] +} + +export const getNFTByWallet = async (walletAddress: Address): Promise<NFTWalletResponse> => { + const options = createRequestOptions() + const url = `https://api.simplehash.com/api/v0/nfts/owners?chains=ethereum-sepolia&wallet_addresses=${walletAddress}` + const response = await fetch(url, options) + const data = await response.json() + return data +} diff --git a/src/lib/simplehash/types/simplehash.d.ts b/src/lib/simplehash/types/simplehash.d.ts new file mode 100644 index 0000000..c3dc429 --- /dev/null +++ b/src/lib/simplehash/types/simplehash.d.ts @@ -0,0 +1,143 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export type NFTWalletResponse = { + next_cursor: string | null + next: string | null + previous: string | null + nfts: NFTMetadata[] +} + +export type NFTMetadata = { + nft_id: string + chain: string + contract_address: string + token_id: string + name: string + description: string + previews: { + image_small_url: string + image_medium_url: string + image_large_url: string + image_opengraph_url: string + blurhash: string + predominant_color: string + } + image_url: string + image_properties: { + width: number + height: number + size: number + mime_type: string + } + video_url: string | null + video_properties: any + audio_url: string | null + audio_properties: any + model_url: string | null + model_properties: any + other_url: string | null + other_properties: any + background_color: string | null + external_url: string | null + created_date: string + status: string + token_count: number + owner_count: number + owners: { + owner_address: string + quantity: number + quantity_string: string + first_acquired_date: string + last_acquired_date: string + }[] + contract: { + type: string + name: string + symbol: string + deployed_by: string + deployed_via_contract: string | null + owned_by: string + has_multiple_collections: boolean + } + collection: CollectionMetadata + last_sale: any + first_created: { + minted_to: string + quantity: number + quantity_string: string + timestamp: string + block_number: number + transaction: string + transaction_initiator: string + } + rarity: { + rank: number + score: number + unique_attributes: number + } + royalty: CollectionRoyalties[] + extra_metadata: { + attributes: { + trait_type: string + value: string + display_type: string | null + }[] + image_original_url: string + animation_original_url: string + metadata_original_url: string + } +} + +export type SPExtendedNFTMetadata = NFTMetadata & { + isRegistered?: boolean + ipId?: string +} + +export type CollectionResponse = { + next_cursor: string | null + next: string | null + previous: string | null + collections: CollectionMetadata[] +} + +export type CollectionMetadata = { + collection_id: string + name: string + description: string + image_url: string + banner_image_url: string + category: string + is_nsfw: boolean + external_url: string + twitter_username: string + discord_url: string + instagram_username: string + medium_username: string + telegram_url: string + marketplace_pages: MarketplacePage[] + metaplex_mint: string + metaplex_candy_machine: string + metaplex_first_verified_creator: string + floor_prices: any[] + top_bids: any[] + distinct_owner_count: number + distinct_nft_count: number + total_quantity: number + chains: string[] + top_contracts: string[] + collection_royalties: CollectionRoyalties[] +} + +export type MarketplacePage = { + marketplace_id: string + marketplace_name: string + marketplace_collection_id: string + collection_url: string + verified: boolean +} + +export type CollectionRoyalties = { + source: string + total_creator_fee_basis_points: number + recipients: any[] +} diff --git a/src/lib/types.ts b/src/lib/types.ts new file mode 100644 index 0000000..c5d6b4a --- /dev/null +++ b/src/lib/types.ts @@ -0,0 +1,325 @@ +import { Address } from "viem" + +export const POLICY_TYPE = { + NON_COMMERCIAL_SOCIAL_REMIXING: "Non-Commercial Social Remixing", + COMMERCIAL_USE: "Commercial Use", + COMMERCIAL_REMIX: "Commercial Remix", + OPEN_DOMAIN: "Open Domain", + NO_DERIVATIVE: "No Derivative", +} + +export enum RESOURCE_TYPE { + ASSET = "assets", + COLLECTION = "collections", + DISPUTE = "disputes", + IPA_POLICY = "licenses/ip/terms", + LICENSE = "licenses/tokens", + LICENSE_MINT_FEES = "licenses/mintingfees", + LICENSE_OWNER = "licenses/owners", + MODULE = "modules", + PERMISSION = "permissions", + POLICY = "licenses/terms", + POLICY_FRAMEWORK = "licenses/templates", + ROYALTY = "royalties", + ROYALTY_PAY = "royalties/payments", + ROYALTY_POLICY = "royalties/policies", + ROYALTY_SPLIT = "royalties/splits", + TAGS = "tags", + TRANSACTION = "transactions", +} + +export type ResourceType = + | RESOURCE_TYPE.ASSET + | RESOURCE_TYPE.COLLECTION + | RESOURCE_TYPE.TRANSACTION + | RESOURCE_TYPE.LICENSE + | RESOURCE_TYPE.LICENSE_MINT_FEES + | RESOURCE_TYPE.LICENSE_OWNER + | RESOURCE_TYPE.MODULE + | RESOURCE_TYPE.POLICY + | RESOURCE_TYPE.PERMISSION + | RESOURCE_TYPE.POLICY_FRAMEWORK + | RESOURCE_TYPE.TAGS + | RESOURCE_TYPE.IPA_POLICY + | RESOURCE_TYPE.ROYALTY + | RESOURCE_TYPE.ROYALTY_PAY + | RESOURCE_TYPE.ROYALTY_POLICY + | RESOURCE_TYPE.ROYALTY_SPLIT + | RESOURCE_TYPE.DISPUTE + +export type PaginationOptions = { + limit?: number + offset?: number +} + +export type AssetFilterOptions = { + chainId?: string + metadataResolverAddress?: string + tokenContract?: string + tokenId?: string +} + +export type DisputeFilterOptions = { + currentTag?: string + initiator?: string + targetIpId?: string + targetTag?: string +} + +export type PermissionFilterOptions = { + signer?: string + to?: string +} + +export type PolicyFilterOptions = { + policyFrameworkManager?: string +} + +export type PolicyFrameworkFilterOptions = { + address?: string + name?: string +} + +export type RoyaltyFilterOptions = { + ipId?: string | null + royaltyPolicy?: string | null +} + +export type TagFilterOptions = { + ipId?: string + tag?: string +} +export type RoyaltyPayFilterOptions = { + ipId?: string + payerIpId?: string + receiverIpId?: string + sender?: string + token?: string +} + +export type ModuleFilterOptions = { + name?: string +} + +export type LicenseFilterOptions = { + licensorIpdId?: Address + policyId?: string +} + +export type LicenseFrameworkFilterOptions = { + creator?: string +} + +export type LicenseOwnerFilterOptions = { + owner?: string +} + +export type IPAPolicyFilterOptions = { + active?: string + inherited?: string + policyId?: string +} + +export type TransactionFilterOptions = { + actionType?: string + resourceId?: string +} + +export type FilterOptions = + | AssetFilterOptions + | DisputeFilterOptions + | PermissionFilterOptions + | PolicyFilterOptions + | PolicyFrameworkFilterOptions + | RoyaltyFilterOptions + | TagFilterOptions + | RoyaltyPayFilterOptions + | ModuleFilterOptions + | LicenseFilterOptions + | LicenseFrameworkFilterOptions + | LicenseOwnerFilterOptions + | IPAPolicyFilterOptions + | TransactionFilterOptions + +export type QueryOptions = { + pagination: PaginationOptions + where?: FilterOptions +} + +export type Transaction = { + id: string + createdAt: string + actionType: string + initiator: Address + ipId: Address + resourceId: Address + resourceType: string +} + +export type Asset = { + id: Address + parentIpIds: Asset[] | null + childIpIds: Asset[] | null + rootIpIds: Asset[] | null + nftMetadata: { + name: string + chainId: string + tokenContract: Address + tokenId: string + tokenUri: string + imageUrl: string + } + blockNumber: string + blockTimestamp: string +} + +export type Permission = { + id: string + permission: string + signer: Address + to: Address + func: string + blockNumber: string + blockTimestamp: string +} + +export type License = { + id: string + licensorIpId: Address + licenseTemplate: string + licenseTermsId: string + transferable: boolean + owner: Address + mintedAt: string + expiresAt: string + burntAt: string + blockNumber: string + blockTime: string +} + +export type PolicyFramework = { + id: string + name: string + metadataUri: string + blockNumber: string + blockTime: string +} + +export type Module = { + id: string + name: string + module: string + blockNumber: string + blockTimestamp: string + deletedAt: string +} + +export type Tag = { + id: string + uuid: string + ipId: Address + tag: string + deletedAt: string + blockNumber: string + blockTimestamp: string +} + +export type IPAPolicy = { + id: string + ipId: Address + licenseTemplate: string + licenseTermsId: string + blockNumber: string + blockTime: string +} + +export type RoyaltyPay = { + id: string + receiverIpId: Address + payerIpId: Address + sender: Address + token: Address + amount: string + blockNumber: string + blockTimestamp: string +} + +export type Royalty = { + id: string + ipId: Address + data: string + royaltyPolicy: Address + blockNumber: string + blockTimestamp: string +} + +export type RoyaltyPolicy = { + id: Address + ancestorsVault: Address + splitClone: Address + royaltyStack: string + targetAncestors: Address[] + targetRoyaltyAmount: string[] + blockNumber: string + blockTimestamp: string +} + +export type Dispute = { + id: string + targetIpId: Address + targetTag: Address + currentTag: Address + arbitrationPolicy: Address + evidenceLink: string + initiator: Address + data: string + blockNumber: string + blockTimestamp: string +} + +export type Collection = { + id: string + assetCount: string + licensesCount: string + resolvedDisputeCount: string + cancelledDisputeCount: string + raisedDisputeCount: string + judgedDisputeCount: string + blockNumber: string + blockTimestamp: string +} + +export type Policy = { + id: string + json: string + licenseTemplate: Address + blockNumber: string + blockTime: string +} + +export type PILType = { + commercialAttribution: boolean + commercialRevenueCelling: number + commercialRevenueShare: number + commercialUse: boolean + commercializerCheck: Address + currency: Address + derivativesAllowed: boolean + derivativesApproval: boolean + derivativesAttribution: boolean + derivativesReciprocal: boolean + derivativesRevenueCelling: number + expiration: string + URI: string +} + +export type RoyaltySplit = { + id: Address + holders: RoyaltyHolder[] + claimFromIPPoolArg: string +} + +export type RoyaltyHolder = { + id: Address + ownership: string +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..4d6d29e --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,51 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +import { PILType, POLICY_TYPE } from "./types" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} + +export function shortenAddress(address: string, length = 4): string { + if (!address) { + return "" + } + if (address.length < 2 * length + 2) { + // Check if the address is too short to be shortened. + return address + } + + const start = address.substring(0, length + 2) + const end = address.substring(address.length - length) + return `${start}...${end}` +} + +export function camelize(str: string) { + return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) { + if (+match === 0) return "" // or if (/\s+/.test(match)) for white spaces + return index === 0 ? match.toLowerCase() : match.toUpperCase() + }) +} + +export function getPolicyTypeByPILData(pilData: PILType) { + const { derivativesAttribution, derivativesAllowed, commercialUse, derivativesReciprocal } = pilData + + if (commercialUse) { + if (!derivativesReciprocal) { + return POLICY_TYPE.COMMERCIAL_USE + } else { + return POLICY_TYPE.COMMERCIAL_REMIX + } + } else { + if (!derivativesAllowed) { + return POLICY_TYPE.NO_DERIVATIVE + } else { + if (derivativesAttribution) { + return POLICY_TYPE.NON_COMMERCIAL_SOCIAL_REMIXING + } else { + return POLICY_TYPE.OPEN_DOMAIN + } + } + } +} diff --git a/src/providers/IPAssetProvider/IPAssetProvider.tsx b/src/providers/IPAssetProvider/IPAssetProvider.tsx new file mode 100644 index 0000000..934384b --- /dev/null +++ b/src/providers/IPAssetProvider/IPAssetProvider.tsx @@ -0,0 +1,149 @@ +import { useQuery } from "@tanstack/react-query" +import React from "react" +import { Address } from "viem" + +import { getResource, listResource } from "../../lib/api" +import { getNFTByTokenId } from "../../lib/simplehash" +import { NFTMetadata } from "../../lib/simplehash/types/simplehash" +import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" +import { camelize } from "../../lib/utils" + +const IPAssetContext = React.createContext<{ + assetData: Asset | undefined + nftData: NFTMetadata | undefined + isNftDataLoading: boolean + isAssetDataLoading: boolean + ipPolicyData: IPAPolicy[] | undefined + isIPAPolicyDataLoading: boolean + policyData: Policy[] | undefined + isPolicyDataLoading: boolean + licenseData: License[] | undefined + isLicenseDataLoading: boolean + royaltyData: RoyaltyPolicy | undefined + isRoyaltyDataLoading: boolean +} | null>(null) + +export const IPAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { + // Fetch asset data + const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ + queryKey: [RESOURCE_TYPE.ASSET, ipId], + queryFn: () => getResource(RESOURCE_TYPE.ASSET, ipId), + }) + + const ipaPolicyQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + } + // Fetch IPPolicy data + const { isLoading: isIPAPolicyDataLoading, data: ipPolicyData } = useQuery({ + queryKey: [RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.IPA_POLICY, ipaPolicyQueryOptions), + }) + + async function fetchPolicyDetails(data: IPAPolicy[]) { + const uniquePolicies = data.filter((item) => item.ipId.toLowerCase() === ipId.toLowerCase()) + + const requests = uniquePolicies.map((item) => getResource(RESOURCE_TYPE.POLICY, item.licenseTermsId)) + const results = await Promise.all(requests) + + return results.map((result) => { + return { + ...result.data, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + licenseTerms: result.data.licenseTerms.reduce((acc: any, option: any) => { + return { + ...acc, + [camelize(option.trait_type)]: + option.value === "true" ? true : option.value === "false" ? false : option.value, + } + }, {}), + } + }) + } + + const { isLoading: isPolicyDataLoading, data: policyData } = useQuery({ + queryKey: ["fetchPolicyDetails", ipPolicyData?.data], + queryFn: () => fetchPolicyDetails(ipPolicyData?.data), + enabled: Boolean(ipPolicyData) && Boolean(ipPolicyData.data), + }) + + const licenseQueryOptions = { + pagination: { + limit: 0, + offset: 0, + }, + where: { + licensorIpdId: ipId, + }, + } + // Fetch License Data + const { isLoading: isLicenseDataLoading, data: licenseData } = useQuery({ + queryKey: [RESOURCE_TYPE.LICENSE, licenseQueryOptions], + queryFn: () => listResource(RESOURCE_TYPE.LICENSE, licenseQueryOptions), + }) + + // Fetch Royalty Data + const { isLoading: isRoyaltyDataLoading, data: royaltyData } = useQuery({ + queryKey: [ + RESOURCE_TYPE.ROYALTY_POLICY, + { + pagination: { + limit: 0, + offset: 0, + }, + where: { + ipId, + }, + }, + ], + queryFn: () => getResource(RESOURCE_TYPE.ROYALTY_POLICY, ipId), + }) + + // const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + // queryKey: ["getNFTByTokenId", assetData?.data?.tokenContract, assetData?.data?.tokenId], + // queryFn: () => getNFTByTokenId(assetData.data.tokenContract, assetData.data.tokenId), + // enabled: Boolean(assetData) && Boolean(assetData.data.tokenContract) && Boolean(assetData.data.tokenId), + // }) + const { isLoading: isNftDataLoading, data: nftData } = useQuery({ + queryKey: ["getNFTByTokenId", assetData?.data?.nftMetadata?.tokenContract, assetData?.data?.nftMetadata?.tokenId], + queryFn: () => getNFTByTokenId(assetData.data.nftMetadata.tokenContract, assetData.data.nftMetadata.tokenId), + enabled: + Boolean(assetData) && + Boolean(assetData.data.nftMetadata.tokenContract) && + Boolean(assetData.data.nftMetadata.tokenId), + }) + + return ( + <IPAssetContext.Provider + value={{ + nftData, + isNftDataLoading, + assetData: assetData?.data, + isAssetDataLoading, + ipPolicyData: ipPolicyData?.data, + isIPAPolicyDataLoading, + policyData: policyData, + isPolicyDataLoading, + licenseData: licenseData?.data, + isLicenseDataLoading, + royaltyData: royaltyData?.data, + isRoyaltyDataLoading, + }} + > + {children} + </IPAssetContext.Provider> + ) +} + +export const useIPAssetContext = () => { + const context = React.useContext(IPAssetContext) + if (!context) { + throw new Error("useAccount must be used within an IPAssetProvider") + } + return context +} diff --git a/src/providers/IPAssetProvider/__docs__/Example.tsx b/src/providers/IPAssetProvider/__docs__/Example.tsx new file mode 100644 index 0000000..0135590 --- /dev/null +++ b/src/providers/IPAssetProvider/__docs__/Example.tsx @@ -0,0 +1,59 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import React, { FC } from "react" +import { Address } from "viem" + +import { IPAssetProvider, useIPAssetContext } from "../IPAssetProvider" + +const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { + const queryClient = new QueryClient() + return ( + <QueryClientProvider client={queryClient}> + <div + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: "100%", + }} + > + <IPAssetProvider ipId={ipId}> + <ExampleComponent /> + </IPAssetProvider> + </div> + </QueryClientProvider> + ) +} + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIPAssetContext() + return ( + <> + {isNftDataLoading && <div>Fetching Asset...</div>} + {nftData && !isNftDataLoading ? ( + <div className="grid grid-cols-4 gap-4"> + <> + <div className="col-span-1 text-xs text-gray-600">nft_id</div> + <div className="col-span-3 text-sm">{nftData.nft_id}</div> + + <div className="col-span-1 text-xs text-gray-600">chain</div> + <div className="col-span-3 text-sm">{nftData.chain}</div> + + <div className="col-span-1 text-xs text-gray-600">contract_address</div> + <div className="col-span-3 text-sm">{nftData.contract_address}</div> + + <div className="col-span-1 text-xs text-gray-600">token_id</div> + <div className="col-span-3 text-sm">{nftData.token_id}</div> + + <div className="col-span-1 text-xs text-gray-600">name</div> + <div className="col-span-3 text-sm">{nftData.name}</div> + + <div className="col-span-1 text-xs text-gray-600">description</div> + <div className="col-span-3 text-sm">{nftData.description}</div> + </> + </div> + ) : null} + </> + ) +} + +export default Example diff --git a/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx b/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx new file mode 100644 index 0000000..28ae64c --- /dev/null +++ b/src/providers/IPAssetProvider/__docs__/IPAssetProvider.mdx @@ -0,0 +1,62 @@ +import { Canvas, Controls, Meta } from "@storybook/blocks" + +import * as IPAssetProviderStory from "./IPAssetProvider.stories" + +<Meta of={IPAssetProviderStory} title="Providers/IPAssetProvider" /> + +# IPAssetProvider + +Provides IP Asset data to children components. + +#### Example + +<Canvas of={IPAssetProviderStory.Select} /> + +<Controls /> + +## Usage + +```ts +// wrap your component with the IPAssetProvider + +import { IPAssetProvider } from "@storyprotocol/storykit" +import ExampleComponent from './ExampleComponent' + +const ExamplePage = () => { + return ( + <IPAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IPAssetProvider> + ); +}; + +export default ExamplePage; +``` + +```ts +// in your component file, context provides IP asset state + +import { useIPAssetContext } from "@storyprotocol/storykit" + +const ExampleComponent = () => { + + const { nftData, isNftDataLoading } = useIPAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; + +export default ExampleComponent; +``` + +#### Arguments + +- **children** - The child component to provide the IP Asset context to. +- **ipId** - The IP Asset Id, an Address starting 0x. diff --git a/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx b/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx new file mode 100644 index 0000000..5722447 --- /dev/null +++ b/src/providers/IPAssetProvider/__docs__/IPAssetProvider.stories.tsx @@ -0,0 +1,49 @@ +import { PREVIEW_IP_ASSETS } from "@/stories/data" +import type { Meta, StoryObj } from "@storybook/react" + +import Example from "./Example" + +const meta = { + title: "Providers/IPAssetProvider", + component: Example, + parameters: { + layout: "centered", + }, + // tags: ["autodocs"], + // argTypes: {}, + // argTypes: { + // ipId: { + // options: [ + // "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // "0xa4ad3f18c2a37f1fb8d86bcd5922739f53e57bae", + // "0x05aae0c68d33bc1fd3cc2241a6af2f5866271726", + // ], + // // control: { type: "select" }, // Automatically inferred when 'options' is defined + // }, + // }, + // args: { + // ipId: "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd", + // }, +} satisfies Meta<typeof Example> + +export default meta +type Story = StoryObj<typeof meta> + +export const Select: Story = { + argTypes: { + ipId: { + options: PREVIEW_IP_ASSETS, + }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} +export const Input: Story = { + argTypes: { + ipId: { control: "text" }, + }, + args: { + ipId: PREVIEW_IP_ASSETS[0] as `0x${string}`, + }, +} diff --git a/src/providers/IPAssetProvider/index.tsx b/src/providers/IPAssetProvider/index.tsx new file mode 100644 index 0000000..aa0e865 --- /dev/null +++ b/src/providers/IPAssetProvider/index.tsx @@ -0,0 +1 @@ +export * from "./IPAssetProvider" diff --git a/src/providers/index.ts b/src/providers/index.ts new file mode 100644 index 0000000..aa0e865 --- /dev/null +++ b/src/providers/index.ts @@ -0,0 +1 @@ +export * from "./IPAssetProvider" diff --git a/src/stories/Introduction.mdx b/src/stories/Introduction.mdx new file mode 100644 index 0000000..f2c1c75 --- /dev/null +++ b/src/stories/Introduction.mdx @@ -0,0 +1,137 @@ +import { Meta } from "@storybook/blocks" + +<Meta title="Introduction" /> + +# Storykit + +Plug-and-play React components for Story Protocol. + +## Installation + +_Storykit is a private package so you need repo access and a personal access token to use_ + +1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) + +2 . Login with Story Protocol scope: + +```bash +npm login --scope=@storyprotocol --registry=https://npm.pkg.github.com +``` + +3 . Use your github username and personal access token (for password) to login + +4 . Install the package and the required react-query dependencies + +```bash +npm install @storyprotocol/storykit @tanstack/react-query +``` + +## Usage + +Using Storykit in your React app + +### Import the css + +```typescript +import "@storyprotocol/storykit/dist/build.css" +``` + +### Include React Query + +Don't forget that react query is a dependency, you will need to wrap Storykit components with a `QueryClientProvider`, you can do this once at the root of the app. + +```typescript +import Providers from "./Providers" + +import "@storyprotocol/storykit/dist/build.css" + +export default function Layout({children}) { + return ( + <html> + <body> + <Providers>{children}</Providers> + </body> + </html> + ) +} +``` + +```typescript +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export default function Providers({ children }) { + return ( + <QueryClientProvider client={queryClient}> + {children} + </QueryClientProvider> + ) +} + +``` + +### The IPAssetProvider + +The IPAssetProvider provides IP Asset data to child components. + +```typescript +import { IPAssetProvider, useIPAssetContext } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <ExampleComponent /> + </IPAssetProvider> + ); +}; + +const ExampleComponent = () => { + const { nftData, isNftDataLoading } = useIPAssetContext() + + return ( + <div> + {isNftDataLoading && <div>Fetching Asset...</div>} + + {nftData && !isNftDataLoading ? ( + <div>nft id: {nftData.nft_id}</div> + ) : null} + </div> + ); +}; +``` + +### The IPAGraph + +Some components require the IPAssetProvider to supply asset data + +```typescript +import { IPAssetProvider, IPAGraph } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IPAGraph /> + </IPAssetProvider> + ); +}; +``` + +### The IPAssetWidget + +The IPAssetProvider is already included in the IPAssetWidget + +```typescript +import { IPAssetWidget } from "@storyprotocol/storykit" + +const ExamplePage = () => { + return ( + <IPAssetWidget ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"} /> + ) +} + +``` + +See [the github repo](https://github.com/storyprotocol/storykit) and [the example app](https://github.com/storyprotocol/storykit/tree/main/examples/next-app). diff --git a/src/stories/data/index.ts b/src/stories/data/index.ts new file mode 100644 index 0000000..484d782 --- /dev/null +++ b/src/stories/data/index.ts @@ -0,0 +1,9 @@ +export const PREVIEW_IP_ASSETS = [ + "0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287", + "0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e", + "0x0aEcA721aDceb65fbE81F450a1C59978fF903124", + + "0x5FCeDadBbDF710Ac3C528F6Aac9D1bD9ac18D9a8", + "0xF9dC0EB9B48429C090aA05383A490e16b2bF9CCB", + "0xcFBa04b0c8a5fD24C2eB3D9E0eE34c0C0797395b", +] diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..063726e --- /dev/null +++ b/turbo.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "pipeline": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**", ".next/**", "!.next/cache/**"], + "cache": false + }, + "lint": { + "outputs": [] + }, + "dev": { + "cache": false, + "persistent": true + }, + "format": { + "cache": false + } + } +} From 2de120f5097a0a850422dbbea945f1b2eada3e5d Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:46:26 -0700 Subject: [PATCH 70/74] IpAssetProvider -> IpProvider --- README.md | 22 +++++++++---------- examples/next-app/components/HomePage.tsx | 16 +++++++------- .../src/components/IpGraph/IpGraph.tsx | 4 ++-- .../components/IpGraph/__docs__/Example.tsx | 6 ++--- .../components/IpGraph/__docs__/IpGraph.mdx | 6 ++--- .../IpPolicyAccordion/IpPolicyAccordion.tsx | 4 ++-- .../IpPolicyAccordion/__docs__/Example.tsx | 6 ++--- .../__docs__/IpPolicyAccordion.mdx | 6 ++--- .../IpRoyaltyPieChart/IpRoyaltyPieChart.tsx | 4 ++-- .../IpRoyaltyPieChart/__docs__/Example.tsx | 6 ++--- .../__docs__/IpRoyaltyPieChart.mdx | 6 ++--- .../src/components/IpWidget/IpWidget.tsx | 12 +++++----- .../src/providers/IpAssetProvider/index.tsx | 1 - .../IpProvider.tsx} | 14 ++++++------ .../__docs__/Example.tsx | 8 +++---- .../__docs__/IpProvider.mdx} | 22 +++++++++---------- .../__docs__/IpProvider.stories.tsx} | 2 +- .../src/providers/IpProvider/index.tsx | 1 + packages/storykit/src/providers/index.ts | 2 +- .../storykit/src/stories/Introduction.mdx | 22 +++++++++---------- 20 files changed, 85 insertions(+), 85 deletions(-) delete mode 100644 packages/storykit/src/providers/IpAssetProvider/index.tsx rename packages/storykit/src/providers/{IpAssetProvider/IpAssetProvider.tsx => IpProvider/IpProvider.tsx} (92%) rename packages/storykit/src/providers/{IpAssetProvider => IpProvider}/__docs__/Example.tsx (90%) rename packages/storykit/src/providers/{IpAssetProvider/__docs__/IpAssetProvider.mdx => IpProvider/__docs__/IpProvider.mdx} (71%) rename packages/storykit/src/providers/{IpAssetProvider/__docs__/IpAssetProvider.stories.tsx => IpProvider/__docs__/IpProvider.stories.tsx} (96%) create mode 100644 packages/storykit/src/providers/IpProvider/index.tsx diff --git a/README.md b/README.md index c952590..a20d248 100644 --- a/README.md +++ b/README.md @@ -137,23 +137,23 @@ export default function Providers({ children }) { ``` -### The IpAssetProvider +### The IpProvider -The IpAssetProvider provides IP Asset data to child components. +The IpProvider provides IP Asset data to child components. ```typescript -import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" +import { IpProvider, useIpContext } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <ExampleComponent /> - </IpAssetProvider> + </IpProvider> ); }; const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() + const { nftData, isNftDataLoading } = useIpContext() return ( <div> @@ -169,23 +169,23 @@ const ExampleComponent = () => { ### The IpGraph -Some components require the IpAssetProvider to supply asset data +Some components require the IpProvider to supply asset data ```typescript -import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" +import { IpProvider, IpGraph } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <IpGraph /> - </IpAssetProvider> + </IpProvider> ); }; ``` ### The IpWidget -The IpAssetProvider is already included in the IpWidget +The IpProvider is already included in the IpWidget ```typescript import { IpWidget } from "@storyprotocol/storykit" diff --git a/examples/next-app/components/HomePage.tsx b/examples/next-app/components/HomePage.tsx index 1c84e5d..6a95fab 100644 --- a/examples/next-app/components/HomePage.tsx +++ b/examples/next-app/components/HomePage.tsx @@ -1,6 +1,6 @@ "use client" -import { IpAssetProvider, useIpAssetContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph, Button } from "@storyprotocol/storykit" +import { IpProvider, useIpContext, IpWidget, IpPolicyAccordion, IpRoyaltyPieChart, IpGraph, Button } from "@storyprotocol/storykit" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React from "react" @@ -9,7 +9,7 @@ import styles from "./home.module.css" const queryClient = new QueryClient() const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() + const { nftData, isNftDataLoading } = useIpContext() return ( <> {isNftDataLoading && <div>Fetching Asset...</div>} @@ -24,28 +24,28 @@ export default function Home() { <QueryClientProvider client={queryClient}> <main className={styles.main}> - <IpAssetProvider ipId="0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"> + <IpProvider ipId="0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"> <div className={`${styles.block} ${styles.padded}`}> <IpPolicyAccordion size="medium" /> </div> - </IpAssetProvider> + </IpProvider> {/* <Button variant="primary" size="medium">Primary Button</Button> */} - <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> + <IpProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> <div className={`${styles.block} ${styles.padded}`}> <ExampleComponent /> </div> <div className={`${styles.block} ${styles.padded}`}> <IpRoyaltyPieChart /> </div> - </IpAssetProvider> + </IpProvider> - <IpAssetProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> + <IpProvider ipId="0x6833490Ea60121F507f5Bf41AD0b17A6Ae537e6e"> <div className={styles.block}> <IpGraph width={400} height={300} /> </div> - </IpAssetProvider> + </IpProvider> <IpWidget ipId={"0xb56831B7cDab9De9e4D3B38C88DdD7B6a57e8287"} /> </main> diff --git a/packages/storykit/src/components/IpGraph/IpGraph.tsx b/packages/storykit/src/components/IpGraph/IpGraph.tsx index 2673224..56f869a 100644 --- a/packages/storykit/src/components/IpGraph/IpGraph.tsx +++ b/packages/storykit/src/components/IpGraph/IpGraph.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useMemo, useState } from "react" import "../../global.css" import { convertAssetToGraphFormat } from "../../lib/graph" import { Asset } from "../../lib/types" -import { useIpAssetContext } from "../../providers" +import { useIpContext } from "../../providers" import "./styles.css" export type IpGraphProps = { @@ -12,7 +12,7 @@ export type IpGraphProps = { } function IpGraph({ width = 500, height = 500 }: IpGraphProps) { - const { assetData } = useIpAssetContext() + const { assetData } = useIpContext() const formattedGraphData = useMemo(() => assetData && convertAssetToGraphFormat(assetData as Asset), [assetData]) // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx index 6e98d12..6bed236 100644 --- a/packages/storykit/src/components/IpGraph/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpGraph/__docs__/Example.tsx @@ -3,7 +3,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IpAssetProvider } from "../../../providers" +import { IpProvider } from "../../../providers" import IpGraph from "../IpGraph" const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ @@ -15,9 +15,9 @@ const Example: FC<{ ipId: Address; width?: number; height?: number }> = ({ return ( <QueryClientProvider client={queryClient}> <div className="flex h-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> + <IpProvider ipId={ipId}> <IpGraph width={width} height={height} /> - </IpAssetProvider> + </IpProvider> </div> </QueryClientProvider> ) diff --git a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx index ad8a772..24db60d 100644 --- a/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx +++ b/packages/storykit/src/components/IpGraph/__docs__/IpGraph.mdx @@ -25,14 +25,14 @@ npm install react-force-graph-2d ## Usage ```ts -import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpProvider } from "@storyprotocol/storykit" import { IpGraph } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <IpGraph /> - </IpAssetProvider> + </IpProvider> ); }; diff --git a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx index bf01fc6..a4a5c10 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/IpPolicyAccordion.tsx @@ -1,6 +1,6 @@ import { POLICY_TYPE } from "@/lib/types" import { cn, getPolicyTypeByPILData } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" +import { useIpContext } from "@/providers" import { cva } from "class-variance-authority" import { CircleCheck, CircleMinus } from "lucide-react" import { useState } from "react" @@ -82,7 +82,7 @@ export type IpPolicyAccordionProps = { } function IpPolicyAccordion({ size = "medium" }: IpPolicyAccordionProps) { - const { policyData } = useIpAssetContext() + const { policyData } = useIpContext() const [expanded, setExpanded] = useState<number | null>(0) const iconWidth = size === "small" ? 16 : size === "medium" ? 20 : 24 diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx index 5a4a58f..47d5db2 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/Example.tsx @@ -3,7 +3,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IpAssetProvider } from "../../../providers" +import { IpProvider } from "../../../providers" import IpPolicyAccordion from "../IpPolicyAccordion" type Size = "small" | "medium" | "large" @@ -16,9 +16,9 @@ const Example: FC<{ ipId: Address; size: Size }> = ({ return ( <QueryClientProvider client={queryClient}> <div className="flex h-full w-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> + <IpProvider ipId={ipId}> <IpPolicyAccordion size={size} /> - </IpAssetProvider> + </IpProvider> </div> </QueryClientProvider> ) diff --git a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx index fa8a1c9..15cd6ad 100644 --- a/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx +++ b/packages/storykit/src/components/IpPolicyAccordion/__docs__/IpPolicyAccordion.mdx @@ -17,14 +17,14 @@ Displays the IP Asset policies in a readable format (cans & cannots). ## Usage ```ts -import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpProvider } from "@storyprotocol/storykit" import { IpPolicyAccordion } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <IpPolicyAccordion /> - </IpAssetProvider> + </IpProvider> ); }; diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx index b4fbf52..291e418 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/IpRoyaltyPieChart.tsx @@ -1,5 +1,5 @@ import { shortenAddress } from "@/lib/utils" -import { useIpAssetContext } from "@/providers" +import { useIpContext } from "@/providers" import { useEffect, useState } from "react" import { Address } from "viem" @@ -7,7 +7,7 @@ import "../../global.css" import "./styles.css" function IpRoyaltyPieChart() { - const { royaltyData } = useIpAssetContext() + const { royaltyData } = useIpContext() // eslint-disable-next-line @typescript-eslint/no-explicit-any const [Chart, setChart] = useState<any>(null) diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx index 3719043..eadfd05 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/Example.tsx @@ -3,7 +3,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IpAssetProvider } from "../../../providers" +import { IpProvider } from "../../../providers" import IpRoyaltyPieChart from "../IpRoyaltyPieChart" const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${string}` }) => { @@ -11,9 +11,9 @@ const Example: FC<{ ipId: Address }> = ({ ipId = PREVIEW_IP_ASSETS[1] as `0x${st return ( <QueryClientProvider client={queryClient}> <div className="flex h-full items-center justify-center"> - <IpAssetProvider ipId={ipId}> + <IpProvider ipId={ipId}> <IpRoyaltyPieChart /> - </IpAssetProvider> + </IpProvider> </div> </QueryClientProvider> ) diff --git a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx index 7bb1ab0..0e5989e 100644 --- a/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx +++ b/packages/storykit/src/components/IpRoyaltyPieChart/__docs__/IpRoyaltyPieChart.mdx @@ -25,14 +25,14 @@ npm install react-apexcharts ## Usage ```ts -import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpProvider } from "@storyprotocol/storykit" import { IpRoyaltyPieChart } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <IpRoyaltyPieChart /> - </IpAssetProvider> + </IpProvider> ); }; diff --git a/packages/storykit/src/components/IpWidget/IpWidget.tsx b/packages/storykit/src/components/IpWidget/IpWidget.tsx index 382949d..19bf6a7 100644 --- a/packages/storykit/src/components/IpWidget/IpWidget.tsx +++ b/packages/storykit/src/components/IpWidget/IpWidget.tsx @@ -8,7 +8,7 @@ import { Address } from "viem" import "../../global.css" import { cn, shortenAddress } from "../../lib/utils" -import { IpAssetProvider, useIpAssetContext } from "../../providers" +import { IpProvider, useIpContext } from "../../providers" import { IpGraph } from "../IpGraph" import { IpPolicyAccordion } from "../IpPolicyAccordion" import { IpRoyaltyPieChart } from "../IpRoyaltyPieChart" @@ -46,12 +46,12 @@ function IPAssetCardWrapper({ ipId, isBottomNav = true }: { ipId: Address; isBot ) return ( - <IpAssetProvider ipId={ipId} key={ipId}> + <IpProvider ipId={ipId} key={ipId}> <div className="skIpWidget"> {isBottomNav ? <_Card /> : <_Tabs />} {isBottomNav ? <_Tabs /> : <_Card />} </div> - </IpAssetProvider> + </IpProvider> ) } @@ -152,7 +152,7 @@ function IPAssetLayout({ children, isBottomNav }: { children: React.ReactNode; i } function IPAssetDropdownMenu() { - const { assetData } = useIpAssetContext() + const { assetData } = useIpContext() return ( <Menu as="div" className="skIpWidget__ipAssetDropdownMenu"> <div> @@ -311,7 +311,7 @@ function IPAssetDropdownMenu() { } function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { - const { nftData, assetData } = useIpAssetContext() + const { nftData, assetData } = useIpContext() return ( <div className="skIpWidget__ipAssetHeader"> <div className="skIpWidget__ipAssetHeader__inner"> @@ -340,7 +340,7 @@ function IPAssetHeader({ hideImage }: { hideImage?: boolean }) { } function IPAssetOverview({ isBottomNav }: { isBottomNav?: boolean }) { - const { nftData, isAssetDataLoading, isNftDataLoading } = useIpAssetContext() + const { nftData, isAssetDataLoading, isNftDataLoading } = useIpContext() const isLoading = isAssetDataLoading || isNftDataLoading diff --git a/packages/storykit/src/providers/IpAssetProvider/index.tsx b/packages/storykit/src/providers/IpAssetProvider/index.tsx deleted file mode 100644 index fa172d4..0000000 --- a/packages/storykit/src/providers/IpAssetProvider/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from "./IpAssetProvider" diff --git a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx b/packages/storykit/src/providers/IpProvider/IpProvider.tsx similarity index 92% rename from packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx rename to packages/storykit/src/providers/IpProvider/IpProvider.tsx index 3375937..8f4657a 100644 --- a/packages/storykit/src/providers/IpAssetProvider/IpAssetProvider.tsx +++ b/packages/storykit/src/providers/IpProvider/IpProvider.tsx @@ -8,7 +8,7 @@ import { NFTMetadata } from "../../lib/simplehash/types/simplehash" import { Asset, IPAPolicy, License, Policy, RESOURCE_TYPE, RoyaltyPolicy } from "../../lib/types" import { camelize } from "../../lib/utils" -const IpAssetContext = React.createContext<{ +const IpContext = React.createContext<{ // activeTab: string // setActiveTab: React.Dispatch<React.SetStateAction<string>> assetData: Asset | undefined @@ -25,7 +25,7 @@ const IpAssetContext = React.createContext<{ isRoyaltyDataLoading: boolean } | null>(null) -export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { +export const IpProvider = ({ children, ipId }: { children: React.ReactNode; ipId: Address }) => { // Fetch asset data const { isLoading: isAssetDataLoading, data: assetData } = useQuery({ queryKey: [RESOURCE_TYPE.ASSET, ipId], @@ -121,7 +121,7 @@ export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; }) return ( - <IpAssetContext.Provider + <IpContext.Provider value={{ // activeTab, // setActiveTab, @@ -140,14 +140,14 @@ export const IpAssetProvider = ({ children, ipId }: { children: React.ReactNode; }} > {children} - </IpAssetContext.Provider> + </IpContext.Provider> ) } -export const useIpAssetContext = () => { - const context = React.useContext(IpAssetContext) +export const useIpContext = () => { + const context = React.useContext(IpContext) if (!context) { - throw new Error("useAccount must be used within an IpAssetProvider") + throw new Error("useAccount must be used within an IpProvider") } return context } diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx b/packages/storykit/src/providers/IpProvider/__docs__/Example.tsx similarity index 90% rename from packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx rename to packages/storykit/src/providers/IpProvider/__docs__/Example.tsx index a84a01b..0226737 100644 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/Example.tsx +++ b/packages/storykit/src/providers/IpProvider/__docs__/Example.tsx @@ -2,7 +2,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import React, { FC } from "react" import { Address } from "viem" -import { IpAssetProvider, useIpAssetContext } from "../IpAssetProvider" +import { IpProvider, useIpContext } from "../IpProvider" const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd" }) => { const queryClient = new QueryClient() @@ -16,16 +16,16 @@ const Example: FC<{ ipId: Address }> = ({ ipId = "0xbbf08a30b9ff0f717a024a75963d height: "100%", }} > - <IpAssetProvider ipId={ipId}> + <IpProvider ipId={ipId}> <ExampleComponent /> - </IpAssetProvider> + </IpProvider> </div> </QueryClientProvider> ) } const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() + const { nftData, isNftDataLoading } = useIpContext() return ( <> {isNftDataLoading && <div>Fetching Asset...</div>} diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx b/packages/storykit/src/providers/IpProvider/__docs__/IpProvider.mdx similarity index 71% rename from packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx rename to packages/storykit/src/providers/IpProvider/__docs__/IpProvider.mdx index cbfbf01..95e5d92 100644 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.mdx +++ b/packages/storykit/src/providers/IpProvider/__docs__/IpProvider.mdx @@ -1,32 +1,32 @@ import { Canvas, Controls, Meta } from "@storybook/blocks" -import * as IpAssetProviderStory from "./IpAssetProvider.stories" +import * as IpProviderStory from "./IpProvider.stories" -<Meta of={IpAssetProviderStory} title="Providers/IpAssetProvider" /> +<Meta of={IpProviderStory} title="Providers/IpProvider" /> -# IpAssetProvider +# IpProvider Provides IP Asset data to children components. #### Example -<Canvas of={IpAssetProviderStory.Select} /> +<Canvas of={IpProviderStory.Select} /> <Controls /> ## Usage ```ts -// wrap your component with the IpAssetProvider +// wrap your component with the IpProvider -import { IpAssetProvider } from "@storyprotocol/storykit" +import { IpProvider } from "@storyprotocol/storykit" import ExampleComponent from './ExampleComponent' const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <ExampleComponent /> - </IpAssetProvider> + </IpProvider> ); }; @@ -36,11 +36,11 @@ export default ExamplePage; ```ts // in your component file, context provides IP asset state -import { useIpAssetContext } from "@storyprotocol/storykit" +import { useIpContext } from "@storyprotocol/storykit" const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() + const { nftData, isNftDataLoading } = useIpContext() return ( <div> @@ -58,7 +58,7 @@ export default ExampleComponent; #### Provider data -The IpAssetProvider provides the following data to its children: +The IpProvider provides the following data to its children: - **assetData** - The IP Asset data. - **isAssetDataLoading** - IP Asset data loading state. diff --git a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx b/packages/storykit/src/providers/IpProvider/__docs__/IpProvider.stories.tsx similarity index 96% rename from packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx rename to packages/storykit/src/providers/IpProvider/__docs__/IpProvider.stories.tsx index cd7231b..0b7bcf8 100644 --- a/packages/storykit/src/providers/IpAssetProvider/__docs__/IpAssetProvider.stories.tsx +++ b/packages/storykit/src/providers/IpProvider/__docs__/IpProvider.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react" import Example from "./Example" const meta = { - title: "Providers/IpAssetProvider", + title: "Providers/IpProvider", component: Example, parameters: { layout: "centered", diff --git a/packages/storykit/src/providers/IpProvider/index.tsx b/packages/storykit/src/providers/IpProvider/index.tsx new file mode 100644 index 0000000..ebfbbfd --- /dev/null +++ b/packages/storykit/src/providers/IpProvider/index.tsx @@ -0,0 +1 @@ +export * from "./IpProvider" diff --git a/packages/storykit/src/providers/index.ts b/packages/storykit/src/providers/index.ts index fa172d4..ebfbbfd 100644 --- a/packages/storykit/src/providers/index.ts +++ b/packages/storykit/src/providers/index.ts @@ -1 +1 @@ -export * from "./IpAssetProvider" +export * from "./IpProvider" diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index 8d5a16c..13b595a 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -137,23 +137,23 @@ export default function Providers({ children }) { ``` -### The IpAssetProvider +### The IpProvider -The IpAssetProvider provides IP Asset data to child components. +The IpProvider provides IP Asset data to child components. ```typescript -import { IpAssetProvider, useIpAssetContext } from "@storyprotocol/storykit" +import { IpProvider, useIpContext } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <ExampleComponent /> - </IpAssetProvider> + </IpProvider> ); }; const ExampleComponent = () => { - const { nftData, isNftDataLoading } = useIpAssetContext() + const { nftData, isNftDataLoading } = useIpContext() return ( <div> @@ -169,23 +169,23 @@ const ExampleComponent = () => { ### The IpGraph -Some components require the IpAssetProvider to supply asset data +Some components require the IpProvider to supply asset data ```typescript -import { IpAssetProvider, IpGraph } from "@storyprotocol/storykit" +import { IpProvider, IpGraph } from "@storyprotocol/storykit" const ExamplePage = () => { return ( - <IpAssetProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> + <IpProvider ipId={"0xbbf08a30b9ff0f717a024a75963d3196aaf0f0dd"}> <IpGraph /> - </IpAssetProvider> + </IpProvider> ); }; ``` ### The IpWidget -The IpAssetProvider is already included in the IpWidget +The IpProvider is already included in the IpWidget ```typescript import { IpWidget } from "@storyprotocol/storykit" From 74872a0969bb21b5d802f6bb30d882fe40119bd0 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 14:51:18 -0700 Subject: [PATCH 71/74] Update publish-package.yml --- .github/workflows/publish-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 5fb5cd2..9c966cd 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - main + - feature/monorepo-merge jobs: publish-gpr: From 18ff1c5dcc8efdc213de1eb26732938c4ce65d2b Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 15:07:11 -0700 Subject: [PATCH 72/74] Update publish-package.yml --- .github/workflows/publish-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 9c966cd..5fb5cd2 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -3,7 +3,7 @@ name: publish on github on: push: branches: - - feature/monorepo-merge + - main jobs: publish-gpr: From 147bbba3d0bf06d85560e8748a4d40f64d719dc7 Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 15:52:56 -0700 Subject: [PATCH 73/74] update docs --- README.md | 16 ++++++++++++---- packages/storykit/src/stories/Introduction.mdx | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a20d248..264e41e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Plug-and-play React components for Story Protocol. ## Installation -_Storykit is a private package so you need repo access and a personal access token to use_ +_Storykit is currently a private github package so you need repo access and a personal access token to use_ 1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) @@ -19,6 +19,8 @@ _Storykit is a private package so you need repo access and a personal access tok @storyprotocol/storykit:registry=https://npm.pkg.github.com ``` +The first line authenticates you with the github package registry, the second line tells npm to use the Storykit package from the Story Protocol github registry. + 3 . Add `.npmrc` to your `.gitignore` to keep your access token private. 4 . Install the package and the required dependencies: @@ -27,6 +29,14 @@ _Storykit is a private package so you need repo access and a personal access tok npm install @storyprotocol/storykit @tanstack/react-query ``` +5 . Currently Story Protocol api credetials must be defined in the environment variables, add them to your `.env.local`: + +```bash +NEXT_PUBLIC_API_BASE_URL="https://edge.stg.storyprotocol.net" +NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY="SP_API_KEY_HERE" +NEXT_PUBLIC_SIMPLE_HASH_API_KEY="SIMPLEHASH_API_KEY_HERE" +``` + ## Deploying on vercel To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: @@ -44,9 +54,7 @@ See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with- ## Dependencies -Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. - -Some components have additional dependencies including: +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest), some components have additional dependencies including: - [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) - [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) diff --git a/packages/storykit/src/stories/Introduction.mdx b/packages/storykit/src/stories/Introduction.mdx index 13b595a..aafbacc 100644 --- a/packages/storykit/src/stories/Introduction.mdx +++ b/packages/storykit/src/stories/Introduction.mdx @@ -8,7 +8,7 @@ Plug-and-play React components for Story Protocol. ## Installation -_Storykit is a private package so you need repo access and a personal access token to use_ +_Storykit is currently a private github package so you need repo access and a personal access token to use_ 1 . Create a personal access token: [github.com/settings/tokens](https://github.com/settings/tokens) @@ -19,6 +19,8 @@ _Storykit is a private package so you need repo access and a personal access tok @storyprotocol/storykit:registry=https://npm.pkg.github.com ``` +The first line authenticates you with the github package registry, the second line tells npm to use the Storykit package from the Story Protocol github registry. + 3 . Add `.npmrc` to your `.gitignore` to keep your access token private. 4 . Install the package and the required dependencies: @@ -27,6 +29,14 @@ _Storykit is a private package so you need repo access and a personal access tok npm install @storyprotocol/storykit @tanstack/react-query ``` +5 . Currently Story Protocol api credetials must be defined in the environment variables, add them to your `.env.local`: + +```bash +NEXT_PUBLIC_API_BASE_URL="https://edge.stg.storyprotocol.net" +NEXT_PUBLIC_STORY_PROTOCOL_X_API_KEY="SP_API_KEY_HERE" +NEXT_PUBLIC_SIMPLE_HASH_API_KEY="SIMPLEHASH_API_KEY_HERE" +``` + ## Deploying on vercel To deploy on vercel, you can either include an `.npmrc` file with the following contents (note the curly braces) in the root, and add your access token to the `NPM_TOKEN` vercel environment variable: @@ -44,9 +54,7 @@ See the [vercel docs](https://vercel.com/guides/using-private-dependencies-with- ## Dependencies -Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest) to function. - -Some components have additional dependencies including: +Storkykit requires [@tanstack/react-query](https://tanstack.com/query/latest), some components have additional dependencies including: - [react-apexcharts](https://www.npmjs.com/package/react-apexcharts) - [react-force-graph-2d](https://www.npmjs.com/package/react-force-graph-2d) From a8ca66f57144653de5b0dc273b03ce874a6beead Mon Sep 17 00:00:00 2001 From: samfairbairn <samfairbairn@hotmail.co.uk> Date: Thu, 9 May 2024 16:17:13 -0700 Subject: [PATCH 74/74] version --- packages/storykit/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/storykit/package.json b/packages/storykit/package.json index ee29996..a71796b 100644 --- a/packages/storykit/package.json +++ b/packages/storykit/package.json @@ -1,7 +1,7 @@ { "name": "@storyprotocol/storykit", "author": "storyprotocol engineering <eng@storyprotocol.xyz>", - "version": "0.1.7", + "version": "0.1.8", "type": "module", "exports": { ".": {