diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 23722414ece..8b854719a1a 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -22,9 +22,15 @@ module.exports = { 'plugin:react/jsx-runtime', 'plugin:react-hooks/recommended', 'plugin:storybook/recommended', + 'plugin:storybook/csf', ], ignorePatterns: ['./leather-styles'], plugins: ['react', 'react-hooks', '@typescript-eslint', 'deprecation'], + settings: { + react: { + version: 'detect', + }, + }, rules: { // This rule helps highlight areas of the code that use deprecated // methods, such as implicit use of signed transactions diff --git a/.github/workflows/build-extension.yml b/.github/workflows/build-extension.yml index bc9d020b158..2cf7c48346a 100644 --- a/.github/workflows/build-extension.yml +++ b/.github/workflows/build-extension.yml @@ -11,23 +11,33 @@ jobs: with: access_token: ${{ github.token }} - set-in-progress-message: - if: github.repository == 'leather-wallet/extension' && github.actor != 'dependabot[bot]' + sha-hash: runs-on: ubuntu-latest + outputs: + SHORT_SHA: ${{ steps.short-sha.outputs.SHORT_SHA }} steps: - name: Make short commit SHA - run: echo "SHORT_SHA=`echo ${{ github.event.pull_request.head.sha }} | cut -c1-7`" >> $GITHUB_ENV + id: short-sha + run: echo "SHORT_SHA=`echo ${{ github.event.pull_request.head.sha }} | cut -c1-7`" >> $GITHUB_OUTPUT + set-in-progress-message: + if: github.repository == 'leather-wallet/extension' && github.actor != 'dependabot[bot]' + runs-on: ubuntu-latest + needs: + - pre-run + - sha-hash + steps: - uses: kyranjamie/pull-request-fixed-header@v1.0.1 with: - header: '> _Building Leather at commit ${{ env.SHORT_SHA }}_' - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + header: '> _Building Leather at commit ${{ needs.sha-hash.outputs.SHORT_SHA }}_' + GITHUB_TOKEN: ${{ secrets.LEATHER_BOT }} build: name: build-${{ matrix.target }}-extension runs-on: ubuntu-latest needs: - pre-run + - sha-hash strategy: matrix: # Firefox removed while off store @@ -39,8 +49,6 @@ jobs: - uses: ./.github/actions/provision - - run: echo "SHORT_SHA=`echo ${{ github.event.pull_request.head.sha }} | cut -c1-7`" >> $GITHUB_ENV - - name: Build project run: pnpm build env: @@ -53,47 +61,37 @@ jobs: TRANSAK_API_KEY: ${{ secrets.TRANSAK_API_KEY }} BESTINSLOT_API_KEY: ${{ secrets.BESTINSLOT_API_KEY }} PR_NUMBER: ${{ github.event.number }} - COMMIT_SHA: ${{ env.SHORT_SHA }} + COMMIT_SHA: ${{ needs.sha-hash.outputs.SHORT_SHA }} - uses: actions/upload-artifact@v3 name: Upload ${{ matrix.target }} extension zip with: - name: leather-${{ matrix.target }}-${{ env.SHORT_SHA }} + name: leather-${{ matrix.target }}-${{ needs.sha-hash.outputs.SHORT_SHA }} path: dist - chromatic: - runs-on: ubuntu-latest - outputs: - storybook_url: ${{ steps.chromatic.outputs.storybookUrl }} - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: ./.github/actions/provision - - - name: Deploy to Chromatic - id: chromatic - uses: chromaui/action@latest - with: - autoAcceptChanges: 'main' - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - token: ${{ secrets.GITHUB_TOKEN }} - set-download-link: if: github.repository == 'leather-wallet/extension' && github.actor != 'dependabot[bot]' runs-on: ubuntu-latest needs: - pre-run + - sha-hash - build - - chromatic steps: - name: Extract branch name - shell: bash run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT id: extract_branch + - name: Storybook parsed branch name + id: storybook_branch + run: echo "STORYBOOK_BRANCH=`echo ${{ steps.extract_branch.outputs.branch }} | sed 's/\//\-/g'`" >> $GITHUB_OUTPUT + - uses: kyranjamie/pull-request-fixed-header@v1.0.1 + env: + EXTENSION_BUILD_LINK: '[Extension build](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})' + TEST_REPORT_LINK: '[Test report](https://leather-wallet.github.io/playwright-reports/${{ steps.extract_branch.outputs.branch }})' + STORYBOOK_LINK: '[Storybook](https://${{ steps.storybook_branch.outputs.STORYBOOK_BRANCH }}--65982789c7e2278518f189e7.chromatic.com)' + CHROMATIC_LINK: '[Chromatic](https://www.chromatic.com/library?appId=65982789c7e2278518f189e7&branch=${{ steps.extract_branch.outputs.branch }})' with: - header: '> Try out this version of Leather — [Extension build](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}), [Test report](https://leather-wallet.github.io/playwright-reports/${{ steps.extract_branch.outputs.branch }}), [Storybook preview](${{ needs.chromatic.outputs.storybook_url }})' - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.LEATHER_BOT }} + header: | + > Try out Leather build ${{ needs.sha-hash.outputs.SHORT_SHA }} — ${{ env.EXTENSION_BUILD_LINK }}, ${{ env.TEST_REPORT_LINK }}, ${{ env.STORYBOOK_LINK }}, ${{ env.CHROMATIC_LINK }} diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml new file mode 100644 index 00000000000..42266537a66 --- /dev/null +++ b/.github/workflows/chromatic.yml @@ -0,0 +1,24 @@ +name: Chromatic + +on: [pull_request] + +jobs: + chromatic: + if: github.repository == 'leather-wallet/extension' && github.actor != 'dependabot[bot]' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: ./.github/actions/provision + + - name: Deploy to Chromatic + id: chromatic + uses: chromaui/action@latest + with: + autoAcceptChanges: '{main,dev}' + onlyChanged: true + exitZeroOnChanges: true + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + token: ${{ secrets.LEATHER_BOT }} diff --git a/.github/workflows/publish-storybook.yml b/.github/workflows/publish-storybook.yml new file mode 100644 index 00000000000..511809381e6 --- /dev/null +++ b/.github/workflows/publish-storybook.yml @@ -0,0 +1,34 @@ +name: Publish Storybook + +on: + workflow_dispatch: + push: + branches: + - 'dev' + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'storybook-deploy' + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/provision + + - run: pnpm build-storybook + + - name: Deploy storybook.leather.io + uses: peaceiris/actions-gh-pages@v3 + with: + personal_token: ${{ secrets.LEATHER_BOT }} + external_repository: leather-wallet/storybook + publish_branch: main + publish_dir: ./storybook-static + cname: storybook.leather.io diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/publish-unit-test-coverage.yml similarity index 100% rename from .github/workflows/gh-pages.yml rename to .github/workflows/publish-unit-test-coverage.yml diff --git a/.gitignore b/.gitignore index 1e9d1ac6b1e..56b5907e731 100755 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ trace* leather-styles .netlify ./.vscode/settings.json +storybook-static diff --git a/.storybook/main.ts b/.storybook/main.ts index 983884a4ff8..bd5c6cd67d0 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -37,6 +37,9 @@ const config: StorybookConfig = { ], }, }, + '@storybook/addon-mdx-gfm', + '@storybook/addon-webpack5-compiler-swc', + '@chromatic-com/storybook' ], docs: { autodocs: 'tag', @@ -44,9 +47,7 @@ const config: StorybookConfig = { framework: { name: '@storybook/react-webpack5', options: { - builder: { - useSWC: true, - }, + builder: {}, }, }, staticDirs: ['../public'], diff --git a/.storybook/manager-head.html b/.storybook/manager-head.html new file mode 100644 index 00000000000..3484a8dcc28 --- /dev/null +++ b/.storybook/manager-head.html @@ -0,0 +1,5 @@ + + + + + diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html index e7853fc3842..275049d29db 100644 --- a/.storybook/preview-head.html +++ b/.storybook/preview-head.html @@ -1,4 +1,4 @@ - - - + + + diff --git a/README.md b/README.md index 6a55fb2b4a2..87af1d68b54 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Leather [![Chrome Web Store](https://img.shields.io/chrome-web-store/stars/ldinpeekobnhjjdofggfgjlcehhmanlj?label=Chrome%20Web%20Store)](https://chrome.google.com/webstore/detail/stacks-wallet/ldinpeekobnhjjdofggfgjlcehhmanlj) -[![Mozilla Add-on](https://img.shields.io/amo/stars/leather-wallet?label=Firefox%20Add-on)](https://addons.mozilla.org/en-US/firefox/addon/leather-wallet/) [![coverage](https://raw.githubusercontent.com/leather-wallet/extension/gh-pages/badge.svg)](https://leather-wallet.github.io/extension/) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) +[![storybook](https://raw.githubusercontent.com/storybooks/brand/master/badge/badge-storybook.svg)](https://storybook.leather.io) Leather is the most popular and trusted wallet for apps built on Bitcoin. Connect to apps and manage assets secured by Bitcoin and Bitcoin L2s with battle-tested wallet for the Stacks blockchain. diff --git a/build-storybook.log b/build-storybook.log deleted file mode 100644 index 5a1da721769..00000000000 --- a/build-storybook.log +++ /dev/null @@ -1,357 +0,0 @@ -yarn run v1.22.19 -$ storybook build --output-dir /var/folders/14/nxq3_7kj3gv27ft84j1_td9w0000gn/T/chromatic--773-QKK6wtM2qaDA -@storybook/cli v7.6.7 - -info => Cleaning outputDir: /var/folders/14/nxq3_7kj3gv27ft84j1_td9w0000gn/T/chromatic--773-QKK6wtM2qaDA -info => Loading presets -info => Building manager.. -info => Manager built (126 ms) -info => Building preview.. -info => Copying static files: /Users/fara/Documents/Code/Leather/extension/node_modules/@storybook/manager/static at /var/folders/14/nxq3_7kj3gv27ft84j1_td9w0000gn/T/chromatic--773-QKK6wtM2qaDA/sb-common-assets -info Using SWC compiler -info Addon-docs: using MDX2 -info => Using implicit CSS loaders -info => [@storybook/addon-styling] Applying custom Storybook webpack configuration styling. -info => [@storybook/addon-styling] Replacing Storybook's webpack rules for styles with given rules. -info => Using default Webpack5 setup - [webpack.Progress] 0% - - [webpack.Progress] 1% setup before run - [webpack.Progress] 1% setup before run NodeEnvironmentPlugin - [webpack.Progress] 1% setup before run - [webpack.Progress] 2% setup run - [webpack.Progress] 2% setup run ForkTsCheckerWebpackPlugin - [webpack.Progress] 2% setup run - [webpack.Progress] 4% setup normal module factory - [webpack.Progress] 4% setup normal module factory CaseSensitivePathsPlugin - [webpack.Progress] 4% setup normal module factory - [webpack.Progress] 5% setup context module factory - [webpack.Progress] 5% setup context module factory - [webpack.Progress] 6% setup before compile - [webpack.Progress] 6% setup before compile ProgressPlugin - [webpack.Progress] 6% setup before compile - [webpack.Progress] 7% setup compile - [webpack.Progress] 7% setup compile ExternalsPlugin - [webpack.Progress] 7% setup compile ExternalsPlugin - [webpack.Progress] 7% setup compile - [webpack.Progress] 8% setup compilation - [webpack.Progress] 8% setup compilation unplugin-csf - [webpack.Progress] 8% setup compilation ArrayPushCallbackChunkFormatPlugin - [webpack.Progress] 8% setup compilation JsonpChunkLoadingPlugin - [webpack.Progress] 8% setup compilation StartupChunkDependenciesPlugin - [webpack.Progress] 8% setup compilation ImportScriptsChunkLoadingPlugin - [webpack.Progress] 8% setup compilation FetchCompileWasmPlugin - [webpack.Progress] 8% setup compilation FetchCompileAsyncWasmPlugin - [webpack.Progress] 8% setup compilation WorkerPlugin - [webpack.Progress] 8% setup compilation SplitChunksPlugin - [webpack.Progress] 8% setup compilation RuntimeChunkPlugin - [webpack.Progress] 8% setup compilation ResolverCachePlugin - [webpack.Progress] 8% setup compilation HtmlWebpackPlugin - [webpack.Progress] 8% setup compilation - [webpack.Progress] 9% setup compilation - [webpack.Progress] 9% setup compilation DefinePlugin - [webpack.Progress] 9% setup compilation ProvidePlugin - [webpack.Progress] 9% setup compilation ProgressPlugin - [webpack.Progress] 9% setup compilation ForkTsCheckerWebpackPlugin - [webpack.Progress] 9% setup compilation DocGenPlugin - [webpack.Progress] 9% setup compilation ChunkPrefetchPreloadPlugin - [webpack.Progress] 9% setup compilation SourceMapDevToolPlugin - [webpack.Progress] 9% setup compilation JavascriptModulesPlugin - [webpack.Progress] 9% setup compilation JsonModulesPlugin - [webpack.Progress] 9% setup compilation AssetModulesPlugin - [webpack.Progress] 9% setup compilation EntryPlugin - [webpack.Progress] 9% setup compilation RuntimePlugin - [webpack.Progress] 9% setup compilation InferAsyncModulesPlugin - [webpack.Progress] 9% setup compilation DataUriPlugin - [webpack.Progress] 9% setup compilation FileUriPlugin - [webpack.Progress] 9% setup compilation CompatibilityPlugin - [webpack.Progress] 9% setup compilation HarmonyModulesPlugin - [webpack.Progress] 9% setup compilation AMDPlugin - [webpack.Progress] 9% setup compilation RequireJsStuffPlugin - [webpack.Progress] 9% setup compilation CommonJsPlugin - [webpack.Progress] 9% setup compilation LoaderPlugin - [webpack.Progress] 9% setup compilation LoaderPlugin - [webpack.Progress] 9% setup compilation NodeStuffPlugin - [webpack.Progress] 9% setup compilation APIPlugin - [webpack.Progress] 9% setup compilation ExportsInfoApiPlugin - [webpack.Progress] 9% setup compilation WebpackIsIncludedPlugin - [webpack.Progress] 9% setup compilation ConstPlugin - [webpack.Progress] 9% setup compilation UseStrictPlugin - [webpack.Progress] 9% setup compilation RequireIncludePlugin - [webpack.Progress] 9% setup compilation RequireEnsurePlugin - [webpack.Progress] 9% setup compilation RequireContextPlugin - [webpack.Progress] 9% setup compilation ImportPlugin - [webpack.Progress] 9% setup compilation ImportMetaContextPlugin - [webpack.Progress] 9% setup compilation SystemPlugin - [webpack.Progress] 9% setup compilation ImportMetaPlugin - [webpack.Progress] 9% setup compilation URLPlugin - [webpack.Progress] 9% setup compilation DefaultStatsFactoryPlugin - [webpack.Progress] 9% setup compilation DefaultStatsPresetPlugin - [webpack.Progress] 9% setup compilation DefaultStatsPrinterPlugin - [webpack.Progress] 9% setup compilation JavascriptMetaInfoPlugin - [webpack.Progress] 9% setup compilation EnsureChunkConditionsPlugin - [webpack.Progress] 9% setup compilation RemoveEmptyChunksPlugin - [webpack.Progress] 9% setup compilation MergeDuplicateChunksPlugin - [webpack.Progress] 9% setup compilation FlagIncludedChunksPlugin - [webpack.Progress] 9% setup compilation SideEffectsFlagPlugin - [webpack.Progress] 9% setup compilation FlagDependencyExportsPlugin - [webpack.Progress] 9% setup compilation FlagDependencyUsagePlugin - [webpack.Progress] 9% setup compilation InnerGraphPlugin - [webpack.Progress] 9% setup compilation MangleExportsPlugin - [webpack.Progress] 9% setup compilation ModuleConcatenationPlugin - [webpack.Progress] 9% setup compilation NoEmitOnErrorsPlugin - [webpack.Progress] 9% setup compilation RealContentHashPlugin - [webpack.Progress] 9% setup compilation WasmFinalizeExportsPlugin - [webpack.Progress] 9% setup compilation NamedModuleIdsPlugin - [webpack.Progress] 9% setup compilation DeterministicChunkIdsPlugin - [webpack.Progress] 9% setup compilation DefinePlugin - [webpack.Progress] 9% setup compilation TerserPlugin - [webpack.Progress] 9% setup compilation TemplatedPathPlugin - [webpack.Progress] 9% setup compilation RecordIdsPlugin - [webpack.Progress] 9% setup compilation WarnCaseSensitiveModulesPlugin - [webpack.Progress] 9% setup compilation IgnoreWarningsPlugin - [webpack.Progress] 9% setup compilation - [webpack.Progress] 10% building - [webpack.Progress] 10% building 0/1 entries 0/0 dependencies 0/0 modules -info => Copying static files: /Users/fara/Documents/Code/Leather/extension/public at /var/folders/14/nxq3_7kj3gv27ft84j1_td9w0000gn/T/chromatic--773-QKK6wtM2qaDA/ -WARN No story files found for the specified pattern: src/**/*.mdx - [webpack.Progress] 10% building import loader ./node_modules/@storybook/preset-react-webpack/dist/loaders/react-docgen-loader.js - [webpack.Progress] 10% building 0/1 entries 1/1 dependencies 0/1 modules - [webpack.Progress] 28% building import loader ./node_modules/swc-loader/src/index.js - [webpack.Progress] 28% building 0/1 entries 12/22 dependencies 4/12 modules - [webpack.Progress] 26% building import loader ./node_modules/@storybook/builder-webpack5/dist/loaders/export-order-loader.js - [webpack.Progress] 26% building import loader ./node_modules/@storybook/csf-plugin/node_modules/unplugin/dist/webpack/loaders/transform.js - [webpack.Progress] 26% building 0/1 entries 34/60 dependencies 7/24 modules - [webpack.Progress] 25% building import loader ./node_modules/style-loader/dist/cjs.js - [webpack.Progress] 25% building import loader ./node_modules/css-loader/dist/cjs.js - [webpack.Progress] 25% building import loader ./node_modules/postcss-loader/dist/cjs.js - [webpack.Progress] 25% building 0/1 entries 35/60 dependencies 7/25 modules - [webpack.Progress] 33% building 0/1 entries 471/565 dependencies 100/232 modules - [webpack.Progress] 57% building 0/1 entries 1156/1200 dependencies 379/443 modules - [webpack.Progress] 59% building 0/1 entries 1291/1300 dependencies 445/491 modules -🐼 info [hrtime] Extracted in (966.78ms) - [webpack.Progress] 62% building 0/1 entries 1314/1323 dependencies 474/500 modules - [webpack.Progress] 65% building 1/1 entries 1366/1366 dependencies 518/518 modules - [webpack.Progress] 65% building - [webpack.Progress] 69% building finish - [webpack.Progress] 69% building finish - [webpack.Progress] 70% sealing finish module graph - [webpack.Progress] 70% sealing finish module graph ResolverCachePlugin - [webpack.Progress] 70% sealing finish module graph InferAsyncModulesPlugin - [webpack.Progress] 70% sealing finish module graph FlagDependencyExportsPlugin - [webpack.Progress] 70% sealing finish module graph InnerGraphPlugin - [webpack.Progress] 70% sealing finish module graph WasmFinalizeExportsPlugin - [webpack.Progress] 70% sealing finish module graph - [webpack.Progress] 70% sealing plugins - [webpack.Progress] 70% sealing plugins DocGenPlugin - [webpack.Progress] 70% sealing plugins WarnCaseSensitiveModulesPlugin - [webpack.Progress] 70% sealing plugins - [webpack.Progress] 71% sealing dependencies optimization - [webpack.Progress] 71% sealing dependencies optimization SideEffectsFlagPlugin - [webpack.Progress] 71% sealing dependencies optimization FlagDependencyUsagePlugin - [webpack.Progress] 71% sealing dependencies optimization - [webpack.Progress] 71% sealing after dependencies optimization - [webpack.Progress] 71% sealing after dependencies optimization - [webpack.Progress] 72% sealing chunk graph - [webpack.Progress] 72% sealing chunk graph - [webpack.Progress] 73% sealing after chunk graph - [webpack.Progress] 73% sealing after chunk graph - [webpack.Progress] 73% sealing optimizing - [webpack.Progress] 73% sealing optimizing - [webpack.Progress] 74% sealing module optimization - [webpack.Progress] 74% sealing module optimization - [webpack.Progress] 75% sealing after module optimization - [webpack.Progress] 75% sealing after module optimization - [webpack.Progress] 75% sealing chunk optimization - [webpack.Progress] 75% sealing chunk optimization EnsureChunkConditionsPlugin - [webpack.Progress] 75% sealing chunk optimization RemoveEmptyChunksPlugin - [webpack.Progress] 75% sealing chunk optimization MergeDuplicateChunksPlugin - [webpack.Progress] 75% sealing chunk optimization SplitChunksPlugin - [webpack.Progress] 75% sealing chunk optimization RemoveEmptyChunksPlugin - [webpack.Progress] 75% sealing chunk optimization - [webpack.Progress] 76% sealing after chunk optimization - [webpack.Progress] 76% sealing after chunk optimization - [webpack.Progress] 77% sealing module and chunk tree optimization - [webpack.Progress] 77% sealing module and chunk tree optimization PersistentChildCompilerSingletonPlugin - [webpack.Progress] 77% sealing module and chunk tree optimization - [webpack.Progress] 77% sealing after module and chunk tree optimization - [webpack.Progress] 77% sealing after module and chunk tree optimization - [webpack.Progress] 78% sealing chunk modules optimization - [webpack.Progress] 78% sealing chunk modules optimization ModuleConcatenationPlugin - [webpack.Progress] 78% sealing chunk modules optimization - [webpack.Progress] 78% sealing after chunk modules optimization - [webpack.Progress] 78% sealing after chunk modules optimization - [webpack.Progress] 79% sealing module reviving - [webpack.Progress] 79% sealing module reviving RecordIdsPlugin - [webpack.Progress] 79% sealing module reviving - [webpack.Progress] 80% sealing before module ids - [webpack.Progress] 80% sealing before module ids - [webpack.Progress] 80% sealing module ids - [webpack.Progress] 80% sealing module ids NamedModuleIdsPlugin - [webpack.Progress] 80% sealing module ids - [webpack.Progress] 81% sealing module id optimization - [webpack.Progress] 81% sealing module id optimization - [webpack.Progress] 82% sealing module id optimization - [webpack.Progress] 82% sealing module id optimization - [webpack.Progress] 82% sealing chunk reviving - [webpack.Progress] 82% sealing chunk reviving RecordIdsPlugin - [webpack.Progress] 82% sealing chunk reviving - [webpack.Progress] 83% sealing before chunk ids - [webpack.Progress] 83% sealing before chunk ids - [webpack.Progress] 84% sealing chunk ids - [webpack.Progress] 84% sealing chunk ids DeterministicChunkIdsPlugin - [webpack.Progress] 84% sealing chunk ids - [webpack.Progress] 84% sealing chunk id optimization - [webpack.Progress] 84% sealing chunk id optimization FlagIncludedChunksPlugin - [webpack.Progress] 84% sealing chunk id optimization - [webpack.Progress] 85% sealing after chunk id optimization - [webpack.Progress] 85% sealing after chunk id optimization - [webpack.Progress] 86% sealing record modules - [webpack.Progress] 86% sealing record modules RecordIdsPlugin - [webpack.Progress] 86% sealing record modules - [webpack.Progress] 86% sealing record chunks - [webpack.Progress] 86% sealing record chunks RecordIdsPlugin - [webpack.Progress] 86% sealing record chunks - [webpack.Progress] 87% sealing module hashing - [webpack.Progress] 87% sealing module hashing - [webpack.Progress] 87% sealing code generation - [webpack.Progress] 87% sealing code generation - [webpack.Progress] 88% sealing runtime requirements - [webpack.Progress] 88% sealing runtime requirements - [webpack.Progress] 89% sealing hashing - [webpack.Progress] 89% sealing hashing - [webpack.Progress] 89% sealing after hashing - [webpack.Progress] 89% sealing after hashing - [webpack.Progress] 90% sealing record hash - [webpack.Progress] 90% sealing record hash - [webpack.Progress] 91% sealing module assets processing - [webpack.Progress] 91% sealing module assets processing - [webpack.Progress] 91% sealing chunk assets processing - [webpack.Progress] 91% sealing chunk assets processing - [webpack.Progress] 92% sealing asset processing - [webpack.Progress] 92% sealing asset processing PersistentChildCompilerSingletonPlugin - [webpack.Progress] 92% sealing asset processing TerserPlugin - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin main.718aa2a7.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin main.718aa2a7.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin runtime~main.397c5237.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin runtime~main.397c5237.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin app-ui-components-dowpdown-menu-dropdown-menu-stories.348aa1f1.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin app-ui-components-dowpdown-menu-dropdown-menu-stories.348aa1f1.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin app-ui-components-select-select-stories.52bc4c28.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin app-ui-components-select-select-stories.52bc4c28.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 312.5311e181.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 312.5311e181.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 341.434d505d.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 341.434d505d.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 729.842c886a.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 729.842c886a.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 797.03239da1.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 797.03239da1.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 426.75037d47.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 426.75037d47.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 607.18f2bde2.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 607.18f2bde2.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 544.b406d772.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 544.b406d772.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 549.aacb1a68.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 549.aacb1a68.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 398.09c4c502.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 398.09c4c502.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 18.4e4f362e.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 18.4e4f362e.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 515.5382f88c.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 515.5382f88c.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 483.c8eafe1b.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 483.c8eafe1b.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin resolve sources - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin main.718aa2a7.iframe.bundle.js attach SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin main.718aa2a7.iframe.bundle.js attached SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 426.75037d47.iframe.bundle.js attach SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 426.75037d47.iframe.bundle.js attached SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 544.b406d772.iframe.bundle.js attach SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 544.b406d772.iframe.bundle.js attached SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 549.aacb1a68.iframe.bundle.js attach SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 549.aacb1a68.iframe.bundle.js attached SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 398.09c4c502.iframe.bundle.js attach SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin 398.09c4c502.iframe.bundle.js attached SourceMap - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin resolve sources - [webpack.Progress] 92% sealing asset processing SourceMapDevToolPlugin - [webpack.Progress] 92% sealing asset processing HtmlWebpackPlugin - [webpack.Progress] 92% sealing asset processing HtmlWebpackPlugin - [webpack.Progress] 92% sealing asset processing HtmlWebpackPlugin resolve sources - [webpack.Progress] 92% sealing asset processing HtmlWebpackPlugin - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin runtime~main.01a51690.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin runtime~main.01a51690.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin app-ui-components-dowpdown-menu-dropdown-menu-stories.32b8b200.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin app-ui-components-dowpdown-menu-dropdown-menu-stories.32b8b200.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin app-ui-components-select-select-stories.84d22868.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin app-ui-components-select-select-stories.84d22868.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 312.cf19ded9.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 312.cf19ded9.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 341.6b69e692.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 341.6b69e692.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 729.bc3d8189.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 729.bc3d8189.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 797.0bcedef1.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 797.0bcedef1.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 607.0b923056.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 607.0b923056.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 18.4c13ddd4.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 18.4c13ddd4.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 515.ffba4402.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 515.ffba4402.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 483.a6b4caaf.iframe.bundle.js generate SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin 483.a6b4caaf.iframe.bundle.js generated SourceMap - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin resolve sources - [webpack.Progress] 92% sealing asset processing RealContentHashPlugin - [webpack.Progress] 92% sealing asset processing - [webpack.Progress] 93% sealing after asset optimization - [webpack.Progress] 93% sealing after asset optimization - [webpack.Progress] 93% sealing recording - [webpack.Progress] 93% sealing recording - [webpack.Progress] 94% sealing after seal - [webpack.Progress] 94% sealing after seal - [webpack.Progress] 95% emitting emit - [webpack.Progress] 95% emitting emit - [webpack.Progress] 98% emitting after emit - [webpack.Progress] 98% emitting after emit SizeLimitsPlugin - [webpack.Progress] 98% emitting after emit - [webpack.Progress] 99% done plugins - [webpack.Progress] 99% done plugins CaseSensitivePathsPlugin - [webpack.Progress] 99% done plugins ForkTsCheckerWebpackPlugin - [webpack.Progress] 99% done plugins - [webpack.Progress] 99% - - [webpack.Progress] 99% cache store build dependencies - [webpack.Progress] 99% cache store build dependencies - [webpack.Progress] 99% cache begin idle - [webpack.Progress] 99% cache begin idle - [webpack.Progress] 100% - -WARN asset size limit: The following asset(s) exceed the recommended size limit (244 KiB). -WARN This can impact web performance. -WARN Assets: -WARN 483.a6b4caaf.iframe.bundle.js (250 KiB) -WARN 426.f776c2ca.iframe.bundle.js (581 KiB) -WARN 549.4c8a1465.iframe.bundle.js (818 KiB) -WARN 398.5aa26781.iframe.bundle.js (717 KiB) -WARN entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance. -WARN Entrypoints: -WARN main (1010 KiB) -WARN runtime~main.01a51690.iframe.bundle.js -WARN 549.4c8a1465.iframe.bundle.js -WARN main.fbe7fdb1.iframe.bundle.js -WARN - [webpack.Progress] 99% cache shutdown - [webpack.Progress] 99% cache shutdown - [webpack.Progress] 100% - -info => Preview built (9.55 s) -info => Output directory: /var/folders/14/nxq3_7kj3gv27ft84j1_td9w0000gn/T/chromatic--773-QKK6wtM2qaDA -Done in 11.28s. diff --git a/chromatic.config.json b/chromatic.config.json new file mode 100644 index 00000000000..c6137a40dea --- /dev/null +++ b/chromatic.config.json @@ -0,0 +1,6 @@ +{ + "projectId": "Project:65982789c7e2278518f189e7", + "zip": true, + "onlyChanged": true, + "skip": "dependabot/**" +} diff --git a/package.json b/package.json index 9816c4de160..d9c193fb046 100644 --- a/package.json +++ b/package.json @@ -150,10 +150,10 @@ "@radix-ui/react-tooltip": "1.0.7", "@radix-ui/themes": "2.0.3", "@reduxjs/toolkit": "1.9.6", - "@scure/base": "1.1.3", - "@scure/bip32": "1.3.2", - "@scure/bip39": "1.2.1", - "@scure/btc-signer": "1.1.0", + "@scure/base": "1.1.5", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2", + "@scure/btc-signer": "1.2.1", "@segment/analytics-next": "1.66.0", "@sentry/react": "7.106.0", "@sentry/tracing": "7.106.0", @@ -170,7 +170,7 @@ "@stacks/transactions": "6.9.0", "@stacks/wallet-sdk": "6.9.0", "@stitches/react": "1.2.8", - "@storybook/addon-styling-webpack": "0.0.6", + "@storybook/addon-styling-webpack": "1.0.0", "@styled-system/theme-get": "5.1.2", "@tanstack/query-sync-storage-persister": "4.35.7", "@tanstack/react-query": "4.35.7", @@ -180,7 +180,7 @@ "@typescript-eslint/eslint-plugin": "7.0.2", "@vkontakte/vk-qr": "2.0.13", "@zondax/ledger-stacks": "1.0.4", - "alex-sdk": "0.1.24", + "alex-sdk": "0.1.26", "are-passive-events-supported": "1.1.1", "argon2-browser": "1.18.0", "assert": "2.0.0", @@ -188,7 +188,7 @@ "base64url": "3.0.1", "bignumber.js": "9.1.2", "bitcoin-address-validation": "2.2.1", - "bitcoinjs-lib": "6.1.3", + "bitcoinjs-lib": "6.1.5", "bn.js": "5.2.1", "c32check": "2.0.0", "chroma-js": "2.4.2", @@ -206,13 +206,13 @@ "jotai-redux": "0.2.1", "jsontokens": "4.0.1", "ledger-bitcoin": "0.2.3", - "limiter": "2.1.0", "lodash.get": "4.4.2", "lodash.isequal": "4.5.0", "lodash.uniqby": "4.7.0", "micro-packed": "0.3.2", "object-hash": "3.0.0", "observable-hooks": "4.2.3", + "p-queue": "8.0.1", "pino": "8.19.0", "postcss-preset-env": "9.4.0", "prism-react-renderer": "2.3.1", @@ -247,6 +247,7 @@ "devDependencies": { "@actions/core": "1.10.1", "@btckit/types": "0.0.19", + "@chromatic-com/storybook": "1.2.23", "@leather-wallet/prettier-config": "0.0.1", "@ls-lint/ls-lint": "2.2.2", "@mdx-js/loader": "3.0.0", @@ -259,16 +260,18 @@ "@sentry/webpack-plugin": "2.14.3", "@stacks/connect-react": "22.2.0", "@stacks/stacks-blockchain-api-types": "6.3.4", - "@storybook/addon-docs": "7.6.17", - "@storybook/addon-essentials": "7.6.17", - "@storybook/addon-interactions": "7.6.17", - "@storybook/addon-links": "7.6.17", - "@storybook/addon-onboarding": "1.0.11", - "@storybook/blocks": "7.6.17", - "@storybook/react": "7.6.17", - "@storybook/react-webpack5": "7.6.17", - "@storybook/test": "7.6.17", - "@storybook/theming": "8.0.0", + "@storybook/addon-docs": "8.0.1", + "@storybook/addon-essentials": "8.0.1", + "@storybook/addon-interactions": "8.0.1", + "@storybook/addon-links": "8.0.1", + "@storybook/addon-mdx-gfm": "8.0.1", + "@storybook/addon-onboarding": "8.0.1", + "@storybook/addon-webpack5-compiler-swc": "1.0.2", + "@storybook/blocks": "8.0.1", + "@storybook/react": "8.0.1", + "@storybook/react-webpack5": "8.0.1", + "@storybook/test": "8.0.1", + "@storybook/theming": "8.0.1", "@types/argon2-browser": "1.18.4", "@types/bn.js": "5.1.5", "@types/chrome": "0.0.260", @@ -330,7 +333,7 @@ "react-refresh": "0.14.0", "schema-inspector": "2.0.2", "speed-measure-webpack-plugin": "1.5.0", - "storybook": "7.6.17", + "storybook": "8.0.1", "stream-browserify": "3.0.0", "svg-url-loader": "8.0.0", "ts-node": "10.9.2", @@ -351,7 +354,8 @@ "resolutions": { "nanoid": "3.3.4", "socket.io-parser": "4.2.4", - "wrap-ansi": "7.0.0" + "wrap-ansi": "7.0.0", + "webpack-dev-middleware": "5.3.4" }, "keywords": [ "blockstack", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24c75669a9f..09417f48364 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,7 @@ overrides: nanoid: 3.3.4 socket.io-parser: 4.2.4 wrap-ansi: 7.0.0 + webpack-dev-middleware: 5.3.4 dependencies: '@bitcoinerlab/secp256k1': @@ -74,17 +75,17 @@ dependencies: specifier: 1.9.6 version: 1.9.6(react-redux@8.1.3)(react@18.2.0) '@scure/base': - specifier: 1.1.3 - version: 1.1.3 + specifier: 1.1.5 + version: 1.1.5 '@scure/bip32': - specifier: 1.3.2 - version: 1.3.2 + specifier: 1.3.3 + version: 1.3.3 '@scure/bip39': + specifier: 1.2.2 + version: 1.2.2 + '@scure/btc-signer': specifier: 1.2.1 version: 1.2.1 - '@scure/btc-signer': - specifier: 1.1.0 - version: 1.1.0 '@segment/analytics-next': specifier: 1.66.0 version: 1.66.0 @@ -134,8 +135,8 @@ dependencies: specifier: 1.2.8 version: 1.2.8(react@18.2.0) '@storybook/addon-styling-webpack': - specifier: 0.0.6 - version: 0.0.6(webpack@5.90.3) + specifier: 1.0.0 + version: 1.0.0(webpack@5.90.3) '@styled-system/theme-get': specifier: 5.1.2 version: 5.1.2 @@ -164,8 +165,8 @@ dependencies: specifier: 1.0.4 version: 1.0.4 alex-sdk: - specifier: 0.1.24 - version: 0.1.24(@stacks/network@6.8.1)(@stacks/transactions@6.9.0) + specifier: 0.1.26 + version: 0.1.26(@stacks/network@6.8.1)(@stacks/transactions@6.9.0) are-passive-events-supported: specifier: 1.1.1 version: 1.1.1 @@ -188,8 +189,8 @@ dependencies: specifier: 2.2.1 version: 2.2.1 bitcoinjs-lib: - specifier: 6.1.3 - version: 6.1.3 + specifier: 6.1.5 + version: 6.1.5 bn.js: specifier: 5.2.1 version: 5.2.1 @@ -241,9 +242,6 @@ dependencies: ledger-bitcoin: specifier: 0.2.3 version: 0.2.3 - limiter: - specifier: 2.1.0 - version: 2.1.0 lodash.get: specifier: 4.4.2 version: 4.4.2 @@ -262,6 +260,9 @@ dependencies: observable-hooks: specifier: 4.2.3 version: 4.2.3(react-dom@18.2.0)(react@18.2.0)(rxjs@7.8.1) + p-queue: + specifier: 8.0.1 + version: 8.0.1 pino: specifier: 8.19.0 version: 8.19.0 @@ -360,6 +361,9 @@ devDependencies: '@btckit/types': specifier: 0.0.19 version: 0.0.19 + '@chromatic-com/storybook': + specifier: 1.2.23 + version: 1.2.23(react@18.2.0) '@leather-wallet/prettier-config': specifier: 0.0.1 version: 0.0.1 @@ -397,35 +401,41 @@ devDependencies: specifier: 6.3.4 version: 6.3.4 '@storybook/addon-docs': - specifier: 7.6.17 - version: 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + specifier: 8.0.1 + version: 8.0.1 '@storybook/addon-essentials': - specifier: 7.6.17 - version: 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + specifier: 8.0.1 + version: 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-interactions': - specifier: 7.6.17 - version: 7.6.17 + specifier: 8.0.1 + version: 8.0.1(vitest@1.3.1) '@storybook/addon-links': - specifier: 7.6.17 - version: 7.6.17(react@18.2.0) + specifier: 8.0.1 + version: 8.0.1(react@18.2.0) + '@storybook/addon-mdx-gfm': + specifier: 8.0.1 + version: 8.0.1 '@storybook/addon-onboarding': - specifier: 1.0.11 - version: 1.0.11(react-dom@18.2.0)(react@18.2.0) + specifier: 8.0.1 + version: 8.0.1 + '@storybook/addon-webpack5-compiler-swc': + specifier: 1.0.2 + version: 1.0.2(webpack@5.90.3) '@storybook/blocks': - specifier: 7.6.17 - version: 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + specifier: 8.0.1 + version: 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) '@storybook/react': - specifier: 7.6.17 - version: 7.6.17(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) + specifier: 8.0.1 + version: 8.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) '@storybook/react-webpack5': - specifier: 7.6.17 - version: 7.6.17(@babel/core@7.24.0)(@swc/core@1.4.2)(@types/webpack@5.28.5)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack-hot-middleware@2.26.1) + specifier: 8.0.1 + version: 8.0.1(@swc/core@1.4.8)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4) '@storybook/test': - specifier: 7.6.17 - version: 7.6.17(vitest@1.3.1) + specifier: 8.0.1 + version: 8.0.1(vitest@1.3.1) '@storybook/theming': - specifier: 8.0.0 - version: 8.0.0(react-dom@18.2.0)(react@18.2.0) + specifier: 8.0.1 + version: 8.0.1(react-dom@18.2.0)(react@18.2.0) '@types/argon2-browser': specifier: 1.18.4 version: 1.18.4 @@ -491,7 +501,7 @@ devDependencies: version: 0.10.4 '@types/webpack': specifier: 5.28.5 - version: 5.28.5(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + version: 5.28.5(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) '@types/zxcvbn': specifier: 4.4.4 version: 4.4.4 @@ -610,8 +620,8 @@ devDependencies: specifier: 1.5.0 version: 1.5.0(webpack@5.90.3) storybook: - specifier: 7.6.17 - version: 7.6.17 + specifier: 8.0.1 + version: 8.0.1(react-dom@18.2.0)(react@18.2.0) stream-browserify: specifier: 3.0.0 version: 3.0.0 @@ -620,7 +630,7 @@ devDependencies: version: 8.0.0(webpack@5.90.3) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.19)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.4.8)(@types/node@20.11.19)(typescript@5.3.3) ts-unused-exports: specifier: 10.0.1 version: 10.0.1(typescript@5.3.3) @@ -644,7 +654,7 @@ devDependencies: version: 7.8.0 webpack: specifier: 5.90.3 - version: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + version: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-bundle-analyzer: specifier: 4.10.1 version: 4.10.1 @@ -1853,51 +1863,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.0): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) - dev: true - - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0): - 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.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - '@babel/types': 7.24.0 - dev: true - - /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} @@ -2140,21 +2105,6 @@ packages: esutils: 2.0.3 dev: true - /@babel/preset-react@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.0) - '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.24.0) - dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} @@ -2298,7 +2248,7 @@ packages: /@bitcoinerlab/secp256k1@1.0.5: resolution: {integrity: sha512-8gT+ukTCFN2rTxn4hD9Jq3k+UJwcprgYjfK/SQUSLgznXoIgsBnlPuARMkyyuEjycQK9VvnPiejKdszVTflh+w==} dependencies: - '@noble/hashes': 1.3.3 + '@noble/hashes': 1.3.2 '@noble/secp256k1': 1.7.1 dev: false @@ -2326,6 +2276,21 @@ packages: resolution: {integrity: sha512-APoOfYSg9SRR4CMXL606IDtpgh+ZD3kS/+iY0BkUALD6HvXo2pVw20L5YYIc+HrgMcF6WN0TH7TXdVs+Vu+kww==} dev: true + /@chromatic-com/storybook@1.2.23(react@18.2.0): + resolution: {integrity: sha512-We0knVd0x8M998jDOvNgesN+wqzvGuYA6Q8oNRAhGhTcIjd9AsPGEpPo9glqZb/wot9nioiz3bnFQH50M/FtXQ==} + engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + dependencies: + chromatic: 11.1.0 + filesize: 10.1.0 + jsonfile: 6.1.0 + react-confetti: 6.1.0(react@18.2.0) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - react + dev: true + /@clack/core@0.3.3: resolution: {integrity: sha512-5ZGyb75BUBjlll6eOa1m/IZBxwk91dooBWhPSL67sWcLS0zt9SnswRL0l26TVdBhb0wnWORRxUn//uH6n4z7+A==} dependencies: @@ -3014,15 +2979,6 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.19.11: resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} engines: {node: '>=12'} @@ -3040,15 +2996,6 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.11: resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} engines: {node: '>=12'} @@ -3066,15 +3013,6 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.11: resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} engines: {node: '>=12'} @@ -3092,15 +3030,6 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.11: resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} engines: {node: '>=12'} @@ -3118,15 +3047,6 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.11: resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} engines: {node: '>=12'} @@ -3144,15 +3064,6 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.11: resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} engines: {node: '>=12'} @@ -3170,15 +3081,6 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.11: resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} engines: {node: '>=12'} @@ -3196,15 +3098,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.11: resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} engines: {node: '>=12'} @@ -3222,15 +3115,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.11: resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} engines: {node: '>=12'} @@ -3248,15 +3132,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.11: resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} engines: {node: '>=12'} @@ -3274,15 +3149,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.11: resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} engines: {node: '>=12'} @@ -3300,15 +3166,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.11: resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} engines: {node: '>=12'} @@ -3326,15 +3183,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.11: resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} engines: {node: '>=12'} @@ -3352,15 +3200,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.11: resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} engines: {node: '>=12'} @@ -3378,15 +3217,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.11: resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} engines: {node: '>=12'} @@ -3404,15 +3234,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.11: resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} engines: {node: '>=12'} @@ -3430,15 +3251,6 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.11: resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} engines: {node: '>=12'} @@ -3456,15 +3268,6 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.11: resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} engines: {node: '>=12'} @@ -3482,15 +3285,6 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.11: resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} engines: {node: '>=12'} @@ -3508,15 +3302,6 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.11: resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} engines: {node: '>=12'} @@ -3534,15 +3319,6 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.11: resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} engines: {node: '>=12'} @@ -3560,15 +3336,6 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.11: resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} engines: {node: '>=12'} @@ -3663,6 +3430,7 @@ packages: '@floating-ui/dom': 1.6.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@floating-ui/utils@0.2.1: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} @@ -3760,17 +3528,6 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@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'} @@ -3783,59 +3540,13 @@ packages: '@sinclair/typebox': 0.27.8 dev: true - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.24.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - 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.11.19 - '@types/yargs': 16.0.9 - 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.11.19 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - - /@josephg/resolvable@1.0.1: - resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + /@josephg/resolvable@1.0.1: + resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -3871,10 +3582,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@juggle/resize-observer@3.4.0: - resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - dev: true - /@leather-wallet/prettier-config@0.0.1: resolution: {integrity: sha512-73WvurHNvKfp/x5nHjOUBSmzEtAdHzMpBvz3EF7mN9kpYC41/li5znWGI8cF8wdzCZBAmyG6sNA9xVk6aT6bwA==} dependencies: @@ -3979,7 +3686,7 @@ packages: dependencies: '@mdx-js/mdx': 3.0.0 source-map: 0.7.4 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color dev: true @@ -4014,9 +3721,10 @@ packages: - supports-color dev: true - /@mdx-js/react@2.3.0(react@18.2.0): - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} + /@mdx-js/react@3.0.1(@types/react@18.2.57)(react@18.2.0): + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} peerDependencies: + '@types/react': '>=16' react: '>=16' dependencies: '@types/mdx': 2.0.11 @@ -4032,10 +3740,10 @@ packages: tar-fs: 2.1.1 dev: true - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + /@noble/curves@1.3.0: + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} dependencies: - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 dev: false /@noble/hashes@1.1.5: @@ -4372,7 +4080,7 @@ packages: webpack-plugin-serve: optional: true dependencies: - '@types/webpack': 5.28.5(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + '@types/webpack': 5.28.5(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 core-js-pure: 3.36.0 @@ -4383,7 +4091,7 @@ packages: react-refresh: 0.14.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-dev-server: 4.15.1(webpack-cli@5.1.4)(webpack@5.90.3) webpack-hot-middleware: 2.26.1 dev: true @@ -4463,11 +4171,13 @@ packages: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: '@babel/runtime': 7.23.9 + dev: false /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: '@babel/runtime': 7.23.9 + dev: false /@radix-ui/react-accessible-icon@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-duVGKeWPSUILr/MdlPxV+GeULTc2rS1aihGdQ3N2qCUPMgxYLxvAsHJM3mCVLF8d5eK+ympmB22mb1F3a5biNw==} @@ -4535,6 +4245,7 @@ packages: '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} @@ -4631,6 +4342,7 @@ packages: '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} @@ -4683,6 +4395,7 @@ packages: '@babel/runtime': 7.23.9 '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} @@ -4730,31 +4443,7 @@ packages: '@babel/runtime': 7.23.9 '@types/react': 18.2.57 react: 18.2.0 - - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} - 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.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.57)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true + dev: false /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} @@ -4820,29 +4509,7 @@ packages: '@babel/runtime': 7.23.9 '@types/react': 18.2.57 react: 18.2.0 - - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} - 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.23.9 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true + dev: false /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} @@ -4935,6 +4602,7 @@ packages: '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.57)(react@18.2.0) '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} @@ -5030,36 +4698,6 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.57)(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} - 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.23.9 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: @@ -5090,27 +4728,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} - 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.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: @@ -5173,6 +4790,7 @@ packages: '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} @@ -5231,6 +4849,7 @@ packages: '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} @@ -5261,47 +4880,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} - 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.23.9 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.57)(react@18.2.0) - dev: true - /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: @@ -5362,6 +4940,7 @@ packages: '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@radix-ui/react-slider@1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} @@ -5495,83 +5074,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} - 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.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} - 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.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} - 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.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.57)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.57 - '@types/react-dom': 18.2.19 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: @@ -5616,6 +5118,7 @@ packages: '@babel/runtime': 7.23.9 '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} @@ -5630,6 +5133,7 @@ packages: '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.57)(react@18.2.0) '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} @@ -5644,6 +5148,7 @@ packages: '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.57)(react@18.2.0) '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} @@ -5657,6 +5162,7 @@ packages: '@babel/runtime': 7.23.9 '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} @@ -5670,6 +5176,7 @@ packages: '@babel/runtime': 7.23.9 '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} @@ -5684,6 +5191,7 @@ packages: '@radix-ui/rect': 1.0.1 '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-use-size@1.0.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} @@ -5698,6 +5206,7 @@ packages: '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.57)(react@18.2.0) '@types/react': 18.2.57 react: 18.2.0 + dev: false /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} @@ -5718,11 +5227,13 @@ packages: '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: false /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: '@babel/runtime': 7.23.9 + dev: false /@radix-ui/themes@2.0.3(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yaXQ8aWT2P1CQ0Xe6YCRD9HXsfMTvKkrIYkrc4aitCzhGTLS0sjtTqKmrxIWMVA+3DIbEuG9K/8aAMRJBhep8g==} @@ -6327,10 +5838,6 @@ packages: resolution: {integrity: sha512-mhMEg7qUdpPuqdTAs2xh2GBAISAE++74uFX3y84G0GPwkBF1kdiDVypKbHIbizYTEFty+Ieurxoagq9KRkgEiw==} dev: true - /@scure/base@1.1.3: - resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} - dev: false - /@scure/base@1.1.5: resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} @@ -6342,11 +5849,11 @@ packages: '@scure/base': 1.1.5 dev: false - /@scure/bip32@1.3.2: - resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + /@scure/bip32@1.3.3: + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} dependencies: - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.3 + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.2 '@scure/base': 1.1.5 dev: false @@ -6356,20 +5863,20 @@ packages: '@noble/hashes': 1.1.5 '@scure/base': 1.1.5 - /@scure/bip39@1.2.1: - resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + /@scure/bip39@1.2.2: + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} dependencies: - '@noble/hashes': 1.3.3 + '@noble/hashes': 1.3.2 '@scure/base': 1.1.5 dev: false - /@scure/btc-signer@1.1.0: - resolution: {integrity: sha512-kCX7WaaTJr0VZIXDvaY0wNZfzZoZuLnPz4G0qmKXN8bnNx5M86wb1cce9XrZcfzb0jrVAbZJqNpxmE1e7Ka2hA==} + /@scure/btc-signer@1.2.1: + resolution: {integrity: sha512-/Zle18/aWhYDBuBeXGDGJTdo0/LKpQhU8ETBJeWABCQkbk0QHCFCinidTiz9hdQFfh0HtasPGq5p6EodVCfEew==} dependencies: - '@noble/curves': 1.2.0 + '@noble/curves': 1.3.0 '@noble/hashes': 1.3.3 '@scure/base': 1.1.5 - micro-packed: 0.3.2 + micro-packed: 0.5.3 dev: false /@segment/analytics-core@1.5.0: @@ -6653,7 +6160,7 @@ packages: '@sentry/bundler-plugin-core': 2.14.3 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - encoding - supports-color @@ -6904,7 +6411,7 @@ packages: /@stacks/transactions@4.3.8: resolution: {integrity: sha512-5xYYv2TdXXM9PVixB79Pr99symQ8fhbVATjempGUxtL23/XUiRiLvJZohDxIE4VQ2EzbB4g4j8Y7oqPjj0h09Q==} dependencies: - '@noble/hashes': 1.3.3 + '@noble/hashes': 1.3.2 '@noble/secp256k1': 1.7.1 '@stacks/common': 4.3.5 '@stacks/network': 4.3.5 @@ -8009,10 +7516,10 @@ packages: react: 18.2.0 dev: false - /@storybook/addon-actions@7.6.17: - resolution: {integrity: sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ==} + /@storybook/addon-actions@8.0.1: + resolution: {integrity: sha512-qFd1NOI9C16/Jo+7XQQXRsoTzcvKPlT6M5lU47lGLuyLwbZSp5EKxmy8+uKTnyLF/2BTAvOLZ/wYmw+Gj4VzOA==} dependencies: - '@storybook/core-events': 7.6.17 + '@storybook/core-events': 8.0.1 '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 @@ -8020,110 +7527,106 @@ packages: uuid: 9.0.1 dev: true - /@storybook/addon-backgrounds@7.6.17: - resolution: {integrity: sha512-7dize7x8+37PH77kmt69b0xSaeDqOcZ4fpzW6+hk53hIaCVU26eGs4+j+743Xva31eOgZWNLupUhOpUDc6SqZw==} + /@storybook/addon-backgrounds@8.0.1: + resolution: {integrity: sha512-A06rUg7yEmyEoRTS8B46CkiUh49lKQ9ipGK323O7S9qkwbXSLvqBQTaKmGstZq6p0begPF1DWaGUxCXfU3qr2g==} dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 dev: true - /@storybook/addon-controls@7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zR0aLaUF7FtV/nMRyfniFbCls/e0DAAoXACuOAUAwNAv0lbIS8AyZZiHSmKucCvziUQ6WceeCC7+du3C+9y0rQ==} + /@storybook/addon-controls@8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-MadJq5fmFUI1eNkDyJSSqtF/IHD+hv/gS0eFNd9+CIioHaysJG2g7t27lG703BV+Qwzz9ekilKBJ/z0bIuqm8g==} dependencies: - '@storybook/blocks': 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - encoding - react - react-dom - supports-color dev: true - /@storybook/addon-docs@7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-FKa4Mdy7nhgvEVZJHpMkHriDzpVHbohn87zv9NCL+Ctjs1iAmzGwxEm0culszyDS1HN2ToVoY0h8CSi2RSSZqA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + /@storybook/addon-docs@8.0.1: + resolution: {integrity: sha512-G03ELd2OEycuYoziwbomIgHGUXNIVU2MoCITU7Q1e2zfFJ4amMab7btHmUm4eTnUChXvzbYIucti3Sp9sQNsKw==} dependencies: - '@jest/transform': 29.7.0 - '@mdx-js/react': 2.3.0(react@18.2.0) - '@storybook/blocks': 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.6.17 - '@storybook/components': 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-plugin': 7.6.17 - '@storybook/csf-tools': 7.6.17 + '@babel/core': 7.24.0 + '@mdx-js/react': 3.0.1(@types/react@18.2.57)(react@18.2.0) + '@storybook/blocks': 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 8.0.1 + '@storybook/components': 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-plugin': 8.0.1 + '@storybook/csf-tools': 8.0.1 '@storybook/global': 5.0.0 - '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.6.17 - '@storybook/postinstall': 7.6.17 - '@storybook/preview-api': 7.6.17 - '@storybook/react-dom-shim': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.17 + '@storybook/node-logger': 8.0.1 + '@storybook/preview-api': 8.0.1 + '@storybook/react-dom-shim': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.1 + '@types/react': 18.2.57 fs-extra: 11.2.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - remark-external-links: 8.0.0 - remark-slug: 6.1.0 + rehype-external-links: 3.0.0 + rehype-slug: 6.0.0 ts-dedent: 2.2.0 transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - encoding - supports-color dev: true - /@storybook/addon-essentials@7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qlSpamxuYfT2taF953nC9QijGF2pSbg1ewMNpdwLTj16PTZvR/d8NCDMTJujI1bDwM2m18u8Yc43ibh5LEmxCw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/addon-actions': 7.6.17 - '@storybook/addon-backgrounds': 7.6.17 - '@storybook/addon-controls': 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-highlight': 7.6.17 - '@storybook/addon-measure': 7.6.17 - '@storybook/addon-outline': 7.6.17 - '@storybook/addon-toolbars': 7.6.17 - '@storybook/addon-viewport': 7.6.17 - '@storybook/core-common': 7.6.17 - '@storybook/manager-api': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.6.17 - '@storybook/preview-api': 7.6.17 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + /@storybook/addon-essentials@8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ExN5v9p/08ArWVB1eARWri8UdzaXzZgrPCjV+Ip/Bljh/NYuNOd1PhfQ84IyBOB+RhtlPX9hh7fAdQiDa0MN0g==} + dependencies: + '@storybook/addon-actions': 8.0.1 + '@storybook/addon-backgrounds': 8.0.1 + '@storybook/addon-controls': 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-docs': 8.0.1 + '@storybook/addon-highlight': 8.0.1 + '@storybook/addon-measure': 8.0.1 + '@storybook/addon-outline': 8.0.1 + '@storybook/addon-toolbars': 8.0.1 + '@storybook/addon-viewport': 8.0.1 + '@storybook/core-common': 8.0.1 + '@storybook/manager-api': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 8.0.1 + '@storybook/preview-api': 8.0.1 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - encoding + - react + - react-dom - supports-color dev: true - /@storybook/addon-highlight@7.6.17: - resolution: {integrity: sha512-R1yBPUUqGn+60aJakn8q+5Zt34E/gU3n3VmgPdryP0LJUdZ5q1/RZShoVDV+yYQ40htMH6oaCv3OyyPzFAGJ6A==} + /@storybook/addon-highlight@8.0.1: + resolution: {integrity: sha512-7+Q4dpQRbBylFKexSSvyksFqYXTIKMQzIcmL/XirUPKzDenCyuGfhDFWtredsb+kIR4P/Gg9MepMWkfBsoupuA==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/addon-interactions@7.6.17: - resolution: {integrity: sha512-6zlX+RDQ1PlA6fp7C+hun8t7h2RXfCGs5dGrhEenp2lqnR/rYuUJRC0tmKpkZBb8kZVcbSChzkB/JYkBjBCzpQ==} + /@storybook/addon-interactions@8.0.1(vitest@1.3.1): + resolution: {integrity: sha512-1gGfYu0C/c7P/7cz89d3kaN3z9ZjDD2yMoVQ1WzOlCdWwRrm9d1Ox+UUGAfNmjd8XyAST7woYcqT/OWrkdrj1A==} dependencies: '@storybook/global': 5.0.0 - '@storybook/types': 7.6.17 - jest-mock: 27.5.1 + '@storybook/instrumenter': 8.0.1 + '@storybook/test': 8.0.1(vitest@1.3.1) + '@storybook/types': 8.0.1 polished: 4.3.1 ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest dev: true - /@storybook/addon-links@7.6.17(react@18.2.0): - resolution: {integrity: sha512-iFUwKObRn0EKI0zMETsil2p9a/81rCuSMEWECsi+khkCAs1FUnD2cT6Ag5ydcNcBXsdtdfDJdtXQrkw+TSoStQ==} + /@storybook/addon-links@8.0.1(react@18.2.0): + resolution: {integrity: sha512-cYAPSr/mO++ZZWcNigfTEDPYshozT0hYpHJ7S5DIhUTZCpv92IDudN0HjYmEQnz4+OdsGaQ6GnITI2Fr8IOfQA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: @@ -8136,76 +7639,92 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure@7.6.17: - resolution: {integrity: sha512-O5vnHZNkduvZ95jf1UssbOl6ivIxzl5tv+4EpScPYId7w700bxWsJH+QX7ip6KlrCf2o3iUhmPe8bm05ghG2KA==} + /@storybook/addon-mdx-gfm@8.0.1: + resolution: {integrity: sha512-1z7pBMVgBnriQeVgjJ8106gihGV7uaLCG2k54QUgXhmyIfb0wWMBE/RB6VhRjkH3vN9eOb+1xjup3MQO3QWahg==} dependencies: - '@storybook/global': 5.0.0 - tiny-invariant: 1.3.1 + '@storybook/node-logger': 8.0.1 + remark-gfm: 4.0.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color dev: true - /@storybook/addon-onboarding@1.0.11(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0Sa7PJDsM6AANOWZX7vq3kgCbS9AZFjr3tfr3bLGfXviwIBKjoZDDdIErJkS3D4mNcDa78lYQvp3PTCKwLIJ9A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + /@storybook/addon-measure@8.0.1: + resolution: {integrity: sha512-dHZY8K5FWoEYuIK9+6dwky/IsqCGlNuGEU2gn2Q2OiIzHOveumxMtGQkWk8hrzRnwQB/eMbijbdwd+d0aBJp1w==} dependencies: - '@storybook/telemetry': 7.6.17 - react: 18.2.0 - react-confetti: 6.1.0(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - encoding - - supports-color + '@storybook/global': 5.0.0 + tiny-invariant: 1.3.3 + dev: true + + /@storybook/addon-onboarding@8.0.1: + resolution: {integrity: sha512-jS4vs2kHc6C13aycaYWpAhM6FneM4JrAsM+j0zGEEDcSNsUVVuw5NDb5qivMkoe1tp500k1PrI9re4GjLQASWA==} dev: true - /@storybook/addon-outline@7.6.17: - resolution: {integrity: sha512-9o9JXDsYjNaDgz/cY5+jv694+aik/1aiRGGvsCv68e1p/ob0glkGKav4lnJe2VJqD+gCmaARoD8GOJlhoQl8JQ==} + /@storybook/addon-outline@8.0.1: + resolution: {integrity: sha512-1zPBQ+J4IUjULXlBbf3lLt5nblMUwQiTV6HAjngeczl3pCaZ3Q86lVAURE2K/gmLElsRALX4XoLw8M7hY4iYxQ==} dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-styling-webpack@0.0.6(webpack@5.90.3): - resolution: {integrity: sha512-JjM2FXFiHpjbJsp7nRUEMhYBRpK6ukBKsbtWzCrAGOfUgoElcGwPY8KhSKSnRknIhebonGK1bxalh3u8bGZ/dw==} + /@storybook/addon-styling-webpack@1.0.0(webpack@5.90.3): + resolution: {integrity: sha512-jo1kzn7pi+NA+LZxrWoRvW6w7dXIKY/BjTG80XX2uU92lIKT+X1k/9vYk/0KPVK3Bsf4tO6ToAuqIRyOk7MHtg==} peerDependencies: webpack: ^5.0.0 dependencies: - '@storybook/node-logger': 7.6.17 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + '@storybook/node-logger': 8.0.1 + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: false - /@storybook/addon-toolbars@7.6.17: - resolution: {integrity: sha512-UMrchbUHiyWrh6WuGnpy34Jqzkx/63B+MSgb3CW7YsQaXz64kE0Rol0TNSznnB+mYXplcqH+ndI4r4kFsmgwDg==} + /@storybook/addon-toolbars@8.0.1: + resolution: {integrity: sha512-Fa5H+iiQsYtcaF/2RhzTOo9YWMzOhjkl2muPOe3f/a7Z4eR4R4pGmJv/JZ1qfpRk67PoyFcUUkFnNWjBF0yLjQ==} dev: true - /@storybook/addon-viewport@7.6.17: - resolution: {integrity: sha512-sA0QCcf4QAMixWvn8uvRYPfkKCSl6JajJaAspoPqXSxHEpK7uwOlpg3kqFU5XJJPXD0X957M+ONgNvBzYqSpEw==} + /@storybook/addon-viewport@8.0.1: + resolution: {integrity: sha512-8p4oDI1lSicLRhbRSZUCuUAJoJrZ+FG/ccgtEV6y6a4GRMkBbUpoqTMyHQKfDqszFmr7G4lG2HVXYCura8a3zg==} dependencies: memoizerific: 1.11.3 dev: true - /@storybook/blocks@7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PsNVoe0bX1mMn4Kk3nbKZ0ItDZZ0YJnYAFJ6toAbsyBAbgzg1sce88sQinzvbn58/RT9MPKeWMPB45ZS7ggiNg==} + /@storybook/addon-webpack5-compiler-swc@1.0.2(webpack@5.90.3): + resolution: {integrity: sha512-o8PPyFCl48bkqmcwiX6RNIMBdXe96EqmB1JuMzInQX77f7lEAN6sAE17/pdlZmmRmzIEADqgumOXLKL3ViObzw==} + engines: {node: '>=18'} + dependencies: + '@swc/core': 1.4.8 + swc-loader: 0.2.6(@swc/core@1.4.8)(webpack@5.90.3) + transitivePeerDependencies: + - '@swc/helpers' + - webpack + dev: true + + /@storybook/blocks@8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-S1aPjmhS3bTvyAeUNHULWzmuGFJ59DiaV5eGv3Dg5u8BKGlYXGe39wItE4p/KR/OqkwtY5++rFHrWQiJeEP90A==} 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': 7.6.17 - '@storybook/client-logger': 7.6.17 - '@storybook/components': 7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.6.17 + '@storybook/channels': 8.0.1 + '@storybook/client-logger': 8.0.1 + '@storybook/components': 8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 8.0.1 '@storybook/csf': 0.1.2 - '@storybook/docs-tools': 7.6.17 + '@storybook/docs-tools': 8.0.1 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.6.17 - '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.17 + '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 8.0.1 + '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.1 '@types/lodash': 4.14.202 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 - markdown-to-jsx: 7.4.1(react@18.2.0) + markdown-to-jsx: 7.3.2(react@18.2.0) memoizerific: 1.11.3 polished: 4.3.1 react: 18.2.0 @@ -8217,27 +7736,24 @@ packages: util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - encoding - supports-color dev: true - /@storybook/builder-manager@7.6.17: - resolution: {integrity: sha512-Sj8hcDYiPCCMfeLzus37czl0zdrAxAz4IyYam2jBjVymrIrcDAFyL1OCZvnq33ft179QYQWhUs9qwzVmlR/ZWg==} + /@storybook/builder-manager@8.0.1: + resolution: {integrity: sha512-5iI5MoKTctxkeAW48IzemEPI+wpiML2EoB2MkXoXcWEKwnPG5zgboY5TuuKcCY3eONWpXS8DkSt9a5lpudnceQ==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.6.17 - '@storybook/manager': 7.6.17 - '@storybook/node-logger': 7.6.17 + '@storybook/core-common': 8.0.1 + '@storybook/manager': 8.0.1 + '@storybook/node-logger': 8.0.1 '@types/ejs': 3.1.5 - '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.20) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.1) browser-assert: 1.2.1 ejs: 3.1.9 - esbuild: 0.18.20 + esbuild: 0.20.1 esbuild-plugin-alias: 0.2.1 express: 4.18.2 - find-cache-dir: 3.3.2 fs-extra: 11.2.0 process: 0.11.10 util: 0.12.5 @@ -8246,32 +7762,29 @@ packages: - supports-color dev: true - /@storybook/builder-webpack5@7.6.17(esbuild@0.20.1)(typescript@5.3.3)(webpack-cli@5.1.4): - resolution: {integrity: sha512-GMaBd8/RzivuAmWrYSt9Rga3j8WLcu5LCMYiPVs+XKXsKAC8lTkV0WRWh8Nk6wTmfzsRQ2acwFjSG5oE4ClZKA==} + /@storybook/builder-webpack5@8.0.1(@swc/core@1.4.8)(esbuild@0.20.1)(typescript@5.3.3)(webpack-cli@5.1.4): + resolution: {integrity: sha512-1UOdF5Ic5Ss86VwcZ5E0h5TJT6hcQTQFF+mjSla3Yy9Q9mvWtyr4xHYnTH7RXNB0cQXbFvaPvQLnBA0aOq/8HQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@babel/core': 7.24.0 - '@storybook/channels': 7.6.17 - '@storybook/client-logger': 7.6.17 - '@storybook/core-common': 7.6.17 - '@storybook/core-events': 7.6.17 - '@storybook/core-webpack': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/preview': 7.6.17 - '@storybook/preview-api': 7.6.17 - '@swc/core': 1.4.2 + '@storybook/channels': 8.0.1 + '@storybook/client-logger': 8.0.1 + '@storybook/core-common': 8.0.1 + '@storybook/core-events': 8.0.1 + '@storybook/core-webpack': 8.0.1 + '@storybook/node-logger': 8.0.1 + '@storybook/preview': 8.0.1 + '@storybook/preview-api': 8.0.1 '@types/node': 18.19.17 '@types/semver': 7.5.7 - babel-loader: 9.1.3(@babel/core@7.24.0)(webpack@5.90.3) 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.90.3) + css-loader: 6.9.0(webpack@5.90.3) es-module-lexer: 1.4.1 express: 4.18.2 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.3.3)(webpack@5.90.3) @@ -8282,20 +7795,19 @@ packages: process: 0.11.10 semver: 7.6.0 style-loader: 3.3.4(webpack@5.90.3) - swc-loader: 0.2.6(@swc/core@1.4.2)(webpack@5.90.3) - terser-webpack-plugin: 5.3.10(@swc/core@1.4.2)(esbuild@0.20.1)(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.8)(esbuild@0.20.1)(webpack@5.90.3) ts-dedent: 2.2.0 typescript: 5.3.3 - url: 0.11.3 + url: 0.11.1 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.1(webpack@5.90.3) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack-dev-middleware: 5.3.4(webpack@5.90.3) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 transitivePeerDependencies: - '@rspack/core' - - '@swc/helpers' + - '@swc/core' - encoding - esbuild - supports-color @@ -8303,33 +7815,31 @@ packages: - webpack-cli dev: true - /@storybook/channels@7.6.17: - resolution: {integrity: sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==} + /@storybook/channels@8.0.1: + resolution: {integrity: sha512-zKhOOI/NU5w0rMGrGNlWkBLhNq7l33pRej9AJ+4rQcuJ3cc0ONkSktktYK8ThQ49I1ZOn7eS+h0BEmXX1Mr3Qg==} dependencies: - '@storybook/client-logger': 7.6.17 - '@storybook/core-events': 7.6.17 + '@storybook/client-logger': 8.0.1 + '@storybook/core-events': 8.0.1 '@storybook/global': 5.0.0 - qs: 6.11.2 telejson: 7.2.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 dev: true - /@storybook/cli@7.6.17: - resolution: {integrity: sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA==} + /@storybook/cli@8.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BLcB95Dwcd+fFl1CV2+x8hIaJ+gz76uAqUTRzvk66q2MaCe6q99RvBGcUvZnohV7u6iCd2lPv7VaF7buOriKow==} hasBin: true dependencies: '@babel/core': 7.24.0 - '@babel/preset-env': 7.23.7(@babel/core@7.24.0) '@babel/types': 7.24.0 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 7.6.17 - '@storybook/core-common': 7.6.17 - '@storybook/core-events': 7.6.17 - '@storybook/core-server': 7.6.17 - '@storybook/csf-tools': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/telemetry': 7.6.17 - '@storybook/types': 7.6.17 + '@storybook/codemod': 8.0.1 + '@storybook/core-common': 8.0.1 + '@storybook/core-events': 8.0.1 + '@storybook/core-server': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-tools': 8.0.1 + '@storybook/node-logger': 8.0.1 + '@storybook/telemetry': 8.0.1 + '@storybook/types': 8.0.1 '@types/semver': 7.5.7 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -8339,108 +7849,95 @@ packages: detect-indent: 6.1.0 envinfo: 7.11.0 execa: 5.1.1 - express: 4.18.2 find-up: 5.0.0 fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 - get-port: 5.1.1 giget: 1.2.1 globby: 11.1.0 jscodeshift: 0.15.1(@babel/preset-env@7.23.7) leven: 3.1.0 ora: 5.4.1 - prettier: 2.8.8 + prettier: 3.2.5 prompts: 2.4.2 - puppeteer-core: 2.1.1 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 - util-deprecate: 1.0.2 transitivePeerDependencies: + - '@babel/preset-env' - bufferutil - encoding + - react + - react-dom - supports-color - utf-8-validate dev: true - /@storybook/client-logger@7.6.17: - resolution: {integrity: sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/client-logger@8.0.0: - resolution: {integrity: sha512-olc1vUfaZNkXc7L8UoCdGmyBieHQbsaB+0vVoivYMSa1DHYtXE75RefU3lhMSGrkvIZmXMvfaIDmnyJIOB5FxA==} + /@storybook/client-logger@8.0.1: + resolution: {integrity: sha512-8NgJlVixYQB+c0zduoCAcOtEm4M9y776QKtmXvCaCtxyXl2uCbZFAMy6iai6ctoiVge0xiRaEzIkWKT1pHLDig==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/codemod@7.6.17: - resolution: {integrity: sha512-JuTmf2u3C4fCnjO7o3dqRgrq3ozNYfWlrRP8xuIdvT7niMap7a396hJtSKqS10FxCgKFcMAOsRgrCalH1dWxUg==} + /@storybook/codemod@8.0.1: + resolution: {integrity: sha512-2DCx++IMXEwLT6P1m/gkYzyh6MH6W+eoOMz4PX5/YGuFg2gsN0fNYPO9ltj8vJRR0nZcHJ+c8BbcCpzNFTPsvQ==} dependencies: '@babel/core': 7.24.0 '@babel/preset-env': 7.23.7(@babel/core@7.24.0) '@babel/types': 7.24.0 '@storybook/csf': 0.1.2 - '@storybook/csf-tools': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/types': 7.6.17 + '@storybook/csf-tools': 8.0.1 + '@storybook/node-logger': 8.0.1 + '@storybook/types': 8.0.1 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 11.1.0 jscodeshift: 0.15.1(@babel/preset-env@7.23.7) lodash: 4.17.21 - prettier: 2.8.8 - recast: 0.23.4 + prettier: 3.2.5 + recast: 0.23.6 + tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color dev: true - /@storybook/components@7.6.17(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lbh7GynMidA+CZcJnstVku6Nhs+YkqjYaZ+mKPugvlVhGVWv0DaaeQFVuZ8cJtUGJ/5FFU4Y+n+gylYUHkGBMA==} + /@storybook/components@8.0.1(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xrOL0CLirSnzZTtuXD+bgk1+MF36DuTG4ADD89A00dl22Uquo+MHFI9kzqxGtyb7PPpcJQjcgw/1WoSMSepPvQ==} 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-select': 1.2.2(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.57)(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.6.17 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.57)(react@18.2.0) + '@storybook/client-logger': 8.0.1 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.17 + '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.1 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - dev: true - - /@storybook/core-client@7.6.17: - resolution: {integrity: sha512-LuDbADK+DPNAOOCXOlvY09hdGVueXlDetsdOJ/DgYnSa9QSWv9Uv+F8QcEgR3QckZJbPlztKJIVLgP2n/Xkijw==} - dependencies: - '@storybook/client-logger': 7.6.17 - '@storybook/preview-api': 7.6.17 dev: true - /@storybook/core-common@7.6.17: - resolution: {integrity: sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==} + /@storybook/core-common@8.0.1: + resolution: {integrity: sha512-+t9qyJ/b/yRDCsp6zW68NsViieqCUuH6S8BpbSPWnkuGTYp98BMMGQoY4cqufUcFPuDYMzwAN7wQ5/iM5b7DYQ==} dependencies: - '@storybook/core-events': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/types': 7.6.17 - '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.17 - '@types/node-fetch': 2.6.11 - '@types/pretty-hrtime': 1.0.3 + '@storybook/core-events': 8.0.1 + '@storybook/csf-tools': 8.0.1 + '@storybook/node-logger': 8.0.1 + '@storybook/types': 8.0.1 + '@yarnpkg/fslib': 2.10.3 + '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 - esbuild: 0.18.20 - esbuild-register: 3.5.0(esbuild@0.18.20) + cross-spawn: 7.0.3 + esbuild: 0.20.1 + esbuild-register: 3.5.0(esbuild@0.20.1) + execa: 5.1.1 file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 @@ -8453,36 +7950,42 @@ packages: 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@7.6.17: - resolution: {integrity: sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==} + /@storybook/core-events@8.0.1: + resolution: {integrity: sha512-AI8W9YNNXtkC9W1wL+LV2M/hd4SJWVOGNFhwf+bGSFfGb9NLl23CIBWg8XgYVpTtil3etw5ODDgykEmUBcKsKw==} dependencies: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@7.6.17: - resolution: {integrity: sha512-KWGhTTaL1Q14FolcoKKZgytlPJUbH6sbJ1Ptj/84EYWFewcnEgVs0Zlnh1VStRZg+Rd1WC1V4yVd/bbDzxrvQA==} + /@storybook/core-server@8.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-FOgYYMOWcWxKhbd+40vCox9/lZwpbLcPsQB/ovLlY+PpX4BX/WTYcd5Q20oxxyIWU7b/8PeY8vvK8J9e0lpeaA==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 + '@babel/core': 7.24.0 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.6.17 - '@storybook/channels': 7.6.17 - '@storybook/core-common': 7.6.17 - '@storybook/core-events': 7.6.17 + '@storybook/builder-manager': 8.0.1 + '@storybook/channels': 8.0.1 + '@storybook/core-common': 8.0.1 + '@storybook/core-events': 8.0.1 '@storybook/csf': 0.1.2 - '@storybook/csf-tools': 7.6.17 - '@storybook/docs-mdx': 0.1.0 + '@storybook/csf-tools': 8.0.1 + '@storybook/docs-mdx': 3.0.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/preview-api': 7.6.17 - '@storybook/telemetry': 7.6.17 - '@storybook/types': 7.6.17 + '@storybook/manager': 8.0.1 + '@storybook/manager-api': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 8.0.1 + '@storybook/preview-api': 8.0.1 + '@storybook/telemetry': 8.0.1 + '@storybook/types': 8.0.1 '@types/detect-port': 1.3.5 '@types/node': 18.19.17 '@types/pretty-hrtime': 1.0.3 @@ -8503,7 +8006,7 @@ packages: read-pkg-up: 7.0.1 semver: 7.6.0 telejson: 7.2.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util: 0.12.5 util-deprecate: 1.0.2 @@ -8512,16 +8015,18 @@ packages: transitivePeerDependencies: - bufferutil - encoding + - react + - react-dom - supports-color - utf-8-validate dev: true - /@storybook/core-webpack@7.6.17: - resolution: {integrity: sha512-PyGrFhRM8sTONGwwLWLqBQ1HO+LBnVZ+5TOQO7ejQfdV2FWyNOzjBXm2e5jL/C6XlqiEhmL5pyHEyDBaQJQ3KA==} + /@storybook/core-webpack@8.0.1: + resolution: {integrity: sha512-QiZYA6mDgfInk10s2pXwSCGIgaUWeix/eo9Iizby3uGlNIu3XOfqfxvCwAE5EjlpLOaUdUbrB9UYr57k0x1PAg==} dependencies: - '@storybook/core-common': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/types': 7.6.17 + '@storybook/core-common': 8.0.1 + '@storybook/node-logger': 8.0.1 + '@storybook/types': 8.0.1 '@types/node': 18.19.17 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -8529,26 +8034,26 @@ packages: - supports-color dev: true - /@storybook/csf-plugin@7.6.17: - resolution: {integrity: sha512-xTHv9BUh3bkDVCvcbmdfVF0/e96BdrEgqPJ3G3RmKbSzWLOkQ2U9yiPfHzT0KJWPhVwj12fjfZp0zunu+pcS6Q==} + /@storybook/csf-plugin@8.0.1: + resolution: {integrity: sha512-n3CEGP64gNUjyTKwByS5fpi7TnmUECsLpWH7KE/mpJVRm4omu/xlS1mEgikOxWFgxlXzotM1mAvjeWidvnMq/g==} dependencies: - '@storybook/csf-tools': 7.6.17 + '@storybook/csf-tools': 8.0.1 unplugin: 1.7.1 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@7.6.17: - resolution: {integrity: sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ==} + /@storybook/csf-tools@8.0.1: + resolution: {integrity: sha512-jG7dP0DsYpV+sdp/EV0/mcuZ6bzaTRsX3N/vZySKTRCvef72IGyxAeZrAg4OoOla0B2t/wxc8RZCG8NGaxHu4Q==} dependencies: '@babel/generator': 7.23.6 '@babel/parser': 7.24.0 '@babel/traverse': 7.24.0(supports-color@5.5.0) '@babel/types': 7.24.0 '@storybook/csf': 0.1.2 - '@storybook/types': 7.6.17 + '@storybook/types': 8.0.1 fs-extra: 11.2.0 - recast: 0.23.4 + recast: 0.23.6 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color @@ -8566,16 +8071,16 @@ packages: type-fest: 2.19.0 dev: true - /@storybook/docs-mdx@0.1.0: - resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} + /@storybook/docs-mdx@3.0.0: + resolution: {integrity: sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ==} dev: true - /@storybook/docs-tools@7.6.17: - resolution: {integrity: sha512-bYrLoj06adqklyLkEwD32C0Ww6t+9ZVvrJHiVT42bIhTRpFiFPAetl1a9KPHtFLnfduh4n2IxIr1jv32ThPDTA==} + /@storybook/docs-tools@8.0.1: + resolution: {integrity: sha512-xgCe0wB3wHS+uD5xxl1vH5W6/BhvNkEkUtcfpEgA7XUkBqymLq+A6aMuKBNDi/rQI2KLnq8INirFrKaSZXKcmQ==} dependencies: - '@storybook/core-common': 7.6.17 - '@storybook/preview-api': 7.6.17 - '@storybook/types': 7.6.17 + '@storybook/core-common': 8.0.1 + '@storybook/preview-api': 8.0.1 + '@storybook/types': 8.0.1 '@types/doctrine': 0.0.3 assert: 2.1.0 doctrine: 3.0.0 @@ -8589,29 +8094,40 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true - /@storybook/instrumenter@7.6.17: - resolution: {integrity: sha512-zTLIPTt1fvlWgkIVUyQpF327iVE+EiPdpM0Or0aARaNfIikPRBTcjU+6cK96E+Ust2E1qKajEjIuv4i4lLQPng==} + /@storybook/icons@1.2.9(react-dom@18.2.0)(react@18.2.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) + dev: true + + /@storybook/instrumenter@8.0.1: + resolution: {integrity: sha512-r01qrQZiQnf1eJ/e4NYGbG13TVU6CTwtT0KdgiJTAn/XU4QEsuWBgiudmx5+ko7zDjHMli4XW5yDgCZyefxqaw==} dependencies: - '@storybook/channels': 7.6.17 - '@storybook/client-logger': 7.6.17 - '@storybook/core-events': 7.6.17 + '@storybook/channels': 8.0.1 + '@storybook/client-logger': 8.0.1 + '@storybook/core-events': 8.0.1 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.6.17 - '@vitest/utils': 0.34.7 + '@storybook/preview-api': 8.0.1 + '@vitest/utils': 1.3.1 util: 0.12.5 dev: true - /@storybook/manager-api@7.6.17(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==} + /@storybook/manager-api@8.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-LEUU8ueHAl8Vg8/NJjuMkqU+CQKhlACSphxMk4P6LWcmRl26/4lzcecH31NflxyjDt+HmCNji3mG81MhrBur9g==} dependencies: - '@storybook/channels': 7.6.17 - '@storybook/client-logger': 7.6.17 - '@storybook/core-events': 7.6.17 + '@storybook/channels': 8.0.1 + '@storybook/client-logger': 8.0.1 + '@storybook/core-events': 8.0.1 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/router': 7.6.17 - '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.17 + '@storybook/router': 8.0.1 + '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.1 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -8623,92 +8139,72 @@ packages: - react-dom dev: true - /@storybook/manager@7.6.17: - resolution: {integrity: sha512-A1LDDIqMpwRzq/dqkbbiza0QI04o4ZHCl2a3UMDZUV/+QLc2nsr2DAaLk4CVL4/cIc5zGqmIcaOTvprx2YKVBw==} - dev: true - - /@storybook/mdx2-csf@1.1.0: - resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} + /@storybook/manager@8.0.1: + resolution: {integrity: sha512-UbOSz6dNhugFTXdBgCdQTa8ZQdlPmpjN1fUY3bxpv+Ii3YN4U/CDWlAmmOUKlKi/Oj2ZNQBJtJWYUe8DkerlfA==} dev: true - /@storybook/node-logger@7.6.17: - resolution: {integrity: sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==} - - /@storybook/postinstall@7.6.17: - resolution: {integrity: sha512-WaWqB8o9vUc9aaVls+povQSVirf1Xd1LZcVhUKfAocAF3mzYUsnJsVqvnbjRj/F96UFVihOyDt9Zjl/9OvrCvQ==} - dev: true + /@storybook/node-logger@8.0.1: + resolution: {integrity: sha512-uYWKSz9NhLOe2O60sJ4UPT1nzvbH0oR/YjK+OP3B4BySa6e195xY/5Uhou4lEaPSNU/0XXaLHCYeXjqeBjZopA==} - /@storybook/preset-react-webpack@7.6.17(@babel/core@7.24.0)(@swc/core@1.4.2)(@types/webpack@5.28.5)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack-hot-middleware@2.26.1): - resolution: {integrity: sha512-gn/LvIbll9loOkzwbFlxzOZGmJ6t1vF2/gfi+p/N/AifDYe8+LVM1QV4KRVKt6UEJwsQd79lKf7vPH92AQaKKQ==} - engines: {node: '>=16.0.0'} + /@storybook/preset-react-webpack@8.0.1(@swc/core@1.4.8)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4): + resolution: {integrity: sha512-PqEKrNy2efVYuhDJXtq+eMvsGy7NUngec4AIaGwX2CRG8bJsAx9x6p8f2hmRwNn9fkhloPyM/+ryI31QW/ZgCA==} + engines: {node: '>=18.0.0'} peerDependencies: - '@babel/core': ^7.22.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 typescript: '*' peerDependenciesMeta: - '@babel/core': - optional: true typescript: optional: true dependencies: - '@babel/core': 7.24.0 - '@babel/preset-flow': 7.23.3(@babel/core@7.24.0) - '@babel/preset-react': 7.23.3(@babel/core@7.24.0) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(@types/webpack@5.28.5)(react-refresh@0.14.0)(webpack-dev-server@4.15.1)(webpack-hot-middleware@2.26.1)(webpack@5.90.3) - '@storybook/core-webpack': 7.6.17 - '@storybook/docs-tools': 7.6.17 - '@storybook/node-logger': 7.6.17 - '@storybook/react': 7.6.17(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) + '@storybook/core-webpack': 8.0.1 + '@storybook/docs-tools': 8.0.1 + '@storybook/node-logger': 8.0.1 + '@storybook/react': 8.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.3.3)(webpack@5.90.3) '@types/node': 18.19.17 '@types/semver': 7.5.7 - babel-plugin-add-react-displayname: 0.0.5 + find-up: 5.0.0 fs-extra: 11.2.0 magic-string: 0.30.7 react: 18.2.0 react-docgen: 7.0.3 react-dom: 18.2.0(react@18.2.0) - react-refresh: 0.14.0 + resolve: 1.22.8 semver: 7.6.0 + tsconfig-paths: 4.2.0 typescript: 5.3.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - - '@types/webpack' - encoding - esbuild - - sockjs-client - supports-color - - type-fest - uglify-js - webpack-cli - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve dev: true - /@storybook/preview-api@7.6.17: - resolution: {integrity: sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==} + /@storybook/preview-api@8.0.1: + resolution: {integrity: sha512-grIox2BWEzaxXfBTIc/ODO/DerGk8PGdH6T/GIDgRxbunWndfVRT57j9sUfXuYn7nb4fPFSFD7N3gYhznpslHg==} dependencies: - '@storybook/channels': 7.6.17 - '@storybook/client-logger': 7.6.17 - '@storybook/core-events': 7.6.17 + '@storybook/channels': 8.0.1 + '@storybook/client-logger': 8.0.1 + '@storybook/core-events': 8.0.1 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/types': 7.6.17 + '@storybook/types': 8.0.1 '@types/qs': 6.9.11 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.11.2 - synchronous-promise: 2.0.17 + tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true - /@storybook/preview@7.6.17: - resolution: {integrity: sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw==} + /@storybook/preview@8.0.1: + resolution: {integrity: sha512-HSYwtMFJPJuNPfrBizCjDH/P8ZcyzBpgQg+/D6xcI4odSY7j2ub7QWCvbrSv1/llp0lMHDDRsFyT847qRPgwuQ==} dev: true /@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.3.3)(webpack@5.90.3): @@ -8725,13 +8221,13 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.3.3) tslib: 2.6.2 typescript: 5.3.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color dev: true - /@storybook/react-dom-shim@7.6.17(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw==} + /@storybook/react-dom-shim@8.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-WQJiImmR4ToJTLYICwm50c3c8+vv3PFzvkoW+sMxQbYoJBJM8lfvbvsQu80aedG6C1VGEMe68mXSXSQqTvL+bA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8740,24 +8236,20 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-webpack5@7.6.17(@babel/core@7.24.0)(@swc/core@1.4.2)(@types/webpack@5.28.5)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack-hot-middleware@2.26.1): - resolution: {integrity: sha512-qGc2JxaSmvPXV7ndxA/8qPtPLK7lAwejL/QdrzLXhxEmVdZLMew640FBYgOV/zWnehV3BnivThln/8PsQyst/g==} - engines: {node: '>=16.0.0'} + /@storybook/react-webpack5@8.0.1(@swc/core@1.4.8)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4): + resolution: {integrity: sha512-yyaIVpAzPR3DmslYiQaBZ6Mnro0Hf1PEhc817AhhVfqo3Zf3UWY6voreXJsgj4WPtUzpCw2lNWnoZsjG1/V7eA==} + engines: {node: '>=18.0.0'} peerDependencies: - '@babel/core': ^7.22.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' + typescript: '>= 4.2.x' peerDependenciesMeta: - '@babel/core': - optional: true typescript: optional: true dependencies: - '@babel/core': 7.24.0 - '@storybook/builder-webpack5': 7.6.17(esbuild@0.20.1)(typescript@5.3.3)(webpack-cli@5.1.4) - '@storybook/preset-react-webpack': 7.6.17(@babel/core@7.24.0)(@swc/core@1.4.2)(@types/webpack@5.28.5)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack-hot-middleware@2.26.1) - '@storybook/react': 7.6.17(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) + '@storybook/builder-webpack5': 8.0.1(@swc/core@1.4.8)(esbuild@0.20.1)(typescript@5.3.3)(webpack-cli@5.1.4) + '@storybook/preset-react-webpack': 8.0.1(@swc/core@1.4.8)(esbuild@0.20.1)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(webpack-cli@5.1.4) + '@storybook/react': 8.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) '@types/node': 18.19.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8765,38 +8257,30 @@ packages: transitivePeerDependencies: - '@rspack/core' - '@swc/core' - - '@swc/helpers' - - '@types/webpack' - encoding - esbuild - - sockjs-client - supports-color - - type-fest - uglify-js - webpack-cli - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve dev: true - /@storybook/react@7.6.17(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3): - resolution: {integrity: sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA==} - engines: {node: '>=16.0.0'} + /@storybook/react@8.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3): + resolution: {integrity: sha512-8d3nklcf2ePC/23kPVdKyQGjCfgnOeETU3b/DxA3bBE6T9EkiknjH4JJebBkmYh21oMgDYn5RpCrP73niyc0MQ==} + 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: '*' + typescript: '>= 4.2.x' peerDependenciesMeta: typescript: optional: true dependencies: - '@storybook/client-logger': 7.6.17 - '@storybook/core-client': 7.6.17 - '@storybook/docs-tools': 7.6.17 + '@storybook/client-logger': 8.0.1 + '@storybook/docs-tools': 8.0.1 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.6.17 - '@storybook/react-dom-shim': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.17 + '@storybook/preview-api': 8.0.1 + '@storybook/react-dom-shim': 8.0.1(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.1 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 18.19.17 @@ -8810,6 +8294,7 @@ packages: 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) + semver: 7.6.0 ts-dedent: 2.2.0 type-fest: 2.19.0 typescript: 5.3.3 @@ -8819,20 +8304,20 @@ packages: - supports-color dev: true - /@storybook/router@7.6.17: - resolution: {integrity: sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==} + /@storybook/router@8.0.1: + resolution: {integrity: sha512-lTh0veiuQIygavalQu+n/fqZoyR1RoM6kLMPg9xLfH30aFL8I+e4G9Iq9782EguSMK1ya+QYjNe7Zo/CZCfezw==} dependencies: - '@storybook/client-logger': 7.6.17 + '@storybook/client-logger': 8.0.1 memoizerific: 1.11.3 qs: 6.11.2 dev: true - /@storybook/telemetry@7.6.17: - resolution: {integrity: sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA==} + /@storybook/telemetry@8.0.1: + resolution: {integrity: sha512-A4flTBHnchC3Ly9ENx0wRDxo1o/WRPmJe+zRCRcpJleSlpaF8wrWSTP4y+b25HJiJTEhTux7XD8qd1MckErNCA==} dependencies: - '@storybook/client-logger': 7.6.17 - '@storybook/core-common': 7.6.17 - '@storybook/csf-tools': 7.6.17 + '@storybook/client-logger': 8.0.1 + '@storybook/core-common': 8.0.1 + '@storybook/csf-tools': 8.0.1 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 @@ -8843,44 +8328,30 @@ packages: - supports-color dev: true - /@storybook/test@7.6.17(vitest@1.3.1): - resolution: {integrity: sha512-WGrmUUtKiuq3bzDsN4MUvluGcX120jwczMik1GDTyxS+JBoe7P0t2Y8dDuVs/l3nZd1J7qY4z0RGxMDYqONIOw==} + /@storybook/test@8.0.1(vitest@1.3.1): + resolution: {integrity: sha512-GCHqLTqbPLog/VcNrdDnj7XzBflzsNrZeuGKvdwJBa1UQ9DD/Ozg8BGcgitxBtLxBDLx1XclIQvP9kMEgxkaZA==} dependencies: - '@storybook/client-logger': 7.6.17 - '@storybook/core-events': 7.6.17 - '@storybook/instrumenter': 7.6.17 - '@storybook/preview-api': 7.6.17 - '@testing-library/dom': 9.3.3 - '@testing-library/jest-dom': 6.1.6(vitest@1.3.1) - '@testing-library/user-event': 14.3.0(@testing-library/dom@9.3.3) - '@types/chai': 4.3.11 - '@vitest/expect': 0.34.7 - '@vitest/spy': 0.34.7 - chai: 4.4.0 + '@storybook/client-logger': 8.0.1 + '@storybook/core-events': 8.0.1 + '@storybook/instrumenter': 8.0.1 + '@storybook/preview-api': 8.0.1 + '@testing-library/dom': 9.3.4 + '@testing-library/jest-dom': 6.4.2(vitest@1.3.1) + '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) + '@vitest/expect': 1.3.1 + '@vitest/spy': 1.3.1 + chai: 4.4.1 util: 0.12.5 transitivePeerDependencies: - '@jest/globals' + - '@types/bun' - '@types/jest' - jest - vitest dev: true - /@storybook/theming@7.6.17(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@storybook/client-logger': 7.6.17 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@storybook/theming@8.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Yu6ybemarPN3RBdsljtvpEVNqnqG1YxDLOmkzl1MFtJ1uA5Zd5mTMjc37iD0WDvLOk8mc1HmEqB5+fDrX0U4Vw==} + /@storybook/theming@8.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-TUmSHRh3YrpJ25DYjD+9PpJaq9Qf9P1S2xpwfNARM9r2KpkMF1/RgqnnQgZpP9od0Tzvkji7XPzxPU//EmQKEA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8891,18 +8362,17 @@ packages: optional: true dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@storybook/client-logger': 8.0.0 + '@storybook/client-logger': 8.0.1 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/types@7.6.17: - resolution: {integrity: sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==} + /@storybook/types@8.0.1: + resolution: {integrity: sha512-JfNWLg+/dcLgLmIyTVSkM42cYgwhdIfMoLyhA1XR62Ssb9/PyuicLJYKSKS9blTkPtVEYJqcz51fmE9K67ym4w==} dependencies: - '@storybook/channels': 7.6.17 - '@types/babel__core': 7.20.5 + '@storybook/channels': 8.0.1 '@types/express': 4.17.21 file-system-cache: 2.3.0 dev: true @@ -8919,88 +8389,88 @@ packages: '@styled-system/core': 5.1.2 dev: false - /@swc/core-darwin-arm64@1.4.2: - resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==} + /@swc/core-darwin-arm64@1.4.8: + resolution: {integrity: sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.4.2: - resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==} + /@swc/core-darwin-x64@1.4.8: + resolution: {integrity: sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.4.2: - resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==} + /@swc/core-linux-arm-gnueabihf@1.4.8: + resolution: {integrity: sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.4.2: - resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==} + /@swc/core-linux-arm64-gnu@1.4.8: + resolution: {integrity: sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.4.2: - resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==} + /@swc/core-linux-arm64-musl@1.4.8: + resolution: {integrity: sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.4.2: - resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==} + /@swc/core-linux-x64-gnu@1.4.8: + resolution: {integrity: sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.4.2: - resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==} + /@swc/core-linux-x64-musl@1.4.8: + resolution: {integrity: sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.4.2: - resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==} + /@swc/core-win32-arm64-msvc@1.4.8: + resolution: {integrity: sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.4.2: - resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==} + /@swc/core-win32-ia32-msvc@1.4.8: + resolution: {integrity: sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.4.2: - resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==} + /@swc/core-win32-x64-msvc@1.4.8: + resolution: {integrity: sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.4.2: - resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==} + /@swc/core@1.4.8: + resolution: {integrity: sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -9010,24 +8480,26 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.5 + '@swc/types': 0.1.6 optionalDependencies: - '@swc/core-darwin-arm64': 1.4.2 - '@swc/core-darwin-x64': 1.4.2 - '@swc/core-linux-arm-gnueabihf': 1.4.2 - '@swc/core-linux-arm64-gnu': 1.4.2 - '@swc/core-linux-arm64-musl': 1.4.2 - '@swc/core-linux-x64-gnu': 1.4.2 - '@swc/core-linux-x64-musl': 1.4.2 - '@swc/core-win32-arm64-msvc': 1.4.2 - '@swc/core-win32-ia32-msvc': 1.4.2 - '@swc/core-win32-x64-msvc': 1.4.2 + '@swc/core-darwin-arm64': 1.4.8 + '@swc/core-darwin-x64': 1.4.8 + '@swc/core-linux-arm-gnueabihf': 1.4.8 + '@swc/core-linux-arm64-gnu': 1.4.8 + '@swc/core-linux-arm64-musl': 1.4.8 + '@swc/core-linux-x64-gnu': 1.4.8 + '@swc/core-linux-x64-musl': 1.4.8 + '@swc/core-win32-arm64-msvc': 1.4.8 + '@swc/core-win32-ia32-msvc': 1.4.8 + '@swc/core-win32-x64-msvc': 1.4.8 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/types@0.1.5: - resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + /@swc/types@0.1.6: + resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} + dependencies: + '@swc/counter': 0.1.3 /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -9108,8 +8580,8 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /@testing-library/dom@9.3.3: - resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + /@testing-library/dom@9.3.4: + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} dependencies: '@babel/code-frame': 7.23.5 @@ -9122,17 +8594,20 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.1.6(vitest@1.3.1): - resolution: {integrity: sha512-YwuiOdYEcxhfC2u5iNKlvg2Q5MgbutovP6drq7J1HrCbvR+G58BbtoCoq+L/kNlrNFsu2Kt3jaFAviLVxYHJZg==} + /@testing-library/jest-dom@6.4.2(vitest@1.3.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: @@ -9145,19 +8620,19 @@ packages: aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 + dom-accessibility-api: 0.6.3 lodash: 4.17.21 redent: 3.0.0 vitest: 1.3.1(@types/node@20.11.19)(jsdom@22.1.0) dev: true - /@testing-library/user-event@14.3.0(@testing-library/dom@9.3.3): - resolution: {integrity: sha512-P02xtBBa8yMaLhK8CzJCIns8rqwnF6FxhR9zs810flHOBXUYCFjLd8Io1rQrAkQRWEmW2PGdZIEdMxf/KLsqFA==} + /@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.3 + '@testing-library/dom': 9.3.4 dev: true /@tootallnate/once@1.1.2: @@ -9295,10 +8770,6 @@ packages: '@types/responselike': 1.0.3 dev: true - /@types/chai@4.3.11: - resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} - dev: true - /@types/chrome@0.0.254: resolution: {integrity: sha512-svkOGKwA+6ZZuk9xtrYun8MYpNY/9hD17rgZ19v3KunhsK1ZOKaMESw12/1AXLh1u3UPA8jQIRi2370DXv9wgw==} dependencies: @@ -9635,10 +9106,6 @@ packages: resolution: {integrity: sha512-Kpi2GXQyYJdjL8mFclL1eDgihn1SIzorMZjD94kdPZh9E4VxGOeyjPxi5LpsM4Zku7P0reqegZTt2GxhmA9VBg==} dev: true - /@types/find-cache-dir@3.2.1: - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} - dev: true - /@types/geojson@7946.0.13: resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==} dev: true @@ -9662,12 +9129,6 @@ packages: form-data: 2.5.1 dev: true - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.11.19 - dev: true - /@types/har-format@1.2.15: resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} dev: true @@ -9724,22 +9185,6 @@ packages: resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} 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/jsdom@21.1.3: resolution: {integrity: sha512-1zzqSP+iHJYV4lB3lZhNBa012pubABkj9yG/GuXuf6LZH1cSPIJBqFDrm5JX65HHt6VOnNYdTui/0ySerRbMgA==} dependencies: @@ -9808,10 +9253,6 @@ packages: resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} dev: true - /@types/mime-types@2.1.4: - resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} - dev: true - /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -10093,12 +9534,12 @@ packages: source-map: 0.6.1 dev: true - /@types/webpack@5.28.5(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4): + /@types/webpack@5.28.5(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4): resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} dependencies: '@types/node': 20.11.19 tapable: 2.2.1 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -10117,22 +9558,6 @@ packages: dependencies: '@types/node': 20.11.19 - /@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 - /@types/yauzl@2.10.0: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} dependencies: @@ -10422,14 +9847,6 @@ packages: - supports-color dev: true - /@vitest/expect@0.34.7: - resolution: {integrity: sha512-G9iEtwrD6ZQ4MVHZufif9Iqz3eLtuwBBNx971fNAGPaugM7ftAWjQN+ob2zWhtzURp8RK3zGXOxVb01mFo3zAQ==} - dependencies: - '@vitest/spy': 0.34.7 - '@vitest/utils': 0.34.7 - chai: 4.4.0 - dev: true - /@vitest/expect@1.3.1: resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} dependencies: @@ -10454,26 +9871,12 @@ packages: pretty-format: 29.7.0 dev: true - /@vitest/spy@0.34.7: - resolution: {integrity: sha512-NMMSzOY2d8L0mcOt4XcliDOS1ISyGlAXuQtERWVOoVHnKwmG+kKhinAiGw3dTtMQWybfa89FG8Ucg9tiC/FhTQ==} - dependencies: - tinyspy: 2.2.0 - dev: true - /@vitest/spy@1.3.1: resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} dependencies: tinyspy: 2.2.0 dev: true - /@vitest/utils@0.34.7: - resolution: {integrity: sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==} - dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true - /@vitest/utils@1.3.1: resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} dependencies: @@ -10627,7 +10030,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack-dev-server@4.15.1)(webpack@5.90.3) /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.90.3): @@ -10637,7 +10040,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack-dev-server@4.15.1)(webpack@5.90.3) /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack@5.90.3): @@ -10651,7 +10054,7 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack-dev-server@4.15.1)(webpack@5.90.3) webpack-dev-server: 4.15.1(webpack-cli@5.1.4)(webpack@5.90.3) @@ -10661,13 +10064,13 @@ packages: /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20): + /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.20.1): resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} engines: {node: '>=14.15.0'} peerDependencies: esbuild: '>=0.10.0' dependencies: - esbuild: 0.18.20 + esbuild: 0.20.1 tslib: 2.6.2 dev: true @@ -10970,11 +10373,6 @@ packages: stream-demux: 10.0.1 dev: true - /agent-base@5.1.1: - resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} - engines: {node: '>= 6.0.0'} - dev: true - /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -10996,6 +10394,7 @@ packages: /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + requiresBuild: true dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 @@ -11042,8 +10441,8 @@ packages: require-from-string: 2.0.2 uri-js: 4.4.1 - /alex-sdk@0.1.24(@stacks/network@6.8.1)(@stacks/transactions@6.9.0): - resolution: {integrity: sha512-Uz8atbx3vwZHXKSwUWXgWJ8mWNbpmqXtHGReHlCmW1E/u7A92+bhJpokpqkOPRLccsFn7Wndo985+yLfO0R7kw==} + /alex-sdk@0.1.26(@stacks/network@6.8.1)(@stacks/transactions@6.9.0): + resolution: {integrity: sha512-uUjbONoAit6htxZGLOFev8v2h59kE31fM1X9efH0Yi1eLXYSSXojj+iFPTlQTQvIysyseXGxkX4VVTc9aQ13sg==} engines: {node: '>=10'} peerDependencies: '@stacks/network': '*' @@ -11166,6 +10565,7 @@ packages: engines: {node: '>=10'} dependencies: tslib: 2.6.2 + dev: false /aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} @@ -11333,10 +10733,6 @@ packages: hasBin: true dev: true - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: true - /async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} dependencies: @@ -11444,36 +10840,6 @@ packages: '@babel/core': 7.24.0 dev: true - /babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.90.3): - resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' - dependencies: - '@babel/core': 7.24.0 - find-cache-dir: 4.0.0 - schema-utils: 4.2.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) - dev: true - - /babel-plugin-add-react-displayname@0.0.5: - resolution: {integrity: sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==} - 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.22.5 - '@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-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -11661,23 +11027,11 @@ packages: sha256-uint8array: 0.10.7 dev: false - /bitcoinjs-lib@6.1.3: - resolution: {integrity: sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==} - engines: {node: '>=8.0.0'} - dependencies: - '@noble/hashes': 1.3.3 - bech32: 2.0.0 - bip174: 2.1.1 - bs58check: 3.0.1 - typeforce: 1.18.0 - varuint-bitcoin: 1.1.2 - dev: false - /bitcoinjs-lib@6.1.5: resolution: {integrity: sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==} engines: {node: '>=8.0.0'} dependencies: - '@noble/hashes': 1.3.3 + '@noble/hashes': 1.3.2 bech32: 2.0.0 bip174: 2.1.1 bs58check: 3.0.1 @@ -11910,16 +11264,10 @@ packages: /bs58check@3.0.1: resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} dependencies: - '@noble/hashes': 1.3.3 + '@noble/hashes': 1.3.2 bs58: 5.0.0 dev: false - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: true - /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true @@ -12096,11 +11444,6 @@ packages: type-fest: 2.19.0 dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - /camelcase@7.0.1: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} @@ -12148,6 +11491,19 @@ packages: type-detect: 4.0.8 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'} @@ -12275,6 +11631,19 @@ packages: optional: true dev: true + /chromatic@11.1.0: + resolution: {integrity: sha512-0fGXzWqz7PTXmjYf+aSYB4jOUgDN/b8zkl6i8Syt+qGdhqqeW8Q1tHnHToC+eSuMxDLNVAVq28cMeYnRxL3MOA==} + 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-launcher@0.15.1: resolution: {integrity: sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==} engines: {node: '>=12.13.0'} @@ -12368,6 +11737,7 @@ packages: /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + requiresBuild: true dev: true /clean-webpack-plugin@4.0.0(webpack@5.90.3): @@ -12377,7 +11747,7 @@ packages: webpack: '>=4.0.0 <6.0.0' dependencies: del: 4.1.1 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /cli-boxes@3.0.0: @@ -12764,7 +12134,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /core-js-compat@3.35.0: @@ -12980,29 +12350,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /css-loader@6.10.0(webpack@5.90.3): - resolution: {integrity: sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==} - 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.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) - postcss-value-parser: 4.2.0 - semver: 7.6.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) - dev: true - /css-loader@6.9.0(webpack@5.90.3): resolution: {integrity: sha512-3I5Nu4ytWlHvOP6zItjiHlefBNtrH+oehq8tnQa2kO305qpVyx9XNIT1CXIj5bgCJs7qICBCkgCYxQLKPANoLA==} engines: {node: '>= 12.13.0'} @@ -13017,8 +12364,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.35) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) - dev: false + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) /css-prefers-color-scheme@9.0.1(postcss@8.4.35): resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==} @@ -13704,6 +13050,7 @@ packages: /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -13802,6 +13149,10 @@ packages: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true + /dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dev: true + /dom-confetti@0.2.2: resolution: {integrity: sha512-+UVH9Y85qmpTnbmFURwLWjqLIykyIrsNSRkPX/eFlBuOURz9RDX8JoZHnajZHyFuCV0w/K3+tZK0ztfoTw6ejg==} dev: false @@ -13920,13 +13271,12 @@ packages: webpack: ^4 || ^5 dependencies: dotenv-defaults: 2.0.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} - dev: false /dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} @@ -14286,7 +13636,7 @@ packages: esbuild: 0.19.11 get-tsconfig: 4.7.2 loader-utils: 2.0.4 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-sources: 1.4.3 dev: true @@ -14294,47 +13644,17 @@ packages: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} dev: true - /esbuild-register@3.5.0(esbuild@0.18.20): + /esbuild-register@3.5.0(esbuild@0.20.1): resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} peerDependencies: esbuild: '>=0.12 <1' dependencies: debug: 4.3.4(supports-color@5.5.0) - esbuild: 0.18.20 + esbuild: 0.20.1 transitivePeerDependencies: - supports-color dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /esbuild@0.19.11: resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} engines: {node: '>=12'} @@ -14417,6 +13737,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + /escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -14786,6 +14111,10 @@ packages: /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -14890,18 +14219,6 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true - /extract-zip@1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true - dependencies: - concat-stream: 1.6.2 - debug: 2.6.9 - mkdirp: 0.5.6 - yauzl: 2.10.0 - transitivePeerDependencies: - - supports-color - dev: true - /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -14972,12 +14289,6 @@ packages: dependencies: websocket-driver: 0.7.4 - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: true - /fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: @@ -15017,7 +14328,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /file-size@1.0.0: @@ -15085,14 +14396,6 @@ packages: pkg-dir: 4.2.0 dev: true - /find-cache-dir@4.0.0: - resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} - engines: {node: '>=14.16'} - dependencies: - common-path-prefix: 3.0.0 - pkg-dir: 7.0.0 - dev: true - /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true @@ -15224,7 +14527,7 @@ packages: semver: 7.6.0 tapable: 1.1.3 typescript: 5.3.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.3.3)(webpack@5.90.3): @@ -15247,7 +14550,7 @@ packages: semver: 7.6.0 tapable: 2.2.1 typescript: 5.3.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /form-data-encoder@2.1.4: @@ -15518,6 +14821,7 @@ packages: /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + dev: false /get-npm-tarball-url@2.1.0: resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} @@ -15533,11 +14837,6 @@ packages: resolution: {integrity: sha512-41eOxtlGgHQRbFyA8KTH+w+32Em3cRdfBud7j67ulzmIfmaHX9doq47s0fa4P5o9H64BZX9nrYI6sJvk46Op+Q==} dev: true - /get-port@5.1.1: - resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} - engines: {node: '>=8'} - dev: true - /get-port@7.0.0: resolution: {integrity: sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==} engines: {node: '>=16'} @@ -15602,8 +14901,8 @@ packages: tar: 6.2.0 dev: true - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} dev: true /glob-parent@5.1.2: @@ -15952,6 +15251,18 @@ packages: 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-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} dependencies: @@ -15997,6 +15308,12 @@ packages: - supports-color dev: true + /hast-util-to-string@3.0.0: + resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + dependencies: + '@types/hast': 3.0.4 + dev: true + /hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: @@ -16103,7 +15420,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /htmlparser2@6.1.0: @@ -16230,16 +15547,6 @@ packages: resolve-alpn: 1.2.1 dev: true - /https-proxy-agent@4.0.0: - resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} - engines: {node: '>= 6.0.0'} - dependencies: - agent-base: 5.1.1 - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -16446,6 +15753,7 @@ packages: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 + dev: false /invert-kv@3.0.1: resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==} @@ -16464,9 +15772,9 @@ packages: resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} engines: {node: '>= 10'} - /is-absolute-url@3.0.3: - resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} - engines: {node: '>=8'} + /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-absolute@0.1.7: @@ -16940,19 +16248,6 @@ packages: 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.0 - '@babel/parser': 7.24.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /istanbul-lib-instrument@6.0.1: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} @@ -17032,52 +16327,8 @@ packages: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} dev: true - /jed@1.1.1: - resolution: {integrity: sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==} - dev: true - - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.19 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - 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.11.19 - dev: true - - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - 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.11.19 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 + /jed@1.1.1: + resolution: {integrity: sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==} dev: true /jest-worker@27.5.1: @@ -17088,16 +16339,6 @@ packages: merge-stream: 2.0.0 supports-color: 8.1.1 - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 20.11.19 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -17192,7 +16433,7 @@ packages: micromatch: 4.0.5 neo-async: 2.6.2 node-dir: 0.1.17 - recast: 0.23.4 + recast: 0.23.6 temp: 0.8.4 write-file-atomic: 2.4.3 transitivePeerDependencies: @@ -17418,10 +16659,6 @@ packages: engines: {node: '>=12.20'} dev: true - /just-performance@4.3.0: - resolution: {integrity: sha512-L7RjvtJsL0QO8xFs5wEoDDzzJwoiowRw6Rn/GnvldlchS2JQr9wFYPiwZcDfrbbujEKqKN0tvENdbjXdYhDp5Q==} - dev: false - /jwa@1.4.1: resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} dependencies: @@ -17521,7 +16758,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: app-root-dir: 1.0.2 - dotenv: 16.4.5 + dotenv: 16.3.1 dotenv-expand: 10.0.0 dev: true @@ -17674,12 +16911,6 @@ packages: lightningcss-win32-x64-msvc: 1.23.0 dev: true - /limiter@2.1.0: - resolution: {integrity: sha512-361TYz6iay6n+9KvUUImqdLuFigK+K79qrUtBsXhJTLdH4rIt/r1y8r1iozwh8KbZNpujbFTSh74mJ7bwbAMOw==} - dependencies: - just-performance: 4.3.0 - dev: false - /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -18008,12 +17239,6 @@ packages: dev: true optional: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: true - /map-age-cleaner@0.1.3: resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} engines: {node: '>=6'} @@ -18051,8 +17276,12 @@ packages: engines: {node: '>=16'} dev: true - /markdown-to-jsx@7.4.1(react@18.2.0): - resolution: {integrity: sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==} + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: true + + /markdown-to-jsx@7.3.2(react@18.2.0): + resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' @@ -18080,10 +17309,13 @@ packages: inherits: 2.0.4 safe-buffer: 5.2.1 - /mdast-util-definitions@4.0.0: - resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} dependencies: - unist-util-visit: 2.0.3 + '@types/mdast': 4.0.3 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 dev: true /mdast-util-from-markdown@0.8.5: @@ -18117,6 +17349,75 @@ packages: - supports-color dev: true + /mdast-util-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + dependencies: + '@types/mdast': 4.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + dev: true + + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + markdown-table: 3.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + dependencies: + mdast-util-from-markdown: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /mdast-util-mdx-expression@2.0.0: resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} dependencies: @@ -18209,10 +17510,6 @@ packages: zwitch: 2.0.4 dev: true - /mdast-util-to-string@1.1.0: - resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} - dev: true - /mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: true @@ -18298,6 +17595,12 @@ packages: '@scure/base': 1.1.5 dev: false + /micro-packed@0.5.3: + resolution: {integrity: sha512-zWRoH+qUb/ZMp9gVZhexvRGCENDM5HEQF4sflqpdilUHWK2/zKR7/MT8GBctnTwbhNJwy1iuk5q6+TYP7/twYA==} + dependencies: + '@scure/base': 1.1.5 + dev: false + /microdiff@1.3.2: resolution: {integrity: sha512-pKy60S2febliZIbwdfEQKTtL5bLNxOyiRRmD400gueYl9XcHyNGxzHSlJWn9IMHwYXT0yohPYL08+bGozVk8cQ==} dev: true @@ -18323,6 +17626,78 @@ packages: micromark-util-types: 2.0.0 dev: true + /micromark-extension-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-footnote@2.0.0: + resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-table@2.0.0: + resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm-task-list-item@2.0.1: + resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + dependencies: + micromark-extension-gfm-autolink-literal: 2.0.0 + micromark-extension-gfm-footnote: 2.0.0 + micromark-extension-gfm-strikethrough: 2.0.0 + micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + /micromark-extension-mdx-expression@3.0.0: resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} dependencies: @@ -18603,12 +17978,6 @@ packages: engines: {node: '>=4'} hasBin: true - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -18767,9 +18136,11 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + requiresBuild: true dependencies: minimist: 1.2.8 dev: true + optional: true /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -19001,10 +18372,6 @@ packages: dev: true optional: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true - /node-notifier@10.0.1: resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} dependencies: @@ -19449,6 +18816,14 @@ packages: aggregate-error: 3.1.0 dev: true + /p-queue@8.0.1: + resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} + engines: {node: '>=18'} + dependencies: + eventemitter3: 5.0.1 + p-timeout: 6.1.2 + dev: false + /p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -19456,6 +18831,11 @@ packages: '@types/retry': 0.12.0 retry: 0.13.1 + /p-timeout@6.1.2: + resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} + engines: {node: '>=14.16'} + dev: false + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -19829,13 +19209,6 @@ packages: find-up: 5.0.0 dev: true - /pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} - dependencies: - find-up: 6.3.0 - dev: true - /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -20098,7 +19471,7 @@ packages: jiti: 1.21.0 postcss: 8.4.35 semver: 7.6.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true @@ -20471,7 +19844,7 @@ packages: dependencies: chalk: 3.0.0 progress: 2.0.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /progress@1.1.8: @@ -20605,26 +19978,6 @@ packages: escape-goat: 4.0.0 dev: true - /puppeteer-core@2.1.1: - resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} - engines: {node: '>=8.16.0'} - dependencies: - '@types/mime-types': 2.1.4 - debug: 4.3.4(supports-color@5.5.0) - extract-zip: 1.7.0 - https-proxy-agent: 4.0.0 - mime: 2.6.0 - mime-types: 2.1.35 - progress: 2.0.3 - proxy-from-env: 1.1.0 - rimraf: 2.7.1 - ws: 6.2.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -20814,7 +20167,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.3.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) transitivePeerDependencies: - eslint - supports-color @@ -21007,6 +20360,7 @@ packages: react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.57)(react@18.2.0) tslib: 2.6.2 + dev: false /react-remove-scroll@2.5.5(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} @@ -21025,6 +20379,7 @@ packages: tslib: 2.6.2 use-callback-ref: 1.3.1(@types/react@18.2.57)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.57)(react@18.2.0) + dev: false /react-router-dom@6.22.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw==} @@ -21085,6 +20440,7 @@ packages: invariant: 2.2.4 react: 18.2.0 tslib: 2.6.2 + dev: false /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} @@ -21207,14 +20563,14 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - /recast@0.23.4: - resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + /recast@0.23.6: + resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} engines: {node: '>= 4'} dependencies: - assert: 2.1.0 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 @@ -21364,6 +20720,27 @@ packages: 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'} @@ -21378,14 +20755,17 @@ packages: commander: 2.20.3 dev: true - /remark-external-links@8.0.0: - resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: - extend: 3.0.2 - is-absolute-url: 3.0.3 - mdast-util-definitions: 4.0.0 - space-separated-tokens: 1.1.5 - unist-util-visit: 2.0.3 + '@types/mdast': 4.0.3 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color dev: true /remark-mdx@3.0.0: @@ -21418,14 +20798,6 @@ packages: vfile: 6.0.1 dev: true - /remark-slug@6.1.0: - resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} - dependencies: - github-slugger: 1.5.0 - mdast-util-to-string: 1.1.0 - unist-util-visit: 2.0.3 - dev: true - /remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} dependencies: @@ -22197,10 +21569,6 @@ packages: engines: {node: '>= 8'} dev: true - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: true - /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: true @@ -22274,7 +21642,7 @@ packages: webpack: ^1 || ^2 || ^3 || ^4 || ^5 dependencies: chalk: 4.1.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /split2@4.2.0: @@ -22300,6 +21668,9 @@ packages: /sqlite3@5.1.6: resolution: {integrity: sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==} requiresBuild: true + peerDependenciesMeta: + node-gyp: + optional: true dependencies: '@mapbox/node-pre-gyp': 1.0.11 node-addon-api: 4.3.0 @@ -22375,14 +21746,17 @@ packages: resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} dev: true - /storybook@7.6.17: - resolution: {integrity: sha512-8+EIo91bwmeFWPg1eysrxXlhIYv3OsXrznTr4+4Eq0NikqAoq6oBhtlN5K2RGS2lBVF537eN+9jTCNbR+WrzDA==} + /storybook@8.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-g5RoUjEeXxAH4LaD/K/ZF0W7EbqTrVC6bZU0lihx3hI6qiaRcCQq4tPR/YoiLvV8YVcRL6WmEUM8XMswv7Oc8g==} hasBin: true dependencies: - '@storybook/cli': 7.6.17 + '@storybook/cli': 8.0.1(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: + - '@babel/preset-env' - bufferutil - encoding + - react + - react-dom - supports-color - utf-8-validate dev: true @@ -22603,7 +21977,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -22696,28 +22070,24 @@ packages: webpack: ^5.0.0 dependencies: file-loader: 6.2.0(webpack@5.90.3) - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true - /swc-loader@0.2.6(@swc/core@1.4.2)(webpack@5.90.3): + /swc-loader@0.2.6(@swc/core@1.4.8)(webpack@5.90.3): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.4.2 + '@swc/core': 1.4.8 '@swc/counter': 0.1.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) dev: true /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /synchronous-promise@2.0.17: - resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} - dev: true - /synckit@0.9.0: resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -22805,7 +22175,7 @@ packages: unique-string: 2.0.0 dev: true - /terser-webpack-plugin@5.3.10(@swc/core@1.4.2)(esbuild@0.20.1)(webpack@5.90.3): + /terser-webpack-plugin@5.3.10(@swc/core@1.4.8)(esbuild@0.20.1)(webpack@5.90.3): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -22822,13 +22192,13 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.22 - '@swc/core': 1.4.2 + '@swc/core': 1.4.8 esbuild: 0.20.1 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.27.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) /terser@5.27.2: resolution: {integrity: sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==} @@ -22897,8 +22267,8 @@ packages: resolution: {integrity: sha512-knIN5zj4fl7kW4EBU5sLP20DWUvi/rVouvJezV0UAym2DkQaqm365Nyc8F3QEiOvunNDMxR8UhcXd1d5g+Wg1g==} dev: false - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} dev: true /tiny-warning@1.0.3: @@ -22926,10 +22296,6 @@ packages: rimraf: 3.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'} @@ -23060,7 +22426,7 @@ packages: code-block-writer: 12.0.0 dev: true - /ts-node@10.9.2(@swc/core@1.4.2)(@types/node@20.11.19)(typescript@5.3.3): + /ts-node@10.9.2(@swc/core@1.4.8)(@types/node@20.11.19)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -23075,7 +22441,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.4.2 + '@swc/core': 1.4.8 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 @@ -23437,10 +22803,6 @@ packages: '@types/unist': 3.0.2 dev: true - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: true - /unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: @@ -23478,13 +22840,6 @@ packages: '@types/unist': 3.0.2 dev: true - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - dev: true - /unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: @@ -23492,14 +22847,6 @@ packages: unist-util-is: 6.0.0 dev: true - /unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - dev: true - /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: @@ -23612,14 +22959,6 @@ packages: dependencies: punycode: 1.4.1 qs: 6.11.2 - dev: false - - /url@0.11.3: - resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} - dependencies: - punycode: 1.4.1 - qs: 6.11.2 - dev: true /use-callback-ref@1.3.1(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} @@ -23634,6 +22973,7 @@ packages: '@types/react': 18.2.57 react: 18.2.0 tslib: 2.6.2 + dev: false /use-events@1.4.2(react@18.2.0): resolution: {integrity: sha512-CVgNgSl5dnJaHKirbWab6TtdxSnb+e5rfi4WybLFUTXweRyYO+kkBtECauHlUiZLghGTsCyRaSgOeWSETvgtmw==} @@ -23670,17 +23010,6 @@ packages: use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.57)(react@18.2.0) dev: false - /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} - peerDependencies: - react: 16.8.0 - 18 - react-dom: 16.8.0 - 18 - dependencies: - '@juggle/resize-observer': 3.4.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /use-sidecar@1.1.2(@types/react@18.2.57)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -23695,6 +23024,7 @@ packages: detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 + dev: false /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} @@ -23990,12 +23320,6 @@ packages: resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} dev: true - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: true - /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -24195,13 +23519,13 @@ packages: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-bundle-analyzer: 4.10.1 webpack-dev-server: 4.15.1(webpack-cli@5.1.4)(webpack@5.90.3) webpack-merge: 5.10.0 - /webpack-dev-middleware@5.3.3(webpack@5.90.3): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + /webpack-dev-middleware@5.3.4(webpack@5.90.3): + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 @@ -24211,24 +23535,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) - - /webpack-dev-middleware@6.1.1(webpack@5.90.3): - resolution: {integrity: sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - dependencies: - colorette: 2.0.20 - memfs: 3.6.0 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) - dev: true + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) /webpack-dev-server@4.15.1(webpack-cli@5.1.4)(webpack@5.90.3): resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} @@ -24271,9 +23578,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4) + webpack: 5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack-dev-server@4.15.1)(webpack@5.90.3) - webpack-dev-middleware: 5.3.3(webpack@5.90.3) + webpack-dev-middleware: 5.3.4(webpack@5.90.3) ws: 8.16.0 transitivePeerDependencies: - bufferutil @@ -24320,7 +23627,7 @@ packages: resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} dev: true - /webpack@5.90.3(@swc/core@1.4.2)(esbuild@0.20.1)(webpack-cli@5.1.4): + /webpack@5.90.3(@swc/core@1.4.8)(esbuild@0.20.1)(webpack-cli@5.1.4): resolution: {integrity: sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==} engines: {node: '>=10.13.0'} hasBin: true @@ -24351,7 +23658,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.4.2)(esbuild@0.20.1)(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.8)(esbuild@0.20.1)(webpack@5.90.3) watchpack: 2.4.0 webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack-dev-server@4.15.1)(webpack@5.90.3) webpack-sources: 3.2.3 @@ -24561,28 +23868,6 @@ packages: typedarray-to-buffer: 3.1.5 dev: true - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - - /ws@6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - async-limiter: 1.0.1 - dev: true - /ws@7.5.6: resolution: {integrity: sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==} engines: {node: '>=8.3.0'} diff --git a/public/assets/base.css b/public/assets/base.css index 3941dd9c991..0c252bab49b 100644 --- a/public/assets/base.css +++ b/public/assets/base.css @@ -1,27 +1,27 @@ @font-face { font-family: 'Diatype'; - src: url('/assets/fonts/diatype/diatype-regular.woff2') format('woff2'); + src: url('./fonts/diatype/diatype-regular.woff2') format('woff2'); font-weight: 300; font-style: normal; } @font-face { font-family: 'Diatype'; - src: url('/assets/fonts/diatype/diatype-regular.woff2') format('woff2'); + src: url('./fonts/diatype/diatype-regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Diatype'; - src: url('/assets/fonts/diatype/diatype-medium.woff2') format('woff2'); + src: url('./fonts/diatype/diatype-medium.woff2') format('woff2'); font-weight: 500; font-style: normal; } @font-face { font-family: 'Marche'; - src: url('/assets/fonts/marche/marche-super-pro.woff2') format('woff2'); + src: url('./fonts/marche/marche-super-pro.woff2') format('woff2'); line-height: 44px; font-weight: 800; font-style: normal; @@ -30,8 +30,8 @@ @font-face { font-family: 'Fira Code'; src: - url('/assets/fonts/fira-code/woff2/FiraCode-Light.woff2') format('woff2'), - url('/assets/fonts/fira-code/woff/FiraCode-Light.woff') format('woff'); + url('./fonts/fira-code/woff2/FiraCode-Light.woff2') format('woff2'), + url('./fonts/fira-code/woff/FiraCode-Light.woff') format('woff'); font-weight: 300; font-style: normal; } @@ -39,8 +39,8 @@ @font-face { font-family: 'Fira Code'; src: - url('/assets/fonts/fira-code/woff2/FiraCode-Regular.woff2') format('woff2'), - url('/assets/fonts/fira-code/woff/FiraCode-Regular.woff') format('woff'); + url('./fonts/fira-code/woff2/FiraCode-Regular.woff2') format('woff2'), + url('./fonts/fira-code/woff/FiraCode-Regular.woff') format('woff'); font-weight: 400; font-style: normal; } @@ -51,4 +51,4 @@ left: 0; width: 100%; height: 100%; -} +} \ No newline at end of file diff --git a/src/app/common/hooks/account/use-account-names.ts b/src/app/common/hooks/account/use-account-names.ts index dbfe0849c73..0074a54bce9 100644 --- a/src/app/common/hooks/account/use-account-names.ts +++ b/src/app/common/hooks/account/use-account-names.ts @@ -24,9 +24,12 @@ export function useCurrentAccountDisplayName() { } export function useAccountDisplayName({ address, index }: { index: number; address: string }) { - const { data: names = [] } = useGetAccountNamesByAddressQuery(address); + const { data: names = [], isLoading } = useGetAccountNamesByAddressQuery(address); return useMemo(() => { - if (names[0]) return parseIfValidPunycode(names[0]); - return getAutogeneratedAccountDisplayName(index); - }, [names, index]); + const name = names[0] || getAutogeneratedAccountDisplayName(index); + return { + name, + isLoading, + }; + }, [names, index, isLoading]); } diff --git a/src/app/common/hooks/use-submit-stx-transaction.ts b/src/app/common/hooks/use-submit-stx-transaction.ts index 0f97612f916..f8b9f72ea8f 100644 --- a/src/app/common/hooks/use-submit-stx-transaction.ts +++ b/src/app/common/hooks/use-submit-stx-transaction.ts @@ -15,6 +15,8 @@ import { useToast } from '@app/features/toasts/use-toast'; import { useCurrentStacksNetworkState } from '@app/store/networks/networks.hooks'; import { useSubmittedTransactionsActions } from '@app/store/submitted-transactions/submitted-transactions.hooks'; +import { delay } from '../utils'; + const timeForApiToUpdate = 250; interface UseSubmitTransactionArgs { @@ -52,7 +54,9 @@ export function useSubmitTransactionCallback({ loadingKey }: UseSubmitTransactio rawTx: bytesToHex(transaction.serialize()), txId: safelyFormatHexTxid(response.txid), }); + await delay(500); toast.success('Transaction submitted!'); + await delay(500); void analytics.track('broadcast_transaction', { symbol: 'stx' }); onSuccess(safelyFormatHexTxid(response.txid)); diff --git a/src/app/common/validation/forms/address-validators.ts b/src/app/common/validation/forms/address-validators.ts index f5166020115..6df6b4a8931 100644 --- a/src/app/common/validation/forms/address-validators.ts +++ b/src/app/common/validation/forms/address-validators.ts @@ -2,7 +2,6 @@ import { AddressType, Network, getAddressInfo, validate } from 'bitcoin-address- import * as yup from 'yup'; import { BitcoinNetworkModes, NetworkConfiguration } from '@shared/constants'; -import { bitcoinNetworkModeToCoreNetworkMode } from '@shared/crypto/bitcoin/bitcoin.utils'; import { isString } from '@shared/utils'; import { FormErrorMessages } from '@app/common/error-messages'; @@ -46,9 +45,16 @@ export function btcTaprootAddressValidator() { } function btcAddressNetworkValidatorFactory(network: BitcoinNetworkModes) { + function getAddressNetworkType(network: BitcoinNetworkModes): Network { + // Signet uses testnet address format, this parsing is to please the + // validation library + if (network === 'signet') return Network.testnet; + return network as Network; + } + return (value?: string) => { if (!isString(value)) return false; - return validate(value, bitcoinNetworkModeToCoreNetworkMode(network) as Network); + return validate(value, getAddressNetworkType(network)); }; } diff --git a/src/app/components/account-total-balance.tsx b/src/app/components/account-total-balance.tsx index efb430ded57..0606100efd9 100644 --- a/src/app/components/account-total-balance.tsx +++ b/src/app/components/account-total-balance.tsx @@ -4,18 +4,25 @@ import { styled } from 'leather-styles/jsx'; import { useTotalBalance } from '@app/common/hooks/balance/use-total-balance'; +import { shimmerStyles } from '../../../theme/global/shimmer-styles'; + interface AccountTotalBalanceProps { btcAddress: string; stxAddress: string; } export const AccountTotalBalance = memo(({ btcAddress, stxAddress }: AccountTotalBalanceProps) => { - const totalBalance = useTotalBalance({ btcAddress, stxAddress }); + const { totalUsdBalance, isLoading } = useTotalBalance({ btcAddress, stxAddress }); - if (!totalBalance) return null; + if (!totalUsdBalance) return null; return ( - - {totalBalance.totalUsdBalance} + + {totalUsdBalance} ); }); diff --git a/src/app/components/account/account-name.tsx b/src/app/components/account/account-name.tsx index 7101f5d76d5..9a267497878 100644 --- a/src/app/components/account/account-name.tsx +++ b/src/app/components/account/account-name.tsx @@ -2,11 +2,21 @@ import { memo } from 'react'; import { styled } from 'leather-styles/jsx'; +import { shimmerStyles } from '../../../../theme/global/shimmer-styles'; + interface AccountNameLayoutProps { children: React.ReactNode; + isLoading?: boolean; } -export const AccountNameLayout = memo(({ children }: AccountNameLayoutProps) => ( - + +export const AccountNameLayout = memo(({ children, isLoading }: AccountNameLayoutProps) => ( + {children} )); diff --git a/src/app/components/crypto-assets/crypto-currency-asset/crypto-currency-asset-item.layout.tsx b/src/app/components/crypto-assets/crypto-currency-asset/crypto-currency-asset-item.layout.tsx index 87f19679360..b4bc1b9b04d 100644 --- a/src/app/components/crypto-assets/crypto-currency-asset/crypto-currency-asset-item.layout.tsx +++ b/src/app/components/crypto-assets/crypto-currency-asset/crypto-currency-asset-item.layout.tsx @@ -1,6 +1,6 @@ import { ReactNode } from 'react'; -import { Flex, styled } from 'leather-styles/jsx'; +import { Box, Flex, styled } from 'leather-styles/jsx'; import { AllCryptoCurrencyAssetBalances } from '@shared/models/crypto-asset-balance.model'; @@ -35,40 +35,49 @@ export function CryptoCurrencyAssetItemLayout({ const { balance, dataTestId, formattedBalance, title } = parseCryptoCurrencyAssetBalance(assetBalance); - return ( - - - - {formattedBalance.value} {additionalBalanceInfo} - - - ) - } - captionRight={ - !rightElement && ( - - - - {balance.amount.toNumber() > 0 && address ? usdBalance : null} - {additionalUsdBalanceInfo} - - - - ) - } - /> - + const isInteractive = !!onClick; + + const content = ( + + + {formattedBalance.value} {additionalBalanceInfo} + + + ) + } + captionRight={ + !rightElement && ( + + + + {balance.amount.toNumber() > 0 && address ? usdBalance : null} + {additionalUsdBalanceInfo} + + + + ) + } + /> ); + + if (isInteractive) + return ( + + {content} + + ); + + return {content}; } diff --git a/src/app/components/fees-row/components/fees-row.layout.tsx b/src/app/components/fees-row/components/fees-row.layout.tsx index 48524ed7e17..c6bc3e238f9 100644 --- a/src/app/components/fees-row/components/fees-row.layout.tsx +++ b/src/app/components/fees-row/components/fees-row.layout.tsx @@ -9,7 +9,7 @@ import { InfoCircleIcon } from '@app/ui/icons/info-circle-icon'; const feesInfo = 'Higher fees increase the likelihood of your transaction getting confirmed before others. Click to learn more.'; -const url = 'https://hiro.so/questions/fee-estimates'; +const url = 'https://leather.gitbook.io/guides/transactions/fees'; interface FeesRowLayoutProps extends HstackProps { feeField: React.JSX.Element; diff --git a/src/app/features/collectibles/components/_collectible-types/collectible-image.tsx b/src/app/features/collectibles/components/_collectible-types/collectible-image.tsx index 4033ff021a3..529f7530f8d 100644 --- a/src/app/features/collectibles/components/_collectible-types/collectible-image.tsx +++ b/src/app/features/collectibles/components/_collectible-types/collectible-image.tsx @@ -26,6 +26,7 @@ export function CollectibleImage(props: CollectibleImageProps) { {alt} setIsError(true)} + loading="lazy" onLoad={event => { const target = event.target as HTMLImageElement; setWidth(target.naturalWidth); @@ -37,7 +38,8 @@ export function CollectibleImage(props: CollectibleImageProps) { height: '100%', aspectRatio: '1 / 1', objectFit: 'cover', - display: isLoading ? 'none' : 'inherit', + // display: 'none' breaks onLoad event firing + opacity: isLoading ? '0' : '1', imageRendering: width <= 40 ? 'pixelated' : 'auto', }} /> diff --git a/src/app/features/edit-nonce-drawer/edit-nonce-drawer.tsx b/src/app/features/edit-nonce-drawer/edit-nonce-drawer.tsx index d25677dead9..1d72b3382dd 100644 --- a/src/app/features/edit-nonce-drawer/edit-nonce-drawer.tsx +++ b/src/app/features/edit-nonce-drawer/edit-nonce-drawer.tsx @@ -13,7 +13,7 @@ import { Link } from '@app/ui/components/link/link'; import { EditNonceForm } from './components/edit-nonce-form'; -const url = 'https://www.hiro.so/questions/transactions-advanced-settings'; +const url = 'https://leather.gitbook.io/guides/transactions/nonces'; function CustomFeeMessaging() { return ( diff --git a/src/app/features/psbt-signer/hooks/use-parsed-inputs.tsx b/src/app/features/psbt-signer/hooks/use-parsed-inputs.tsx index eb669674968..8bde4de2a5b 100644 --- a/src/app/features/psbt-signer/hooks/use-parsed-inputs.tsx +++ b/src/app/features/psbt-signer/hooks/use-parsed-inputs.tsx @@ -32,9 +32,9 @@ export function useParsedInputs({ inputs, indexesToSign }: UseParsedInputsArgs) const bitcoinNetwork = getBtcSignerLibNetworkConfigByMode(network.chain.bitcoin.bitcoinNetwork); const bitcoinAddressNativeSegwit = useCurrentAccountNativeSegwitIndexZeroSigner().address; const { address: bitcoinAddressTaproot } = useCurrentAccountTaprootIndexZeroSigner(); - const inscriptions = useGetInscriptionsByOutputQueries(inputs).map(query => { - return query.data?.results[0]; - }); + const inscriptions = useGetInscriptionsByOutputQueries(inputs).map( + query => query.data?.results[0] + ); const signAll = isUndefined(indexesToSign); const psbtInputs = useMemo( diff --git a/src/app/features/retrieve-taproot-to-native-segwit/retrieve-taproot-to-native-segwit.tsx b/src/app/features/retrieve-taproot-to-native-segwit/retrieve-taproot-to-native-segwit.tsx index 51b0f5469cb..2d0b0e5a7be 100644 --- a/src/app/features/retrieve-taproot-to-native-segwit/retrieve-taproot-to-native-segwit.tsx +++ b/src/app/features/retrieve-taproot-to-native-segwit/retrieve-taproot-to-native-segwit.tsx @@ -32,13 +32,13 @@ export function RetrieveTaprootToNativeSegwit() { const { generateRetrieveTaprootFundsTx, fee } = useGenerateRetrieveTaprootFundsTx(); const { broadcastTx, isBroadcasting } = useBitcoinBroadcastTransaction(); - async function handleBroadcastRetieveBitcoinTx() { + async function handleBroadcastRetrieveBitcoinTx() { const tx = await generateRetrieveTaprootFundsTx({ recipient, fee }); await broadcastTx({ tx, async onSuccess() { await delay(1200); - toast.success('Transaction broadcasted succesfully'); + toast.success('Transaction submitted!'); await delay(700); navigate(RouteUrls.Activity); void analytics.track('broadcast_retrieve_taproot_to_native_segwit'); @@ -52,7 +52,7 @@ export function RetrieveTaprootToNativeSegwit() { return ( navigate(RouteUrls.Home)} > diff --git a/src/app/features/switch-account-drawer/components/switch-account-list-item.tsx b/src/app/features/switch-account-drawer/components/switch-account-list-item.tsx index 384fb50567c..432b4a4e798 100644 --- a/src/app/features/switch-account-drawer/components/switch-account-list-item.tsx +++ b/src/app/features/switch-account-drawer/components/switch-account-list-item.tsx @@ -28,7 +28,10 @@ export const SwitchAccountListItem = memo( 'SWITCH_ACCOUNTS' + stxAddress || btcAddress ); const { handleSwitchAccount } = useSwitchAccount(handleClose); - const name = useAccountDisplayName({ address: stxAddress, index }); + const { name, isLoading: isLoadingBnsName } = useAccountDisplayName({ + address: stxAddress, + index, + }); const handleClick = async () => { setIsLoading(); @@ -41,7 +44,7 @@ export const SwitchAccountListItem = memo( return ( } - accountName={{name}} + accountName={{name}} avatar={ { - const name = useAccountDisplayName(account); + const { name } = useAccountDisplayName(account); const btcAddress = useNativeSegwitAccountIndexAddressIndexZero(account.index); const accountSlug = useMemo(() => slugify(`Account ${account?.index + 1}`), [account?.index]); diff --git a/src/app/pages/psbt-request/use-psbt-request.tsx b/src/app/pages/psbt-request/use-psbt-request.tsx index 8eb6e280f1a..f8769a655cf 100644 --- a/src/app/pages/psbt-request/use-psbt-request.tsx +++ b/src/app/pages/psbt-request/use-psbt-request.tsx @@ -44,7 +44,7 @@ export function usePsbtRequest() { const tx = getPsbtAsTransaction(payload.hex); try { - const signingConfig = getDefaultSigningConfig(hexToBytes(payload.hex)); + const signingConfig = getDefaultSigningConfig(hexToBytes(payload.hex), signAtIndex); const signedTx = await signPsbt({ tx, signingConfig }); const signedPsbt = signedTx.toPSBT(); diff --git a/src/app/pages/select-network/components/network-list-item.layout.tsx b/src/app/pages/select-network/components/network-list-item.layout.tsx index 3faf4f4c132..07602bcc7f3 100644 --- a/src/app/pages/select-network/components/network-list-item.layout.tsx +++ b/src/app/pages/select-network/components/network-list-item.layout.tsx @@ -1,5 +1,5 @@ import { SettingsSelectors } from '@tests/selectors/settings.selectors'; -import { Box, Flex, Stack, styled } from 'leather-styles/jsx'; +import { Flex, Stack, styled } from 'leather-styles/jsx'; import { NetworkConfiguration } from '@shared/constants'; @@ -27,25 +27,20 @@ export function NetworkListItemLayout({ onRemoveNetwork, onSelectNetwork, }: NetworkListItemLayoutProps) { - const unSelectable = !isOnline || isActive; + const unselectable = !isOnline || isActive; return ( - @@ -70,7 +65,7 @@ export function NetworkListItemLayout({ )} - + ); } diff --git a/src/app/pages/send/send-crypto-asset-form/components/recipient-accounts-drawer/account-list-item.tsx b/src/app/pages/send/send-crypto-asset-form/components/recipient-accounts-drawer/account-list-item.tsx index d59114ed9d0..03b38962918 100644 --- a/src/app/pages/send/send-crypto-asset-form/components/recipient-accounts-drawer/account-list-item.tsx +++ b/src/app/pages/send/send-crypto-asset-form/components/recipient-accounts-drawer/account-list-item.tsx @@ -23,7 +23,7 @@ export const AccountListItem = memo(({ index, stacksAccount, onClose }: AccountL BitcoinSendFormValues | StacksSendFormValues >(); const stacksAddress = stacksAccount?.address || ''; - const name = useAccountDisplayName({ address: stacksAddress, index }); + const { name } = useAccountDisplayName({ address: stacksAddress, index }); const bitcoinSigner = useNativeSegwitSigner(index); const bitcoinAddress = bitcoinSigner?.(0).address || ''; diff --git a/src/app/pages/swap/alex-swap-container.tsx b/src/app/pages/swap/alex-swap-container.tsx index ec4258915e8..9a47b3a7d9b 100644 --- a/src/app/pages/swap/alex-swap-container.tsx +++ b/src/app/pages/swap/alex-swap-container.tsx @@ -18,7 +18,6 @@ import { isDefined, isUndefined } from '@shared/utils'; import { LoadingKeys, useLoading } from '@app/common/hooks/use-loading'; import { useWalletType } from '@app/common/use-wallet-type'; import { NonceSetter } from '@app/components/nonce-setter'; -import { defaultFeesMinValuesAsMoney } from '@app/query/stacks/fees/fees.utils'; import { useCurrentStacksAccount } from '@app/store/accounts/blockchain/stacks/stacks-account.hooks'; import { useGenerateStacksContractCallUnsignedTx } from '@app/store/transactions/contract-call.hooks'; import { useSignStacksTransaction } from '@app/store/transactions/transaction.hooks'; @@ -31,7 +30,11 @@ import { oneHundredMillion, useAlexSwap } from './hooks/use-alex-swap'; import { useStacksBroadcastSwap } from './hooks/use-stacks-broadcast-swap'; import { SwapAsset, SwapFormValues } from './hooks/use-swap-form'; import { SwapContext, SwapProvider } from './swap.context'; -import { migratePositiveBalancesToTop, sortSwappableAssetsBySymbol } from './swap.utils'; +import { + defaultSwapFee, + migratePositiveBalancesToTop, + sortSwappableAssetsBySymbol, +} from './swap.utils'; export const alexSwapRoutes = generateSwapRoutes(); @@ -86,7 +89,7 @@ function AlexSwapContainer() { ]); onSetSwapSubmissionData({ - fee: isSponsoredByAlex ? '0' : defaultFeesMinValuesAsMoney[1].amount.toString(), + fee: isSponsoredByAlex ? '0' : defaultSwapFee.amount.toString(), feeCurrency: values.feeCurrency, feeType: values.feeType, liquidityFee: new BigNumber(Number(lpFee)).dividedBy(oneHundredMillion).toNumber(), diff --git a/src/app/pages/swap/components/swap-assets-pair/swap-assets-pair.layout.tsx b/src/app/pages/swap/components/swap-assets-pair/swap-assets-pair.layout.tsx index dfe948e10f1..656de32b0f9 100644 --- a/src/app/pages/swap/components/swap-assets-pair/swap-assets-pair.layout.tsx +++ b/src/app/pages/swap/components/swap-assets-pair/swap-assets-pair.layout.tsx @@ -19,7 +19,7 @@ export function SwapAssetsPairLayout({ swapAssetFrom, swapAssetTo }: SwapAssetsP > {swapAssetFrom} - + {swapAssetTo} diff --git a/src/app/pages/swap/components/swap-details/swap-detail.layout.tsx b/src/app/pages/swap/components/swap-details/swap-detail.layout.tsx index 7a3010aeec2..bce0109972c 100644 --- a/src/app/pages/swap/components/swap-details/swap-detail.layout.tsx +++ b/src/app/pages/swap/components/swap-details/swap-detail.layout.tsx @@ -26,7 +26,7 @@ export function SwapDetailLayout({ {tooltipLabel ? ( - + ) : null} diff --git a/src/app/pages/swap/components/swap-details/swap-details.tsx b/src/app/pages/swap/components/swap-details/swap-details.tsx index 4314ddc3717..1e08bebec87 100644 --- a/src/app/pages/swap/components/swap-details/swap-details.tsx +++ b/src/app/pages/swap/components/swap-details/swap-details.tsx @@ -28,6 +28,9 @@ function RouteNames(props: { swapSubmissionData: SwapSubmissionData }) { }); } +const sponsoredFeeLabel = + 'Sponsorship may not apply when you have pending transactions. In such cases, if you choose to proceed, the associated costs will be deducted from your balance.'; + export function SwapDetails() { const { swapSubmissionData } = useSwapContext(); const { isTestnet } = useCurrentNetworkState(); @@ -75,11 +78,11 @@ export function SwapDetails() { /> { diff --git a/src/app/query/bitcoin/address/transactions-by-address.query.ts b/src/app/query/bitcoin/address/transactions-by-address.query.ts index 7a44f6fc55e..794a6b80687 100644 --- a/src/app/query/bitcoin/address/transactions-by-address.query.ts +++ b/src/app/query/bitcoin/address/transactions-by-address.query.ts @@ -1,4 +1,4 @@ -import { useQueries, useQuery } from '@tanstack/react-query'; +import { type QueryFunctionContext, useQueries, useQuery } from '@tanstack/react-query'; import { BitcoinTx } from '@shared/models/transactions/bitcoin-transaction.model'; @@ -18,7 +18,9 @@ export function useGetBitcoinTransactionsByAddressQuery client.addressApi.getTransactionsByAddress(address), + queryFn: async ({ signal }) => { + return client.addressApi.getTransactionsByAddress(address, signal); + }, ...queryOptions, ...options, }); @@ -35,7 +37,9 @@ export function useGetBitcoinTransactionsByAddressesQuery client.addressApi.getTransactionsByAddress(address), + queryFn: async ({ signal }: QueryFunctionContext) => { + return client.addressApi.getTransactionsByAddress(address, signal); + }, ...queryOptions, ...options, }; diff --git a/src/app/query/bitcoin/address/utxos-by-address.query.ts b/src/app/query/bitcoin/address/utxos-by-address.query.ts index efdda83d2ed..a47ce189354 100644 --- a/src/app/query/bitcoin/address/utxos-by-address.query.ts +++ b/src/app/query/bitcoin/address/utxos-by-address.query.ts @@ -23,10 +23,13 @@ export function useGetUtxosByAddressQuery ) { const client = useBitcoinClient(); + return useQuery({ enabled: !!address, queryKey: ['btc-utxos-by-address', address], - queryFn: () => client.addressApi.getUtxosByAddress(address), + queryFn: async ({ signal }) => { + return client.addressApi.getUtxosByAddress(address, signal); + }, ...queryOptions, ...options, }); diff --git a/src/app/query/bitcoin/bitcoin-client.ts b/src/app/query/bitcoin/bitcoin-client.ts index 13c2ac2e015..5ed7a546830 100644 --- a/src/app/query/bitcoin/bitcoin-client.ts +++ b/src/app/query/bitcoin/bitcoin-client.ts @@ -1,7 +1,11 @@ import axios from 'axios'; +import PQueue from 'p-queue'; import { HIRO_API_BASE_URL_MAINNET } from '@shared/constants'; import { Paginated } from '@shared/models/api-types'; +import type { BitcoinTx } from '@shared/models/transactions/bitcoin-transaction.model'; + +import { getBlockstreamRatelimiter } from './blockstream-rate-limiter'; class Configuration { constructor(public baseUrl: string) {} @@ -162,16 +166,23 @@ class HiroApi { } class AddressApi { - constructor(public configuration: Configuration) {} + rateLimiter: PQueue; + constructor(public configuration: Configuration) { + this.rateLimiter = getBlockstreamRatelimiter(this.configuration.baseUrl); + } - async getTransactionsByAddress(address: string) { - const resp = await axios.get(`${this.configuration.baseUrl}/address/${address}/txs`); + async getTransactionsByAddress(address: string, signal?: AbortSignal) { + const resp = await this.rateLimiter.add( + () => axios.get(`${this.configuration.baseUrl}/address/${address}/txs`), + { signal, throwOnTimeout: true } + ); return resp.data; } - async getUtxosByAddress(address: string): Promise { - const resp = await axios.get( - `${this.configuration.baseUrl}/address/${address}/utxo` + async getUtxosByAddress(address: string, signal?: AbortSignal): Promise { + const resp = await this.rateLimiter.add( + () => axios.get(`${this.configuration.baseUrl}/address/${address}/utxo`), + { signal, priority: 1, throwOnTimeout: true } ); return resp.data.sort((a, b) => a.vout - b.vout); } diff --git a/src/app/query/bitcoin/blockstream-rate-limiter.ts b/src/app/query/bitcoin/blockstream-rate-limiter.ts new file mode 100644 index 00000000000..121d782f712 --- /dev/null +++ b/src/app/query/bitcoin/blockstream-rate-limiter.ts @@ -0,0 +1,18 @@ +import PQueue from 'p-queue'; + +import { BITCOIN_API_BASE_URL_TESTNET } from '@shared/constants'; + +const blockstreamMainnetApiLimiter = new PQueue({ + interval: 5000, + intervalCap: 20, +}); + +const blockstreamTestnetApiLimiter = new PQueue({ + interval: 5000, + intervalCap: 30, +}); + +export function getBlockstreamRatelimiter(url: string) { + if (url.includes(BITCOIN_API_BASE_URL_TESTNET)) return blockstreamTestnetApiLimiter; + return blockstreamMainnetApiLimiter; +} diff --git a/src/app/query/bitcoin/ordinals/inscription-text-content.query.ts b/src/app/query/bitcoin/ordinals/inscription-text-content.query.ts index a233d28aa16..893dae93451 100644 --- a/src/app/query/bitcoin/ordinals/inscription-text-content.query.ts +++ b/src/app/query/bitcoin/ordinals/inscription-text-content.query.ts @@ -2,6 +2,7 @@ import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { QueryPrefixes } from '@app/query/query-prefixes'; +import { useHiroApiRateLimiter } from '@app/query/stacks/hiro-rate-limiter'; async function getInscriptionTextContent(src: string) { const res = await axios.get(src, { responseType: 'text' }); @@ -9,9 +10,14 @@ async function getInscriptionTextContent(src: string) { } export function useInscriptionTextContentQuery(contentSrc: string) { + const limiter = useHiroApiRateLimiter(); return useQuery( [QueryPrefixes.OrdinalTextContent, contentSrc], - () => getInscriptionTextContent(contentSrc), + async () => { + return limiter.add(() => getInscriptionTextContent(contentSrc), { + throwOnTimeout: true, + }); + }, { cacheTime: Infinity, staleTime: Infinity, diff --git a/src/app/query/bitcoin/ordinals/inscriptions.query.ts b/src/app/query/bitcoin/ordinals/inscriptions.query.ts index a3a4495c986..9e59097da48 100644 --- a/src/app/query/bitcoin/ordinals/inscriptions.query.ts +++ b/src/app/query/bitcoin/ordinals/inscriptions.query.ts @@ -10,6 +10,7 @@ import { ensureArray } from '@shared/utils'; import { createNumArrayOfRange } from '@app/common/utils'; import { QueryPrefixes } from '@app/query/query-prefixes'; +import { useHiroApiRateLimiter } from '@app/query/stacks/hiro-rate-limiter'; import { useCurrentAccountNativeSegwitIndexZeroSigner } from '@app/store/accounts/blockchain/bitcoin/native-segwit-account.hooks'; import { useCurrentTaprootAccount } from '@app/store/accounts/blockchain/bitcoin/taproot-account.hooks'; import { useCurrentNetwork } from '@app/store/networks/networks.selectors'; @@ -27,6 +28,7 @@ interface InfiniteQueryPageParam { addressesWithoutOrdinalsNum: number; addressesMap: Record; }; + signal?: AbortSignal; } interface InscriptionsQueryResponse { @@ -36,14 +38,31 @@ interface InscriptionsQueryResponse { total: number; } -async function fetchInscriptions(addresses: string | string[], offset = 0, limit = 60) { +interface FetchInscriptionsArgs { + addresses: string | string[]; + offset?: number; + limit?: number; + signal?: AbortSignal; +} + +async function fetchInscriptions({ + addresses, + offset = 0, + limit = 60, + signal, +}: FetchInscriptionsArgs) { const params = new URLSearchParams(); ensureArray(addresses).forEach(address => params.append('address', address)); params.append('limit', limit.toString()); params.append('offset', offset.toString()); + const res = await axios.get( - `${HIRO_INSCRIPTIONS_API_URL}?${params.toString()}` + `${HIRO_INSCRIPTIONS_API_URL}?${params.toString()}`, + { + signal, + } ); + return res.data; } @@ -55,6 +74,7 @@ export function useGetInscriptionsInfiniteQuery() { const account = useCurrentTaprootAccount(); const nativeSegwitSigner = useCurrentAccountNativeSegwitIndexZeroSigner(); const currentBitcoinAddress = nativeSegwitSigner.address; + const limiter = useHiroApiRateLimiter(); const getTaprootAddressData = useCallback( (fromIndex: number, toIndex: number) => { @@ -76,7 +96,7 @@ export function useGetInscriptionsInfiniteQuery() { const query = useInfiniteQuery({ queryKey: [QueryPrefixes.GetInscriptions, currentBitcoinAddress, network.id], - async queryFn({ pageParam }: InfiniteQueryPageParam) { + async queryFn({ pageParam, signal }: InfiniteQueryPageParam) { const responsesArr: InscriptionsQueryResponse[] = []; let fromIndex = pageParam?.fromIndex ?? 0; let addressesWithoutOrdinalsNum = pageParam?.addressesWithoutOrdinalsNum ?? 0; @@ -98,7 +118,18 @@ export function useGetInscriptionsInfiniteQuery() { if (fromIndex === 0) { addresses.unshift(currentBitcoinAddress); } - const response = await fetchInscriptions(addresses, offset, inscriptionsLazyLoadLimit); + const response = await limiter.add( + () => + fetchInscriptions({ + addresses, + offset, + limit: inscriptionsLazyLoadLimit, + }), + { + signal, + throwOnTimeout: true, + } + ); responsesArr.push(response); @@ -186,11 +217,20 @@ export function useGetInscriptionsInfiniteQuery() { export function useInscriptionsByAddressQuery(address: string) { const network = useCurrentNetwork(); + const limiter = useHiroApiRateLimiter(); const query = useInfiniteQuery({ - queryKey: [QueryPrefixes.InscriptionsByAddress, address, network.id], - async queryFn({ pageParam = 0 }) { - return fetchInscriptions(address, pageParam); + queryKey: [QueryPrefixes.InscriptionsByAddress, network.id, address], + async queryFn({ pageParam = 0, signal }) { + return limiter.add( + () => + fetchInscriptions({ + addresses: address, + offset: pageParam, + signal, + }), + { priority: 1, signal, throwOnTimeout: true } + ); }, getNextPageParam(prevInscriptionsQuery) { if (prevInscriptionsQuery.offset >= prevInscriptionsQuery.total) return undefined; diff --git a/src/app/query/stacks/balance/stx-balance.query.ts b/src/app/query/stacks/balance/stx-balance.query.ts index 5cb0b95910b..300a2222a52 100644 --- a/src/app/query/stacks/balance/stx-balance.query.ts +++ b/src/app/query/stacks/balance/stx-balance.query.ts @@ -7,7 +7,7 @@ import { StacksClient } from '@app/query/stacks/stacks-client'; import { useStacksClient } from '@app/store/common/api-clients.hooks'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; const staleTime = 1 * 60 * 1000; @@ -17,11 +17,17 @@ const balanceQueryOptions = { refetchOnMount: true, } as const; -function fetchAccountBalance(client: StacksClient, limiter: RateLimiter) { +function fetchAccountBalance(client: StacksClient, signal?: AbortSignal) { return async (principal: string) => { - await limiter.removeTokens(1); // Coercing type with client-side one that's more accurate - return client.accountsApi.getAccountBalance({ principal }) as Promise; + return client.accountsApi.getAccountBalance( + { + principal, + }, + { + signal, + } + ) as Promise; }; } @@ -38,7 +44,12 @@ export function useStacksAccountBalanceQuery fetchAccountBalance(client, limiter)(address), + queryFn: async ({ signal }) => { + return limiter.add(() => fetchAccountBalance(client, signal)(address), { + signal, + throwOnTimeout: true, + }); + }, ...balanceQueryOptions, ...options, }); diff --git a/src/app/query/stacks/bns/bns.query.ts b/src/app/query/stacks/bns/bns.query.ts index 29603e09bfd..ba91acba931 100644 --- a/src/app/query/stacks/bns/bns.query.ts +++ b/src/app/query/stacks/bns/bns.query.ts @@ -7,14 +7,14 @@ import { StacksClient } from '@app/query/stacks/stacks-client'; import { useStacksClient } from '@app/store/common/api-clients.hooks'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; import { fetchNamesForAddress } from './bns.utils'; -const staleTime = 15 * 60 * 1000; // 15 min +const staleTime = 24 * 60 * 60 * 1000; // 24 hours const bnsQueryOptions = { keepPreviousData: true, - cacheTime: staleTime, + cacheTime: Infinity, staleTime: staleTime, refetchOnMount: false, refetchInterval: false, @@ -25,17 +25,17 @@ type BnsNameFetcher = (address: string) => Promise interface GetBnsNameFetcherFactoryArgs { client: StacksClient; - limiter: RateLimiter; isTestnet: boolean; + signal?: AbortSignal; } + function getBnsNameFetcherFactory({ client, - limiter, isTestnet, + signal, }: GetBnsNameFetcherFactoryArgs): BnsNameFetcher { return async (address: string) => { - await limiter.removeTokens(1); - return fetchNamesForAddress({ client, address, isTestnet }); + return fetchNamesForAddress({ client, address, isTestnet, signal }); }; } @@ -51,7 +51,13 @@ export function useGetBnsNamesOwnedByAddress getBnsNameFetcherFactory({ client, limiter, isTestnet })(address), + queryFn: async ({ signal }) => { + return limiter.add(() => fetchNamesForAddress({ client, address, isTestnet, signal }), { + signal, + priority: 2, + throwOnTimeout: true, + }); + }, ...bnsQueryOptions, ...options, }); diff --git a/src/app/query/stacks/bns/bns.utils.ts b/src/app/query/stacks/bns/bns.utils.ts index 1e8a777885e..046818ba1a4 100644 --- a/src/app/query/stacks/bns/bns.utils.ts +++ b/src/app/query/stacks/bns/bns.utils.ts @@ -26,19 +26,26 @@ const bnsContractConsts = { } as const; // Fetch an address's "primary name" from the BNSx contract. -async function fetchBnsxName(client: StacksClient, address: string): Promise { +async function fetchBnsxName( + client: StacksClient, + address: string, + signal?: AbortSignal +): Promise { try { const addressCV = standardPrincipalCV(address); const addressHex = cvToHex(addressCV); - const res = await client.smartContractsApi.callReadOnlyFunction({ - ...bnsContractConsts, - functionName: 'get-primary-name', - tip: 'latest', - readOnlyFunctionArgs: { - sender: address, - arguments: [addressHex], + const res = await client.smartContractsApi.callReadOnlyFunction( + { + ...bnsContractConsts, + functionName: 'get-primary-name', + tip: 'latest', + readOnlyFunctionArgs: { + sender: address, + arguments: [addressHex], + }, }, - }); + { signal } + ); if (!res.okay || !res.result) return null; const { result } = res; const cv = deserializeCV(result) as OptionalCV< @@ -97,21 +104,26 @@ interface FetchNamesForAddressArgs { client: StacksClient; address: string; isTestnet: boolean; + signal?: AbortSignal; } export async function fetchNamesForAddress({ client, address, isTestnet, + signal, }: FetchNamesForAddressArgs): Promise { const fetchFromApi = async () => { - return client.namesApi.getNamesOwnedByAddress({ address, blockchain: 'stacks' }); + return client.namesApi.getNamesOwnedByAddress({ address, blockchain: 'stacks' }, { signal }); }; if (isTestnet) { return fetchFromApi(); } // Return BNSx name if available, otherwise return names from API. - const [bnsxName, bnsNames] = await Promise.all([fetchBnsxName(client, address), fetchFromApi()]); + const [bnsxName, bnsNames] = await Promise.all([ + fetchBnsxName(client, address, signal), + fetchFromApi(), + ]); const bnsName = 'names' in bnsNames ? bnsNames.names[0] : null; const names: string[] = []; if (bnsName) names.push(bnsName); diff --git a/src/app/query/stacks/contract/contract.query.ts b/src/app/query/stacks/contract/contract.query.ts index 7bcbd70d1a9..fc20b8a8a7d 100644 --- a/src/app/query/stacks/contract/contract.query.ts +++ b/src/app/query/stacks/contract/contract.query.ts @@ -5,7 +5,7 @@ import { ContractInterfaceResponseWithFunctions } from '@shared/models/contract- import { useStacksClient } from '@app/store/common/api-clients.hooks'; -import { useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; export function useGetContractInterface(transactionRequest: ContractCallPayload | null) { const { smartContractsApi } = useStacksClient(); @@ -15,11 +15,16 @@ export function useGetContractInterface(transactionRequest: ContractCallPayload if (!transactionRequest || transactionRequest?.txType !== TransactionTypes.ContractCall) return; const contractAddress = transactionRequest.contractAddress; const contractName = transactionRequest.contractName; - await limiter.removeTokens(1); - return smartContractsApi.getContractInterface({ - contractAddress, - contractName, - }) as unknown as Promise; + return limiter.add( + () => + smartContractsApi.getContractInterface({ + contractAddress, + contractName, + }) as unknown as Promise, + { + throwOnTimeout: true, + } + ); } return useQuery({ diff --git a/src/app/query/stacks/fees/fees.query.ts b/src/app/query/stacks/fees/fees.query.ts index 114a9079bb6..6ede33dfddc 100644 --- a/src/app/query/stacks/fees/fees.query.ts +++ b/src/app/query/stacks/fees/fees.query.ts @@ -1,5 +1,6 @@ import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; +import PQueue from 'p-queue'; import { logger } from '@shared/logger'; import { StacksTxFeeEstimation } from '@shared/models/fees/stacks-fees.model'; @@ -7,17 +8,22 @@ import { StacksTxFeeEstimation } from '@shared/models/fees/stacks-fees.model'; import { AppUseQueryConfig } from '@app/query/query-config'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; import { defaultApiFeeEstimations } from './fees.utils'; -function fetchTransactionFeeEstimation(currentNetwork: any, limiter: RateLimiter) { +function fetchTransactionFeeEstimation(currentNetwork: any, limiter: PQueue) { return async (estimatedLen: number | null, transactionPayload: string) => { - await limiter.removeTokens(1); - const resp = await axios.post( - currentNetwork.chain.stacks.url + '/v2/fees/transaction', + const resp = await limiter.add( + () => + axios.post( + currentNetwork.chain.stacks.url + '/v2/fees/transaction', + { + estimated_len: estimatedLen, + transaction_payload: transactionPayload, + } + ), { - estimated_len: estimatedLen, - transaction_payload: transactionPayload, + throwOnTimeout: true, } ); return resp.data; diff --git a/src/app/query/stacks/rate-limiter.ts b/src/app/query/stacks/hiro-rate-limiter.ts similarity index 62% rename from src/app/query/stacks/rate-limiter.ts rename to src/app/query/stacks/hiro-rate-limiter.ts index c7a56234454..57cbfc94c90 100644 --- a/src/app/query/stacks/rate-limiter.ts +++ b/src/app/query/stacks/hiro-rate-limiter.ts @@ -1,17 +1,20 @@ import { ChainID } from '@stacks/transactions'; -import { RateLimiter } from 'limiter'; +import PQueue from 'p-queue'; import { whenStacksChainId } from '@app/common/utils'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -const hiroStacksMainnetApiLimiter = new RateLimiter({ - tokensPerInterval: 500, - interval: 'minute', +const hiroStacksMainnetApiLimiter = new PQueue({ + interval: 5000, + intervalCap: 10, + timeout: 60000, }); -const hiroStacksTestnetApiLimiter = new RateLimiter({ - tokensPerInterval: 100, - interval: 'minute', +const hiroStacksTestnetApiLimiter = new PQueue({ + concurrency: 20, + interval: 60000, + intervalCap: 20, + timeout: 60000, }); export function useHiroApiRateLimiter() { @@ -22,5 +25,3 @@ export function useHiroApiRateLimiter() { [ChainID.Testnet]: hiroStacksTestnetApiLimiter, }); } - -export type { RateLimiter }; diff --git a/src/app/query/stacks/mempool/mempool.query.ts b/src/app/query/stacks/mempool/mempool.query.ts index bed57dfb823..64f782d1b70 100644 --- a/src/app/query/stacks/mempool/mempool.query.ts +++ b/src/app/query/stacks/mempool/mempool.query.ts @@ -6,7 +6,7 @@ import { useStacksClient } from '@app/store/common/api-clients.hooks'; import { useSubmittedTransactionsActions } from '@app/store/submitted-transactions/submitted-transactions.hooks'; import { useSubmittedTransactions } from '@app/store/submitted-transactions/submitted-transactions.selectors'; -import { useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; export function useAccountMempoolQuery(address: string) { const client = useStacksClient(); @@ -15,8 +15,12 @@ export function useAccountMempoolQuery(address: string) { const limiter = useHiroApiRateLimiter(); async function accountMempoolFetcher() { - await limiter.removeTokens(1); - return client.transactionsApi.getAddressMempoolTransactions({ address, limit: 50 }); + return limiter.add( + () => client.transactionsApi.getAddressMempoolTransactions({ address, limit: 50 }), + { + throwOnTimeout: true, + } + ); } return useQuery({ diff --git a/src/app/query/stacks/network/network.query.ts b/src/app/query/stacks/network/network.query.ts index 405b54edef4..0deaaa73b47 100644 --- a/src/app/query/stacks/network/network.query.ts +++ b/src/app/query/stacks/network/network.query.ts @@ -1,7 +1,8 @@ import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; +import PQueue from 'p-queue'; -import { RateLimiter, useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; const staleTime = 15 * 60 * 1000; // 15 min @@ -13,9 +14,12 @@ const networkStatusQueryOptions = { refetchOnReconnect: false, } as const; -async function getNetworkStatusFetcher(url: string, limiter: RateLimiter) { - await limiter.removeTokens(1); - const resp = await axios.get(url, { timeout: 4500 }); +async function getNetworkStatusFetcher(url: string, limiter: PQueue) { + const resp = await limiter.add(() => axios.get(url, { timeout: 30000 }), { + throwOnTimeout: true, + priority: 1, + }); + return resp.data; } diff --git a/src/app/query/stacks/nonce/account-nonces.query.ts b/src/app/query/stacks/nonce/account-nonces.query.ts index e3059a52b39..e4ca85d3fd7 100644 --- a/src/app/query/stacks/nonce/account-nonces.query.ts +++ b/src/app/query/stacks/nonce/account-nonces.query.ts @@ -1,11 +1,12 @@ import { useQuery } from '@tanstack/react-query'; +import PQueue from 'p-queue'; import { AppUseQueryConfig } from '@app/query/query-config'; import { useCurrentAccountStxAddressState } from '@app/store/accounts/blockchain/stacks/stacks-account.hooks'; import { useStacksClient } from '@app/store/common/api-clients.hooks'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; import { StacksClient } from '../stacks-client'; const accountNoncesQueryOptions = { @@ -14,13 +15,19 @@ const accountNoncesQueryOptions = { refetchOnWindowFocus: 'always', } as const; -function fetchAccountNonces(client: StacksClient, limiter: RateLimiter) { +function fetchAccountNonces(client: StacksClient, limiter: PQueue) { return async (principal: string) => { if (!principal) return; - await limiter.removeTokens(1); - return client.accountsApi.getAccountNonces({ - principal, - }); + + return limiter.add( + () => + client.accountsApi.getAccountNonces({ + principal, + }), + { + throwOnTimeout: true, + } + ); }; } diff --git a/src/app/query/stacks/tokens/fungible-tokens/fungible-token-metadata.query.ts b/src/app/query/stacks/tokens/fungible-tokens/fungible-token-metadata.query.ts index 2735ba0801b..7e53a2db505 100644 --- a/src/app/query/stacks/tokens/fungible-tokens/fungible-token-metadata.query.ts +++ b/src/app/query/stacks/tokens/fungible-tokens/fungible-token-metadata.query.ts @@ -1,9 +1,10 @@ import { UseQueryResult, useQueries, useQuery } from '@tanstack/react-query'; +import PQueue from 'p-queue'; import { useTokenMetadataClient } from '@app/store/common/api-clients.hooks'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../../rate-limiter'; +import { useHiroApiRateLimiter } from '../../hiro-rate-limiter'; import { TokenMetadataClient } from '../../token-metadata-client'; import { FtAssetResponse } from '../token-metadata.utils'; @@ -20,10 +21,11 @@ const queryOptions = { retry: 0, } as const; -function fetchFungibleTokenMetadata(client: TokenMetadataClient, limiter: RateLimiter) { +function fetchFungibleTokenMetadata(client: TokenMetadataClient, limiter: PQueue) { return (principal: string) => async () => { - await limiter.removeTokens(1); - return client.tokensApi.getFtMetadata(principal); + return limiter.add(() => client.tokensApi.getFtMetadata(principal), { + throwOnTimeout: true, + }); }; } diff --git a/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-holdings.query.ts b/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-holdings.query.ts index c839c4c117d..edb127a54bf 100644 --- a/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-holdings.query.ts +++ b/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-holdings.query.ts @@ -1,4 +1,5 @@ import { useQuery } from '@tanstack/react-query'; +import PQueue from 'p-queue'; import { logger } from '@shared/logger'; import { Paginated } from '@shared/models/api-types'; @@ -8,7 +9,7 @@ import { StacksClient } from '@app/query/stacks/stacks-client'; import { useStacksClient } from '@app/store/common/api-clients.hooks'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../../rate-limiter'; +import { useHiroApiRateLimiter } from '../../hiro-rate-limiter'; const staleTime = 15 * 60 * 1000; // 15 min @@ -26,14 +27,19 @@ const queryOptions = { cacheTime: staleTime, staleTime, refetchhOnFocus: false } type FetchNonFungibleTokenHoldingsResp = Paginated; -function fetchNonFungibleTokenHoldings(client: StacksClient, limiter: RateLimiter) { +function fetchNonFungibleTokenHoldings(client: StacksClient, limiter: PQueue) { return async (address: string) => { if (!address) return; - await limiter.removeTokens(1); - return client.nonFungibleTokensApi.getNftHoldings({ - principal: address, - limit: 50, - }) as unknown as Promise; + return limiter.add( + () => + client.nonFungibleTokensApi.getNftHoldings({ + principal: address, + limit: 50, + }) as unknown as Promise, + { + throwOnTimeout: true, + } + ); }; } @@ -41,7 +47,7 @@ function makeNonFungibleTokenHoldingsQuery( address: string, network: string, client: StacksClient, - limiter: RateLimiter + limiter: PQueue ) { if (address === '') logger.warn('No address passed to ' + QueryPrefixes.GetNftHoldings); return { diff --git a/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-metadata.query.ts b/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-metadata.query.ts index b93f7531d98..02311940d5f 100644 --- a/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-metadata.query.ts +++ b/src/app/query/stacks/tokens/non-fungible-tokens/non-fungible-token-metadata.query.ts @@ -6,8 +6,7 @@ import { QueryPrefixes } from '@app/query/query-prefixes'; import { StacksAccount } from '@app/store/accounts/blockchain/stacks/stacks-account.models'; import { useTokenMetadataClient } from '@app/store/common/api-clients.hooks'; -import { RateLimiter, useHiroApiRateLimiter } from '../../rate-limiter'; -import { TokenMetadataClient } from '../../token-metadata-client'; +import { useHiroApiRateLimiter } from '../../hiro-rate-limiter'; import { NftAssetResponse } from '../token-metadata.utils'; import { useGetNonFungibleTokenHoldingsQuery } from './non-fungible-token-holdings.query'; @@ -22,13 +21,6 @@ function getTokenId(hex: string) { return clarityValue.type === 1 ? Number(clarityValue.value) : 0; } -function fetchNonFungibleTokenMetadata(client: TokenMetadataClient, limiter: RateLimiter) { - return (principal: string, tokenId: number) => async () => { - await limiter.removeTokens(1); - return client.tokensApi.getNftMetadata(principal, tokenId); - }; -} - export function useGetNonFungibleTokenMetadataListQuery( account: StacksAccount ): UseQueryResult[] { @@ -44,7 +36,11 @@ export function useGetNonFungibleTokenMetadataListQuery( return { enabled: !!tokenId, queryKey: [QueryPrefixes.GetNftMetadata, principal, tokenId], - queryFn: fetchNonFungibleTokenMetadata(client, limiter)(principal, tokenId), + queryFn: async () => { + return limiter.add(() => client.tokensApi.getNftMetadata(principal, tokenId), { + throwOnTimeout: true, + }); + }, ...queryOptions, }; }), diff --git a/src/app/query/stacks/transactions/transactions-by-id.query.ts b/src/app/query/stacks/transactions/transactions-by-id.query.ts index 2be7d5620fd..705b7b60fbf 100644 --- a/src/app/query/stacks/transactions/transactions-by-id.query.ts +++ b/src/app/query/stacks/transactions/transactions-by-id.query.ts @@ -3,7 +3,7 @@ import { useQueries, useQuery } from '@tanstack/react-query'; import { useStacksClient } from '@app/store/common/api-clients.hooks'; -import { useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; const options = { staleTime: 30 * 1000, @@ -17,8 +17,12 @@ export function useTransactionsById(txids: string[]) { const limiter = useHiroApiRateLimiter(); async function transactionByIdFetcher(txId: string) { - await limiter.removeTokens(1); - return client.transactionsApi.getTransactionById({ txId }) as unknown as MempoolTransaction; + return limiter.add( + () => client.transactionsApi.getTransactionById({ txId }) as unknown as MempoolTransaction, + { + throwOnTimeout: true, + } + ); } return useQueries({ @@ -36,10 +40,15 @@ export function useTransactionById(txid: string) { const client = useStacksClient(); const limiter = useHiroApiRateLimiter(); async function transactionByIdFetcher(txId: string) { - await limiter.removeTokens(1); - return client.transactionsApi.getTransactionById({ txId }) as unknown as - | Transaction - | MempoolTransaction; + return limiter.add( + () => + client.transactionsApi.getTransactionById({ txId }) as unknown as + | Transaction + | MempoolTransaction, + { + throwOnTimeout: true, + } + ); } return useQuery({ diff --git a/src/app/query/stacks/transactions/transactions-with-transfers.query.ts b/src/app/query/stacks/transactions/transactions-with-transfers.query.ts index 3b5e7c24a03..73659faee96 100644 --- a/src/app/query/stacks/transactions/transactions-with-transfers.query.ts +++ b/src/app/query/stacks/transactions/transactions-with-transfers.query.ts @@ -7,7 +7,7 @@ import { useCurrentAccountStxAddressState } from '@app/store/accounts/blockchain import { useStacksClient } from '@app/store/common/api-clients.hooks'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; -import { useHiroApiRateLimiter } from '../rate-limiter'; +import { useHiroApiRateLimiter } from '../hiro-rate-limiter'; const queryOptions: UseQueryOptions = { staleTime: 60 * 1000, @@ -23,18 +23,24 @@ export function useGetAccountTransactionsWithTransfersQuery() { const client = useStacksClient(); const limiter = useHiroApiRateLimiter(); - async function fetchAccountTxsWithTransfers() { + async function fetchAccountTxsWithTransfers(signal?: AbortSignal) { if (!principal) return; - await limiter.removeTokens(1); - return client.accountsApi.getAccountTransactionsWithTransfers({ - principal, - limit: DEFAULT_LIST_LIMIT, - }); + return limiter.add( + () => + client.accountsApi.getAccountTransactionsWithTransfers({ + principal, + limit: DEFAULT_LIST_LIMIT, + }), + { + signal, + throwOnTimeout: true, + } + ); } return useQuery({ queryKey: ['account-txs-with-transfers', principal, chain.stacks.url], - queryFn: fetchAccountTxsWithTransfers, + queryFn: ({ signal }) => fetchAccountTxsWithTransfers(signal), enabled: !!principal && !!chain.stacks.url, ...queryOptions, }) as UseQueryResult; diff --git a/src/app/store/accounts/blockchain/bitcoin/bitcoin.hooks.ts b/src/app/store/accounts/blockchain/bitcoin/bitcoin.hooks.ts index 5087a51a9c6..da1c628b10b 100644 --- a/src/app/store/accounts/blockchain/bitcoin/bitcoin.hooks.ts +++ b/src/app/store/accounts/blockchain/bitcoin/bitcoin.hooks.ts @@ -17,7 +17,7 @@ import { getAssumedZeroIndexSigningConfig, } from '@shared/crypto/bitcoin/signer-config'; import { allSighashTypes } from '@shared/rpc/methods/sign-psbt'; -import { isNumber } from '@shared/utils'; +import { isNumber, isUndefined } from '@shared/utils'; import { useAnalytics } from '@app/common/hooks/analytics/use-analytics'; import { useWalletType } from '@app/common/use-wallet-type'; @@ -130,14 +130,18 @@ export function useSignLedgerBitcoinTx() { const btcSignerPsbtClone = btc.Transaction.fromPSBT(psbt.toBuffer()); - const inputByPaymentType = signingConfig.map(config => [ - config, - getInputPaymentType( - config.index, - btcSignerPsbtClone.getInput(config.index), - network.chain.bitcoin.bitcoinNetwork - ), - ]) as readonly [BitcoinInputSigningConfig, PaymentTypes][]; + const inputByPaymentType = signingConfig.map(config => { + const inputIndex = btcSignerPsbtClone.getInput(config.index).index; + if (isUndefined(inputIndex)) throw new Error('Input must have an index for payment type'); + return [ + config, + getInputPaymentType( + inputIndex, + btcSignerPsbtClone.getInput(config.index), + network.chain.bitcoin.bitcoinNetwork + ), + ]; + }) as readonly [BitcoinInputSigningConfig, PaymentTypes][]; // // Taproot diff --git a/src/shared/crypto/bitcoin/bitcoin.utils.ts b/src/shared/crypto/bitcoin/bitcoin.utils.ts index 9160b3a94e4..69752226649 100644 --- a/src/shared/crypto/bitcoin/bitcoin.utils.ts +++ b/src/shared/crypto/bitcoin/bitcoin.utils.ts @@ -266,7 +266,9 @@ export function getInputPaymentType( ): PaymentTypes { const address = getBitcoinInputAddress(index, input, getBtcSignerLibNetworkConfigByMode(network)); if (address === '') throw new Error('Input address cannot be empty'); - if (address.startsWith('bc1p') || address.startsWith('tb1p')) return 'p2tr'; - if (address.startsWith('bc1q') || address.startsWith('tb1q')) return 'p2wpkh'; + if (address.startsWith('bc1p') || address.startsWith('tb1p') || address.startsWith('bcrt1p')) + return 'p2tr'; + if (address.startsWith('bc1q') || address.startsWith('tb1q') || address.startsWith('bcrt1q')) + return 'p2wpkh'; throw new Error('Unable to infer payment type from input address'); } diff --git a/src/shared/crypto/bitcoin/signer-config.ts b/src/shared/crypto/bitcoin/signer-config.ts index 886a310ba00..55a35dfca06 100644 --- a/src/shared/crypto/bitcoin/signer-config.ts +++ b/src/shared/crypto/bitcoin/signer-config.ts @@ -2,7 +2,7 @@ import * as btc from '@scure/btc-signer'; import { BitcoinNetworkModes } from '@shared/constants'; import { logger } from '@shared/logger'; -import { makeNumberRange } from '@shared/utils'; +import { isUndefined, makeNumberRange } from '@shared/utils'; import { getInputPaymentType } from './bitcoin.utils'; import { getTaprootAddressIndexDerivationPath } from './p2tr-address-gen'; @@ -32,7 +32,9 @@ export function getAssumedZeroIndexSigningConfig({ return indexes.map(inputIndex => { const input = tx.getInput(inputIndex); - const paymentType = getInputPaymentType(inputIndex, input, 'mainnet'); + if (isUndefined(input.index)) throw new Error('Input must have an index for payment type'); + const paymentType = getInputPaymentType(input.index, input, network); + switch (paymentType) { case 'p2wpkh': return { diff --git a/test-app/src/components/bitcoin.tsx b/test-app/src/components/bitcoin.tsx index 7fa214e231e..1582297f380 100644 --- a/test-app/src/components/bitcoin.tsx +++ b/test-app/src/components/bitcoin.tsx @@ -53,26 +53,91 @@ function buildTestNativeSegwitPsbtRequest( tx.addInput({ index: 0, txid: '5e03c0986d1b196dc586558bdcfcc9971c31e0c4c98ac7a6e86f9e07d899910c', - witnessUtxo: { - amount: BigInt(100), - script: p2wpkh.script, + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('0c634e54f790a1e92b38b54f9b15995b0bb349e701f782c0f2b51cabfb619db3'), + index: 0, + finalScriptSig: hexToBytes(''), + sequence: 4294967293, + }, + ], + outputs: [ + { + amount: BigInt(1112640), + script: hexToBytes('0014a8113965cee4d5ffa2d9996a204866a58200131d'), + }, + { + amount: BigInt(36595102), + script: hexToBytes('001436d197d642a9b02fa0d31b34fe0eab93f273a3c8'), + }, + ], + lockTime: 2536001, }, }); tx.addInput({ index: 0, - txid: 'ef375b4af02821a14b249c879f818a50d3d0a98a334d70277ab329b9f5687108', - witnessUtxo: { - amount: BigInt(100), - script: p2wpkh.script, + txid: '13c87eb1eb080ac9bf4f8b649b70e0bc83335c3b9a684b3a9d7216e8b4d3b247', + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('8be3e863d8db3e41919f16b07f158fbbe87924055eb4a256293fb5bacd6c4926'), + index: 1, + finalScriptSig: hexToBytes(''), + sequence: 0, + }, + ], + outputs: [ + { + amount: BigInt(10000), + script: hexToBytes('0014a8113965cee4d5ffa2d9996a204866a58200131d'), + }, + { + amount: BigInt(5363), + script: hexToBytes('00148027825ee06ad337f9716df8137a1b651163c5b0'), + }, + ], + lockTime: 2536001, + }, + }); + tx.addInput({ + index: 0, + txid: 'ed1f2163137e5714b1a8da2a2409067e0d5526347b93d5300b1930a015b8f78b', + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('ed1f2163137e5714b1a8da2a2409067e0d5526347b93d5300b1930a015b8f78b'), + index: 1, + finalScriptSig: hexToBytes(''), + sequence: 0, + }, + ], + outputs: [ + { + amount: BigInt(6000), + script: hexToBytes('001419f793aca8e151a4f0aad0c94656a40bdc4fc879'), + }, + { + amount: BigInt(1468212), + script: hexToBytes('0014a8113965cee4d5ffa2d9996a204866a58200131d'), + }, + ], + lockTime: 0, }, }); tx.addOutput({ - amount: BigInt(200), + amount: BigInt(100), script: p2wpkh.script, }); const psbt = tx.toPSBT(); - + console.log(bytesToHex(psbt)); // For testing mainnet // return { hex: tempHex }; return { hex: bytesToHex(psbt), broadcast: true }; @@ -86,27 +151,92 @@ function buildTestNativeSegwitPsbtRequestWithIndexes(pubKey: Uint8Array): PsbtRe tx.addInput({ index: 0, txid: '5e03c0986d1b196dc586558bdcfcc9971c31e0c4c98ac7a6e86f9e07d899910c', - witnessUtxo: { - amount: BigInt(100), - script: p2wpkh.script, + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('0c634e54f790a1e92b38b54f9b15995b0bb349e701f782c0f2b51cabfb619db3'), + index: 0, + finalScriptSig: hexToBytes(''), + sequence: 4294967293, + }, + ], + outputs: [ + { + amount: BigInt(1112640), + script: hexToBytes('0014a8113965cee4d5ffa2d9996a204866a58200131d'), + }, + { + amount: BigInt(36595102), + script: hexToBytes('001436d197d642a9b02fa0d31b34fe0eab93f273a3c8'), + }, + ], + lockTime: 2536001, }, }); tx.addInput({ index: 0, - txid: 'ef375b4af02821a14b249c879f818a50d3d0a98a334d70277ab329b9f5687108', - witnessUtxo: { - amount: BigInt(100), - script: p2wpkh.script, + txid: '13c87eb1eb080ac9bf4f8b649b70e0bc83335c3b9a684b3a9d7216e8b4d3b247', + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('8be3e863d8db3e41919f16b07f158fbbe87924055eb4a256293fb5bacd6c4926'), + index: 1, + finalScriptSig: hexToBytes(''), + sequence: 0, + }, + ], + outputs: [ + { + amount: BigInt(10000), + script: hexToBytes('0014a8113965cee4d5ffa2d9996a204866a58200131d'), + }, + { + amount: BigInt(5363), + script: hexToBytes('00148027825ee06ad337f9716df8137a1b651163c5b0'), + }, + ], + lockTime: 2536001, + }, + }); + tx.addInput({ + index: 0, + txid: 'ed1f2163137e5714b1a8da2a2409067e0d5526347b93d5300b1930a015b8f78b', + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('ed1f2163137e5714b1a8da2a2409067e0d5526347b93d5300b1930a015b8f78b'), + index: 1, + finalScriptSig: hexToBytes(''), + sequence: 0, + }, + ], + outputs: [ + { + amount: BigInt(6000), + script: hexToBytes('001419f793aca8e151a4f0aad0c94656a40bdc4fc879'), + }, + { + amount: BigInt(1468212), + script: hexToBytes('0014a8113965cee4d5ffa2d9996a204866a58200131d'), + }, + ], + lockTime: 0, }, }); tx.addOutput({ - amount: BigInt(200), + amount: BigInt(100), script: p2wpkh.script, }); const psbt = tx.toPSBT(); - return { signAtIndex: 0, hex: bytesToHex(psbt) }; + return { hex: bytesToHex(psbt), signAtIndex: 0 }; } function buildTestTaprootPsbtRequest(pubKey: Uint8Array): PsbtRequestOptions { @@ -117,9 +247,30 @@ function buildTestTaprootPsbtRequest(pubKey: Uint8Array): PsbtRequestOptions { tx.addInput({ index: 0, txid: '4f4cc7cb40b04978bd7704798dc1adf55b58196cef616b0fac8181965abc4726', - witnessUtxo: { - amount: BigInt(100), - script: payment.script, + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('ed1f2163137e5714b1a8da2a2409067e0d5526347b93d5300b1930a015b8f78b'), + index: 0, + finalScriptSig: hexToBytes(''), + sequence: 4294967294, + }, + ], + outputs: [ + { + amount: BigInt(1000), + script: hexToBytes( + '5120d7b0a2cb4ea70c8d707caca0b06fb1c640c614d91f5e96baf5c3dd097cdfb113' + ), + }, + { + amount: BigInt(1661000), + script: hexToBytes('001469f127131937ecffe8379a77dc0ecb255a3ade11'), + }, + ], + lockTime: 2428539, }, }); tx.addOutput({ @@ -140,10 +291,30 @@ function buildTestTaprootPsbtRequestWithIndex(pubKey: Uint8Array): PsbtRequestOp tx.addInput({ index: 0, txid: '4f4cc7cb40b04978bd7704798dc1adf55b58196cef616b0fac8181965abc4726', - // tapInternalKey: payment.tapInternalKey, - witnessUtxo: { - amount: BigInt(100), - script: payment.script, + nonWitnessUtxo: { + version: 1, + segwitFlag: false, + inputs: [ + { + txid: hexToBytes('ed1f2163137e5714b1a8da2a2409067e0d5526347b93d5300b1930a015b8f78b'), + index: 0, + finalScriptSig: hexToBytes(''), + sequence: 4294967294, + }, + ], + outputs: [ + { + amount: BigInt(1000), + script: hexToBytes( + '5120d7b0a2cb4ea70c8d707caca0b06fb1c640c614d91f5e96baf5c3dd097cdfb113' + ), + }, + { + amount: BigInt(1661000), + script: hexToBytes('001469f127131937ecffe8379a77dc0ecb255a3ade11'), + }, + ], + lockTime: 2428539, }, }); tx.addOutput({ @@ -153,7 +324,7 @@ function buildTestTaprootPsbtRequestWithIndex(pubKey: Uint8Array): PsbtRequestOp const psbt = tx.toPSBT(); - return { signAtIndex: 0, hex: bytesToHex(psbt) }; + return { hex: bytesToHex(psbt), signAtIndex: 2 }; } export const Bitcoin = () => { @@ -212,7 +383,7 @@ export const Bitcoin = () => { signTx(buildTestTaprootPsbtRequestWithIndex(taprootPubKey), stacksTestnetNetwork) } > - Sign PSBT at index (Taproot) + Sign PSBT at index failure (Taproot) { test.beforeEach(async ({ extensionId, globalPage, onboardingPage, page }) => { @@ -34,36 +36,42 @@ test.describe('Sign PSBT', () => { }; } + async function clickErrorCloseWindowButton(context: BrowserContext) { + const popup = await context.waitForEvent('page'); + await popup.waitForTimeout(1000); + const errorMsg = popup.locator('text="Failed to sign"'); + const btn = popup.locator('text="Close window"'); + test.expect(errorMsg).toBeTruthy(); + await btn.click(); + } + async function interceptBroadcastRequest(context: BrowserContext) { const popup = await context.waitForEvent('page'); - const requestPromise = popup.waitForRequest('**/*/tx'); - await popup.route('**/*/tx', async route => await route.abort()); + const requestPromise = popup.waitForRequest('**/*'); + await popup.route('**/*', async route => await route.abort()); return requestPromise; } const signAllParams = { - hex: unsignedPsbtHex, + hex: unsignedPsbtHexWithThreeInputs, network: WalletDefaultNetworkConfigurationIds.testnet, }; - const signAtIndexParams = { - hex: unsignedPsbtHex, - network: WalletDefaultNetworkConfigurationIds.testnet, - signAtIndex: 0, - }; - function initiatePsbtSigning(page: Page) { return async (params: SignPsbtRequestParams & { broadcast?: boolean }) => page.evaluate( async params => - (window as any).LeatherProvider.request('signPsbt', { ...params }).catch( - (e: unknown) => e - ), + (window as any).LeatherProvider.request('signPsbt', { + ...params, + }).catch((e: unknown) => e), { ...params } ); } - test('that all inputs are signed', async ({ page, context }) => { + test('that all inputs are signed even if the number of inputs is greater than vout index', async ({ + page, + context, + }) => { const [result] = await Promise.all([ initiatePsbtSigning(page)(signAllParams), clickActionButton(context)('Confirm'), @@ -79,7 +87,7 @@ test.describe('Sign PSBT', () => { test('that only requested inputs are signed', async ({ page, context }) => { const [result] = await Promise.all([ - initiatePsbtSigning(page)(signAtIndexParams), + initiatePsbtSigning(page)({ ...signAllParams, signAtIndex: 0 }), clickActionButton(context)('Confirm'), ]); @@ -127,4 +135,25 @@ test.describe('Sign PSBT', () => { }, }); }); + + test('that a failed request occurs if an invalid index is provided', async ({ + page, + context, + }) => { + const [result] = await Promise.all([ + initiatePsbtSigning(page)({ ...signAllParams, signAtIndex: 4 }), + clickActionButton(context)('Confirm'), + clickErrorCloseWindowButton(context), + ]); + + delete result.id; + + test.expect(result).toEqual({ + jsonrpc: '2.0', + error: { + code: 4001, + message: 'User rejected signing PSBT request', + }, + }); + }); }); diff --git a/theme/global/shimmer-styles.ts b/theme/global/shimmer-styles.ts new file mode 100644 index 00000000000..549a0d4091f --- /dev/null +++ b/theme/global/shimmer-styles.ts @@ -0,0 +1,10 @@ +import { css } from 'leather-styles/css'; + +export const shimmerStyles = css({ + '&[data-state=loading]': { + display: 'inline-block', + WebkitMask: 'linear-gradient(-60deg, #000 30%, #0005, #000 70%) right/300% 100%', + backgroundRepeat: 'no-repeat', + animation: 'shimmer 1.5s infinite', + }, +}); diff --git a/theme/keyframes.ts b/theme/keyframes.ts index beee9e090e6..23225294b17 100644 --- a/theme/keyframes.ts +++ b/theme/keyframes.ts @@ -12,4 +12,9 @@ export const keyframes: CssKeyframes = { from: { opacity: 0, transform: 'translateY(-12px) scale(0.9)' }, to: { opacity: 1, transform: 'translateY(0) scale(1)' }, }, + shimmer: { + '100%': { + maskPosition: 'left', + }, + }, };