From 7a5c3a2e62c3a726735f9fe921f9e08d4092d0f9 Mon Sep 17 00:00:00 2001 From: doprz <52579214+doprz@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:05:19 -0500 Subject: [PATCH] feat: settings page (#260) * feat: setup settings page boilerplate * feat: split view into halves * feat: add preview for Customization Options section * feat: add OptionStore logic and LD icon * feat: add courseStatusChips functionality * feat: migrate experimental settings to proper settings * feat: center Preview children and add className override * feat: add GitHub stats * feat: open GitHub user profile onclick * feat: get user GitHub stats * feat: refactor into useGitHubStats hook * feat: toggle GitHub stats when the user presses the 'S' key * chore: update title * fix: remove extra file * feat: refactor and add DialogProvider * fix: import * test: this commit has issues * fix: no schedule bug * fix: longhorn developers icon not rendering in prod builds * feat(pr-review): fix UI and comment out experimental code * chore: run lint and prettier * feat: add responsive design * feat: use @octokit/rest and fix GitHub stats --- package.json | 3 + pnpm-lock.yaml | 1386 +++++++++-------- src/assets/LD-icon.png | Bin 0 -> 37995 bytes src/debug/index.tsx | 2 + src/pages/background/lib/deleteSchedule.ts | 13 + src/pages/calendar/CalendarMain.tsx | 2 + src/pages/options/Settings.tsx | 22 + src/pages/options/index.tsx | 4 +- src/shared/storage/OptionsStore.ts | 40 +- src/shared/util/experimental.ts | 3 - src/stories/components/Settings.stories.tsx | 2 +- src/views/components/PopupMain.tsx | 31 +- src/views/components/Settings.tsx | 15 - .../calendar/CalendarCourseCell.tsx | 19 +- .../components/calendar/CalenderHeader.tsx | 31 +- .../components/common/PopupCourseBlock.tsx | 19 +- src/views/components/common/SwitchButton.tsx | 2 +- .../injected/TableRow/TableRow.module.scss | 7 + .../components/injected/TableRow/TableRow.tsx | 31 +- .../components/settings/DevMode.tsx} | 4 +- src/views/components/settings/Preview.tsx | 30 + src/views/components/settings/Settings.tsx | 487 ++++++ src/views/lib/getGitHubStats.ts | 266 ++++ 23 files changed, 1758 insertions(+), 661 deletions(-) create mode 100644 src/assets/LD-icon.png create mode 100644 src/pages/options/Settings.tsx delete mode 100644 src/shared/util/experimental.ts delete mode 100644 src/views/components/Settings.tsx rename src/{pages/options/App.tsx => views/components/settings/DevMode.tsx} (91%) create mode 100644 src/views/components/settings/Preview.tsx create mode 100644 src/views/components/settings/Settings.tsx create mode 100644 src/views/lib/getGitHubStats.ts diff --git a/package.json b/package.json index ea511e8f..295f0b6b 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "dependencies": { "@headlessui/react": "^2.1.8", "@hello-pangea/dnd": "^17.0.0", + "@octokit/rest": "^21.0.2", "@unocss/vite": "^0.63.2", "@vitejs/plugin-react": "^4.3.2", "chrome-extension-toolkit": "^0.0.54", @@ -35,6 +36,7 @@ "highcharts-react-official": "^3.2.1", "html-to-image": "^1.11.11", "husky": "^9.1.6", + "kc-dabr-wasm": "^0.1.2", "nanoid": "^5.0.7", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -49,6 +51,7 @@ "@commitlint/types": "^19.5.0", "@crxjs/vite-plugin": "2.0.0-beta.21", "@iconify-json/bi": "^1.2.0", + "@iconify-json/iconoir": "^1.2.1", "@iconify-json/material-symbols": "^1.2.2", "@iconify-json/ri": "^1.2.0", "@storybook/addon-designs": "^8.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4c96d76..c94b1156 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,13 +21,16 @@ importers: dependencies: '@headlessui/react': specifier: ^2.1.8 - version: 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@hello-pangea/dnd': specifier: ^17.0.0 - version: 17.0.0(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 17.0.0(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@octokit/rest': + specifier: ^21.0.2 + version: 21.0.2 '@unocss/vite': specifier: ^0.63.2 - version: 0.63.2(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + version: 0.63.3(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) '@vitejs/plugin-react': specifier: ^4.3.2 version: 4.3.2(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) @@ -49,6 +52,9 @@ importers: husky: specifier: ^9.1.6 version: 9.1.6 + kc-dabr-wasm: + specifier: ^0.1.2 + version: 0.1.2 nanoid: specifier: ^5.0.7 version: 5.0.7 @@ -86,6 +92,9 @@ importers: '@iconify-json/bi': specifier: ^1.2.0 version: 1.2.0 + '@iconify-json/iconoir': + specifier: ^1.2.1 + version: 1.2.1 '@iconify-json/material-symbols': specifier: ^1.2.2 version: 1.2.2 @@ -94,25 +103,25 @@ importers: version: 1.2.0 '@storybook/addon-designs': specifier: ^8.0.3 - version: 8.0.3(@storybook/blocks@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4))(@storybook/components@8.3.4(storybook@8.3.4))(@storybook/theming@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.0.3(@storybook/blocks@8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5))(@storybook/components@8.3.5(storybook@8.3.5))(@storybook/theming@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-essentials': specifier: ^8.3.4 - version: 8.3.4(storybook@8.3.4) + version: 8.3.5(storybook@8.3.5) '@storybook/addon-links': specifier: ^8.3.4 - version: 8.3.4(react@18.3.1)(storybook@8.3.4) + version: 8.3.5(react@18.3.1)(storybook@8.3.5) '@storybook/blocks': specifier: ^8.3.4 - version: 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4) + version: 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) '@storybook/react': specifier: ^8.3.4 - version: 8.3.4(@storybook/test@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4)(typescript@5.6.2) + version: 8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)(typescript@5.6.2) '@storybook/react-vite': specifier: ^8.3.4 - version: 8.3.4(@storybook/test@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.23.0)(storybook@8.3.4)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + version: 8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.3.5)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) '@storybook/test': specifier: ^8.3.4 - version: 8.3.4(storybook@8.3.4) + version: 8.3.5(storybook@8.3.5) '@svgr/core': specifier: ^8.1.0 version: 8.1.0(typescript@5.6.2) @@ -130,7 +139,7 @@ importers: version: 2.4.9 '@types/react': specifier: ^18.3.10 - version: 18.3.10 + version: 18.3.11 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -148,34 +157,34 @@ importers: version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) '@unocss/eslint-config': specifier: ^0.63.2 - version: 0.63.2(eslint@8.57.1)(typescript@5.6.2) + version: 0.63.3(eslint@8.57.1)(typescript@5.6.2) '@unocss/postcss': specifier: ^0.63.2 - version: 0.63.2(postcss@8.4.47) + version: 0.63.3(postcss@8.4.47) '@unocss/preset-uno': specifier: ^0.63.2 - version: 0.63.2 + version: 0.63.3 '@unocss/preset-web-fonts': specifier: ^0.63.2 - version: 0.63.2 + version: 0.63.3 '@unocss/reset': specifier: ^0.63.2 - version: 0.63.2 + version: 0.63.3 '@unocss/transformer-directives': specifier: ^0.63.2 - version: 0.63.2 + version: 0.63.3 '@unocss/transformer-variant-group': specifier: ^0.63.2 - version: 0.63.2 + version: 0.63.3 '@vitejs/plugin-react-swc': specifier: ^3.7.1 version: 3.7.1(@swc/helpers@0.5.11)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) '@vitest/coverage-v8': specifier: ^2.1.1 - version: 2.1.1(vitest@2.1.1(@types/node@22.7.4)(@vitest/ui@2.1.1)(sass@1.79.4)(terser@5.28.1)) + version: 2.1.2(vitest@2.1.2) '@vitest/ui': specifier: ^2.1.1 - version: 2.1.1(vitest@2.1.1) + version: 2.1.2(vitest@2.1.2) chromatic: specifier: ^11.11.0 version: 11.11.0 @@ -196,22 +205,22 @@ importers: version: 8.57.1 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1) + version: 19.0.4(eslint-plugin-import@2.31.0)(eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1) eslint-config-airbnb-base: specifier: ^15.0.0 - version: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1) + version: 15.0.0(eslint-plugin-import@2.31.0)(eslint@8.57.1) eslint-config-airbnb-typescript: specifier: ^18.0.0 - version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1) + version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.1) eslint-import-resolver-typescript: specifier: ^3.6.3 - version: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + version: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) eslint-plugin-import: specifier: ^2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-import-essentials: specifier: ^0.2.1 version: 0.2.1(eslint@8.57.1) @@ -253,13 +262,13 @@ importers: version: 12.0.1(eslint@8.57.1)(typescript@5.6.2)(webpack@5.90.3(esbuild@0.19.12)) storybook: specifier: ^8.3.4 - version: 8.3.4 + version: 8.3.5 typescript: specifier: ^5.6.2 version: 5.6.2 unocss: specifier: ^0.63.2 - version: 0.63.2(postcss@8.4.47)(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + version: 0.63.3(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) unocss-preset-primitives: specifier: 0.0.2-beta.1 version: 0.0.2-beta.1 @@ -271,10 +280,10 @@ importers: version: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) vite-plugin-inspect: specifier: ^0.8.7 - version: 0.8.7(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + version: 0.8.7(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@22.7.4)(@vitest/ui@2.1.1)(sass@1.79.4)(terser@5.28.1) + version: 2.1.2(@types/node@22.7.4)(@vitest/ui@2.1.2)(sass@1.79.4)(terser@5.28.1) packages: @@ -303,16 +312,16 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} '@babel/compat-data@7.23.5': resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} '@babel/core@7.24.0': @@ -323,8 +332,8 @@ packages: resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} '@babel/generator@7.23.6': @@ -335,16 +344,16 @@ packages: resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} '@babel/helper-environment-visitor@7.22.20': @@ -367,8 +376,8 @@ packages: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} '@babel/helper-module-transforms@7.23.3': @@ -383,14 +392,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} engines: {node: '>=6.9.0'} '@babel/helper-simple-access@7.22.5': @@ -401,8 +410,8 @@ packages: resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} '@babel/helper-split-export-declaration@7.22.6': @@ -421,8 +430,8 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': @@ -433,16 +442,16 @@ packages: resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} '@babel/helpers@7.24.0': @@ -453,8 +462,8 @@ packages: resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.6': - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} '@babel/highlight@7.23.4': @@ -465,8 +474,8 @@ packages: resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} '@babel/parser@7.24.0': @@ -479,19 +488,19 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.24.7': - resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + '@babel/plugin-transform-react-jsx-self@7.25.7': + resolution: {integrity: sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.24.7': - resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + '@babel/plugin-transform-react-jsx-source@7.25.7': + resolution: {integrity: sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -500,16 +509,16 @@ packages: resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.25.6': - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} '@babel/template@7.24.0': resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} '@babel/traverse@7.24.0': @@ -520,8 +529,8 @@ packages: resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} '@babel/types@7.24.0': @@ -532,8 +541,8 @@ packages: resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} '@base2/pretty-print-object@1.0.1': @@ -1089,8 +1098,8 @@ packages: '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - '@headlessui/react@2.1.8': - resolution: {integrity: sha512-uajqVkAcVG/wHwG9Fh5PFMcFpf2VxM4vNRNKxRjuK009kePVur8LkuuygHfIE+2uZ7z7GnlTtYsyUe6glPpTLg==} + '@headlessui/react@2.1.9': + resolution: {integrity: sha512-ckWw7vlKtnoa1fL2X0fx1a3t/Li9MIKDVXn3SgG65YlxvDAsNrY39PPCxVM7sQRA7go2fJsuHSSauKFNaJHH7A==} engines: {node: '>=10'} peerDependencies: react: ^18 @@ -1118,6 +1127,9 @@ packages: '@iconify-json/bi@1.2.0': resolution: {integrity: sha512-kaBV87cQlyeMkBBiMqsf3b43Nsxdk/rYKvR29dnktht57WUyHCnBAuH+ca/bscX856CzRpVX+sYs7arjrJD0qA==} + '@iconify-json/iconoir@1.2.1': + resolution: {integrity: sha512-x55gpORwMGkmmT9UO11rzfMOp40k0ggQnPiOoh9axbyuHrkFMN7pdoCbaXkzqAdShcoI1dLzARbdqXi2sAPJXQ==} + '@iconify-json/material-symbols@1.2.2': resolution: {integrity: sha512-IDVSCt44kaiKIT9C32t/KLOCk7wR7HbLTsVDHdT477dYyp13gsmH6ovd1zN+Ir3x/FPW07e17HJt6BVn0hw7/g==} @@ -1202,6 +1214,58 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@octokit/auth-token@5.1.1': + resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.2': + resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.1': + resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.1.1': + resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + + '@octokit/plugin-paginate-rest@11.3.5': + resolution: {integrity: sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.2.6': + resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.5': + resolution: {integrity: sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==} + engines: {node: '>= 18'} + + '@octokit/request@9.1.3': + resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} + engines: {node: '>= 18'} + + '@octokit/rest@21.0.2': + resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} + engines: {node: '>= 18'} + + '@octokit/types@13.6.1': + resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1266,103 +1330,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.23.0': - resolution: {integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==} + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.23.0': - resolution: {integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.23.0': - resolution: {integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==} + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.23.0': - resolution: {integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==} + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.23.0': - resolution: {integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==} + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.23.0': - resolution: {integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.23.0': - resolution: {integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==} + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.23.0': - resolution: {integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.23.0': - resolution: {integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.23.0': - resolution: {integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.23.0': - resolution: {integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==} + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.23.0': - resolution: {integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==} + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.23.0': - resolution: {integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.23.0': - resolution: {integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.23.0': - resolution: {integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==} + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.23.0': - resolution: {integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==} + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@storybook/addon-actions@8.3.4': - resolution: {integrity: sha512-1y0yD3upKcyzNwwA6loAGW2cRDqExwl4oAT7GJQA4tmabI+fNwmANSgU/ezLvvSUf4Qo0eJHg2Zcn8y+Apq2eA==} + '@storybook/addon-actions@8.3.5': + resolution: {integrity: sha512-t8D5oo+4XfD+F8091wLa2y/CDd/W2lExCeol5Vm1tp5saO+u6f2/d7iykLhTowWV84Uohi3D073uFeyTAlGebg==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-backgrounds@8.3.4': - resolution: {integrity: sha512-o3nl7cN3x8erJNxLEv8YptanEQAnbqnaseOAsvSC6/nnSAcRYBSs3BvekKvo4CcpS2mxn7F5NJTBFYnCXzy8EA==} + '@storybook/addon-backgrounds@8.3.5': + resolution: {integrity: sha512-IQGjDujuw8+iSqKREdkL8I5E/5CAHZbfOWd4A75PQK2D6qZ0fu/xRwTOQOH4jP6xn/abvfACOdL6A0d5bU90ag==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-controls@8.3.4': - resolution: {integrity: sha512-qQcaK6dczsb6wXkzGZKOjUYNA7FfKBewRv6NvoVKYY6LfhllGOkmUAtYpdtQG8adsZWTSoZaAOJS2vP2uM67lw==} + '@storybook/addon-controls@8.3.5': + resolution: {integrity: sha512-2eCVobUUvY1Rq7sp1U8Mx8t44VXwvi0E+hqyrsqOx5TTSC/FUQ+hNAX6GSYUcFIyQQ1ORpKNlUjAAdjxBv1ZHQ==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 '@storybook/addon-designs@8.0.3': resolution: {integrity: sha512-uArLGYDwiRDjgJHgMotOLGGYK4hq1hBb0PfTJrlBnPy6evky9khrqf4KmXrIh4ViOyZ5t01THe1DnBj52DwrEQ==} @@ -1384,67 +1448,67 @@ packages: react-dom: optional: true - '@storybook/addon-docs@8.3.4': - resolution: {integrity: sha512-TWauhqF/gJgfwPuWeM6KM3LwC+ErCOM+K2z16w3vgao9s67sij8lnrdAoQ0hjA+kw2/KAdCakFS6FyciG81qog==} + '@storybook/addon-docs@8.3.5': + resolution: {integrity: sha512-MOVfo1bY8kXTzbvmWnx3UuSO4WNykFz7Edvb3mxltNyuW7UDRZGuIuSe32ddT/EtLJfurrC9Ja3yBy4KBUGnMA==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-essentials@8.3.4': - resolution: {integrity: sha512-C3+3hpmSn/8zdx5sXEP0eE6zMzxgRosHVZYfe9nBcMiEDp6UKVUyHVetWxEULOEgN46ysjcpllZ0bUkRYxi2IQ==} + '@storybook/addon-essentials@8.3.5': + resolution: {integrity: sha512-hXTtPuN4/IsXjUrkMPAuz1qKAl8DovdXpjQgjQs7jSAVx3kc4BZaGqJ3gaVenKtO8uDchmA92BoQygpkc8eWhw==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-highlight@8.3.4': - resolution: {integrity: sha512-rxZTeuZyZ7RnU+xmRhS01COFLbGnVEmlUNxBw8ArsrTEZKW5PbKpIxNLTj9F0zdH8H0MfryJGP+Aadcm0oHWlw==} + '@storybook/addon-highlight@8.3.5': + resolution: {integrity: sha512-ku0epul9aReCR3Gv/emwYnsqg3vgux5OmYMjoDcJC7s+LyfweSzLV/f5t9gSHazikJElh5TehtVkWbC4QfbGSw==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-links@8.3.4': - resolution: {integrity: sha512-R1DjARmxRIKJDGIG6uxmQ1yFNyoQbb+QIPUFjgWCak8+AdLJbC7W+Esvo9F5hQfh6czyy0piiM3qj5hpQJVh3A==} + '@storybook/addon-links@8.3.5': + resolution: {integrity: sha512-giRCpn6cfJMYPnVJkojoQDO5ae6098fgY9YgAhwaJej/9dufNcioFdbiyfK1vyzbG6TGeTmJ9ncWCXgWRtzxPQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.4 + storybook: ^8.3.5 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.3.4': - resolution: {integrity: sha512-IJ6WKEbqmG+r7sukFjo+bVmPB2Zry04sylGx/OGyOh7zIhhqAqpwOwMHP0uQrc3tLNnUM6qB/o83UyYX79ql+A==} + '@storybook/addon-measure@8.3.5': + resolution: {integrity: sha512-6GVehgbHhFIFS69xSfRV+12VK0cnuIAtZdp1J3eUCc2ATrcigqVjTM6wzZz6kBuX6O3dcusr7Wg46KtNliqLqg==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-outline@8.3.4': - resolution: {integrity: sha512-kRRJTTLKM8gMfeh/e83djN5XLlc0hFtr9zKWxuZxaXt9Hmr+9tH/PRFtVK/S4SgqnBDoXk49Wgv6raiwj5/e3A==} + '@storybook/addon-outline@8.3.5': + resolution: {integrity: sha512-dwmK6GzjEnQP9Yo0VnBUQtJkXZlXdfjWyskZ/IlUVc+IFdeeCtIiMyA92oMfHo8eXt0k1g21ZqMaIn7ZltOuHw==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-toolbars@8.3.4': - resolution: {integrity: sha512-Km1YciVIxqluDbd1xmHjANNFyMonEOtnA6e4MrnBnC9XkPXSigeFlj0JvxyI/zjBsLBoFRmQiwq55W6l3hQ9sA==} + '@storybook/addon-toolbars@8.3.5': + resolution: {integrity: sha512-Ml2gc9q8WbteDvmuAZGgBxt5SqWMXzuTkMjlsA8EB53hlkN1w9esX4s8YtBeNqC3HKoUzcdq8uexSBqU8fDbSA==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/addon-viewport@8.3.4': - resolution: {integrity: sha512-fU4LdXSSqIOLbCEh2leq/tZUYlFliXZBWr/+igQHdUoU7HY8RIImXqVUaR9wlCaTb48WezAWT60vJtwNijyIiQ==} + '@storybook/addon-viewport@8.3.5': + resolution: {integrity: sha512-FSWydoPiVWFXEittG7O1YgvuaqoU9Vb+qoq9XfP/hvQHHMDcMZvC40JaV8AnJeTXaM7ngIjcn9XDEfGbFfOzXw==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/blocks@8.3.4': - resolution: {integrity: sha512-1g4aCrd5CcN+pVhF2ATu9ZRVvAIgBMb2yF9KkCuTpdvqKDuDNK3sGb0CxjS7jp3LOvyjJr9laTOQsz8v8MQc5A==} + '@storybook/blocks@8.3.5': + resolution: {integrity: sha512-8cHTdTywolTHlgwN8I7YH7saWAIjGzV617AwjhJ95AKlC0VtpO1gAFcAgCqr4DU9eMc+LZuvbnaU/RSvA5eCCQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.4 + storybook: ^8.3.5 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.3.4': - resolution: {integrity: sha512-Sa6SZ7LeHpkrnuvua8P8MR8e8a+MPKbyMmr9TqCCy8Ud/t4AM4kHY3JpJGtrgeK9l43fBnBwfdZYoRl5J6oWeA==} + '@storybook/builder-vite@8.3.5': + resolution: {integrity: sha512-paGX8tEmAeAKFU5Cnwkq3RAi3LFCnmjAxMJikT09jUi6jDpNa0VzH8jbLxKdjsPMAsz0Wv3mrLvL2b8hyxLWAw==} peerDependencies: '@preact/preset-vite': '*' - storybook: ^8.3.4 + storybook: ^8.3.5 typescript: '>= 4.3.x' vite: ^4.0.0 || ^5.0.0 vite-plugin-glimmerx: '*' @@ -1456,18 +1520,18 @@ packages: vite-plugin-glimmerx: optional: true - '@storybook/components@8.3.4': - resolution: {integrity: sha512-iQzLJd87uGbFBbYNqlrN/ABrnx3dUrL0tjPCarzglzshZoPCNOsllJeJx5TJwB9kCxSZ8zB9TTOgr7NXl+oyVA==} + '@storybook/components@8.3.5': + resolution: {integrity: sha512-Rq28YogakD3FO4F8KwAtGpo1g3t4V/gfCLqTQ8B6oQUFoxLqegkWk/DlwCzvoJndXuQJfdSyM6+r1JcA4Nql5A==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/core@8.3.4': - resolution: {integrity: sha512-4PZB91JJpuKfcjeOR2LXj3ABaPLLSd2P/SfYOKNCygrDstsQa/yay3/yN5Z9yi1cIG84KRr6/sUW+0x8HsGLPg==} + '@storybook/core@8.3.5': + resolution: {integrity: sha512-GOGfTvdioNa/n+Huwg4u/dsyYyBcM+gEcdxi3B7i5x4yJ3I912KoVshumQAOF2myKSRdI8h8aGWdx7nnjd0+5Q==} - '@storybook/csf-plugin@8.3.4': - resolution: {integrity: sha512-ZMFWYxeTN4GxCn8dyIH4roECyLDy29yv/QKM+pHM3AC5Ny2HWI35SohWao4fGBAFxPQFbR5hPN8xa6ofHPSSTg==} + '@storybook/csf-plugin@8.3.5': + resolution: {integrity: sha512-ODVqNXwJt90hG7QW8I9w/XUyOGlr0l7XltmIJgXwB/2cYDvaGu3JV5Ybg7O0fxPV8uXk7JlRuUD8ZYv5Low6pA==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 '@storybook/csf@0.0.1': resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} @@ -1485,45 +1549,45 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/instrumenter@8.3.4': - resolution: {integrity: sha512-jVhfNOPekOyJmta0BTkQl9Z6rgRbFHlc0eV4z1oSrzaawSlc9TFzAeDCtCP57vg3FuBX8ydDYAvyZ7s4xPpLyg==} + '@storybook/instrumenter@8.3.5': + resolution: {integrity: sha512-NLDXai5y2t1ITgHVK9chyL0rMFZbICCOGcnTbyWhkLbiEWZKPJ8FuB8+g+Ba6zwtCve1A1Cnb4O2LOWy7TgWQw==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/manager-api@8.3.4': - resolution: {integrity: sha512-tBx7MBfPUrKSlD666zmVjtIvoNArwCciZiW/UJ8IWmomrTJRfFBnVvPVM2gp1lkDIzRHYmz5x9BHbYaEDNcZWQ==} + '@storybook/manager-api@8.3.5': + resolution: {integrity: sha512-fEQoKKi7h7pzh2z9RfuzatJxubrsfL/CB99fNXQ0wshMSY/7O4ckd18pK4fzG9ErnCtLAO9qsim4N/4eQC+/8Q==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/preview-api@8.3.4': - resolution: {integrity: sha512-/YKQ3QDVSHmtFXXCShf5w0XMlg8wkfTpdYxdGv1CKFV8DU24f3N7KWulAgeWWCWQwBzZClDa9kzxmroKlQqx3A==} + '@storybook/preview-api@8.3.5': + resolution: {integrity: sha512-VPqpudE8pmjTLvdNJoW/2//nqElDgUOmIn3QxbbCmdZTHDg5tFtxuqwdlNfArF0TxvTSBDIulXt/Q6K56TAfTg==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/react-dom-shim@8.3.4': - resolution: {integrity: sha512-L4llDvjaAzqPx6h4ddZMh36wPr75PrI2S8bXy+flLqAeVRYnRt4WNKGuxqH0t0U6MwId9+vlCZ13JBfFuY7eQQ==} + '@storybook/react-dom-shim@8.3.5': + resolution: {integrity: sha512-Hf0UitJ/K0C7ajooooUK/PxOR4ihUWqsC7iCV1Gqth8U37dTeLMbaEO4PBwu0VQ+Ufg0N8BJLWfg7o6G4hrODw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/react-vite@8.3.4': - resolution: {integrity: sha512-0Xm8eTH+jQ7SV4moLkPN4G6U2IDrqXPXUqsZdXaccepIMcD4G75foQFm2LOrFJuY+IMySPspKeTqf8OLskPppw==} + '@storybook/react-vite@8.3.5': + resolution: {integrity: sha512-1pnN1JB7GrHUoTVn8VGkS240VNGhWkZBOMaaaRQnkgY1dCrFxAQv4YKFVuC250+rQzgp8X33J/pDAukgwzWYFQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.4 + storybook: ^8.3.5 vite: ^4.0.0 || ^5.0.0 - '@storybook/react@8.3.4': - resolution: {integrity: sha512-PA7iQL4/9X2/iLrv+AUPNtlhTHJWhDao9gQIT1Hef39FtFk+TU9lZGbv+g29R1H9V3cHP5162nG2aTu395kmbA==} + '@storybook/react@8.3.5': + resolution: {integrity: sha512-kuBPe/wBin10SWr4EWPKxiTRGQ4RD2etGEVWVQLqVpOuJp/J2hVvXQHtCfZXU4TZT5x4PBbPRswbr58+XlF+kQ==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.3.4 + '@storybook/test': 8.3.5 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.4 + storybook: ^8.3.5 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -1531,15 +1595,15 @@ packages: typescript: optional: true - '@storybook/test@8.3.4': - resolution: {integrity: sha512-HRiUenitln8QPHu6DEWUg9s9cEoiGN79lMykzXzw9shaUvdEIhWCsh82YKtmB3GJPj6qcc6dZL/Aio8srxyGAg==} + '@storybook/test@8.3.5': + resolution: {integrity: sha512-1BXWsUGWk9FiKKelZZ55FDJdeoL8uRBHbjTYBRM2xJLhdNSvGzI4Tb3bkmxPpGn72Ua6AyldhlTxr2BpUFKOHA==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 - '@storybook/theming@8.3.4': - resolution: {integrity: sha512-D4XVsQgTtpHEHLhwkx59aGy1GBwOedVr/mNns7hFrH8FjEpxrrWCuZQASq1ZpCl8LXlh7uvmT5sM2rOdQbGuGg==} + '@storybook/theming@8.3.5': + resolution: {integrity: sha512-9HmDDyC691oqfg4RziIM9ElsS2HITaxmH7n/yeUPtuirkPdAQzqOzhvH/Sa0qOhifzs8VjR+Gd/a/ZQ+S38r7w==} peerDependencies: - storybook: ^8.3.4 + storybook: ^8.3.5 '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} @@ -1834,8 +1898,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.10': - resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} + '@types/react@18.3.11': + resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -1979,94 +2043,94 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unocss/astro@0.63.2': - resolution: {integrity: sha512-paK2+DSTF4+uM/R/DrOspYeuNSoIHLGSJf7OeA/kbs+wSRT13MNoreT3Yp2qa7Ia67YylMZ50+gA0ED8NHEALQ==} + '@unocss/astro@0.63.3': + resolution: {integrity: sha512-wKw4oRaYpEHFf8qGK4L/irf7vXF2CrNoSU07eWfMTOh8D3jXMVRc5tTTL2LqJfcBrHQfe1XKA9zdNarghGzV7Q==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 peerDependenciesMeta: vite: optional: true - '@unocss/cli@0.63.2': - resolution: {integrity: sha512-t8YHUAHAf7En6QjO7bTJUQGZqAAXbqTkrYJOX4kJbfU9l3zQZkFFq7rdZhSybrGfbmhFMf5n8zdkxoBfkGk57g==} + '@unocss/cli@0.63.3': + resolution: {integrity: sha512-3UiN9UCkRUMWYmhvEl9gOFYw/dVHZZXhRlyNymdhXB/7WM6yW3IdNkMi9OSVcesd4ZxYwiwz0+/H2N9IUbv3vQ==} engines: {node: '>=14'} hasBin: true - '@unocss/config@0.63.2': - resolution: {integrity: sha512-2Z7AIWT21jv5FX9WuC5pQcAMGLEC6bTnbF1wESJR+kcyBrmrnLxsbu56JMxhPSK2DB3vK5lOrEu2HxTcYsdOcQ==} + '@unocss/config@0.63.3': + resolution: {integrity: sha512-WP1wO/w3KIsodHaXwB+5H8nW+Hwf9I7fdUoXy0zop17vrnmjGWRV8esfYOfKEiNpqb1kAaU03gO/ucjMoPCdFg==} engines: {node: '>=14'} '@unocss/core@0.61.9': resolution: {integrity: sha512-2W1YZQIWXcueGdbXU/ZCqn/8yQhWk8e8kAHFkVlbc9rictkd2UmPB9nIZ8Ii1tMwt6F0TT6vfHbLJEGCV08o2g==} - '@unocss/core@0.63.2': - resolution: {integrity: sha512-S262ISnTkr6LSyNPXCWBZhHF49lD2snSHUJLXmmATnb2JpCRu/mMUvxJmsk9dPlsH3Ioa35Lw9sMiDWAZ9L5Gw==} + '@unocss/core@0.63.3': + resolution: {integrity: sha512-LPDog+Dt36ut9yomgpKDHn4j/kI72sWtxm3iL6agEK3NDQToQsizQU6f8ZsIyUrpi7CoIV2i+3vmsdxauBd4kw==} - '@unocss/eslint-config@0.63.2': - resolution: {integrity: sha512-N9QyztO9EUWxvYHsJA1DZZWq/4EjCi/UXN1jXWsNyovomjHYbsI0Z+cwX3Y8XDnEreFJUm9hXNNT3YbGeicqrQ==} + '@unocss/eslint-config@0.63.3': + resolution: {integrity: sha512-xC5mHjwVhKK/Bgw7SV2Ajv2FBrIT3fgDIgTHkNLyw51lyRXdcbz7Dr1mgDB98FSDyUjfsFZJd8pGCsuEnMH1eQ==} engines: {node: '>=14'} - '@unocss/eslint-plugin@0.63.2': - resolution: {integrity: sha512-njyNuvpKWa/aXFwRngHx6bmZTuqoInji3nNCHbwp+fmoS6X6mnkp0r6gEDLe/eDSGnWR2wE6BtEsWF260BQy5A==} + '@unocss/eslint-plugin@0.63.3': + resolution: {integrity: sha512-oBnc7jYe4/C8rYUR+aaZF4yRz+eINmpZFQM2YdBbmDDY9qWRUjzaF/J1rFYLCoyjOmpEjUlw0cDJteQxiGuPdw==} engines: {node: '>=14'} - '@unocss/extractor-arbitrary-variants@0.63.2': - resolution: {integrity: sha512-uNf3oe42OA5YGhkDoYv5UewGY5RIbW/7ctynIeWEYKTshzsRrRiDc4rYWSriU4yBSRzKVvyxdNN61s9Jz1huZw==} + '@unocss/extractor-arbitrary-variants@0.63.3': + resolution: {integrity: sha512-n5foNPmt/BtocMdUbl9HOOWuimPFIFDH9YmyfNrAN1kcL8Yz6l0PAlFWW5xUyk4rzaIXCfnWmRRb8mGoku0hXA==} - '@unocss/inspector@0.63.2': - resolution: {integrity: sha512-IVKbZmqg6fZIUz5OnA7l4BR8b81oiknOPWn4CPxZUZb9ZwOWznKnLxUJSv+NtPRn1YsaL14AOxDLOouSduzCmA==} + '@unocss/inspector@0.63.3': + resolution: {integrity: sha512-SdFXzmhq4bsz9hWi3ujyT8E+KiN4CfRoYig0FGLH6mNGYguVPvcUV+b+HFNNhK0g31abo94EkejEz0j/mEmXlg==} - '@unocss/postcss@0.63.2': - resolution: {integrity: sha512-CnIgooarFM3AKODXnUg+T9uqwxLsyD3R2eHEuCX/lik0mbY14Cd3V25dOJc42AYdvmungfPNBe7dDjaC3frQ+Q==} + '@unocss/postcss@0.63.3': + resolution: {integrity: sha512-hFtXt543W11dVpLVo3N4SOBcVcYVin5H+wUlYCnMnEK//bGcYfqPuDLGCXKWzmj2NhIFcikFUOpAcHdkEqbu7g==} engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 - '@unocss/preset-attributify@0.63.2': - resolution: {integrity: sha512-TyDtwO4Ctn2pc0n+6U0GoXPi8r0VyVSY7xUTq+Rio6LSQn3yTrvPYwzxux83NJjVlpzZweC4Imj1wqFbq9ob/g==} + '@unocss/preset-attributify@0.63.3': + resolution: {integrity: sha512-aps5T2UHFMlSAS+chXQWdBfPMxNferPZC5Vj2Z6TVrnau4ue2w65MkSyVUzaadCKLH4rGZkzLf7h8qQFIOR9VA==} - '@unocss/preset-icons@0.63.2': - resolution: {integrity: sha512-PqIkIPPBJ+5RuWS6boE6g23Jj8QtbyzjluiqaowFug/q7LgVgn6NV012CxAxEGNFkW8tYO9xmw7iR/hCVMQYQQ==} + '@unocss/preset-icons@0.63.3': + resolution: {integrity: sha512-9/eP1owlRpxn2oeIw2Xf6goGkUcmzTXHFwsD0+ttafbFN0+T9Vp22p+ac6xJJ+wzJY6XDMJ2IVCcDLoNtMUajA==} - '@unocss/preset-mini@0.63.2': - resolution: {integrity: sha512-LURtaEBbKhU6sbcRZzClnFSsBXG9x9qNWEokduYv6M2TGwSA6YQXICDIaEfFhwmiRtlQavSXjWgI2IWTQvAaXQ==} + '@unocss/preset-mini@0.63.3': + resolution: {integrity: sha512-V1nwq0ca8zxiXUDz4bQVyjwqWwMIpY26XNx9i/yd7FhKW//Fb+9XWMdE7BcoaBDuECF6O+RjlrSuJ1Zdw8kN8A==} - '@unocss/preset-tagify@0.63.2': - resolution: {integrity: sha512-9k0iw4n9xT/UV5qSCqg6Qw3n/0iV++UItNtR/rYC2P7iWBpr1GFlnHOaSnVct3+KJdLRQ8S0aqBsDy00aPrNdQ==} + '@unocss/preset-tagify@0.63.3': + resolution: {integrity: sha512-GAHSLYdBMYzMeSjt0yjIHlhJxlfdSWjVkryhnjlJhnCHUpTLjLVXC3sic/i1tVLETQYCjDbe6E4MNoeV9phKQQ==} - '@unocss/preset-typography@0.63.2': - resolution: {integrity: sha512-quDQSR2McLIeuyjHGCtzzjo62fXFy3FP/w73S0i1N0Myr750lHm4uaR1eWLemmSquqQO+NMJ7eHM4Tk2diNDHg==} + '@unocss/preset-typography@0.63.3': + resolution: {integrity: sha512-wtLuordwLOPFp/as+tuKM/aUvmgC5IkOQP2PfQwKfuywBhzGrAlNcBADj5i+9AmuFA1lFy87EfStEEdkMWtAvA==} - '@unocss/preset-uno@0.63.2': - resolution: {integrity: sha512-W5dbM/i4fPIJ/0jKCPtGE8TF2fFHsxmp6aUOCjhZuDt1EiKCRIoPJOnstzqYGZug/Hbnhho4vRGk4jNQTAJsaQ==} + '@unocss/preset-uno@0.63.3': + resolution: {integrity: sha512-ZV7USCPMJI08PaMZM+d0Bcnmgle55na6AuXbh7VrK3lUPpcOcaI+63sf1GzR+CRQsDR8J2BQD/D4yySXwQqFcA==} - '@unocss/preset-web-fonts@0.63.2': - resolution: {integrity: sha512-eDLp6WVEcUzoWijd4edheWpSo553pN8U0W2wcm43Vz4j3v55tnTtShNLzL4A1DoFVub+j/iL/h8RPozBoO7SUg==} + '@unocss/preset-web-fonts@0.63.3': + resolution: {integrity: sha512-DBylkDNKl17Kg+BG6GbFJJ3r/e7ZxhejY4gVYSIH9/j5487120I+1Hgj7b/aZSbauCLDR0AJTSxOZWvW+jn1eA==} - '@unocss/preset-wind@0.63.2': - resolution: {integrity: sha512-Eb2arGDqqvilox5Xsg7SGWXMzwAMP6YrlbH6hpaPmicPT/2Q+anxeeYSztxQLLRKCsphPgZfkzg/+5/lbdXxog==} + '@unocss/preset-wind@0.63.3': + resolution: {integrity: sha512-bNur/Ck0e48uUcgowTChV1XNa4ev6HfrJepTC8wXlfQZOFSsZvNYW9+IHYts0QlX8NeG5Jcf1SlkXc+s/akmUA==} - '@unocss/reset@0.63.2': - resolution: {integrity: sha512-qKA1pp+FLV8vnnNPDh60yq63HsehkJtX8gbZwk4X5mYm8FvZJsgTtSnSkoLEqO9855JIhXvLxjGs4a7LBiEhLA==} + '@unocss/reset@0.63.3': + resolution: {integrity: sha512-AByvjMrKYOMcqVQc659b3oF85B/np+wvsTRYGLHYf/ZLrBCkdKNWGHMDS3O6RuJUzYqKOzR4HiM0VJLw3BJU8Q==} - '@unocss/rule-utils@0.63.2': - resolution: {integrity: sha512-PeW1wVGG/tJSW9GpxbjyGNQvV2UDDMu/FU5ohkYz9CeGcHOGHw8gdlnH+9IT1hbQ6koVKNavhvKEQkXH1++FBg==} + '@unocss/rule-utils@0.63.3': + resolution: {integrity: sha512-DVX9d/72fsQz4qD67C+NIiMEhtpre6xJDISvxZgb165UzzW8k9rUTef4uWz0SRv+O5NdotpBl32UT8X9McP9Mg==} engines: {node: '>=14'} - '@unocss/transformer-attributify-jsx@0.63.2': - resolution: {integrity: sha512-RPQqtJf1Z+S6D9cpNZmiycOc3ZQatyIkne3W7Aw+QVvlWziRPLZJbw7lU123JUdmKfoop8GQmii5a6sbUdjhuw==} + '@unocss/transformer-attributify-jsx@0.63.3': + resolution: {integrity: sha512-Xz5d4KUm6MCyZ7l4kLlA11ZCmrtQHmytVnzF9FYDHN6/jCmkn5wQBmQUJFSOuyyIrYQymyViZN++N8SjBq7ogA==} - '@unocss/transformer-compile-class@0.63.2': - resolution: {integrity: sha512-Lznx0PXnz+t0ltlqiD2TU4/TjoApnipYyA/bRDyAOZGeZgFy21zsaFV1ETh4lo88SxBNskZHt6RHNHWioJPd1w==} + '@unocss/transformer-compile-class@0.63.3': + resolution: {integrity: sha512-Uphx2doeMSz4fFsRhK0xHuua1JUBpcZmFFla4sk1uK8Vz6Kt6yre8+gmLch5O7w9uzVJyWHMlvT90FyPfFYd6Q==} - '@unocss/transformer-directives@0.63.2': - resolution: {integrity: sha512-i5Lq6hayIgrqsWkLwuTep6FM/vM4MQyAsOGecxtJ9yeABMdFNxEehX6Gwy19tzWvD09hHJ9YOOKDfx9OYg1bag==} + '@unocss/transformer-directives@0.63.3': + resolution: {integrity: sha512-nQtxl/7kfG4OJbFq86E1HpY3v8pfEQd664dajxzaZ9kTyTGQhpYWTBgT5zkY5/9/svDuTZ9dPIMU+8CyQnVopQ==} - '@unocss/transformer-variant-group@0.63.2': - resolution: {integrity: sha512-vjjXlL4GEgBj6YPj2g7RzvzihE8tV2v8tOEm6LM+WOhJ8/DALe9CbAvjtCShV1pNNBYkzMdBOqiGIDzUkJTqnw==} + '@unocss/transformer-variant-group@0.63.3': + resolution: {integrity: sha512-Dpxb649mcZkpXWodDEIOQoE5gfcpSuuBjLE8H0OyivLVPqYw2Y5S7goXKuV7o9mce+QWJz+aJK1dtthJIcOpIg==} - '@unocss/vite@0.63.2': - resolution: {integrity: sha512-2beeHbWdEIXp9+b8GphvG2ZYWI3gta+MrHuoqcmrcc/0JVvx7FyjVIs/wSu63TRWGsiIkPXSOGJtOYvDgNEMBQ==} + '@unocss/vite@0.63.3': + resolution: {integrity: sha512-OrAbmTtY+bivQdq0ZApQa8WlUzNbYjGc9GYTJnME5/vuzlwf0b+cNEm8Quc6AdSmlyGN6rUC9VLKaB1OqSRnZw==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 @@ -2081,11 +2145,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/coverage-v8@2.1.1': - resolution: {integrity: sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==} + '@vitest/coverage-v8@2.1.2': + resolution: {integrity: sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==} peerDependencies: - '@vitest/browser': 2.1.1 - vitest: 2.1.1 + '@vitest/browser': 2.1.2 + vitest: 2.1.2 peerDependenciesMeta: '@vitest/browser': optional: true @@ -2093,13 +2157,13 @@ packages: '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@2.1.1': - resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + '@vitest/expect@2.1.2': + resolution: {integrity: sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==} - '@vitest/mocker@2.1.1': - resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + '@vitest/mocker@2.1.2': + resolution: {integrity: sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==} peerDependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.2 msw: ^2.3.5 vite: ^5.0.0 peerDependenciesMeta: @@ -2111,31 +2175,31 @@ packages: '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/pretty-format@2.1.1': - resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + '@vitest/pretty-format@2.1.2': + resolution: {integrity: sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==} - '@vitest/runner@2.1.1': - resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + '@vitest/runner@2.1.2': + resolution: {integrity: sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==} - '@vitest/snapshot@2.1.1': - resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + '@vitest/snapshot@2.1.2': + resolution: {integrity: sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@2.1.1': - resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + '@vitest/spy@2.1.2': + resolution: {integrity: sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==} - '@vitest/ui@2.1.1': - resolution: {integrity: sha512-IIxo2LkQDA+1TZdPLYPclzsXukBWd5dX2CKpGqH8CCt8Wh0ZuDn4+vuQ9qlppEju6/igDGzjWF/zyorfsf+nHg==} + '@vitest/ui@2.1.2': + resolution: {integrity: sha512-92gcNzkDnmxOxyHzQrQYRsoV9Q0Aay0r4QMLnV+B+lbqlUWa8nDg9ivyLV5mMVTtGirHsYUGGh/zbIA55gBZqA==} peerDependencies: - vitest: 2.1.1 + vitest: 2.1.2 '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - '@vitest/utils@2.1.1': - resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + '@vitest/utils@2.1.2': + resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} '@webassemblyjs/ast@1.11.6': resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} @@ -2363,6 +2427,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -2440,8 +2507,8 @@ packages: caniuse-lite@1.0.30001591: resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} - caniuse-lite@1.0.30001664: - resolution: {integrity: sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} chai@5.1.1: resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} @@ -2548,8 +2615,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.7: - resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} @@ -2862,8 +2929,8 @@ packages: electron-to-chromium@1.4.690: resolution: {integrity: sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==} - electron-to-chromium@1.5.31: - resolution: {integrity: sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==} + electron-to-chromium@1.5.32: + resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3072,12 +3139,12 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-import@2.30.0: - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true @@ -3158,6 +3225,7 @@ packages: eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@10.2.0: @@ -3850,6 +3918,9 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + kc-dabr-wasm@0.1.2: + resolution: {integrity: sha512-RonEqnhqHLVo9b3E0fFlTFWgew3iOHUc5Qz67k4OVBwEbqRD4qjk06D+7jH6jLipChAEQ4pqJ6hUfu1Jdx+Naw==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -4095,8 +4166,8 @@ packages: mlly@1.6.1: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mlly@1.7.2: + resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} @@ -4246,8 +4317,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.0: - resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==} + package-manager-detector@0.2.1: + resolution: {integrity: sha512-/hVW2fZvAdEas+wyKh0SnlZ2mx0NIa1+j11YaQkogEJkcMErbwchHCuo8z7lEtajZJQZ6rgZNVTWMVVd71Bjng==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -4699,8 +4770,8 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.0.1: - resolution: {integrity: sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} recast@0.23.5: @@ -4780,8 +4851,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.23.0: - resolution: {integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4952,8 +5023,8 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - storybook@8.3.4: - resolution: {integrity: sha512-nzvuK5TsEgJwcWGLGgafabBOxKn37lfJVv7ZoUVPgJIjk2mNRyJDFwYRJzUZaD37eiR/c/lQ6MoaeqlGwiXoxw==} + storybook@8.3.5: + resolution: {integrity: sha512-hYQVtP2l+3kO8oKDn4fjXXQYxgTRsj/LaV6lUMJH0zt+OhVmDXKJLxmdUP4ieTm0T8wEbSYosFavgPcQZlxRfw==} hasBin: true stream-buffers@0.2.6: @@ -5253,6 +5324,9 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -5260,11 +5334,11 @@ packages: unocss-preset-primitives@0.0.2-beta.1: resolution: {integrity: sha512-bGNUK8G1V720gPe0ToOKEeMQqgJsDIBz6IuSRDQNBVBvWVx/OzXtsn6hjkKlhw/TjROSawaxpwcULRoPAZ5Gvg==} - unocss@0.63.2: - resolution: {integrity: sha512-ldQ4rDjvzZts5LEWXbbr49kDCqeVtwXfZ9eU04zRYYjqVn7qU4jLGOQEhsdZyMHcQ58V+GKI5pgFvw2uDclROg==} + unocss@0.63.3: + resolution: {integrity: sha512-pjkLvzEghlNY9gyC3vnxr9zrO3ozx3FSBRxgCXflZmtEKP6APBopkzlB7+lJnRSY3gTFAPMLK1anqdfnQuKeUA==} engines: {node: '>=14'} peerDependencies: - '@unocss/webpack': 0.63.2 + '@unocss/webpack': 0.63.3 vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 peerDependenciesMeta: '@unocss/webpack': @@ -5354,8 +5428,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite-node@2.1.1: - resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + vite-node@2.1.2: + resolution: {integrity: sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -5400,15 +5474,15 @@ packages: terser: optional: true - vitest@2.1.1: - resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + vitest@2.1.2: + resolution: {integrity: sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.1 - '@vitest/ui': 2.1.1 + '@vitest/browser': 2.1.2 + '@vitest/ui': 2.1.2 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5547,7 +5621,7 @@ snapshots: '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.0 + package-manager-detector: 0.2.1 tinyexec: 0.3.0 '@antfu/utils@0.7.10': {} @@ -5562,14 +5636,14 @@ snapshots: '@babel/highlight': 7.24.5 picocolors: 1.0.0 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.25.7': dependencies: - '@babel/highlight': 7.24.7 + '@babel/highlight': 7.25.7 picocolors: 1.0.0 '@babel/compat-data@7.23.5': {} - '@babel/compat-data@7.25.4': {} + '@babel/compat-data@7.25.7': {} '@babel/core@7.24.0': dependencies: @@ -5611,18 +5685,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@7.25.2': + '@babel/core@7.25.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -5645,12 +5719,12 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/generator@7.25.6': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 '@babel/helper-compilation-targets@7.23.6': dependencies: @@ -5660,10 +5734,10 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-compilation-targets@7.25.2': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 @@ -5687,10 +5761,10 @@ snapshots: dependencies: '@babel/types': 7.24.5 - '@babel/helper-module-imports@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color @@ -5712,17 +5786,17 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 '@babel/helper-validator-identifier': 7.24.5 - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.7': {} '@babel/helper-simple-access@7.22.5': dependencies: @@ -5732,10 +5806,10 @@ snapshots: dependencies: '@babel/types': 7.24.5 - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color @@ -5751,17 +5825,17 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.7': {} '@babel/helper-validator-identifier@7.22.20': {} '@babel/helper-validator-identifier@7.24.5': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} '@babel/helper-validator-option@7.23.5': {} - '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.7': {} '@babel/helpers@7.24.0': dependencies: @@ -5779,10 +5853,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.25.6': + '@babel/helpers@7.25.7': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 '@babel/highlight@7.23.4': dependencies: @@ -5797,9 +5871,9 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.0 - '@babel/highlight@7.24.7': + '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 @@ -5812,25 +5886,25 @@ snapshots: dependencies: '@babel/types': 7.24.5 - '@babel/parser@7.25.6': + '@babel/parser@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/runtime@7.24.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.25.6': + '@babel/runtime@7.25.7': dependencies: regenerator-runtime: 0.14.1 @@ -5840,11 +5914,11 @@ snapshots: '@babel/parser': 7.24.0 '@babel/types': 7.24.0 - '@babel/template@7.25.0': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 '@babel/traverse@7.24.0': dependencies: @@ -5876,13 +5950,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.25.6': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -5900,10 +5974,10 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 - '@babel/types@7.25.6': + '@babel/types@7.25.7': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 '@base2/pretty-print-object@1.0.1': {} @@ -6327,7 +6401,7 @@ snapshots: '@floating-ui/utils@0.2.1': {} - '@headlessui/react@2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react': 0.26.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.18.3(react@18.3.1) @@ -6336,15 +6410,15 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@hello-pangea/dnd@17.0.0(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@hello-pangea/dnd@17.0.0(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 css-box-model: 1.2.1 memoize-one: 6.0.0 raf-schd: 4.0.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux: 9.1.2(@types/react@18.3.10)(react@18.3.1)(redux@5.0.1) + react-redux: 9.1.2(@types/react@18.3.11)(react@18.3.1)(redux@5.0.1) redux: 5.0.1 use-memo-one: 1.1.3(react@18.3.1) transitivePeerDependencies: @@ -6366,6 +6440,10 @@ snapshots: dependencies: '@iconify/types': 2.0.0 + '@iconify-json/iconoir@1.2.1': + dependencies: + '@iconify/types': 2.0.0 + '@iconify-json/material-symbols@1.2.2': dependencies: '@iconify/types': 2.0.0 @@ -6384,7 +6462,7 @@ snapshots: debug: 4.3.7 kolorist: 1.8.0 local-pkg: 0.5.0 - mlly: 1.7.1 + mlly: 1.7.2 transitivePeerDependencies: - supports-color @@ -6441,10 +6519,10 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 - '@mdx-js/react@3.0.1(@types/react@18.3.10)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@18.3.11)(react@18.3.1)': dependencies: '@types/mdx': 2.0.11 - '@types/react': 18.3.10 + '@types/react': 18.3.11 react: 18.3.1 '@nodelib/fs.scandir@2.1.5': @@ -6461,6 +6539,67 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@octokit/auth-token@5.1.1': {} + + '@octokit/core@6.1.2': + dependencies: + '@octokit/auth-token': 5.1.1 + '@octokit/graphql': 8.1.1 + '@octokit/request': 9.1.3 + '@octokit/request-error': 6.1.5 + '@octokit/types': 13.6.1 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 + + '@octokit/endpoint@10.1.1': + dependencies: + '@octokit/types': 13.6.1 + universal-user-agent: 7.0.2 + + '@octokit/graphql@8.1.1': + dependencies: + '@octokit/request': 9.1.3 + '@octokit/types': 13.6.1 + universal-user-agent: 7.0.2 + + '@octokit/openapi-types@22.2.0': {} + + '@octokit/plugin-paginate-rest@11.3.5(@octokit/core@6.1.2)': + dependencies: + '@octokit/core': 6.1.2 + '@octokit/types': 13.6.1 + + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.2)': + dependencies: + '@octokit/core': 6.1.2 + + '@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.2)': + dependencies: + '@octokit/core': 6.1.2 + '@octokit/types': 13.6.1 + + '@octokit/request-error@6.1.5': + dependencies: + '@octokit/types': 13.6.1 + + '@octokit/request@9.1.3': + dependencies: + '@octokit/endpoint': 10.1.1 + '@octokit/request-error': 6.1.5 + '@octokit/types': 13.6.1 + universal-user-agent: 7.0.2 + + '@octokit/rest@21.0.2': + dependencies: + '@octokit/core': 6.1.2 + '@octokit/plugin-paginate-rest': 11.3.5(@octokit/core@6.1.2) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.2) + '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.2) + + '@octokit/types@13.6.1': + dependencies: + '@octokit/openapi-types': 22.2.0 + '@pkgjs/parseargs@0.11.0': optional: true @@ -6513,172 +6652,172 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.23.0)': + '@rollup/pluginutils@5.1.0(rollup@4.24.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.23.0 + rollup: 4.24.0 - '@rollup/pluginutils@5.1.2(rollup@4.23.0)': + '@rollup/pluginutils@5.1.2(rollup@4.24.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.23.0 + rollup: 4.24.0 - '@rollup/rollup-android-arm-eabi@4.23.0': + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.23.0': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.23.0': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.23.0': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.23.0': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.23.0': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.23.0': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.23.0': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.23.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.23.0': + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.23.0': + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.23.0': + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.23.0': + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.23.0': + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.23.0': + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.23.0': + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true '@rtsao/scc@1.1.0': {} - '@storybook/addon-actions@8.3.4(storybook@8.3.4)': + '@storybook/addon-actions@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.3.4 + storybook: 8.3.5 uuid: 9.0.1 - '@storybook/addon-backgrounds@8.3.4(storybook@8.3.4)': + '@storybook/addon-backgrounds@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 - '@storybook/addon-controls@8.3.4(storybook@8.3.4)': + '@storybook/addon-controls@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 lodash: 4.17.21 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 - '@storybook/addon-designs@8.0.3(@storybook/blocks@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4))(@storybook/components@8.3.4(storybook@8.3.4))(@storybook/theming@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-designs@8.0.3(@storybook/blocks@8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5))(@storybook/components@8.3.5(storybook@8.3.5))(@storybook/theming@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@figspec/react': 1.0.3(react@18.3.1) optionalDependencies: - '@storybook/blocks': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4) - '@storybook/components': 8.3.4(storybook@8.3.4) - '@storybook/theming': 8.3.4(storybook@8.3.4) + '@storybook/blocks': 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) + '@storybook/components': 8.3.5(storybook@8.3.5) + '@storybook/theming': 8.3.5(storybook@8.3.5) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/addon-docs@8.3.4(storybook@8.3.4)': + '@storybook/addon-docs@8.3.5(storybook@8.3.5)': dependencies: - '@mdx-js/react': 3.0.1(@types/react@18.3.10)(react@18.3.1) - '@storybook/blocks': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4) - '@storybook/csf-plugin': 8.3.4(storybook@8.3.4) + '@mdx-js/react': 3.0.1(@types/react@18.3.11)(react@18.3.1) + '@storybook/blocks': 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) + '@storybook/csf-plugin': 8.3.5(storybook@8.3.5) '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4) - '@types/react': 18.3.10 + '@storybook/react-dom-shim': 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) + '@types/react': 18.3.11 fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rehype-external-links: 3.0.0 rehype-slug: 6.0.0 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 - '@storybook/addon-essentials@8.3.4(storybook@8.3.4)': + '@storybook/addon-essentials@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/addon-actions': 8.3.4(storybook@8.3.4) - '@storybook/addon-backgrounds': 8.3.4(storybook@8.3.4) - '@storybook/addon-controls': 8.3.4(storybook@8.3.4) - '@storybook/addon-docs': 8.3.4(storybook@8.3.4) - '@storybook/addon-highlight': 8.3.4(storybook@8.3.4) - '@storybook/addon-measure': 8.3.4(storybook@8.3.4) - '@storybook/addon-outline': 8.3.4(storybook@8.3.4) - '@storybook/addon-toolbars': 8.3.4(storybook@8.3.4) - '@storybook/addon-viewport': 8.3.4(storybook@8.3.4) - storybook: 8.3.4 + '@storybook/addon-actions': 8.3.5(storybook@8.3.5) + '@storybook/addon-backgrounds': 8.3.5(storybook@8.3.5) + '@storybook/addon-controls': 8.3.5(storybook@8.3.5) + '@storybook/addon-docs': 8.3.5(storybook@8.3.5) + '@storybook/addon-highlight': 8.3.5(storybook@8.3.5) + '@storybook/addon-measure': 8.3.5(storybook@8.3.5) + '@storybook/addon-outline': 8.3.5(storybook@8.3.5) + '@storybook/addon-toolbars': 8.3.5(storybook@8.3.5) + '@storybook/addon-viewport': 8.3.5(storybook@8.3.5) + storybook: 8.3.5 ts-dedent: 2.2.0 - '@storybook/addon-highlight@8.3.4(storybook@8.3.4)': + '@storybook/addon-highlight@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/addon-links@8.3.4(react@18.3.1)(storybook@8.3.4)': + '@storybook/addon-links@8.3.5(react@18.3.1)(storybook@8.3.5)': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.3.4(storybook@8.3.4)': + '@storybook/addon-measure@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.4 + storybook: 8.3.5 tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.3.4(storybook@8.3.4)': + '@storybook/addon-outline@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.3.4(storybook@8.3.4)': + '@storybook/addon-toolbars@8.3.5(storybook@8.3.5)': dependencies: - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/addon-viewport@8.3.4(storybook@8.3.4)': + '@storybook/addon-viewport@8.3.5(storybook@8.3.5)': dependencies: memoizerific: 1.11.3 - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/blocks@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4)': + '@storybook/blocks@8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 @@ -6691,7 +6830,7 @@ snapshots: memoizerific: 1.11.3 polished: 4.3.1 react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.3.4 + storybook: 8.3.5 telejson: 7.2.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -6699,9 +6838,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.3.4(storybook@8.3.4)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': + '@storybook/builder-vite@8.3.5(storybook@8.3.5)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': dependencies: - '@storybook/csf-plugin': 8.3.4(storybook@8.3.4) + '@storybook/csf-plugin': 8.3.5(storybook@8.3.5) '@types/find-cache-dir': 3.2.1 browser-assert: 1.2.1 es-module-lexer: 1.5.4 @@ -6709,7 +6848,7 @@ snapshots: find-cache-dir: 3.3.2 fs-extra: 11.2.0 magic-string: 0.30.8 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) optionalDependencies: @@ -6717,11 +6856,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/components@8.3.4(storybook@8.3.4)': + '@storybook/components@8.3.5(storybook@8.3.5)': dependencies: - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/core@8.3.4': + '@storybook/core@8.3.5': dependencies: '@storybook/csf': 0.1.11 '@types/express': 4.17.21 @@ -6741,9 +6880,9 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.3.4(storybook@8.3.4)': + '@storybook/csf-plugin@8.3.5(storybook@8.3.5)': dependencies: - storybook: 8.3.4 + storybook: 8.3.5 unplugin: 1.7.1 '@storybook/csf@0.0.1': @@ -6761,40 +6900,40 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.3.4(storybook@8.3.4)': + '@storybook/instrumenter@8.3.5(storybook@8.3.5)': dependencies: '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.1 - storybook: 8.3.4 + '@vitest/utils': 2.1.2 + storybook: 8.3.5 util: 0.12.5 - '@storybook/manager-api@8.3.4(storybook@8.3.4)': + '@storybook/manager-api@8.3.5(storybook@8.3.5)': dependencies: - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/preview-api@8.3.4(storybook@8.3.4)': + '@storybook/preview-api@8.3.5(storybook@8.3.5)': dependencies: - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/react-dom-shim@8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4)': + '@storybook/react-dom-shim@8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.3.4 + storybook: 8.3.5 - '@storybook/react-vite@8.3.4(@storybook/test@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.23.0)(storybook@8.3.4)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': + '@storybook/react-vite@8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.3.5)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) - '@rollup/pluginutils': 5.1.0(rollup@4.23.0) - '@storybook/builder-vite': 8.3.4(storybook@8.3.4)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) - '@storybook/react': 8.3.4(@storybook/test@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4)(typescript@5.6.2) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) + '@storybook/builder-vite': 8.3.5(storybook@8.3.5)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + '@storybook/react': 8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)(typescript@5.6.2) find-up: 5.0.0 magic-string: 0.30.8 react: 18.3.1 react-docgen: 7.0.3 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.3.4 + storybook: 8.3.5 tsconfig-paths: 4.2.0 vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) transitivePeerDependencies: @@ -6805,14 +6944,14 @@ snapshots: - typescript - vite-plugin-glimmerx - '@storybook/react@8.3.4(@storybook/test@8.3.4(storybook@8.3.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4)(typescript@5.6.2)': + '@storybook/react@8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)(typescript@5.6.2)': dependencies: - '@storybook/components': 8.3.4(storybook@8.3.4) + '@storybook/components': 8.3.5(storybook@8.3.5) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.3.4(storybook@8.3.4) - '@storybook/preview-api': 8.3.4(storybook@8.3.4) - '@storybook/react-dom-shim': 8.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.4) - '@storybook/theming': 8.3.4(storybook@8.3.4) + '@storybook/manager-api': 8.3.5(storybook@8.3.5) + '@storybook/preview-api': 8.3.5(storybook@8.3.5) + '@storybook/react-dom-shim': 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) + '@storybook/theming': 8.3.5(storybook@8.3.5) '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 22.7.4 @@ -6826,30 +6965,30 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) semver: 7.6.0 - storybook: 8.3.4 + storybook: 8.3.5 ts-dedent: 2.2.0 type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - '@storybook/test': 8.3.4(storybook@8.3.4) + '@storybook/test': 8.3.5(storybook@8.3.5) typescript: 5.6.2 - '@storybook/test@8.3.4(storybook@8.3.4)': + '@storybook/test@8.3.5(storybook@8.3.5)': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.3.4(storybook@8.3.4) + '@storybook/instrumenter': 8.3.5(storybook@8.3.5) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.3.4 + storybook: 8.3.5 util: 0.12.5 - '@storybook/theming@8.3.4(storybook@8.3.4)': + '@storybook/theming@8.3.5(storybook@8.3.5)': dependencies: - storybook: 8.3.4 + storybook: 8.3.5 '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.0)': dependencies: @@ -7144,9 +7283,9 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.10 + '@types/react': 18.3.11 - '@types/react@18.3.10': + '@types/react@18.3.11': dependencies: '@types/prop-types': 15.7.11 csstype: 3.1.3 @@ -7341,24 +7480,24 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.63.2(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': + '@unocss/astro@0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': dependencies: - '@unocss/core': 0.63.2 - '@unocss/reset': 0.63.2 - '@unocss/vite': 0.63.2(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + '@unocss/core': 0.63.3 + '@unocss/reset': 0.63.3 + '@unocss/vite': 0.63.3(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) optionalDependencies: vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.63.2(rollup@4.23.0)': + '@unocss/cli@0.63.3(rollup@4.24.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@4.23.0) - '@unocss/config': 0.63.2 - '@unocss/core': 0.63.2 - '@unocss/preset-uno': 0.63.2 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.63.3 + '@unocss/core': 0.63.3 + '@unocss/preset-uno': 0.63.3 cac: 6.7.14 chokidar: 3.6.0 colorette: 2.0.20 @@ -7371,30 +7510,30 @@ snapshots: - rollup - supports-color - '@unocss/config@0.63.2': + '@unocss/config@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 unconfig: 0.5.5 transitivePeerDependencies: - supports-color '@unocss/core@0.61.9': {} - '@unocss/core@0.63.2': {} + '@unocss/core@0.63.3': {} - '@unocss/eslint-config@0.63.2(eslint@8.57.1)(typescript@5.6.2)': + '@unocss/eslint-config@0.63.3(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@unocss/eslint-plugin': 0.63.2(eslint@8.57.1)(typescript@5.6.2) + '@unocss/eslint-plugin': 0.63.3(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint - supports-color - typescript - '@unocss/eslint-plugin@0.63.2(eslint@8.57.1)(typescript@5.6.2)': + '@unocss/eslint-plugin@0.63.3(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) - '@unocss/config': 0.63.2 - '@unocss/core': 0.63.2 + '@unocss/config': 0.63.3 + '@unocss/core': 0.63.3 magic-string: 0.30.11 synckit: 0.9.1 transitivePeerDependencies: @@ -7402,105 +7541,105 @@ snapshots: - supports-color - typescript - '@unocss/extractor-arbitrary-variants@0.63.2': + '@unocss/extractor-arbitrary-variants@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 - '@unocss/inspector@0.63.2': + '@unocss/inspector@0.63.3': dependencies: - '@unocss/core': 0.63.2 - '@unocss/rule-utils': 0.63.2 + '@unocss/core': 0.63.3 + '@unocss/rule-utils': 0.63.3 gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/postcss@0.63.2(postcss@8.4.47)': + '@unocss/postcss@0.63.3(postcss@8.4.47)': dependencies: - '@unocss/config': 0.63.2 - '@unocss/core': 0.63.2 - '@unocss/rule-utils': 0.63.2 + '@unocss/config': 0.63.3 + '@unocss/core': 0.63.3 + '@unocss/rule-utils': 0.63.3 css-tree: 3.0.0 postcss: 8.4.47 tinyglobby: 0.2.9 transitivePeerDependencies: - supports-color - '@unocss/preset-attributify@0.63.2': + '@unocss/preset-attributify@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 - '@unocss/preset-icons@0.63.2': + '@unocss/preset-icons@0.63.3': dependencies: '@iconify/utils': 2.1.33 - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 ofetch: 1.4.0 transitivePeerDependencies: - supports-color - '@unocss/preset-mini@0.63.2': + '@unocss/preset-mini@0.63.3': dependencies: - '@unocss/core': 0.63.2 - '@unocss/extractor-arbitrary-variants': 0.63.2 - '@unocss/rule-utils': 0.63.2 + '@unocss/core': 0.63.3 + '@unocss/extractor-arbitrary-variants': 0.63.3 + '@unocss/rule-utils': 0.63.3 - '@unocss/preset-tagify@0.63.2': + '@unocss/preset-tagify@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 - '@unocss/preset-typography@0.63.2': + '@unocss/preset-typography@0.63.3': dependencies: - '@unocss/core': 0.63.2 - '@unocss/preset-mini': 0.63.2 + '@unocss/core': 0.63.3 + '@unocss/preset-mini': 0.63.3 - '@unocss/preset-uno@0.63.2': + '@unocss/preset-uno@0.63.3': dependencies: - '@unocss/core': 0.63.2 - '@unocss/preset-mini': 0.63.2 - '@unocss/preset-wind': 0.63.2 - '@unocss/rule-utils': 0.63.2 + '@unocss/core': 0.63.3 + '@unocss/preset-mini': 0.63.3 + '@unocss/preset-wind': 0.63.3 + '@unocss/rule-utils': 0.63.3 - '@unocss/preset-web-fonts@0.63.2': + '@unocss/preset-web-fonts@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 ofetch: 1.4.0 - '@unocss/preset-wind@0.63.2': + '@unocss/preset-wind@0.63.3': dependencies: - '@unocss/core': 0.63.2 - '@unocss/preset-mini': 0.63.2 - '@unocss/rule-utils': 0.63.2 + '@unocss/core': 0.63.3 + '@unocss/preset-mini': 0.63.3 + '@unocss/rule-utils': 0.63.3 - '@unocss/reset@0.63.2': {} + '@unocss/reset@0.63.3': {} - '@unocss/rule-utils@0.63.2': + '@unocss/rule-utils@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 magic-string: 0.30.11 - '@unocss/transformer-attributify-jsx@0.63.2': + '@unocss/transformer-attributify-jsx@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 - '@unocss/transformer-compile-class@0.63.2': + '@unocss/transformer-compile-class@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 - '@unocss/transformer-directives@0.63.2': + '@unocss/transformer-directives@0.63.3': dependencies: - '@unocss/core': 0.63.2 - '@unocss/rule-utils': 0.63.2 + '@unocss/core': 0.63.3 + '@unocss/rule-utils': 0.63.3 css-tree: 3.0.0 - '@unocss/transformer-variant-group@0.63.2': + '@unocss/transformer-variant-group@0.63.3': dependencies: - '@unocss/core': 0.63.2 + '@unocss/core': 0.63.3 - '@unocss/vite@0.63.2(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': + '@unocss/vite@0.63.3(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@4.23.0) - '@unocss/config': 0.63.2 - '@unocss/core': 0.63.2 - '@unocss/inspector': 0.63.2 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@unocss/config': 0.63.3 + '@unocss/core': 0.63.3 + '@unocss/inspector': 0.63.3 chokidar: 3.6.0 magic-string: 0.30.11 tinyglobby: 0.2.9 @@ -7518,16 +7657,16 @@ snapshots: '@vitejs/plugin-react@4.3.2(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@22.7.4)(@vitest/ui@2.1.1)(sass@1.79.4)(terser@5.28.1))': + '@vitest/coverage-v8@2.1.2(vitest@2.1.2)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -7541,7 +7680,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@22.7.4)(@vitest/ui@2.1.1)(sass@1.79.4)(terser@5.28.1) + vitest: 2.1.2(@types/node@22.7.4)(@vitest/ui@2.1.2)(sass@1.79.4)(terser@5.28.1) transitivePeerDependencies: - supports-color @@ -7552,16 +7691,16 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/expect@2.1.1': + '@vitest/expect@2.1.2': dependencies: - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': + '@vitest/mocker@2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1))': dependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.2 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: @@ -7571,18 +7710,18 @@ snapshots: dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.1.1': + '@vitest/pretty-format@2.1.2': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.1': + '@vitest/runner@2.1.2': dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.2 pathe: 1.1.2 - '@vitest/snapshot@2.1.1': + '@vitest/snapshot@2.1.2': dependencies: - '@vitest/pretty-format': 2.1.1 + '@vitest/pretty-format': 2.1.2 magic-string: 0.30.11 pathe: 1.1.2 @@ -7590,20 +7729,20 @@ snapshots: dependencies: tinyspy: 3.0.2 - '@vitest/spy@2.1.1': + '@vitest/spy@2.1.2': dependencies: tinyspy: 3.0.2 - '@vitest/ui@2.1.1(vitest@2.1.1)': + '@vitest/ui@2.1.2(vitest@2.1.2)': dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.2 fflate: 0.8.2 flatted: 3.3.1 pathe: 1.1.2 sirv: 2.0.4 tinyglobby: 0.2.9 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@22.7.4)(@vitest/ui@2.1.1)(sass@1.79.4)(terser@5.28.1) + vitest: 2.1.2(@types/node@22.7.4)(@vitest/ui@2.1.2)(sass@1.79.4)(terser@5.28.1) '@vitest/utils@2.0.5': dependencies: @@ -7612,9 +7751,9 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 - '@vitest/utils@2.1.1': + '@vitest/utils@2.1.2': dependencies: - '@vitest/pretty-format': 2.1.1 + '@vitest/pretty-format': 2.1.2 loupe: 3.1.1 tinyrainbow: 1.2.0 @@ -7869,7 +8008,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.24.0 - caniuse-lite: 1.0.30001664 + caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.0 @@ -7888,6 +8027,8 @@ snapshots: balanced-match@1.0.2: {} + before-after-hook@3.0.2: {} + better-opn@3.0.2: dependencies: open: 8.4.2 @@ -7937,8 +8078,8 @@ snapshots: browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001664 - electron-to-chromium: 1.5.31 + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.32 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.0) @@ -7978,7 +8119,7 @@ snapshots: caniuse-lite@1.0.30001591: {} - caniuse-lite@1.0.30001664: {} + caniuse-lite@1.0.30001667: {} chai@5.1.1: dependencies: @@ -8041,7 +8182,7 @@ snapshots: chokidar@4.0.1: dependencies: - readdirp: 4.0.1 + readdirp: 4.0.2 chromatic@11.11.0: {} @@ -8091,7 +8232,7 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.7: {} + confbox@0.1.8: {} confusing-browser-globals@1.0.11: {} @@ -8409,7 +8550,7 @@ snapshots: electron-to-chromium@1.4.690: {} - electron-to-chromium@1.5.31: {} + electron-to-chromium@1.5.32: {} emoji-regex@8.0.0: {} @@ -8676,29 +8817,29 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1): + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.57.1 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) object.assign: 4.1.5 object.entries: 1.1.7 semver: 6.3.1 - eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1): + eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - eslint-plugin-import - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0)(eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.1) eslint-plugin-react: 7.37.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) @@ -8717,43 +8858,43 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.15.1 eslint: 8.57.1 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color @@ -8761,7 +8902,7 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -8772,7 +8913,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -8781,6 +8922,7 @@ snapshots: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) @@ -8808,7 +8950,7 @@ snapshots: eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.1): dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -9645,6 +9787,10 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 + kc-dabr-wasm@0.1.2: + dependencies: + react: 18.3.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -9778,8 +9924,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 source-map-js: 1.2.1 make-dir@3.1.0: @@ -9858,9 +10004,9 @@ snapshots: pkg-types: 1.0.3 ufo: 1.4.0 - mlly@1.7.1: + mlly@1.7.2: dependencies: - acorn: 8.11.3 + acorn: 8.12.1 pathe: 1.1.2 pkg-types: 1.2.0 ufo: 1.5.4 @@ -10014,7 +10160,7 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.0: {} + package-manager-detector@0.2.1: {} parent-module@1.0.1: dependencies: @@ -10095,8 +10241,8 @@ snapshots: pkg-types@1.2.0: dependencies: - confbox: 0.1.7 - mlly: 1.7.1 + confbox: 0.1.8 + mlly: 1.7.2 pathe: 1.1.2 pkg-up@3.1.0: @@ -10437,13 +10583,13 @@ snapshots: dependencies: react: 18.3.1 - react-redux@9.1.2(@types/react@18.3.10)(react@18.3.1)(redux@5.0.1): + react-redux@9.1.2(@types/react@18.3.11)(react@18.3.1)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.3 react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.10 + '@types/react': 18.3.11 redux: 5.0.1 react-refresh@0.13.0: {} @@ -10458,7 +10604,7 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.0.1: {} + readdirp@4.0.2: {} recast@0.23.5: dependencies: @@ -10549,26 +10695,26 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.23.0: + rollup@4.24.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.23.0 - '@rollup/rollup-android-arm64': 4.23.0 - '@rollup/rollup-darwin-arm64': 4.23.0 - '@rollup/rollup-darwin-x64': 4.23.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.23.0 - '@rollup/rollup-linux-arm-musleabihf': 4.23.0 - '@rollup/rollup-linux-arm64-gnu': 4.23.0 - '@rollup/rollup-linux-arm64-musl': 4.23.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.23.0 - '@rollup/rollup-linux-riscv64-gnu': 4.23.0 - '@rollup/rollup-linux-s390x-gnu': 4.23.0 - '@rollup/rollup-linux-x64-gnu': 4.23.0 - '@rollup/rollup-linux-x64-musl': 4.23.0 - '@rollup/rollup-win32-arm64-msvc': 4.23.0 - '@rollup/rollup-win32-ia32-msvc': 4.23.0 - '@rollup/rollup-win32-x64-msvc': 4.23.0 + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -10754,9 +10900,9 @@ snapshots: std-env@3.7.0: {} - storybook@8.3.4: + storybook@8.3.5: dependencies: - '@storybook/core': 8.3.4 + '@storybook/core': 8.3.5 transitivePeerDependencies: - bufferutil - supports-color @@ -11090,31 +11236,33 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + universal-user-agent@7.0.2: {} + universalify@2.0.1: {} unocss-preset-primitives@0.0.2-beta.1: dependencies: '@unocss/core': 0.61.9 - unocss@0.63.2(postcss@8.4.47)(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)): + unocss@0.63.3(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)): dependencies: - '@unocss/astro': 0.63.2(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) - '@unocss/cli': 0.63.2(rollup@4.23.0) - '@unocss/core': 0.63.2 - '@unocss/postcss': 0.63.2(postcss@8.4.47) - '@unocss/preset-attributify': 0.63.2 - '@unocss/preset-icons': 0.63.2 - '@unocss/preset-mini': 0.63.2 - '@unocss/preset-tagify': 0.63.2 - '@unocss/preset-typography': 0.63.2 - '@unocss/preset-uno': 0.63.2 - '@unocss/preset-web-fonts': 0.63.2 - '@unocss/preset-wind': 0.63.2 - '@unocss/transformer-attributify-jsx': 0.63.2 - '@unocss/transformer-compile-class': 0.63.2 - '@unocss/transformer-directives': 0.63.2 - '@unocss/transformer-variant-group': 0.63.2 - '@unocss/vite': 0.63.2(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + '@unocss/astro': 0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + '@unocss/cli': 0.63.3(rollup@4.24.0) + '@unocss/core': 0.63.3 + '@unocss/postcss': 0.63.3(postcss@8.4.47) + '@unocss/preset-attributify': 0.63.3 + '@unocss/preset-icons': 0.63.3 + '@unocss/preset-mini': 0.63.3 + '@unocss/preset-tagify': 0.63.3 + '@unocss/preset-typography': 0.63.3 + '@unocss/preset-uno': 0.63.3 + '@unocss/preset-web-fonts': 0.63.3 + '@unocss/preset-wind': 0.63.3 + '@unocss/transformer-attributify-jsx': 0.63.3 + '@unocss/transformer-compile-class': 0.63.3 + '@unocss/transformer-directives': 0.63.3 + '@unocss/transformer-variant-group': 0.63.3 + '@unocss/vite': 0.63.3(patch_hash=5ptgy7mbavmjf7zwexb7dph4ji)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) optionalDependencies: vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) transitivePeerDependencies: @@ -11197,7 +11345,7 @@ snapshots: vary@1.1.2: {} - vite-node@2.1.1(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1): + vite-node@2.1.2(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1): dependencies: cac: 6.7.14 debug: 4.3.7 @@ -11214,10 +11362,10 @@ snapshots: - supports-color - terser - vite-plugin-inspect@0.8.7(rollup@4.23.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)): + vite-plugin-inspect@0.8.7(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.23.0) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) debug: 4.3.7 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -11234,22 +11382,22 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.47 - rollup: 4.23.0 + rollup: 4.24.0 optionalDependencies: '@types/node': 22.7.4 fsevents: 2.3.3 sass: 1.79.4 terser: 5.28.1 - vitest@2.1.1(@types/node@22.7.4)(@vitest/ui@2.1.1)(sass@1.79.4)(terser@5.28.1): + vitest@2.1.2(@types/node@22.7.4)(@vitest/ui@2.1.2)(sass@1.79.4)(terser@5.28.1): dependencies: - '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) - '@vitest/pretty-format': 2.1.1 - '@vitest/runner': 2.1.1 - '@vitest/snapshot': 2.1.1 - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 + '@vitest/expect': 2.1.2 + '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1)) + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.1.2 + '@vitest/snapshot': 2.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 chai: 5.1.1 debug: 4.3.7 magic-string: 0.30.11 @@ -11260,11 +11408,11 @@ snapshots: tinypool: 1.0.1 tinyrainbow: 1.2.0 vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) - vite-node: 2.1.1(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) + vite-node: 2.1.2(@types/node@22.7.4)(sass@1.79.4)(terser@5.28.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.7.4 - '@vitest/ui': 2.1.1(vitest@2.1.1) + '@vitest/ui': 2.1.2(vitest@2.1.2) transitivePeerDependencies: - less - lightningcss diff --git a/src/assets/LD-icon.png b/src/assets/LD-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..81e7462908979ba584075fbb98223f99a47ff684 GIT binary patch literal 37995 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 pm~676Kyc2C_T>({}); const [syncStorage, setSyncStorage] = React.useState>({}); const [sessionStorage, setSessionStorage] = React.useState>({}); + useKC_DABR_WASM(); useEffect(() => { const onVisibilityChange = () => { diff --git a/src/pages/background/lib/deleteSchedule.ts b/src/pages/background/lib/deleteSchedule.ts index 949f2352..4455c3d7 100644 --- a/src/pages/background/lib/deleteSchedule.ts +++ b/src/pages/background/lib/deleteSchedule.ts @@ -1,5 +1,7 @@ import { UserScheduleStore } from '@shared/storage/UserScheduleStore'; +import createSchedule from './createSchedule'; + /** * Deletes a schedule with the specified name. * @@ -32,3 +34,14 @@ export default async function deleteSchedule(scheduleId: string): Promise { + await UserScheduleStore.set('schedules', []); + await UserScheduleStore.set('activeIndex', 0); + await createSchedule('Schedule 1'); +} diff --git a/src/pages/calendar/CalendarMain.tsx b/src/pages/calendar/CalendarMain.tsx index 9d529dc7..8373b80b 100644 --- a/src/pages/calendar/CalendarMain.tsx +++ b/src/pages/calendar/CalendarMain.tsx @@ -3,6 +3,7 @@ import Calendar from '@views/components/calendar/Calendar'; import DialogProvider from '@views/components/common/DialogProvider/DialogProvider'; import ExtensionRoot from '@views/components/common/ExtensionRoot/ExtensionRoot'; import { MessageListener } from 'chrome-extension-toolkit'; +import useKC_DABR_WASM from 'kc-dabr-wasm'; import React, { useEffect } from 'react'; /** @@ -10,6 +11,7 @@ import React, { useEffect } from 'react'; * @returns entire page */ export default function CalendarMain() { + useKC_DABR_WASM(); useEffect(() => { const tabInfoListener = new MessageListener({ getTabInfo: ({ sendResponse }) => { diff --git a/src/pages/options/Settings.tsx b/src/pages/options/Settings.tsx new file mode 100644 index 00000000..b59419d8 --- /dev/null +++ b/src/pages/options/Settings.tsx @@ -0,0 +1,22 @@ +import DialogProvider from '@views/components/common/DialogProvider/DialogProvider'; +import ExtensionRoot from '@views/components/common/ExtensionRoot/ExtensionRoot'; +import Settings from '@views/components/settings/Settings'; +import useKC_DABR_WASM from 'kc-dabr-wasm'; +import React from 'react'; + +/** + * Renders the settings page for the UTRP (UT Registration Plus) extension. + * Allows customization options and displays credits for the development team. + * + * @returns The JSX element representing the settings page. + */ +export default function SettingsPage() { + useKC_DABR_WASM(); + return ( + + + + + + ); +} diff --git a/src/pages/options/index.tsx b/src/pages/options/index.tsx index 8ba7b8de..12e3a78a 100644 --- a/src/pages/options/index.tsx +++ b/src/pages/options/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { createRoot } from 'react-dom/client'; -import App from './App'; +import SettingsPage from './Settings'; -createRoot(document.getElementById('root')!).render(); +createRoot(document.getElementById('root')!).render(); diff --git a/src/shared/storage/OptionsStore.ts b/src/shared/storage/OptionsStore.ts index 1fa61c43..50e614eb 100644 --- a/src/shared/storage/OptionsStore.ts +++ b/src/shared/storage/OptionsStore.ts @@ -3,20 +3,44 @@ import { createSyncStore, debugStore } from 'chrome-extension-toolkit'; /** * A store that is used for storing user options */ -interface IOptionsStore { - /** whether we should automatically highlight conflicts on the course schedule page */ - shouldHighlightConflicts: boolean; - /** whether we should automatically scroll to load more courses on the course schedule page (without having to click next) */ - shouldScrollToLoad: boolean; +export interface IOptionsStore { + /** whether we should enable course status chips (indicator for waitlisted, cancelled, and closed courses) */ + enableCourseStatusChips: boolean; - // url: URL; + /** whether we should enable course's time and location in the extension's popup */ + enableTimeAndLocationInPopup: boolean; + + /** whether we should automatically highlight conflicts on the course schedule page (adds a red strikethrough to courses that have conflicting times) */ + enableHighlightConflicts: boolean; + + /** whether we should automatically scroll to load more courses on the course schedule page (without having to click next) */ + enableScrollToLoad: boolean; + + /** whether we should automatically refresh the data for the waitlist, course status, and other info with the latest data from UT's site */ + enableDataRefreshing: boolean; } export const OptionsStore = createSyncStore({ - shouldHighlightConflicts: true, - shouldScrollToLoad: true, + enableCourseStatusChips: false, + enableTimeAndLocationInPopup: false, + enableHighlightConflicts: true, + enableScrollToLoad: true, + enableDataRefreshing: true, }); +/** + * Initializes the settings by retrieving the values from the OptionsStore. + * @returns {Promise} A promise that resolves to an object satisfying the IOptionsStore interface. + */ +export const initSettings = async () => + ({ + enableCourseStatusChips: await OptionsStore.get('enableCourseStatusChips'), + enableTimeAndLocationInPopup: await OptionsStore.get('enableTimeAndLocationInPopup'), + enableHighlightConflicts: await OptionsStore.get('enableHighlightConflicts'), + enableScrollToLoad: await OptionsStore.get('enableScrollToLoad'), + enableDataRefreshing: await OptionsStore.get('enableDataRefreshing'), + }) satisfies IOptionsStore; + // Clothing retailer right debugStore({ OptionsStore }); diff --git a/src/shared/util/experimental.ts b/src/shared/util/experimental.ts deleted file mode 100644 index 60cb53a5..00000000 --- a/src/shared/util/experimental.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const enableCourseStatusChips: boolean = false; -export const constenableSettingsPage: boolean = false; -export const enableCourseRefreshing: boolean = false; diff --git a/src/stories/components/Settings.stories.tsx b/src/stories/components/Settings.stories.tsx index 64ae5f82..a3964bee 100644 --- a/src/stories/components/Settings.stories.tsx +++ b/src/stories/components/Settings.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; -import Settings from '@views/components/Settings'; +import Settings from '@views/components/settings/Settings'; const meta = { title: 'Components/Common/Settings', diff --git a/src/views/components/PopupMain.tsx b/src/views/components/PopupMain.tsx index 13fc56ec..6f75cfc5 100644 --- a/src/views/components/PopupMain.tsx +++ b/src/views/components/PopupMain.tsx @@ -1,7 +1,7 @@ import splashText from '@assets/insideJokes'; import { background } from '@shared/messages'; +import { initSettings, OptionsStore } from '@shared/storage/OptionsStore'; import { UserScheduleStore } from '@shared/storage/UserScheduleStore'; -import { enableCourseRefreshing, enableCourseStatusChips } from '@shared/util/experimental'; import Divider from '@views/components/common/Divider'; import ExtensionRoot from '@views/components/common/ExtensionRoot/ExtensionRoot'; import List from '@views/components/common/List'; @@ -10,6 +10,7 @@ import useSchedules, { getActiveSchedule, replaceSchedule, switchSchedule } from import { getUpdatedAtDateTimeString } from '@views/lib/getUpdatedAtDateTimeString'; import { openTabFromContentScript } from '@views/lib/openNewTabFromContentScript'; import clsx from 'clsx'; +import useKC_DABR_WASM from 'kc-dabr-wasm'; import React, { useEffect, useState } from 'react'; import CalendarIcon from '~icons/material-symbols/calendar-month'; @@ -28,6 +29,32 @@ import ScheduleListItem from './common/ScheduleListItem'; * This component displays the main schedule, courses, and options buttons. */ export default function PopupMain(): JSX.Element { + const [enableCourseStatusChips, setEnableCourseStatusChips] = useState(false); + const [enableDataRefreshing, setEnableDataRefreshing] = useState(false); + useKC_DABR_WASM(); + + useEffect(() => { + initSettings().then(({ enableCourseStatusChips, enableDataRefreshing }) => { + setEnableCourseStatusChips(enableCourseStatusChips); + setEnableDataRefreshing(enableDataRefreshing); + }); + + const l1 = OptionsStore.listen('enableCourseStatusChips', async ({ newValue }) => { + setEnableCourseStatusChips(newValue); + // console.log('enableCourseStatusChips', newValue); + }); + + const l2 = OptionsStore.listen('enableDataRefreshing', async ({ newValue }) => { + setEnableDataRefreshing(newValue); + // console.log('enableDataRefreshing', newValue); + }); + + return () => { + OptionsStore.removeListener(l1); + OptionsStore.removeListener(l2); + }; + }, []); + const [activeSchedule, schedules] = useSchedules(); const [isRefreshing, setIsRefreshing] = useState(false); const [funny, setFunny] = useState(''); @@ -139,7 +166,7 @@ export default function PopupMain(): JSX.Element { )} - {enableCourseRefreshing && ( + {enableDataRefreshing && (
DATA LAST UPDATED: {getUpdatedAtDateTimeString(activeSchedule.updatedAt)} diff --git a/src/views/components/Settings.tsx b/src/views/components/Settings.tsx deleted file mode 100644 index 9ded32bc..00000000 --- a/src/views/components/Settings.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; - -type Props = { - className?: string; -}; - -/** - * Component to hold everything for the settings page - * @param props className - * @returns The content for the settings page - */ -export default function Settings({ className }: Props): JSX.Element { - // TODO: Implement the settings page - return
this will be finished laterrrrrrr
; -} diff --git a/src/views/components/calendar/CalendarCourseCell.tsx b/src/views/components/calendar/CalendarCourseCell.tsx index a1aa123b..533805fe 100644 --- a/src/views/components/calendar/CalendarCourseCell.tsx +++ b/src/views/components/calendar/CalendarCourseCell.tsx @@ -1,11 +1,11 @@ +import { initSettings, OptionsStore } from '@shared/storage/OptionsStore'; import type { StatusType } from '@shared/types/Course'; import { Status } from '@shared/types/Course'; import type { CourseColors } from '@shared/types/ThemeColors'; import { pickFontColor } from '@shared/util/colors'; -import { enableCourseStatusChips } from '@shared/util/experimental'; import Text from '@views/components/common/Text/Text'; import clsx from 'clsx'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import ClosedIcon from '~icons/material-symbols/lock'; import WaitlistIcon from '~icons/material-symbols/timelapse'; @@ -43,6 +43,21 @@ export default function CalendarCourseCell({ className, onClick, }: CalendarCourseCellProps): JSX.Element { + const [enableCourseStatusChips, setEnableCourseStatusChips] = useState(false); + + useEffect(() => { + initSettings().then(({ enableCourseStatusChips }) => setEnableCourseStatusChips(enableCourseStatusChips)); + + const l1 = OptionsStore.listen('enableCourseStatusChips', async ({ newValue }) => { + setEnableCourseStatusChips(newValue); + // console.log('enableCourseStatusChips', newValue); + }); + + return () => { + OptionsStore.removeListener(l1); + }; + }, []); + let rightIcon: React.ReactNode | null = null; if (enableCourseStatusChips) { if (status === Status.WAITLISTED) { diff --git a/src/views/components/calendar/CalenderHeader.tsx b/src/views/components/calendar/CalenderHeader.tsx index 30830977..453c27ec 100644 --- a/src/views/components/calendar/CalenderHeader.tsx +++ b/src/views/components/calendar/CalenderHeader.tsx @@ -1,5 +1,5 @@ +import { initSettings, OptionsStore } from '@shared/storage/OptionsStore'; import { Status } from '@shared/types/Course'; -import { enableCourseRefreshing, enableCourseStatusChips } from '@shared/util/experimental'; import { Button } from '@views/components/common/Button'; import CourseStatus from '@views/components/common/CourseStatus'; import Divider from '@views/components/common/Divider'; @@ -9,7 +9,7 @@ import Text from '@views/components/common/Text/Text'; import useSchedules from '@views/hooks/useSchedules'; import { getUpdatedAtDateTimeString } from '@views/lib/getUpdatedAtDateTimeString'; import { openTabFromContentScript } from '@views/lib/openNewTabFromContentScript'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import MenuIcon from '~icons/material-symbols/menu'; import RefreshIcon from '~icons/material-symbols/refresh'; @@ -32,8 +32,33 @@ interface CalendarHeaderProps { * @returns The JSX element representing the calendar header. */ export default function CalendarHeader({ onSidebarToggle }: CalendarHeaderProps): JSX.Element { + const [enableCourseStatusChips, setEnableCourseStatusChips] = useState(false); + const [enableDataRefreshing, setEnableDataRefreshing] = useState(false); + const [activeSchedule] = useSchedules(); + useEffect(() => { + initSettings().then(({ enableCourseStatusChips, enableDataRefreshing }) => { + setEnableCourseStatusChips(enableCourseStatusChips); + setEnableDataRefreshing(enableDataRefreshing); + }); + + const l1 = OptionsStore.listen('enableCourseStatusChips', async ({ newValue }) => { + setEnableCourseStatusChips(newValue); + // console.log('enableCourseStatusChips', newValue); + }); + + const l2 = OptionsStore.listen('enableDataRefreshing', async ({ newValue }) => { + setEnableDataRefreshing(newValue); + // console.log('enableDataRefreshing', newValue); + }); + + return () => { + OptionsStore.removeListener(l1); + OptionsStore.removeListener(l2); + }; + }, []); + return (
+ ), + }); + }; + + const [devMode, toggleDevMode] = useDevMode(10); + + if (devMode) { + return ; + } + + return ( +
+
+
+ + +

UTRP SETTINGS & CREDITS PAGE

+
+
+
+ + + v{manifest.version} - {process.env.NODE_ENV} + +
+ LD Icon +
+
+ +
+
+ {/*
+

CUSTOMIZATION OPTIONS

+
+
+
+
+

Show Course Status

+

+ Shows an indicator for waitlisted, cancelled, and closed courses. +

+
+ { + setEnableCourseStatusChips(!enableCourseStatusChips); + OptionsStore.set('enableCourseStatusChips', !enableCourseStatusChips); + }} + /> +
+ + + +
+
+

+ Show Time & Location in Popup +

+

+ Shows the course's time and location in the extension's popup. +

+
+ { + setShowTimeLocation(!showTimeLocation); + OptionsStore.set('enableTimeAndLocationInPopup', !showTimeLocation); + }} + /> +
+
+ {DISPLAY_PREVIEWS && ( + + + + + )} +
+
+ + */} + +
+

ADVANCED SETTINGS

+
+
+ {/*
+
+

Refresh Data

+

+ Refreshes waitlist, course status, and other info with the latest data from + UT's site. +

+
+ +
+ + */} + +
+
+ + Course Conflict Highlight + +

+ Adds a red strikethrough to courses that have conflicting times. +

+
+ { + setHighlightConflicts(!highlightConflicts); + OptionsStore.set('enableHighlightConflicts', !highlightConflicts); + }} + /> +
+ + + +
+
+ + Load All Courses in Course Schedule + +

+ Loads all courses in the Course Schedule site by scrolling, instead of using + next/prev page buttons. +

+
+ { + setLoadAllCourses(!loadAllCourses); + OptionsStore.set('enableScrollToLoad', !loadAllCourses); + }} + /> +
+ + + +
+
+ + Reset All Data + +

+ Erases all schedules and courses you have. +

+
+ +
+
+ {DISPLAY_PREVIEWS && ( + +
+ + DATA LAST UPDATED: {getUpdatedAtDateTimeString(activeSchedule.updatedAt)} + +
+ + 01234 MWF 10:00 AM - 11:00 AM UTC 1.234 + +
+ )} +
+
+ + + +
+

+ Developer Mode +

+
+
+ + + +
+
+

LONGHORN DEVELOPERS ADMINS

+
+ {LONGHORN_DEVELOPERS_ADMINS.map(admin => ( +
+ + window.open(`https://github.com/${admin.githubUsername}`, '_blank') + } + > + {admin.name} + +

{admin.role}

+ {showGitHubStats && githubStats && ( +
+

GitHub Stats (UTRP repo):

+ {includeMergedPRs && ( +

+ Merged PRS:{' '} + {githubStats.adminGitHubStats[admin.githubUsername]?.mergedPRs} +

+ )} +

+ Commits: {githubStats.adminGitHubStats[admin.githubUsername]?.commits} +

+

+ {githubStats.adminGitHubStats[admin.githubUsername]?.linesAdded} ++ +

+

+ {githubStats.adminGitHubStats[admin.githubUsername]?.linesDeleted} -- +

+
+ )} +
+ ))} +
+
+
+

UTRP CONTRIBUTERS

+
+ {githubStats && + Object.keys(githubStats.userGitHubStats) + .filter( + username => + !LONGHORN_DEVELOPERS_ADMINS.some(admin => admin.githubUsername === username) + ) + .map(username => ( +
+ window.open(`https://github.com/${username}`, '_blank')} + > + @{username} + +

Contributor

+ {showGitHubStats && ( +
+

GitHub Stats (UTRP repo):

+ {includeMergedPRs && ( +

+ Merged PRs:{' '} + {githubStats.userGitHubStats[username]?.mergedPRs} +

+ )} +

+ Commits: {githubStats.userGitHubStats[username]?.commits} +

+

+ {githubStats.userGitHubStats[username]?.linesAdded} ++ +

+

+ {githubStats.userGitHubStats[username]?.linesDeleted} -- +

+
+ )} +
+ ))} +
+
+
+
+
+ ); +} diff --git a/src/views/lib/getGitHubStats.ts b/src/views/lib/getGitHubStats.ts new file mode 100644 index 00000000..152bf65c --- /dev/null +++ b/src/views/lib/getGitHubStats.ts @@ -0,0 +1,266 @@ +import { Octokit } from '@octokit/rest'; + +// Types +type TeamMember = { + name: string; + role: string; + githubUsername: string; +}; + +type GitHubStats = { + commits: number; + linesAdded: number; + linesDeleted: number; + mergedPRs?: number; +}; + +type ContributorStats = { + total: number; + weeks: { w: number; a: number; d: number; c: number }[]; + author: { login: string }; +}; + +type CachedData = { + data: T; + dataFetched: Date; +}; + +type FetchResult = { + data: T; + dataFetched: Date; + lastUpdated: Date; + isCached: boolean; +}; + +// Constants +const CACHE_TTL = 1 * 60 * 60 * 1000; // 1 hour in milliseconds +const REPO_OWNER = 'Longhorn-Developers'; +const REPO_NAME = 'UT-Registration-Plus'; + +export const LONGHORN_DEVELOPERS_ADMINS = [ + { name: 'Sriram Hariharan', role: 'Founder', githubUsername: 'sghsri' }, + { name: 'Elie Soloveichik', role: 'Senior Software Engineer', githubUsername: 'Razboy20' }, + { name: 'Diego Perez', role: 'Senior Software Engineer', githubUsername: 'doprz' }, + { name: 'Lukas Zenick', role: 'Senior Software Engineer', githubUsername: 'Lukas-Zenick' }, + { name: 'Isaiah Rodriguez', role: 'Chief Design Officer', githubUsername: 'IsaDavRod' }, +] as const satisfies TeamMember[]; + +/** + * Represents the GitHub usernames of the admins in the LONGHORN_DEVELOPERS_ADMINS array. + */ +export type LD_ADMIN_GITHUB_USERNAMES = (typeof LONGHORN_DEVELOPERS_ADMINS)[number]['githubUsername']; + +/** + * Service for fetching GitHub statistics. + */ +export class GitHubStatsService { + private octokit: Octokit; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private cache: Map>; + + constructor(githubToken?: string) { + this.octokit = githubToken ? new Octokit({ auth: githubToken }) : new Octokit(); + this.cache = new Map(); + } + + private getCachedData(key: string): CachedData | null { + const cachedItem = this.cache.get(key); + if (cachedItem && Date.now() - cachedItem.dataFetched.getTime() < CACHE_TTL) { + return cachedItem; + } + return null; + } + + private setCachedData(key: string, data: T): void { + this.cache.set(key, { data, dataFetched: new Date() }); + } + + private async fetchWithRetry(fetchFn: () => Promise, retries: number = 3, delay: number = 5000): Promise { + try { + return await fetchFn(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (error: any) { + if (retries > 0 && error.status === 202) { + await new Promise(resolve => setTimeout(resolve, delay)); + return this.fetchWithRetry(fetchFn, retries - 1, delay); + } + throw error; + } + } + + private async fetchContributorStats(): Promise> { + const cacheKey = `contributor_stats_${REPO_OWNER}_${REPO_NAME}`; + const cachedStats = this.getCachedData(cacheKey); + + if (cachedStats) { + return { + data: cachedStats.data, + dataFetched: cachedStats.dataFetched, + lastUpdated: new Date(), + isCached: true, + }; + } + + const { data } = await this.fetchWithRetry(() => + this.octokit.repos.getContributorsStats({ + owner: REPO_OWNER, + repo: REPO_NAME, + }) + ); + + if (Array.isArray(data)) { + const fetchResult: FetchResult = { + data: data as ContributorStats[], + dataFetched: new Date(), + lastUpdated: new Date(), + isCached: false, + }; + this.setCachedData(cacheKey, fetchResult.data); + return fetchResult; + } + + throw new Error('Invalid response format'); + } + + private async fetchMergedPRsCount(username: string): Promise> { + const cacheKey = `merged_prs_${username}`; + const cachedCount = this.getCachedData(cacheKey); + + if (cachedCount !== null) { + return { + data: cachedCount.data, + dataFetched: cachedCount.dataFetched, + lastUpdated: new Date(), + isCached: true, + }; + } + + const { data } = await this.octokit.search.issuesAndPullRequests({ + q: `org:${REPO_OWNER} author:${username} type:pr is:merged`, + }); + + const fetchResult: FetchResult = { + data: data.total_count, + dataFetched: new Date(), + lastUpdated: new Date(), + isCached: false, + }; + this.setCachedData(cacheKey, fetchResult.data); + return fetchResult; + } + + private processContributorStats(stats: ContributorStats): GitHubStats { + return { + commits: stats.total, + linesAdded: stats.weeks.reduce((total, week) => total + week.a, 0), + linesDeleted: stats.weeks.reduce((total, week) => total + week.d, 0), + }; + } + + public async fetchGitHubStats(options: { includeMergedPRs?: boolean } = {}): Promise<{ + adminGitHubStats: Record; + userGitHubStats: Record; + contributors: string[]; + dataFetched: Date; + lastUpdated: Date; + isCached: boolean; + }> { + const { includeMergedPRs = false } = options; + const adminGitHubStats: Record = {}; + const userGitHubStats: Record = {}; + const contributors: string[] = []; + let oldestDataFetch = new Date(); + let newestDataFetch = new Date(0); + let allCached = true; + + try { + const contributorStatsResult = await this.fetchContributorStats(); + oldestDataFetch = contributorStatsResult.dataFetched; + newestDataFetch = contributorStatsResult.dataFetched; + allCached = contributorStatsResult.isCached; + + await Promise.all( + contributorStatsResult.data.map(async stat => { + const { login } = stat.author; + contributors.push(login); + + const isAdmin = LONGHORN_DEVELOPERS_ADMINS.some(admin => admin.githubUsername === login); + const statsObject = isAdmin ? adminGitHubStats : userGitHubStats; + + statsObject[login] = this.processContributorStats(stat); + + if (includeMergedPRs) { + try { + const mergedPRsResult = await this.fetchMergedPRsCount(login); + statsObject[login].mergedPRs = mergedPRsResult.data; + + if (mergedPRsResult.dataFetched < oldestDataFetch) { + oldestDataFetch = mergedPRsResult.dataFetched; + } + if (mergedPRsResult.dataFetched > newestDataFetch) { + newestDataFetch = mergedPRsResult.dataFetched; + } + allCached = allCached && mergedPRsResult.isCached; + } catch (error) { + console.error(`Error fetching merged PRs for ${login}:`, error); + statsObject[login].mergedPRs = 0; + } + } + }) + ); + + return { + adminGitHubStats, + userGitHubStats, + contributors, + dataFetched: oldestDataFetch, + lastUpdated: new Date(), + isCached: allCached, + }; + } catch (error) { + console.error('Error fetching GitHub stats:', error); + throw error; + } + } +} + +// /** +// * Runs an example that fetches GitHub stats using the GitHubStatsService. +// * +// * @returns A promise that resolves when the example is finished running. +// * @throws If there is an error fetching the GitHub stats. +// */ +// async function runExample() { +// // Token is now optional +// // const githubToken = process.env.GITHUB_TOKEN; +// const gitHubStatsService = new GitHubStatsService(); + +// try { +// console.log('Fetching stats without merged PRs...'); +// const statsWithoutPRs = await gitHubStatsService.fetchGitHubStats(); +// console.log('Data fetched:', statsWithoutPRs.dataFetched.toLocaleString()); +// console.log('Last updated:', statsWithoutPRs.lastUpdated.toLocaleString()); +// console.log('Is cached:', statsWithoutPRs.isCached); + +// console.log(statsWithoutPRs); + +// // console.log('\nFetching stats with merged PRs...'); +// // const statsWithPRs = await gitHubStatsService.fetchGitHubStats({ includeMergedPRs: true }); +// // console.log('Data fetched:', statsWithPRs.dataFetched.toLocaleString()); +// // console.log('Last updated:', statsWithPRs.lastUpdated.toLocaleString()); +// // console.log('Is cached:', statsWithPRs.isCached); + +// // wait 5 seconds +// // await new Promise(resolve => setTimeout(resolve, 5000)); + +// // console.log('\nFetching stats again (should be cached)...'); +// // const cachedStats = await gitHubStatsService.fetchGitHubStats(); +// // console.log('Data fetched:', cachedStats.dataFetched.toLocaleString()); +// // console.log('Last updated:', cachedStats.lastUpdated.toLocaleString()); +// // console.log('Is cached:', cachedStats.isCached); +// } catch (error) { +// console.error('Failed to fetch GitHub stats:', error); +// } +// } + +// runExample();