From fb8e77bb68a69c6349a5505316e67c4eed8f4c11 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 12 Jul 2026 20:31:05 +0200 Subject: [PATCH] style: clean up code with prettier and eslint --- .gitea/workflows/deploy.yaml | 26 +- pnpm-lock.yaml | 9266 +++++++++++------ scripts/db-url.test.ts | 4 +- scripts/sql-statements.ts | 4 +- src/actions/badges.ts | 8 +- src/actions/banners.ts | 68 +- src/actions/bulk-users.ts | 38 +- src/actions/catalog-bc.ts | 27 +- src/actions/catalog-items.ts | 40 +- src/actions/catalog.ts | 36 +- src/actions/emulator.ts | 34 +- src/actions/events.ts | 142 +- src/actions/import-badges.ts | 18 +- src/actions/import-furni.ts | 25 +- src/actions/moderation.ts | 150 +- src/actions/permissions.ts | 142 +- src/actions/polls.ts | 90 +- src/actions/prefixes.ts | 90 +- src/actions/rooms.ts | 11 +- src/actions/soundtracks.ts | 14 +- src/actions/ticket-templates.ts | 46 +- src/actions/tickets.ts | 146 +- src/actions/translations.ts | 109 +- src/actions/users.ts | 405 +- src/actions/watch.ts | 38 +- src/app/admin/analytics/activity/page.tsx | 83 +- src/app/admin/analytics/economy/page.tsx | 83 +- src/app/admin/analytics/page.tsx | 79 +- src/app/admin/articles/[id]/page.tsx | 6 +- src/app/admin/articles/new/page.tsx | 6 +- src/app/admin/articles/page.tsx | 6 +- src/app/admin/banners/banners-manager.tsx | 139 +- src/app/admin/banners/page.tsx | 18 +- .../catalog/[id]/catalog-detail-tabs.tsx | 97 +- .../catalog/[id]/catalog-items-table.tsx | 6 +- .../catalog-items-table.tsx | 728 +- .../catalog-items-table/field-helpers.tsx | 140 +- .../[id]/catalog-items-table/furni-icon.tsx | 28 +- .../catalog/[id]/catalog-items-table/index.ts | 8 +- .../[id]/catalog-items-table/song-picker.tsx | 62 +- .../catalog/[id]/catalog-items-table/types.ts | 122 +- .../admin/catalog/[id]/catalog-page-form.tsx | 319 +- .../catalog/[id]/catalog-translate-tab.tsx | 300 +- src/app/admin/catalog/[id]/loading.tsx | 4 +- src/app/admin/catalog/[id]/page.tsx | 55 +- .../admin/catalog/builder-club/[id]/page.tsx | 42 +- .../admin/catalog/builder-club/bc-manager.tsx | 237 +- src/app/admin/catalog/builder-club/page.tsx | 4 +- src/app/admin/catalog/catalog-actions.tsx | 76 +- src/app/admin/catalog/catalog-table.tsx | 143 +- src/app/admin/catalog/catalog-view-toggle.tsx | 60 +- src/app/admin/catalog/loading.tsx | 4 +- src/app/admin/catalog/page.tsx | 287 +- src/app/admin/commandocentrum/page.tsx | 2 +- src/app/admin/devops/errors/page.tsx | 30 +- src/app/admin/devops/health-check-client.tsx | 54 +- src/app/admin/devops/page.tsx | 60 +- src/app/admin/events/[id]/event-prizes.tsx | 94 +- .../admin/events/[id]/event-registrations.tsx | 16 +- src/app/admin/events/[id]/event-winners.tsx | 54 +- src/app/admin/events/[id]/page.tsx | 85 +- src/app/admin/events/create/page.tsx | 18 +- src/app/admin/events/event-form.tsx | 108 +- src/app/admin/events/events-table.tsx | 74 +- src/app/admin/events/page.tsx | 40 +- .../events/types/event-types-manager.tsx | 100 +- src/app/admin/events/types/page.tsx | 18 +- src/app/admin/help-questions/page.tsx | 4 +- .../import/badges/badge-editor-dialog.tsx | 68 +- .../import/badges/import-badges-client.tsx | 281 +- src/app/admin/import/badges/loading.tsx | 4 +- src/app/admin/import/badges/page.tsx | 12 +- .../import/clone/import-clone-client.tsx | 548 +- src/app/admin/import/clone/page.tsx | 12 +- .../clothing/import-clothing-client.tsx | 520 +- src/app/admin/import/clothing/loading.tsx | 2 +- src/app/admin/import/clothing/page.tsx | 12 +- .../import/effects/import-effects-client.tsx | 260 +- src/app/admin/import/effects/loading.tsx | 2 +- src/app/admin/import/effects/page.tsx | 12 +- .../import/furni/import-furni-client.tsx | 989 +- src/app/admin/import/furni/loading.tsx | 4 +- .../import/furni/nitro-editor-dialog.tsx | 399 +- src/app/admin/import/furni/page.tsx | 12 +- .../admin/import/pets/import-pets-client.tsx | 235 +- src/app/admin/import/pets/loading.tsx | 2 +- src/app/admin/import/pets/page.tsx | 12 +- src/app/admin/import/repair/page.tsx | 12 +- src/app/admin/import/repair/repair-client.tsx | 524 +- src/app/admin/layout.tsx | 4 +- src/app/admin/logs/audit/audit-table.tsx | 92 +- src/app/admin/logs/audit/loading.tsx | 4 +- src/app/admin/logs/audit/page.tsx | 34 +- src/app/admin/logs/chat/chat-table.tsx | 38 +- src/app/admin/logs/chat/loading.tsx | 4 +- src/app/admin/logs/chat/page.tsx | 18 +- .../admin/logs/commands/commands-table.tsx | 40 +- src/app/admin/logs/commands/loading.tsx | 4 +- src/app/admin/logs/commands/page.tsx | 18 +- src/app/admin/logs/page.tsx | 8 +- src/app/admin/logs/trades/loading.tsx | 4 +- src/app/admin/logs/trades/page.tsx | 18 +- src/app/admin/logs/trades/trades-table.tsx | 47 +- src/app/admin/maintenance/page.tsx | 5 +- .../moderation/actions/mod-actions-client.tsx | 77 +- src/app/admin/moderation/actions/page.tsx | 16 +- .../admin/moderation/cfh/[id]/cfh-detail.tsx | 139 +- src/app/admin/moderation/cfh/[id]/page.tsx | 38 +- src/app/admin/moderation/cfh/page.tsx | 82 +- src/app/admin/moderation/page.tsx | 100 +- src/app/admin/moderation/team/page.tsx | 56 +- src/app/admin/navigation/page.tsx | 8 +- src/app/admin/online/loading.tsx | 4 +- src/app/admin/online/online-table.tsx | 90 +- src/app/admin/online/page.tsx | 20 +- src/app/admin/permissions/[id]/page.tsx | 52 +- .../permissions/[id]/rank-edit-client.tsx | 329 +- src/app/admin/permissions/loading.tsx | 4 +- src/app/admin/permissions/page.tsx | 28 +- .../admin/permissions/permissions-list.tsx | 128 +- src/app/admin/photos/page.tsx | 5 +- src/app/admin/polls/[id]/page.tsx | 52 +- src/app/admin/polls/[id]/poll-questions.tsx | 104 +- src/app/admin/polls/[id]/poll-results.tsx | 40 +- src/app/admin/polls/create/page.tsx | 12 +- src/app/admin/polls/page.tsx | 40 +- src/app/admin/polls/poll-form.tsx | 88 +- src/app/admin/polls/polls-table.tsx | 72 +- src/app/admin/prefixes/loading.tsx | 4 +- src/app/admin/prefixes/page.tsx | 14 +- src/app/admin/prefixes/prefixes-client.tsx | 419 +- src/app/admin/radio/embed/embed-snippet.tsx | 4 +- src/app/admin/radio/page.tsx | 8 +- src/app/admin/radio/settings/page.tsx | 5 +- src/app/admin/rare-values/page.tsx | 5 +- .../rooms/[id]/furni/edit-item-dialog.tsx | 88 +- .../admin/rooms/[id]/furni/furni-client.tsx | 362 +- src/app/admin/rooms/[id]/furni/page.tsx | 58 +- src/app/admin/rooms/[id]/page.tsx | 8 +- src/app/admin/rooms/[id]/room-edit-form.tsx | 103 +- src/app/admin/rooms/_lib/load-room.ts | 27 +- src/app/admin/rooms/edit/[id]/page.tsx | 38 +- src/app/admin/rooms/loading.tsx | 4 +- src/app/admin/rooms/page.tsx | 20 +- src/app/admin/rooms/rooms-table.tsx | 97 +- src/app/admin/rooms/show/[id]/page.tsx | 52 +- src/app/admin/sounds/page.tsx | 48 +- src/app/admin/sounds/sounds-client.tsx | 335 +- src/app/admin/sounds/trax-player.tsx | 214 +- src/app/admin/subscriptions/page.tsx | 4 +- src/app/admin/theme/page.tsx | 28 +- .../tickets/[id]/admin-ticket-detail.tsx | 178 +- src/app/admin/tickets/[id]/page.tsx | 44 +- src/app/admin/tickets/page.tsx | 112 +- src/app/admin/tickets/templates/page.tsx | 18 +- .../tickets/templates/templates-manager.tsx | 81 +- .../client/client-translations.tsx | 156 +- src/app/admin/translations/client/page.tsx | 39 +- src/app/admin/translations/cms/page.tsx | 14 +- src/app/admin/translations/emulator/page.tsx | 85 +- src/app/admin/translations/layout.tsx | 12 +- src/app/admin/translations/loading.tsx | 4 +- src/app/admin/translations/page.tsx | 4 +- .../translations/translations-client.tsx | 123 +- .../admin/translations/translations-tabs.tsx | 34 +- src/app/admin/users/[id]/loading.tsx | 4 +- src/app/admin/users/[id]/page.tsx | 8 +- .../admin/users/[id]/user-activity-log.tsx | 58 +- .../admin/users/[id]/user-badges-section.tsx | 42 +- src/app/admin/users/[id]/user-ban-section.tsx | 82 +- src/app/admin/users/[id]/user-edit-form.tsx | 104 +- .../admin/users/[id]/user-quick-actions.tsx | 111 +- src/app/admin/users/[id]/user-rooms.tsx | 36 +- .../users/_components/create-user-dialog.tsx | 114 +- .../users/_components/user-account-info.tsx | 74 +- .../_components/user-badges-readonly.tsx | 17 +- src/app/admin/users/_components/user-hero.tsx | 95 +- src/app/admin/users/_lib/load-user.ts | 54 +- src/app/admin/users/edit/[id]/page.tsx | 62 +- src/app/admin/users/loading.tsx | 4 +- src/app/admin/users/multi-accounts/page.tsx | 41 +- src/app/admin/users/page.tsx | 30 +- src/app/admin/users/show/[id]/page.tsx | 54 +- src/app/admin/users/users-table.tsx | 336 +- src/app/api/admin/analytics/export/route.ts | 84 +- src/app/api/admin/devops/health/route.ts | 66 +- src/app/api/admin/import/badges/edit/route.ts | 33 +- src/app/api/admin/import/badges/route.ts | 77 +- src/app/api/admin/import/clone/batch/route.ts | 66 +- src/app/api/admin/import/clone/icon/route.ts | 54 +- src/app/api/admin/import/clone/route.ts | 98 +- .../api/admin/import/clothing/batch/route.ts | 48 +- src/app/api/admin/import/clothing/route.ts | 40 +- .../admin/import/clothing/sets/batch/route.ts | 50 +- .../api/admin/import/clothing/sets/route.ts | 24 +- .../api/admin/import/effects/batch/route.ts | 48 +- src/app/api/admin/import/effects/route.ts | 42 +- .../admin/import/furni/batch-regen/route.ts | 207 +- src/app/api/admin/import/furni/batch/route.ts | 174 +- .../admin/import/furni/nitro-editor/route.ts | 228 +- .../api/admin/import/furni/resync/route.ts | 154 +- src/app/api/admin/import/furni/route.ts | 538 +- src/app/api/admin/import/pets/batch/route.ts | 48 +- src/app/api/admin/import/pets/icon/route.ts | 20 +- src/app/api/admin/import/pets/route.ts | 36 +- .../api/admin/import/repair/audit/route.ts | 14 +- src/app/api/admin/import/repair/route.ts | 104 +- .../admin/permissions/assignments/route.ts | 36 +- src/app/api/admin/permissions/roles/route.ts | 51 +- .../bundled/furniture/[...path]/route.ts | 34 +- src/app/api/paypal/capture/route.ts | 36 +- src/app/api/tickets/[id]/reply/route.ts | 41 +- src/app/globals.css | 48 +- src/components/admin/admin-breadcrumb.tsx | 14 +- src/components/admin/admin-nav-link.tsx | 4 +- .../admin/catalog-manager/breadcrumb-bar.tsx | 42 +- .../catalog-manager-dialog.tsx | 135 +- .../admin/catalog-manager/image-preview.tsx | 78 +- .../admin/catalog-manager/inline-editor.tsx | 408 +- .../admin/catalog-manager/root-tabs.tsx | 167 +- .../admin/catalog-manager/sortable-tree.tsx | 642 +- .../admin/catalog-manager/stats-bar.tsx | 25 +- .../admin/catalog-manager/tree-item.tsx | 161 +- .../catalog-manager/use-catalog-store.tsx | 292 +- src/components/admin/catalog-tree.tsx | 469 +- .../admin/catalog/bulk-import-items.tsx | 155 +- .../admin/catalog/catalog-image-picker.tsx | 162 +- src/components/admin/catalog/icon-picker.tsx | 147 +- .../admin/catalog/items-shop-preview.tsx | 131 +- .../admin/catalog/quick-add-furni.tsx | 143 +- src/components/admin/dashboard-chart.tsx | 45 +- src/components/admin/data-table.tsx | 252 +- .../admin/emulator-settings-form.tsx | 240 +- src/components/admin/peak-hours-heatmap.tsx | 42 +- src/components/admin/revenue-chart.tsx | 41 +- src/components/admin/stats-card.tsx | 38 +- src/components/admin/user-watch-toggle.tsx | 42 +- src/components/auth/register-form.tsx | 5 +- src/components/cms-info-popup.tsx | 36 +- src/components/home/guest-view.tsx | 5 +- src/components/home/user-view.tsx | 5 +- src/components/shared/avatar-image.tsx | 31 +- src/components/theme-vars.test.ts | 40 +- src/components/theme-vars.tsx | 63 +- src/components/top-header.tsx | 19 +- src/components/ui/badge.tsx | 37 +- src/components/ui/button.tsx | 54 +- src/components/ui/card.tsx | 58 +- src/components/ui/checkbox.tsx | 16 +- src/components/ui/command.tsx | 90 +- src/components/ui/context-menu.tsx | 49 +- src/components/ui/dialog.tsx | 59 +- src/components/ui/dropdown-menu.tsx | 76 +- src/components/ui/input.tsx | 16 +- src/components/ui/label.tsx | 14 +- src/components/ui/popover.tsx | 46 +- src/components/ui/select.tsx | 71 +- src/components/ui/skeleton.tsx | 14 +- src/components/ui/switch.tsx | 20 +- src/components/ui/table.tsx | 65 +- src/components/ui/tabs.tsx | 44 +- src/components/ui/textarea.tsx | 12 +- src/components/ui/tooltip.tsx | 26 +- src/hooks/use-debounce.ts | 14 +- src/hooks/use-server-action.ts | 52 +- src/i18n/request.ts | 5 +- .../admin-content-modules-contract.test.ts | 21 +- src/lib/admin-helpers.ts | 44 +- src/lib/admin-list.ts | 109 +- src/lib/admin-operations-contract.test.ts | 74 +- src/lib/admin-theme-source-audit.test.ts | 10 +- src/lib/admin/authorization-event.ts | 17 +- src/lib/admin/authorization-events.test.ts | 18 +- src/lib/admin/authorization-events.ts | 14 +- src/lib/admin/authorization-policy.test.ts | 32 +- src/lib/admin/authorization-policy.ts | 12 +- src/lib/admin/log-filters.test.ts | 4 +- src/lib/admin/log-filters.ts | 18 +- src/lib/admin/notice.ts | 5 +- src/lib/admin/rank-authority.test.ts | 13 +- src/lib/admin/rank-authority.ts | 12 +- src/lib/api-handler.ts | 44 +- src/lib/api-response.ts | 37 +- src/lib/auth/session-user.test.ts | 9 +- src/lib/catalog-categories.ts | 2 +- src/lib/catalog-categories/categories.ts | 768 +- src/lib/catalog-categories/eras.ts | 46 +- src/lib/catalog-categories/index.ts | 50 +- src/lib/catalog-layouts.ts | 82 +- src/lib/catalog-translations.ts | 376 +- src/lib/client-cache/song-picker-cache.ts | 38 +- src/lib/client-translation-files.ts | 90 +- src/lib/furni/classname.ts | 28 +- src/lib/imager.ts | 25 +- src/lib/import-backend-contract.test.ts | 26 +- src/lib/json5-patch.ts | 56 +- src/lib/local-imports.ts | 24 +- src/lib/move-suggestions.ts | 76 +- src/lib/permission-slugs.ts | 108 +- src/lib/permissions.ts | 161 +- src/lib/safe-action-shared.ts | 31 +- src/lib/safe-action.ts | 84 +- src/lib/server-log.test.ts | 14 +- src/lib/server-log.ts | 10 +- src/lib/services/audit.ts | 74 +- src/lib/services/catalog-items-loader.ts | 268 +- src/lib/services/catalog-tree.ts | 184 +- src/lib/services/clone-icon.ts | 62 +- src/lib/services/clone-import.test.ts | 191 +- src/lib/services/clone-import.ts | 311 +- src/lib/services/clone-sources.ts | 52 +- src/lib/services/clothing-set-import.test.ts | 64 +- src/lib/services/clothing-set-import.ts | 167 +- src/lib/services/effect-import.test.ts | 69 +- src/lib/services/effect-import.ts | 131 +- src/lib/services/effect-source.ts | 56 +- src/lib/services/effectmap.ts | 60 +- src/lib/services/figure-import.test.ts | 91 +- src/lib/services/figure-import.ts | 125 +- src/lib/services/figure-official.ts | 212 +- src/lib/services/figure-source.ts | 12 +- src/lib/services/figuredata.ts | 82 +- src/lib/services/figuremap.ts | 46 +- src/lib/services/furni-asset-dirs.ts | 114 +- src/lib/services/furni-data.ts | 249 +- src/lib/services/furni-import.test.ts | 42 +- src/lib/services/furni-import.ts | 565 +- src/lib/services/furni-repair.ts | 318 +- src/lib/services/habbo-furnidata-cache.ts | 118 +- src/lib/services/habboassets.ts | 126 +- src/lib/services/habbofurni.ts | 106 +- src/lib/services/imager/png-decode.test.ts | 68 +- src/lib/services/imager/png-decode.ts | 163 +- .../services/import/core/asset-paths.test.ts | 36 +- src/lib/services/import/core/asset-paths.ts | 18 +- src/lib/services/import/core/download.test.ts | 34 +- src/lib/services/import/core/download.ts | 64 +- .../import/core/gamedata-json.test.ts | 66 +- src/lib/services/import/core/gamedata-json.ts | 64 +- src/lib/services/import/core/gordon.test.ts | 50 +- src/lib/services/import/core/gordon.ts | 28 +- .../services/import/core/sse-batch.test.ts | 40 +- src/lib/services/import/core/sse-batch.ts | 90 +- src/lib/services/nitro-assets.ts | 58 +- src/lib/services/paypal-topup.test.ts | 6 +- src/lib/services/paypal-topup.ts | 4 +- src/lib/services/permission-ranks.ts | 224 +- src/lib/services/pet-icon.ts | 332 +- src/lib/services/pet-import.test.ts | 61 +- src/lib/services/pet-import.ts | 88 +- src/lib/services/pet-source.ts | 86 +- src/lib/services/soundtracks.ts | 56 +- src/lib/services/swf-to-nitro.ts | 2 +- src/lib/services/swf/image-decoder.ts | 308 +- src/lib/services/swf/index.ts | 370 +- src/lib/services/swf/nitro-builder.ts | 286 +- src/lib/services/swf/swf-parser.ts | 162 +- src/lib/services/swf/xml-processor.ts | 682 +- src/lib/services/watch.ts | 18 +- src/lib/services/webhook.ts | 80 +- src/lib/theme-contrast.test.ts | 56 +- src/lib/theme-contrast.ts | 33 +- src/lib/theme-css.ts | 35 +- src/lib/theme-presets.ts | 54 +- src/lib/translations-utils.ts | 30 +- src/lib/trax-format.ts | 38 +- src/lib/utils.ts | 6 +- src/lib/validators/event.ts | 49 +- src/lib/validators/poll.ts | 26 +- src/lib/validators/room.ts | 8 +- src/lib/validators/ticket.ts | 41 +- src/lib/validators/user.ts | 38 +- src/types/admin.ts | 58 +- src/types/catalog.ts | 68 +- src/types/common.ts | 48 +- src/types/effects.ts | 20 +- src/types/furni.ts | 140 +- src/types/index.ts | 10 +- 378 files changed, 22407 insertions(+), 20689 deletions(-) diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 6274da50..c02fa051 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -11,51 +11,51 @@ jobs: run: | set -e echo "--- EPIC WEB CONTROL: Starting Auto-Cleanup & Deploy ---" - + # 1. Clean up unused build images safely docker image prune -f - + # 2. Navigate to your website directory cd /var/www/atom-nexst/ - + # CRITICAL: Prevent Git permission blocks caused by the www-data ownership change git config --global --add safe.directory /var/www/atom-nexst - + # Point Git directly to the local Gitea folder path git remote set-url origin /docker/gitea/gitea/git/repositories/remco/epicnext-cms.git/ - + # 3. Fetch and update code git fetch origin --prune git reset --hard origin/main - + # Preserve .next/cache so Next.js can reuse its incremental build cache. # next build safely refreshes stale server/static output itself. rm -rf .output dist - + # 4. Configure trusted dependencies globally and install cleanly export PNPM_CONFIG_ONLY_BUILT_DEPENDENCIES="@parcel/watcher,@swc/core,sharp" pnpm install --frozen-lockfile - + # 5. Apply versioned CMS migrations and generate the Prisma client safely pnpm db:migrate pnpm prisma:generate - + # 6. Next.js Build pnpm build - + # 7. Fix ownership: Build first, THEN set permissions for the web server sudo chown -R www-data:www-data /var/www/atom-nexst/ - + # 8. Hard restart of the Systemd service to clear memory cache echo "Hard resetting systemd service..." sudo systemctl stop atom-nexst.service sudo systemctl start atom-nexst.service - + # Extra health check: Ensure the service is actually running sleep 2 if ! systemctl is-active --quiet atom-nexst.service; then echo "ERROR: atom-nexst.service failed to start!" >&2 exit 1 fi - + echo "--- Deployment successfully completed ---" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f8e2c9f..37b71b92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true @@ -6,32 +6,31 @@ settings: overrides: fast-uri: ^3.1.3 - '@hono/node-server': ^1.19.13 + "@hono/node-server": ^1.19.13 postcss: ^8.5.16 importers: - .: dependencies: - '@dnd-kit/core': + "@dnd-kit/core": specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@dnd-kit/sortable': + "@dnd-kit/sortable": specifier: ^10.0.0 version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7) - '@dnd-kit/utilities': + "@dnd-kit/utilities": specifier: ^3.2.2 version: 3.2.2(react@19.2.7) - '@hookform/resolvers': + "@hookform/resolvers": specifier: ^5.4.0 version: 5.4.0(react-hook-form@7.81.0(react@19.2.7)) - '@prisma/adapter-mariadb': + "@prisma/adapter-mariadb": specifier: ^7.8.0 version: 7.8.0 - '@prisma/client': + "@prisma/client": specifier: ^7.8.0 version: 7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3) - '@tanstack/react-virtual': + "@tanstack/react-virtual": specifier: ^3.14.5 version: 3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) bcryptjs: @@ -119,37 +118,37 @@ importers: specifier: ^3.24.0 version: 3.25.76 devDependencies: - '@eslint/js': + "@eslint/js": specifier: ^10.0.1 version: 10.0.1(eslint@10.6.0(jiti@2.7.0)) - '@next/eslint-plugin-next': + "@next/eslint-plugin-next": specifier: ^16.2.10 version: 16.2.10 - '@tailwindcss/forms': + "@tailwindcss/forms": specifier: ^0.5.11 version: 0.5.11(tailwindcss@4.3.2) - '@tailwindcss/postcss': + "@tailwindcss/postcss": specifier: ^4.3.2 version: 4.3.2 - '@tailwindcss/typography': + "@tailwindcss/typography": specifier: ^0.5.20 version: 0.5.20(tailwindcss@4.3.2) - '@types/jpeg-js': + "@types/jpeg-js": specifier: ^0.3.7 version: 0.3.7 - '@types/node': + "@types/node": specifier: ^22.10.0 version: 22.20.0 - '@types/nodemailer': + "@types/nodemailer": specifier: ^6.4.0 version: 6.4.24 - '@types/react': + "@types/react": specifier: ^19.2.0 version: 19.2.17 - '@types/react-dom': + "@types/react-dom": specifier: ^19.2.0 version: 19.2.3(@types/react@19.2.17) - '@types/sanitize-html': + "@types/sanitize-html": specifier: ^2.16.1 version: 2.16.1 dotenv: @@ -197,7 +196,7 @@ importers: packages/db: dependencies: - '@atomcms/settings': + "@atomcms/settings": specifier: workspace:* version: link:../settings drizzle-orm: @@ -227,2454 +226,3611 @@ importers: version: 2.1.9(@types/node@22.20.0) packages: + "@alloc/quick-lru@5.2.0": + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: ">=10" } - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@auth/core@0.41.2': - resolution: {integrity: sha512-Hx5MNBxN2fJTbJKGUKAA0wca43D0Akl3TvufY54Gn8lop7F+34vU1zA1pn0vQfIoVuLIrpfc2nkyjwIaPJMW7w==} + "@auth/core@0.41.2": + resolution: + { + integrity: sha512-Hx5MNBxN2fJTbJKGUKAA0wca43D0Akl3TvufY54Gn8lop7F+34vU1zA1pn0vQfIoVuLIrpfc2nkyjwIaPJMW7w==, + } peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.2 + "@simplewebauthn/browser": ^9.0.1 + "@simplewebauthn/server": ^9.0.2 nodemailer: ^7.0.7 peerDependenciesMeta: - '@simplewebauthn/browser': + "@simplewebauthn/browser": optional: true - '@simplewebauthn/server': + "@simplewebauthn/server": optional: true nodemailer: optional: true - '@babel/code-frame@7.29.7': - resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} - engines: {node: '>=6.9.0'} + "@babel/code-frame@7.29.7": + resolution: + { + integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==, + } + engines: { node: ">=6.9.0" } - '@babel/compat-data@7.29.7': - resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} - engines: {node: '>=6.9.0'} + "@babel/compat-data@7.29.7": + resolution: + { + integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==, + } + engines: { node: ">=6.9.0" } - '@babel/core@7.29.7': - resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} - engines: {node: '>=6.9.0'} + "@babel/core@7.29.7": + resolution: + { + integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==, + } + engines: { node: ">=6.9.0" } - '@babel/generator@7.29.7': - resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} - engines: {node: '>=6.9.0'} + "@babel/generator@7.29.7": + resolution: + { + integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==, + } + engines: { node: ">=6.9.0" } - '@babel/helper-compilation-targets@7.29.7': - resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} - engines: {node: '>=6.9.0'} + "@babel/helper-compilation-targets@7.29.7": + resolution: + { + integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==, + } + engines: { node: ">=6.9.0" } - '@babel/helper-globals@7.29.7': - resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} - engines: {node: '>=6.9.0'} + "@babel/helper-globals@7.29.7": + resolution: + { + integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==, + } + engines: { node: ">=6.9.0" } - '@babel/helper-module-imports@7.29.7': - resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} - engines: {node: '>=6.9.0'} + "@babel/helper-module-imports@7.29.7": + resolution: + { + integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==, + } + engines: { node: ">=6.9.0" } - '@babel/helper-module-transforms@7.29.7': - resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} - engines: {node: '>=6.9.0'} + "@babel/helper-module-transforms@7.29.7": + resolution: + { + integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==, + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0 + "@babel/core": ^7.0.0 - '@babel/helper-string-parser@7.29.7': - resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} - engines: {node: '>=6.9.0'} + "@babel/helper-string-parser@7.29.7": + resolution: + { + integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==, + } + engines: { node: ">=6.9.0" } - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} + "@babel/helper-validator-identifier@7.29.7": + resolution: + { + integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==, + } + engines: { node: ">=6.9.0" } - '@babel/helper-validator-option@7.29.7': - resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} - engines: {node: '>=6.9.0'} + "@babel/helper-validator-option@7.29.7": + resolution: + { + integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==, + } + engines: { node: ">=6.9.0" } - '@babel/helpers@7.29.7': - resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} - engines: {node: '>=6.9.0'} + "@babel/helpers@7.29.7": + resolution: + { + integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==, + } + engines: { node: ">=6.9.0" } - '@babel/parser@7.29.7': - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} - engines: {node: '>=6.0.0'} + "@babel/parser@7.29.7": + resolution: + { + integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==, + } + engines: { node: ">=6.0.0" } hasBin: true - '@babel/template@7.29.7': - resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} - engines: {node: '>=6.9.0'} + "@babel/template@7.29.7": + resolution: + { + integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, + } + engines: { node: ">=6.9.0" } - '@babel/traverse@7.29.7': - resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} - engines: {node: '>=6.9.0'} + "@babel/traverse@7.29.7": + resolution: + { + integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==, + } + engines: { node: ">=6.9.0" } - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} - engines: {node: '>=6.9.0'} + "@babel/types@7.29.7": + resolution: + { + integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==, + } + engines: { node: ">=6.9.0" } - '@borewit/text-codec@0.2.2': - resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + "@borewit/text-codec@0.2.2": + resolution: + { + integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==, + } - '@dnd-kit/accessibility@3.1.1': - resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} + "@dnd-kit/accessibility@3.1.1": + resolution: + { + integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==, + } peerDependencies: - react: '>=16.8.0' + react: ">=16.8.0" - '@dnd-kit/core@6.3.1': - resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} + "@dnd-kit/core@6.3.1": + resolution: + { + integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==, + } peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: ">=16.8.0" + react-dom: ">=16.8.0" - '@dnd-kit/sortable@10.0.0': - resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} + "@dnd-kit/sortable@10.0.0": + resolution: + { + integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==, + } peerDependencies: - '@dnd-kit/core': ^6.3.0 - react: '>=16.8.0' + "@dnd-kit/core": ^6.3.0 + react: ">=16.8.0" - '@dnd-kit/utilities@3.2.2': - resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} + "@dnd-kit/utilities@3.2.2": + resolution: + { + integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==, + } peerDependencies: - react: '>=16.8.0' + react: ">=16.8.0" - '@drizzle-team/brocli@0.10.2': - resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + "@drizzle-team/brocli@0.10.2": + resolution: + { + integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==, + } - '@electric-sql/pglite-socket@0.1.1': - resolution: {integrity: sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==} + "@electric-sql/pglite-socket@0.1.1": + resolution: + { + integrity: sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==, + } hasBin: true peerDependencies: - '@electric-sql/pglite': 0.4.1 + "@electric-sql/pglite": 0.4.1 - '@electric-sql/pglite-tools@0.3.1': - resolution: {integrity: sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==} + "@electric-sql/pglite-tools@0.3.1": + resolution: + { + integrity: sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==, + } peerDependencies: - '@electric-sql/pglite': 0.4.1 + "@electric-sql/pglite": 0.4.1 - '@electric-sql/pglite@0.4.1': - resolution: {integrity: sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==} + "@electric-sql/pglite@0.4.1": + resolution: + { + integrity: sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==, + } - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + "@emnapi/runtime@1.11.1": + resolution: + { + integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==, + } - '@esbuild-kit/core-utils@3.3.2': - resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' + "@esbuild-kit/core-utils@3.3.2": + resolution: + { + integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==, + } + deprecated: "Merged into tsx: https://tsx.is" - '@esbuild-kit/esm-loader@2.6.5': - resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' + "@esbuild-kit/esm-loader@2.6.5": + resolution: + { + integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==, + } + deprecated: "Merged into tsx: https://tsx.is" - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} + "@esbuild/aix-ppc64@0.19.12": + resolution: + { + integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==, + } + engines: { node: ">=12" } cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + "@esbuild/aix-ppc64@0.21.5": + resolution: + { + integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, + } + engines: { node: ">=12" } cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.28.1': - resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} - engines: {node: '>=18'} + "@esbuild/aix-ppc64@0.28.1": + resolution: + { + integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} + "@esbuild/android-arm64@0.18.20": + resolution: + { + integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, + } + engines: { node: ">=12" } cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} + "@esbuild/android-arm64@0.19.12": + resolution: + { + integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==, + } + engines: { node: ">=12" } cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + "@esbuild/android-arm64@0.21.5": + resolution: + { + integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, + } + engines: { node: ">=12" } cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.28.1': - resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} - engines: {node: '>=18'} + "@esbuild/android-arm64@0.28.1": + resolution: + { + integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} + "@esbuild/android-arm@0.18.20": + resolution: + { + integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, + } + engines: { node: ">=12" } cpu: [arm] os: [android] - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} + "@esbuild/android-arm@0.19.12": + resolution: + { + integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==, + } + engines: { node: ">=12" } cpu: [arm] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + "@esbuild/android-arm@0.21.5": + resolution: + { + integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, + } + engines: { node: ">=12" } cpu: [arm] os: [android] - '@esbuild/android-arm@0.28.1': - resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} - engines: {node: '>=18'} + "@esbuild/android-arm@0.28.1": + resolution: + { + integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, + } + engines: { node: ">=18" } cpu: [arm] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} + "@esbuild/android-x64@0.18.20": + resolution: + { + integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, + } + engines: { node: ">=12" } cpu: [x64] os: [android] - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} + "@esbuild/android-x64@0.19.12": + resolution: + { + integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==, + } + engines: { node: ">=12" } cpu: [x64] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + "@esbuild/android-x64@0.21.5": + resolution: + { + integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, + } + engines: { node: ">=12" } cpu: [x64] os: [android] - '@esbuild/android-x64@0.28.1': - resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} - engines: {node: '>=18'} + "@esbuild/android-x64@0.28.1": + resolution: + { + integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, + } + engines: { node: ">=18" } cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} + "@esbuild/darwin-arm64@0.18.20": + resolution: + { + integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, + } + engines: { node: ">=12" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} + "@esbuild/darwin-arm64@0.19.12": + resolution: + { + integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==, + } + engines: { node: ">=12" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + "@esbuild/darwin-arm64@0.21.5": + resolution: + { + integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, + } + engines: { node: ">=12" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.28.1': - resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} - engines: {node: '>=18'} + "@esbuild/darwin-arm64@0.28.1": + resolution: + { + integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, + } + engines: { node: ">=18" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} + "@esbuild/darwin-x64@0.18.20": + resolution: + { + integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, + } + engines: { node: ">=12" } cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} + "@esbuild/darwin-x64@0.19.12": + resolution: + { + integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==, + } + engines: { node: ">=12" } cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + "@esbuild/darwin-x64@0.21.5": + resolution: + { + integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, + } + engines: { node: ">=12" } cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.28.1': - resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} - engines: {node: '>=18'} + "@esbuild/darwin-x64@0.28.1": + resolution: + { + integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} + "@esbuild/freebsd-arm64@0.18.20": + resolution: + { + integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, + } + engines: { node: ">=12" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} + "@esbuild/freebsd-arm64@0.19.12": + resolution: + { + integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==, + } + engines: { node: ">=12" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + "@esbuild/freebsd-arm64@0.21.5": + resolution: + { + integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, + } + engines: { node: ">=12" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.28.1': - resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} - engines: {node: '>=18'} + "@esbuild/freebsd-arm64@0.28.1": + resolution: + { + integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, + } + engines: { node: ">=18" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} + "@esbuild/freebsd-x64@0.18.20": + resolution: + { + integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, + } + engines: { node: ">=12" } cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} + "@esbuild/freebsd-x64@0.19.12": + resolution: + { + integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==, + } + engines: { node: ">=12" } cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + "@esbuild/freebsd-x64@0.21.5": + resolution: + { + integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, + } + engines: { node: ">=12" } cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.28.1': - resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} - engines: {node: '>=18'} + "@esbuild/freebsd-x64@0.28.1": + resolution: + { + integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} + "@esbuild/linux-arm64@0.18.20": + resolution: + { + integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, + } + engines: { node: ">=12" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} + "@esbuild/linux-arm64@0.19.12": + resolution: + { + integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==, + } + engines: { node: ">=12" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + "@esbuild/linux-arm64@0.21.5": + resolution: + { + integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, + } + engines: { node: ">=12" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.28.1': - resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} - engines: {node: '>=18'} + "@esbuild/linux-arm64@0.28.1": + resolution: + { + integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, + } + engines: { node: ">=18" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} + "@esbuild/linux-arm@0.18.20": + resolution: + { + integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, + } + engines: { node: ">=12" } cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} + "@esbuild/linux-arm@0.19.12": + resolution: + { + integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==, + } + engines: { node: ">=12" } cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + "@esbuild/linux-arm@0.21.5": + resolution: + { + integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, + } + engines: { node: ">=12" } cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.28.1': - resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} - engines: {node: '>=18'} + "@esbuild/linux-arm@0.28.1": + resolution: + { + integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, + } + engines: { node: ">=18" } cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} + "@esbuild/linux-ia32@0.18.20": + resolution: + { + integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, + } + engines: { node: ">=12" } cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} + "@esbuild/linux-ia32@0.19.12": + resolution: + { + integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==, + } + engines: { node: ">=12" } cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + "@esbuild/linux-ia32@0.21.5": + resolution: + { + integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, + } + engines: { node: ">=12" } cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.28.1': - resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} - engines: {node: '>=18'} + "@esbuild/linux-ia32@0.28.1": + resolution: + { + integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, + } + engines: { node: ">=18" } cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} + "@esbuild/linux-loong64@0.18.20": + resolution: + { + integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, + } + engines: { node: ">=12" } cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} + "@esbuild/linux-loong64@0.19.12": + resolution: + { + integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==, + } + engines: { node: ">=12" } cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + "@esbuild/linux-loong64@0.21.5": + resolution: + { + integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, + } + engines: { node: ">=12" } cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.28.1': - resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} - engines: {node: '>=18'} + "@esbuild/linux-loong64@0.28.1": + resolution: + { + integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, + } + engines: { node: ">=18" } cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} + "@esbuild/linux-mips64el@0.18.20": + resolution: + { + integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, + } + engines: { node: ">=12" } cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} + "@esbuild/linux-mips64el@0.19.12": + resolution: + { + integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==, + } + engines: { node: ">=12" } cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + "@esbuild/linux-mips64el@0.21.5": + resolution: + { + integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, + } + engines: { node: ">=12" } cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.28.1': - resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} - engines: {node: '>=18'} + "@esbuild/linux-mips64el@0.28.1": + resolution: + { + integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, + } + engines: { node: ">=18" } cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} + "@esbuild/linux-ppc64@0.18.20": + resolution: + { + integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, + } + engines: { node: ">=12" } cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} + "@esbuild/linux-ppc64@0.19.12": + resolution: + { + integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==, + } + engines: { node: ">=12" } cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + "@esbuild/linux-ppc64@0.21.5": + resolution: + { + integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, + } + engines: { node: ">=12" } cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.28.1': - resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} - engines: {node: '>=18'} + "@esbuild/linux-ppc64@0.28.1": + resolution: + { + integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} + "@esbuild/linux-riscv64@0.18.20": + resolution: + { + integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, + } + engines: { node: ">=12" } cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} + "@esbuild/linux-riscv64@0.19.12": + resolution: + { + integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==, + } + engines: { node: ">=12" } cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + "@esbuild/linux-riscv64@0.21.5": + resolution: + { + integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, + } + engines: { node: ">=12" } cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.28.1': - resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} - engines: {node: '>=18'} + "@esbuild/linux-riscv64@0.28.1": + resolution: + { + integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, + } + engines: { node: ">=18" } cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} + "@esbuild/linux-s390x@0.18.20": + resolution: + { + integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, + } + engines: { node: ">=12" } cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} + "@esbuild/linux-s390x@0.19.12": + resolution: + { + integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==, + } + engines: { node: ">=12" } cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + "@esbuild/linux-s390x@0.21.5": + resolution: + { + integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, + } + engines: { node: ">=12" } cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.28.1': - resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} - engines: {node: '>=18'} + "@esbuild/linux-s390x@0.28.1": + resolution: + { + integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, + } + engines: { node: ">=18" } cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} + "@esbuild/linux-x64@0.18.20": + resolution: + { + integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, + } + engines: { node: ">=12" } cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} + "@esbuild/linux-x64@0.19.12": + resolution: + { + integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==, + } + engines: { node: ">=12" } cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + "@esbuild/linux-x64@0.21.5": + resolution: + { + integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, + } + engines: { node: ">=12" } cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.28.1': - resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} - engines: {node: '>=18'} + "@esbuild/linux-x64@0.28.1": + resolution: + { + integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, + } + engines: { node: ">=18" } cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.28.1': - resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} - engines: {node: '>=18'} + "@esbuild/netbsd-arm64@0.28.1": + resolution: + { + integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, + } + engines: { node: ">=18" } cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} + "@esbuild/netbsd-x64@0.18.20": + resolution: + { + integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, + } + engines: { node: ">=12" } cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} + "@esbuild/netbsd-x64@0.19.12": + resolution: + { + integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==, + } + engines: { node: ">=12" } cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + "@esbuild/netbsd-x64@0.21.5": + resolution: + { + integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, + } + engines: { node: ">=12" } cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.1': - resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} - engines: {node: '>=18'} + "@esbuild/netbsd-x64@0.28.1": + resolution: + { + integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, + } + engines: { node: ">=18" } cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.28.1': - resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} - engines: {node: '>=18'} + "@esbuild/openbsd-arm64@0.28.1": + resolution: + { + integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} + "@esbuild/openbsd-x64@0.18.20": + resolution: + { + integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, + } + engines: { node: ">=12" } cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} + "@esbuild/openbsd-x64@0.19.12": + resolution: + { + integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==, + } + engines: { node: ">=12" } cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + "@esbuild/openbsd-x64@0.21.5": + resolution: + { + integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, + } + engines: { node: ">=12" } cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.1': - resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} - engines: {node: '>=18'} + "@esbuild/openbsd-x64@0.28.1": + resolution: + { + integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, + } + engines: { node: ">=18" } cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.28.1': - resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} - engines: {node: '>=18'} + "@esbuild/openharmony-arm64@0.28.1": + resolution: + { + integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} + "@esbuild/sunos-x64@0.18.20": + resolution: + { + integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, + } + engines: { node: ">=12" } cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} + "@esbuild/sunos-x64@0.19.12": + resolution: + { + integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==, + } + engines: { node: ">=12" } cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + "@esbuild/sunos-x64@0.21.5": + resolution: + { + integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, + } + engines: { node: ">=12" } cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.28.1': - resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} - engines: {node: '>=18'} + "@esbuild/sunos-x64@0.28.1": + resolution: + { + integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} + "@esbuild/win32-arm64@0.18.20": + resolution: + { + integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, + } + engines: { node: ">=12" } cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} + "@esbuild/win32-arm64@0.19.12": + resolution: + { + integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==, + } + engines: { node: ">=12" } cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + "@esbuild/win32-arm64@0.21.5": + resolution: + { + integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, + } + engines: { node: ">=12" } cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.28.1': - resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} - engines: {node: '>=18'} + "@esbuild/win32-arm64@0.28.1": + resolution: + { + integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, + } + engines: { node: ">=18" } cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} + "@esbuild/win32-ia32@0.18.20": + resolution: + { + integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, + } + engines: { node: ">=12" } cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} + "@esbuild/win32-ia32@0.19.12": + resolution: + { + integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==, + } + engines: { node: ">=12" } cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + "@esbuild/win32-ia32@0.21.5": + resolution: + { + integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, + } + engines: { node: ">=12" } cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.28.1': - resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} - engines: {node: '>=18'} + "@esbuild/win32-ia32@0.28.1": + resolution: + { + integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, + } + engines: { node: ">=18" } cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} + "@esbuild/win32-x64@0.18.20": + resolution: + { + integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, + } + engines: { node: ">=12" } cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} + "@esbuild/win32-x64@0.19.12": + resolution: + { + integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==, + } + engines: { node: ">=12" } cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + "@esbuild/win32-x64@0.21.5": + resolution: + { + integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, + } + engines: { node: ">=12" } cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.28.1': - resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} - engines: {node: '>=18'} + "@esbuild/win32-x64@0.28.1": + resolution: + { + integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, + } + engines: { node: ">=18" } cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + "@eslint-community/eslint-utils@4.9.1": + resolution: + { + integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + "@eslint-community/regexpp@4.12.2": + resolution: + { + integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - '@eslint/config-array@0.23.5': - resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + "@eslint/config-array@0.23.5": + resolution: + { + integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - '@eslint/config-helpers@0.6.0': - resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + "@eslint/config-helpers@0.6.0": + resolution: + { + integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - '@eslint/core@1.2.1': - resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + "@eslint/core@1.2.1": + resolution: + { + integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - '@eslint/js@10.0.1': - resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + "@eslint/js@10.0.1": + resolution: + { + integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } peerDependencies: eslint: ^10.0.0 peerDependenciesMeta: eslint: optional: true - '@eslint/object-schema@3.0.5': - resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + "@eslint/object-schema@3.0.5": + resolution: + { + integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - '@eslint/plugin-kit@0.7.2': - resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + "@eslint/plugin-kit@0.7.2": + resolution: + { + integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - '@floating-ui/core@1.8.0': - resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + "@floating-ui/core@1.8.0": + resolution: + { + integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==, + } - '@floating-ui/dom@1.8.0': - resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + "@floating-ui/dom@1.8.0": + resolution: + { + integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==, + } - '@floating-ui/react-dom@2.1.9': - resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + "@floating-ui/react-dom@2.1.9": + resolution: + { + integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==, + } peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: ">=16.8.0" + react-dom: ">=16.8.0" - '@floating-ui/utils@0.2.12': - resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + "@floating-ui/utils@0.2.12": + resolution: + { + integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==, + } - '@formatjs/fast-memoize@3.1.6': - resolution: {integrity: sha512-H5aexk1Le7T9TPmscacZ+1pR6CTa2n1wq+HDVGXhH8TzUlQQpeXzZs91dRtmFHrbeNbjPFPfQujUqm7MHgVoXQ==} + "@formatjs/fast-memoize@3.1.6": + resolution: + { + integrity: sha512-H5aexk1Le7T9TPmscacZ+1pR6CTa2n1wq+HDVGXhH8TzUlQQpeXzZs91dRtmFHrbeNbjPFPfQujUqm7MHgVoXQ==, + } - '@formatjs/icu-messageformat-parser@3.5.12': - resolution: {integrity: sha512-YyzzxVgYJ8DELmmkhn0Yr0rUj0dTJFf9Jp628K3S0ysInBWxLVDOS8i3RP91cCp4DMK4WYb4cVMhWA9i4knSJg==} + "@formatjs/icu-messageformat-parser@3.5.12": + resolution: + { + integrity: sha512-YyzzxVgYJ8DELmmkhn0Yr0rUj0dTJFf9Jp628K3S0ysInBWxLVDOS8i3RP91cCp4DMK4WYb4cVMhWA9i4knSJg==, + } - '@formatjs/icu-skeleton-parser@2.1.10': - resolution: {integrity: sha512-XuSva+8ZGawk8VnD5VD6UeH8KarQ/Z022zgjHDoHmlNiAewstXuuzXc0Hk5pGFSdG+nNw5bfJKXqj1ZXHn9yUA==} + "@formatjs/icu-skeleton-parser@2.1.10": + resolution: + { + integrity: sha512-XuSva+8ZGawk8VnD5VD6UeH8KarQ/Z022zgjHDoHmlNiAewstXuuzXc0Hk5pGFSdG+nNw5bfJKXqj1ZXHn9yUA==, + } - '@formatjs/intl-localematcher@0.8.10': - resolution: {integrity: sha512-P/IC3qws3jH+1fEs+o0RIFgXKRaQlFehjS5W0FPAqdo6hgzawLl+eD0q0JjheQ3XtoOe5n8WSYfX06KQZI/QJA==} + "@formatjs/intl-localematcher@0.8.10": + resolution: + { + integrity: sha512-P/IC3qws3jH+1fEs+o0RIFgXKRaQlFehjS5W0FPAqdo6hgzawLl+eD0q0JjheQ3XtoOe5n8WSYfX06KQZI/QJA==, + } - '@hono/node-server@1.19.14': - resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} - engines: {node: '>=18.14.1'} + "@hono/node-server@1.19.14": + resolution: + { + integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==, + } + engines: { node: ">=18.14.1" } peerDependencies: hono: ^4 - '@hookform/resolvers@5.4.0': - resolution: {integrity: sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==} + "@hookform/resolvers@5.4.0": + resolution: + { + integrity: sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==, + } peerDependencies: react-hook-form: ^7.55.0 - '@humanfs/core@0.19.2': - resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} - engines: {node: '>=18.18.0'} + "@humanfs/core@0.19.2": + resolution: + { + integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==, + } + engines: { node: ">=18.18.0" } - '@humanfs/node@0.16.8': - resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} - engines: {node: '>=18.18.0'} + "@humanfs/node@0.16.8": + resolution: + { + integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==, + } + engines: { node: ">=18.18.0" } - '@humanfs/types@0.15.0': - resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} - engines: {node: '>=18.18.0'} + "@humanfs/types@0.15.0": + resolution: + { + integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==, + } + engines: { node: ">=18.18.0" } - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + "@humanwhocodes/module-importer@1.0.1": + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: ">=12.22" } - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} + "@humanwhocodes/retry@0.4.3": + resolution: + { + integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, + } + engines: { node: ">=18.18" } - '@img/colour@1.1.0': - resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} - engines: {node: '>=18'} + "@img/colour@1.1.0": + resolution: + { + integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, + } + engines: { node: ">=18" } - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-darwin-arm64@0.34.5": + resolution: + { + integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-darwin-x64@0.34.5": + resolution: + { + integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + "@img/sharp-libvips-darwin-arm64@1.2.4": + resolution: + { + integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, + } cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + "@img/sharp-libvips-darwin-x64@1.2.4": + resolution: + { + integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, + } cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + "@img/sharp-libvips-linux-arm64@1.2.4": + resolution: + { + integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, + } cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + "@img/sharp-libvips-linux-arm@1.2.4": + resolution: + { + integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, + } cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + "@img/sharp-libvips-linux-ppc64@1.2.4": + resolution: + { + integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, + } cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + "@img/sharp-libvips-linux-riscv64@1.2.4": + resolution: + { + integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, + } cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + "@img/sharp-libvips-linux-s390x@1.2.4": + resolution: + { + integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, + } cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + "@img/sharp-libvips-linux-x64@1.2.4": + resolution: + { + integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, + } cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + resolution: + { + integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, + } cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + "@img/sharp-libvips-linuxmusl-x64@1.2.4": + resolution: + { + integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, + } cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-arm64@0.34.5": + resolution: + { + integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-arm@0.34.5": + resolution: + { + integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-ppc64@0.34.5": + resolution: + { + integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-riscv64@0.34.5": + resolution: + { + integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-s390x@0.34.5": + resolution: + { + integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-x64@0.34.5": + resolution: + { + integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linuxmusl-arm64@0.34.5": + resolution: + { + integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linuxmusl-x64@0.34.5": + resolution: + { + integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-wasm32@0.34.5": + resolution: + { + integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-arm64@0.34.5": + resolution: + { + integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-ia32@0.34.5": + resolution: + { + integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-x64@0.34.5": + resolution: + { + integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [win32] - '@ioredis/commands@1.10.0': - resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} + "@ioredis/commands@1.10.0": + resolution: + { + integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==, + } - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + "@jridgewell/gen-mapping@0.3.13": + resolution: + { + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, + } - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + "@jridgewell/remapping@2.3.5": + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + } - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + "@jridgewell/sourcemap-codec@1.5.5": + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + "@jridgewell/trace-mapping@0.3.31": + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + } - '@kurkle/color@0.3.4': - resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} + "@kurkle/color@0.3.4": + resolution: + { + integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==, + } - '@next/env@16.2.10': - resolution: {integrity: sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==} + "@next/env@16.2.10": + resolution: + { + integrity: sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==, + } - '@next/eslint-plugin-next@16.2.10': - resolution: {integrity: sha512-Gs8D2m21VnJeFo9qvYIIqJH94frWerWYu41BprU1pLtRVF7PCQNLiFZZ3fG+iPuj3K83Cwv/rt+msLOy8Qgu3Q==} + "@next/eslint-plugin-next@16.2.10": + resolution: + { + integrity: sha512-Gs8D2m21VnJeFo9qvYIIqJH94frWerWYu41BprU1pLtRVF7PCQNLiFZZ3fG+iPuj3K83Cwv/rt+msLOy8Qgu3Q==, + } - '@next/swc-darwin-arm64@16.2.10': - resolution: {integrity: sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==} - engines: {node: '>= 10'} + "@next/swc-darwin-arm64@16.2.10": + resolution: + { + integrity: sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.10': - resolution: {integrity: sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==} - engines: {node: '>= 10'} + "@next/swc-darwin-x64@16.2.10": + resolution: + { + integrity: sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==, + } + engines: { node: ">= 10" } cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.10': - resolution: {integrity: sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==} - engines: {node: '>= 10'} + "@next/swc-linux-arm64-gnu@16.2.10": + resolution: + { + integrity: sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.10': - resolution: {integrity: sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==} - engines: {node: '>= 10'} + "@next/swc-linux-arm64-musl@16.2.10": + resolution: + { + integrity: sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.10': - resolution: {integrity: sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==} - engines: {node: '>= 10'} + "@next/swc-linux-x64-gnu@16.2.10": + resolution: + { + integrity: sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==, + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.10': - resolution: {integrity: sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==} - engines: {node: '>= 10'} + "@next/swc-linux-x64-musl@16.2.10": + resolution: + { + integrity: sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==, + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.10': - resolution: {integrity: sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==} - engines: {node: '>= 10'} + "@next/swc-win32-arm64-msvc@16.2.10": + resolution: + { + integrity: sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.10': - resolution: {integrity: sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==} - engines: {node: '>= 10'} + "@next/swc-win32-x64-msvc@16.2.10": + resolution: + { + integrity: sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==, + } + engines: { node: ">= 10" } cpu: [x64] os: [win32] - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } - '@otplib/core@12.0.1': - resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} + "@otplib/core@12.0.1": + resolution: + { + integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==, + } - '@otplib/plugin-crypto@12.0.1': - resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==} + "@otplib/plugin-crypto@12.0.1": + resolution: + { + integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==, + } deprecated: Please upgrade to v13 of otplib. Refer to otplib docs for migration paths - '@otplib/plugin-thirty-two@12.0.1': - resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} + "@otplib/plugin-thirty-two@12.0.1": + resolution: + { + integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==, + } deprecated: Please upgrade to v13 of otplib. Refer to otplib docs for migration paths - '@otplib/preset-default@12.0.1': - resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==} + "@otplib/preset-default@12.0.1": + resolution: + { + integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==, + } deprecated: Please upgrade to v13 of otplib. Refer to otplib docs for migration paths - '@otplib/preset-v11@12.0.1': - resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} + "@otplib/preset-v11@12.0.1": + resolution: + { + integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==, + } - '@panva/hkdf@1.2.1': - resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} + "@panva/hkdf@1.2.1": + resolution: + { + integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==, + } - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-android-arm64@2.5.6": + resolution: + { + integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==, + } + engines: { node: ">= 10.0.0" } cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-darwin-arm64@2.5.6": + resolution: + { + integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==, + } + engines: { node: ">= 10.0.0" } cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-darwin-x64@2.5.6": + resolution: + { + integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==, + } + engines: { node: ">= 10.0.0" } cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-freebsd-x64@2.5.6": + resolution: + { + integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==, + } + engines: { node: ">= 10.0.0" } cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-linux-arm-glibc@2.5.6": + resolution: + { + integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==, + } + engines: { node: ">= 10.0.0" } cpu: [arm] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-linux-arm-musl@2.5.6": + resolution: + { + integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==, + } + engines: { node: ">= 10.0.0" } cpu: [arm] os: [linux] libc: [musl] - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-linux-arm64-glibc@2.5.6": + resolution: + { + integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==, + } + engines: { node: ">= 10.0.0" } cpu: [arm64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-linux-arm64-musl@2.5.6": + resolution: + { + integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==, + } + engines: { node: ">= 10.0.0" } cpu: [arm64] os: [linux] libc: [musl] - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-linux-x64-glibc@2.5.6": + resolution: + { + integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==, + } + engines: { node: ">= 10.0.0" } cpu: [x64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-linux-x64-musl@2.5.6": + resolution: + { + integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==, + } + engines: { node: ">= 10.0.0" } cpu: [x64] os: [linux] libc: [musl] - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-win32-arm64@2.5.6": + resolution: + { + integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==, + } + engines: { node: ">= 10.0.0" } cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-win32-ia32@2.5.6": + resolution: + { + integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==, + } + engines: { node: ">= 10.0.0" } cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher-win32-x64@2.5.6": + resolution: + { + integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==, + } + engines: { node: ">= 10.0.0" } cpu: [x64] os: [win32] - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} - engines: {node: '>= 10.0.0'} + "@parcel/watcher@2.5.6": + resolution: + { + integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==, + } + engines: { node: ">= 10.0.0" } - '@petamoriken/float16@3.9.3': - resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==} + "@petamoriken/float16@3.9.3": + resolution: + { + integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==, + } - '@prisma/adapter-mariadb@7.8.0': - resolution: {integrity: sha512-mWsgcfbUjxB3qSzRlLs8E03vsKrqXzYK2zpx3e8u6wIgeHJM/sE46cuOGcYvHiZGmeQLCd3xL6YSSGM9QOLI6w==} + "@prisma/adapter-mariadb@7.8.0": + resolution: + { + integrity: sha512-mWsgcfbUjxB3qSzRlLs8E03vsKrqXzYK2zpx3e8u6wIgeHJM/sE46cuOGcYvHiZGmeQLCd3xL6YSSGM9QOLI6w==, + } - '@prisma/client-runtime-utils@7.8.0': - resolution: {integrity: sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==} + "@prisma/client-runtime-utils@7.8.0": + resolution: + { + integrity: sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==, + } - '@prisma/client@7.8.0': - resolution: {integrity: sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==} - engines: {node: ^20.19 || ^22.12 || >=24.0} + "@prisma/client@7.8.0": + resolution: + { + integrity: sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==, + } + engines: { node: ^20.19 || ^22.12 || >=24.0 } peerDependencies: - prisma: '*' - typescript: '>=5.4.0' + prisma: "*" + typescript: ">=5.4.0" peerDependenciesMeta: prisma: optional: true typescript: optional: true - '@prisma/config@7.8.0': - resolution: {integrity: sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==} + "@prisma/config@7.8.0": + resolution: + { + integrity: sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==, + } - '@prisma/debug@7.2.0': - resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} + "@prisma/debug@7.2.0": + resolution: + { + integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==, + } - '@prisma/debug@7.8.0': - resolution: {integrity: sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==} + "@prisma/debug@7.8.0": + resolution: + { + integrity: sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==, + } - '@prisma/dev@0.24.3': - resolution: {integrity: sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==} + "@prisma/dev@0.24.3": + resolution: + { + integrity: sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==, + } - '@prisma/driver-adapter-utils@7.8.0': - resolution: {integrity: sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==} + "@prisma/driver-adapter-utils@7.8.0": + resolution: + { + integrity: sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==, + } - '@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a': - resolution: {integrity: sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==} + "@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a": + resolution: + { + integrity: sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==, + } - '@prisma/engines@7.8.0': - resolution: {integrity: sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==} + "@prisma/engines@7.8.0": + resolution: + { + integrity: sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==, + } - '@prisma/fetch-engine@7.8.0': - resolution: {integrity: sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==} + "@prisma/fetch-engine@7.8.0": + resolution: + { + integrity: sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==, + } - '@prisma/get-platform@7.2.0': - resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} + "@prisma/get-platform@7.2.0": + resolution: + { + integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==, + } - '@prisma/get-platform@7.8.0': - resolution: {integrity: sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==} + "@prisma/get-platform@7.8.0": + resolution: + { + integrity: sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==, + } - '@prisma/query-plan-executor@7.2.0': - resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} + "@prisma/query-plan-executor@7.2.0": + resolution: + { + integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==, + } - '@prisma/streams-local@0.1.2': - resolution: {integrity: sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==} - engines: {bun: '>=1.3.6', node: '>=22.0.0'} + "@prisma/streams-local@0.1.2": + resolution: + { + integrity: sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==, + } + engines: { bun: ">=1.3.6", node: ">=22.0.0" } - '@prisma/studio-core@0.27.3': - resolution: {integrity: sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==} - engines: {node: ^20.19 || ^22.12 || >=24.0, pnpm: '8'} + "@prisma/studio-core@0.27.3": + resolution: + { + integrity: sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==, + } + engines: { node: ^20.19 || ^22.12 || >=24.0, pnpm: "8" } peerDependencies: - '@types/react': ^18.0.0 || ^19.0.0 + "@types/react": ^18.0.0 || ^19.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@radix-ui/number@1.1.2': - resolution: {integrity: sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==} + "@radix-ui/number@1.1.2": + resolution: + { + integrity: sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==, + } - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + "@radix-ui/primitive@1.1.3": + resolution: + { + integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, + } - '@radix-ui/primitive@1.1.5': - resolution: {integrity: sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==} + "@radix-ui/primitive@1.1.5": + resolution: + { + integrity: sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==, + } - '@radix-ui/react-accessible-icon@1.1.11': - resolution: {integrity: sha512-HQDOFTKwSnmUij6l54wYJJtxTAnxI71+YJLOrjm2ladFB8HAV5Jt7hwaZPhWTGBkYoW4+ZAOfNZrLDh/qvxSYA==} + "@radix-ui/react-accessible-icon@1.1.11": + resolution: + { + integrity: sha512-HQDOFTKwSnmUij6l54wYJJtxTAnxI71+YJLOrjm2ladFB8HAV5Jt7hwaZPhWTGBkYoW4+ZAOfNZrLDh/qvxSYA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-accordion@1.2.16': - resolution: {integrity: sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==} + "@radix-ui/react-accordion@1.2.16": + resolution: + { + integrity: sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-alert-dialog@1.1.19': - resolution: {integrity: sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==} + "@radix-ui/react-alert-dialog@1.1.19": + resolution: + { + integrity: sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-arrow@1.1.11': - resolution: {integrity: sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==} + "@radix-ui/react-arrow@1.1.11": + resolution: + { + integrity: sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-aspect-ratio@1.1.11': - resolution: {integrity: sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==} + "@radix-ui/react-aspect-ratio@1.1.11": + resolution: + { + integrity: sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-avatar@1.2.2': - resolution: {integrity: sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==} + "@radix-ui/react-avatar@1.2.2": + resolution: + { + integrity: sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-checkbox@1.3.7': - resolution: {integrity: sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==} + "@radix-ui/react-checkbox@1.3.7": + resolution: + { + integrity: sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collapsible@1.1.16': - resolution: {integrity: sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==} + "@radix-ui/react-collapsible@1.1.16": + resolution: + { + integrity: sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collection@1.1.12': - resolution: {integrity: sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==} + "@radix-ui/react-collection@1.1.12": + resolution: + { + integrity: sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + "@radix-ui/react-compose-refs@1.1.2": + resolution: + { + integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-compose-refs@1.1.3': - resolution: {integrity: sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==} + "@radix-ui/react-compose-refs@1.1.3": + resolution: + { + integrity: sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-context-menu@2.3.3': - resolution: {integrity: sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==} + "@radix-ui/react-context-menu@2.3.3": + resolution: + { + integrity: sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-context@1.2.0': - resolution: {integrity: sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==} + "@radix-ui/react-context@1.2.0": + resolution: + { + integrity: sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-dialog@1.1.19': - resolution: {integrity: sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==} + "@radix-ui/react-dialog@1.1.19": + resolution: + { + integrity: sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-direction@1.1.2': - resolution: {integrity: sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==} + "@radix-ui/react-direction@1.1.2": + resolution: + { + integrity: sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-dismissable-layer@1.1.15': - resolution: {integrity: sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==} + "@radix-ui/react-dismissable-layer@1.1.15": + resolution: + { + integrity: sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-dropdown-menu@2.1.20': - resolution: {integrity: sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==} + "@radix-ui/react-dropdown-menu@2.1.20": + resolution: + { + integrity: sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-focus-guards@1.1.4': - resolution: {integrity: sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==} + "@radix-ui/react-focus-guards@1.1.4": + resolution: + { + integrity: sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-focus-scope@1.1.12': - resolution: {integrity: sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==} + "@radix-ui/react-focus-scope@1.1.12": + resolution: + { + integrity: sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-form@0.1.12': - resolution: {integrity: sha512-JTX94E4LDL91rzLg7X0mHPdxr0A8JEdVwZEmeOwZJSMDHCGW5DFtSlTSJozUyUs807IQmnvbfzKZFVCK5DmkqQ==} + "@radix-ui/react-form@0.1.12": + resolution: + { + integrity: sha512-JTX94E4LDL91rzLg7X0mHPdxr0A8JEdVwZEmeOwZJSMDHCGW5DFtSlTSJozUyUs807IQmnvbfzKZFVCK5DmkqQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-hover-card@1.1.19': - resolution: {integrity: sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==} + "@radix-ui/react-hover-card@1.1.19": + resolution: + { + integrity: sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-id@1.1.2': - resolution: {integrity: sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==} + "@radix-ui/react-id@1.1.2": + resolution: + { + integrity: sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-label@2.1.11': - resolution: {integrity: sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==} + "@radix-ui/react-label@2.1.11": + resolution: + { + integrity: sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-menu@2.1.20': - resolution: {integrity: sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==} + "@radix-ui/react-menu@2.1.20": + resolution: + { + integrity: sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-menubar@1.1.20': - resolution: {integrity: sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==} + "@radix-ui/react-menubar@1.1.20": + resolution: + { + integrity: sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-navigation-menu@1.2.18': - resolution: {integrity: sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==} + "@radix-ui/react-navigation-menu@1.2.18": + resolution: + { + integrity: sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-one-time-password-field@0.1.12': - resolution: {integrity: sha512-nQLu5OAcORDQp1EHAv6k3mJGV1hjMTw2NTGVAsGE1g/mWeNqAd1R5jyaAs3U+A8ZD/W8XNPY2yKT0ZdQnqo3NA==} + "@radix-ui/react-one-time-password-field@0.1.12": + resolution: + { + integrity: sha512-nQLu5OAcORDQp1EHAv6k3mJGV1hjMTw2NTGVAsGE1g/mWeNqAd1R5jyaAs3U+A8ZD/W8XNPY2yKT0ZdQnqo3NA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-password-toggle-field@0.1.7': - resolution: {integrity: sha512-gB1Mr8vzdv1XzDjrtJTXmL0JORRs1B4g7ngUs0F+H2VvMOwXTZMTmLCl0wZZ3m7ylX8TssI7NCvgiSHmLuTm/A==} + "@radix-ui/react-password-toggle-field@0.1.7": + resolution: + { + integrity: sha512-gB1Mr8vzdv1XzDjrtJTXmL0JORRs1B4g7ngUs0F+H2VvMOwXTZMTmLCl0wZZ3m7ylX8TssI7NCvgiSHmLuTm/A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popover@1.1.19': - resolution: {integrity: sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==} + "@radix-ui/react-popover@1.1.19": + resolution: + { + integrity: sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popper@1.3.3': - resolution: {integrity: sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==} + "@radix-ui/react-popper@1.3.3": + resolution: + { + integrity: sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-portal@1.1.13': - resolution: {integrity: sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==} + "@radix-ui/react-portal@1.1.13": + resolution: + { + integrity: sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-presence@1.1.7': - resolution: {integrity: sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==} + "@radix-ui/react-presence@1.1.7": + resolution: + { + integrity: sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + "@radix-ui/react-primitive@2.1.3": + resolution: + { + integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-primitive@2.1.7': - resolution: {integrity: sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==} + "@radix-ui/react-primitive@2.1.7": + resolution: + { + integrity: sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-progress@1.1.12': - resolution: {integrity: sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==} + "@radix-ui/react-progress@1.1.12": + resolution: + { + integrity: sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-radio-group@1.4.3': - resolution: {integrity: sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==} + "@radix-ui/react-radio-group@1.4.3": + resolution: + { + integrity: sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-roving-focus@1.1.15': - resolution: {integrity: sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==} + "@radix-ui/react-roving-focus@1.1.15": + resolution: + { + integrity: sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-scroll-area@1.2.14': - resolution: {integrity: sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==} + "@radix-ui/react-scroll-area@1.2.14": + resolution: + { + integrity: sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-select@2.3.3': - resolution: {integrity: sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==} + "@radix-ui/react-select@2.3.3": + resolution: + { + integrity: sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-separator@1.1.11': - resolution: {integrity: sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==} + "@radix-ui/react-separator@1.1.11": + resolution: + { + integrity: sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-slider@1.4.3': - resolution: {integrity: sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==} + "@radix-ui/react-slider@1.4.3": + resolution: + { + integrity: sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + "@radix-ui/react-slot@1.2.3": + resolution: + { + integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-slot@1.3.0': - resolution: {integrity: sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==} + "@radix-ui/react-slot@1.3.0": + resolution: + { + integrity: sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-switch@1.3.3': - resolution: {integrity: sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==} + "@radix-ui/react-switch@1.3.3": + resolution: + { + integrity: sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tabs@1.1.17': - resolution: {integrity: sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==} + "@radix-ui/react-tabs@1.1.17": + resolution: + { + integrity: sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-toast@1.2.19': - resolution: {integrity: sha512-SxfVZfVOibWKWdkf0Xx1awW2d09fQu4V4PXDY1j5hi4MVf7MWdJZqTBJMa1KWtOr1S6GGtCk02nniZ0Iia+dHw==} + "@radix-ui/react-toast@1.2.19": + resolution: + { + integrity: sha512-SxfVZfVOibWKWdkf0Xx1awW2d09fQu4V4PXDY1j5hi4MVf7MWdJZqTBJMa1KWtOr1S6GGtCk02nniZ0Iia+dHw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-toggle-group@1.1.15': - resolution: {integrity: sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==} + "@radix-ui/react-toggle-group@1.1.15": + resolution: + { + integrity: sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-toggle@1.1.10': - resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} + "@radix-ui/react-toggle@1.1.10": + resolution: + { + integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-toggle@1.1.14': - resolution: {integrity: sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==} + "@radix-ui/react-toggle@1.1.14": + resolution: + { + integrity: sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-toolbar@1.1.15': - resolution: {integrity: sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==} + "@radix-ui/react-toolbar@1.1.15": + resolution: + { + integrity: sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tooltip@1.2.12': - resolution: {integrity: sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==} + "@radix-ui/react-tooltip@1.2.12": + resolution: + { + integrity: sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-use-callback-ref@1.1.2': - resolution: {integrity: sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==} + "@radix-ui/react-use-callback-ref@1.1.2": + resolution: + { + integrity: sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + "@radix-ui/react-use-controllable-state@1.2.2": + resolution: + { + integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-controllable-state@1.2.3': - resolution: {integrity: sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==} + "@radix-ui/react-use-controllable-state@1.2.3": + resolution: + { + integrity: sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + "@radix-ui/react-use-effect-event@0.0.2": + resolution: + { + integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-effect-event@0.0.3': - resolution: {integrity: sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==} + "@radix-ui/react-use-effect-event@0.0.3": + resolution: + { + integrity: sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-escape-keydown@1.1.3': - resolution: {integrity: sha512-3wEkMiPHXha/2VadZ68rYBcmYnPINVGl4Y3gtcM7fKRjANk0OscK+cdqBgUWdozb7YJxsh0vefM7vgAMHXOjqg==} + "@radix-ui/react-use-escape-keydown@1.1.3": + resolution: + { + integrity: sha512-3wEkMiPHXha/2VadZ68rYBcmYnPINVGl4Y3gtcM7fKRjANk0OscK+cdqBgUWdozb7YJxsh0vefM7vgAMHXOjqg==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-is-hydrated@0.1.1': - resolution: {integrity: sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==} + "@radix-ui/react-use-is-hydrated@0.1.1": + resolution: + { + integrity: sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + "@radix-ui/react-use-layout-effect@1.1.1": + resolution: + { + integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-layout-effect@1.1.2': - resolution: {integrity: sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==} + "@radix-ui/react-use-layout-effect@1.1.2": + resolution: + { + integrity: sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-previous@1.1.2': - resolution: {integrity: sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==} + "@radix-ui/react-use-previous@1.1.2": + resolution: + { + integrity: sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-rect@1.1.2': - resolution: {integrity: sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==} + "@radix-ui/react-use-rect@1.1.2": + resolution: + { + integrity: sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-size@1.1.2': - resolution: {integrity: sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==} + "@radix-ui/react-use-size@1.1.2": + resolution: + { + integrity: sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==, + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-visually-hidden@1.2.7': - resolution: {integrity: sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==} + "@radix-ui/react-visually-hidden@1.2.7": + resolution: + { + integrity: sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/rect@1.1.2': - resolution: {integrity: sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==} + "@radix-ui/rect@1.1.2": + resolution: + { + integrity: sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==, + } - '@rollup/rollup-android-arm-eabi@4.62.2': - resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} + "@rollup/rollup-android-arm-eabi@4.62.2": + resolution: + { + integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==, + } cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.62.2': - resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} + "@rollup/rollup-android-arm64@4.62.2": + resolution: + { + integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==, + } cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.62.2': - resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} + "@rollup/rollup-darwin-arm64@4.62.2": + resolution: + { + integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==, + } cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.62.2': - resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} + "@rollup/rollup-darwin-x64@4.62.2": + resolution: + { + integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==, + } cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.62.2': - resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} + "@rollup/rollup-freebsd-arm64@4.62.2": + resolution: + { + integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==, + } cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.62.2': - resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} + "@rollup/rollup-freebsd-x64@4.62.2": + resolution: + { + integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==, + } cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': - resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} + "@rollup/rollup-linux-arm-gnueabihf@4.62.2": + resolution: + { + integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==, + } cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.62.2': - resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} + "@rollup/rollup-linux-arm-musleabihf@4.62.2": + resolution: + { + integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==, + } cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.62.2': - resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} + "@rollup/rollup-linux-arm64-gnu@4.62.2": + resolution: + { + integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==, + } cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.62.2': - resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} + "@rollup/rollup-linux-arm64-musl@4.62.2": + resolution: + { + integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==, + } cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.62.2': - resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} + "@rollup/rollup-linux-loong64-gnu@4.62.2": + resolution: + { + integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==, + } cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.62.2': - resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} + "@rollup/rollup-linux-loong64-musl@4.62.2": + resolution: + { + integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==, + } cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.62.2': - resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} + "@rollup/rollup-linux-ppc64-gnu@4.62.2": + resolution: + { + integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==, + } cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.62.2': - resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} + "@rollup/rollup-linux-ppc64-musl@4.62.2": + resolution: + { + integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==, + } cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.62.2': - resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} + "@rollup/rollup-linux-riscv64-gnu@4.62.2": + resolution: + { + integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==, + } cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.62.2': - resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} + "@rollup/rollup-linux-riscv64-musl@4.62.2": + resolution: + { + integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==, + } cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.62.2': - resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} + "@rollup/rollup-linux-s390x-gnu@4.62.2": + resolution: + { + integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==, + } cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.62.2': - resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} + "@rollup/rollup-linux-x64-gnu@4.62.2": + resolution: + { + integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==, + } cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.62.2': - resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} + "@rollup/rollup-linux-x64-musl@4.62.2": + resolution: + { + integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==, + } cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.62.2': - resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} + "@rollup/rollup-openbsd-x64@4.62.2": + resolution: + { + integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==, + } cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.62.2': - resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} + "@rollup/rollup-openharmony-arm64@4.62.2": + resolution: + { + integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==, + } cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.62.2': - resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} + "@rollup/rollup-win32-arm64-msvc@4.62.2": + resolution: + { + integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==, + } cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.62.2': - resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} + "@rollup/rollup-win32-ia32-msvc@4.62.2": + resolution: + { + integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==, + } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.62.2': - resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} + "@rollup/rollup-win32-x64-gnu@4.62.2": + resolution: + { + integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==, + } cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.62.2': - resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} + "@rollup/rollup-win32-x64-msvc@4.62.2": + resolution: + { + integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==, + } cpu: [x64] os: [win32] - '@schummar/icu-type-parser@1.21.5': - resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} + "@schummar/icu-type-parser@1.21.5": + resolution: + { + integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==, + } - '@stablelib/base64@1.0.1': - resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} + "@stablelib/base64@1.0.1": + resolution: + { + integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==, + } - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + "@standard-schema/spec@1.1.0": + resolution: + { + integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, + } - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + "@standard-schema/utils@0.3.0": + resolution: + { + integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, + } - '@swc/core-darwin-arm64@1.15.43': - resolution: {integrity: sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==} - engines: {node: '>=10'} + "@swc/core-darwin-arm64@1.15.43": + resolution: + { + integrity: sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==, + } + engines: { node: ">=10" } cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.43': - resolution: {integrity: sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==} - engines: {node: '>=10'} + "@swc/core-darwin-x64@1.15.43": + resolution: + { + integrity: sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==, + } + engines: { node: ">=10" } cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.43': - resolution: {integrity: sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==} - engines: {node: '>=10'} + "@swc/core-linux-arm-gnueabihf@1.15.43": + resolution: + { + integrity: sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==, + } + engines: { node: ">=10" } cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.43': - resolution: {integrity: sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==} - engines: {node: '>=10'} + "@swc/core-linux-arm64-gnu@1.15.43": + resolution: + { + integrity: sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==, + } + engines: { node: ">=10" } cpu: [arm64] os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.43': - resolution: {integrity: sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==} - engines: {node: '>=10'} + "@swc/core-linux-arm64-musl@1.15.43": + resolution: + { + integrity: sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==, + } + engines: { node: ">=10" } cpu: [arm64] os: [linux] libc: [musl] - '@swc/core-linux-ppc64-gnu@1.15.43': - resolution: {integrity: sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==} - engines: {node: '>=10'} + "@swc/core-linux-ppc64-gnu@1.15.43": + resolution: + { + integrity: sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==, + } + engines: { node: ">=10" } cpu: [ppc64] os: [linux] libc: [glibc] - '@swc/core-linux-s390x-gnu@1.15.43': - resolution: {integrity: sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==} - engines: {node: '>=10'} + "@swc/core-linux-s390x-gnu@1.15.43": + resolution: + { + integrity: sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==, + } + engines: { node: ">=10" } cpu: [s390x] os: [linux] libc: [glibc] - '@swc/core-linux-x64-gnu@1.15.43': - resolution: {integrity: sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==} - engines: {node: '>=10'} + "@swc/core-linux-x64-gnu@1.15.43": + resolution: + { + integrity: sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==, + } + engines: { node: ">=10" } cpu: [x64] os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.43': - resolution: {integrity: sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==} - engines: {node: '>=10'} + "@swc/core-linux-x64-musl@1.15.43": + resolution: + { + integrity: sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==, + } + engines: { node: ">=10" } cpu: [x64] os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.43': - resolution: {integrity: sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==} - engines: {node: '>=10'} + "@swc/core-win32-arm64-msvc@1.15.43": + resolution: + { + integrity: sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==, + } + engines: { node: ">=10" } cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.43': - resolution: {integrity: sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==} - engines: {node: '>=10'} + "@swc/core-win32-ia32-msvc@1.15.43": + resolution: + { + integrity: sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==, + } + engines: { node: ">=10" } cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.43': - resolution: {integrity: sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==} - engines: {node: '>=10'} + "@swc/core-win32-x64-msvc@1.15.43": + resolution: + { + integrity: sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==, + } + engines: { node: ">=10" } cpu: [x64] os: [win32] - '@swc/core@1.15.43': - resolution: {integrity: sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==} - engines: {node: '>=10'} + "@swc/core@1.15.43": + resolution: + { + integrity: sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==, + } + engines: { node: ">=10" } peerDependencies: - '@swc/helpers': '>=0.5.17' + "@swc/helpers": ">=0.5.17" peerDependenciesMeta: - '@swc/helpers': + "@swc/helpers": optional: true - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + "@swc/counter@0.1.3": + resolution: + { + integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, + } - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + "@swc/helpers@0.5.15": + resolution: + { + integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, + } - '@swc/types@0.1.27': - resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + "@swc/types@0.1.27": + resolution: + { + integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==, + } - '@tailwindcss/forms@0.5.11': - resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} + "@tailwindcss/forms@0.5.11": + resolution: + { + integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==, + } peerDependencies: - tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' + tailwindcss: ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" - '@tailwindcss/node@4.3.2': - resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==} + "@tailwindcss/node@4.3.2": + resolution: + { + integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==, + } - '@tailwindcss/oxide-android-arm64@4.3.2': - resolution: {integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-android-arm64@4.3.2": + resolution: + { + integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==, + } + engines: { node: ">= 20" } cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.3.2': - resolution: {integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-darwin-arm64@4.3.2": + resolution: + { + integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==, + } + engines: { node: ">= 20" } cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.3.2': - resolution: {integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-darwin-x64@4.3.2": + resolution: + { + integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==, + } + engines: { node: ">= 20" } cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.3.2': - resolution: {integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-freebsd-x64@4.3.2": + resolution: + { + integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==, + } + engines: { node: ">= 20" } cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': - resolution: {integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2": + resolution: + { + integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==, + } + engines: { node: ">= 20" } cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': - resolution: {integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-linux-arm64-gnu@4.3.2": + resolution: + { + integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==, + } + engines: { node: ">= 20" } cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.3.2': - resolution: {integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-linux-arm64-musl@4.3.2": + resolution: + { + integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==, + } + engines: { node: ">= 20" } cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.3.2': - resolution: {integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-linux-x64-gnu@4.3.2": + resolution: + { + integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==, + } + engines: { node: ">= 20" } cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.3.2': - resolution: {integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-linux-x64-musl@4.3.2": + resolution: + { + integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==, + } + engines: { node: ">= 20" } cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.3.2': - resolution: {integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==} - engines: {node: '>=14.0.0'} + "@tailwindcss/oxide-wasm32-wasi@4.3.2": + resolution: + { + integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==, + } + engines: { node: ">=14.0.0" } cpu: [wasm32] bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': - resolution: {integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-win32-arm64-msvc@4.3.2": + resolution: + { + integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==, + } + engines: { node: ">= 20" } cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.3.2': - resolution: {integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==} - engines: {node: '>= 20'} + "@tailwindcss/oxide-win32-x64-msvc@4.3.2": + resolution: + { + integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==, + } + engines: { node: ">= 20" } cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.3.2': - resolution: {integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==} - engines: {node: '>= 20'} + "@tailwindcss/oxide@4.3.2": + resolution: + { + integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==, + } + engines: { node: ">= 20" } - '@tailwindcss/postcss@4.3.2': - resolution: {integrity: sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==} + "@tailwindcss/postcss@4.3.2": + resolution: + { + integrity: sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==, + } - '@tailwindcss/typography@0.5.20': - resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} + "@tailwindcss/typography@0.5.20": + resolution: + { + integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==, + } peerDependencies: - tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' + tailwindcss: ">=3.0.0 || >=4.0.0 || insiders" - '@tanstack/react-virtual@3.14.5': - resolution: {integrity: sha512-4EKRXh7zBLkbKbFmG3AUVkircuHd+7OdT1pocJSepxtfBd3qnrJgJ5rtPkRYyo9fmyVb2+pI2xPy5oYvMLQy6A==} + "@tanstack/react-virtual@3.14.5": + resolution: + { + integrity: sha512-4EKRXh7zBLkbKbFmG3AUVkircuHd+7OdT1pocJSepxtfBd3qnrJgJ5rtPkRYyo9fmyVb2+pI2xPy5oYvMLQy6A==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.17.3': - resolution: {integrity: sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw==} + "@tanstack/virtual-core@3.17.3": + resolution: + { + integrity: sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw==, + } - '@tokenizer/inflate@0.4.1': - resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} - engines: {node: '>=18'} + "@tokenizer/inflate@0.4.1": + resolution: + { + integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==, + } + engines: { node: ">=18" } - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + "@tokenizer/token@0.3.0": + resolution: + { + integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==, + } - '@types/esrecurse@4.3.1': - resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + "@types/esrecurse@4.3.1": + resolution: + { + integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==, + } - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + "@types/estree@1.0.9": + resolution: + { + integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, + } - '@types/geojson@7946.0.16': - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + "@types/geojson@7946.0.16": + resolution: + { + integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==, + } - '@types/jpeg-js@0.3.7': - resolution: {integrity: sha512-v3FEzt2TXOOIgvwwOqMoeEhqYqUoK4wcV/K7JbKj8CzwDE9sSuor8EZpSJKaOnuEtyO0W+Nd2uKk8MbtusYpEg==} + "@types/jpeg-js@0.3.7": + resolution: + { + integrity: sha512-v3FEzt2TXOOIgvwwOqMoeEhqYqUoK4wcV/K7JbKj8CzwDE9sSuor8EZpSJKaOnuEtyO0W+Nd2uKk8MbtusYpEg==, + } deprecated: This is a stub types definition. jpeg-js provides its own type definitions, so you do not need this installed. - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } - '@types/node@22.20.0': - resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} + "@types/node@22.20.0": + resolution: + { + integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==, + } - '@types/node@24.13.2': - resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} + "@types/node@24.13.2": + resolution: + { + integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==, + } - '@types/nodemailer@6.4.24': - resolution: {integrity: sha512-Ww4u0rT9wQNXh4JiQaIwx3QWdcOFXzOjQA2zc+jtFYNmQiT4mIUqcDin51bDFdkzKubFnQCZNK7FIHlPKQ/q9w==} + "@types/nodemailer@6.4.24": + resolution: + { + integrity: sha512-Ww4u0rT9wQNXh4JiQaIwx3QWdcOFXzOjQA2zc+jtFYNmQiT4mIUqcDin51bDFdkzKubFnQCZNK7FIHlPKQ/q9w==, + } - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + "@types/react-dom@19.2.3": + resolution: + { + integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, + } peerDependencies: - '@types/react': ^19.2.0 + "@types/react": ^19.2.0 - '@types/react@19.2.17': - resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + "@types/react@19.2.17": + resolution: + { + integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==, + } - '@types/sanitize-html@2.16.1': - resolution: {integrity: sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==} + "@types/sanitize-html@2.16.1": + resolution: + { + integrity: sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==, + } - '@typescript-eslint/eslint-plugin@8.63.0': - resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/eslint-plugin@8.63.0": + resolution: + { + integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - '@typescript-eslint/parser': ^8.63.0 + "@typescript-eslint/parser": ^8.63.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/parser@8.63.0': - resolution: {integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/parser@8.63.0": + resolution: + { + integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/project-service@8.63.0': - resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/project-service@8.63.0": + resolution: + { + integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/scope-manager@8.63.0': - resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/scope-manager@8.63.0": + resolution: + { + integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/tsconfig-utils@8.63.0': - resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/tsconfig-utils@8.63.0": + resolution: + { + integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/type-utils@8.63.0': - resolution: {integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/type-utils@8.63.0": + resolution: + { + integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/types@8.63.0': - resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/types@8.63.0": + resolution: + { + integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/typescript-estree@8.63.0': - resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/typescript-estree@8.63.0": + resolution: + { + integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/utils@8.63.0': - resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/utils@8.63.0": + resolution: + { + integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" - '@typescript-eslint/visitor-keys@8.63.0': - resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/visitor-keys@8.63.0": + resolution: + { + integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + "@vitest/expect@2.1.9": + resolution: + { + integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==, + } - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + "@vitest/mocker@2.1.9": + resolution: + { + integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==, + } peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -2684,391 +3840,643 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + "@vitest/pretty-format@2.1.9": + resolution: + { + integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==, + } - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + "@vitest/runner@2.1.9": + resolution: + { + integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==, + } - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + "@vitest/snapshot@2.1.9": + resolution: + { + integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==, + } - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + "@vitest/spy@2.1.9": + resolution: + { + integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==, + } - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + "@vitest/utils@2.1.9": + resolution: + { + integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==, + } acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.17.0: - resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==, + } + engines: { node: ">=0.4.0" } hasBin: true ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + resolution: + { + integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==, + } ajv@8.20.0: - resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + resolution: + { + integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==, + } aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, + } + engines: { node: ">=10" } aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, + } + engines: { node: ">= 0.4" } array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, + } + engines: { node: ">= 0.4" } array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, + } + engines: { node: ">= 0.4" } array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, + } + engines: { node: ">= 0.4" } array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, + } + engines: { node: ">= 0.4" } arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, + } + engines: { node: ">= 0.4" } assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + } + engines: { node: ">=12" } ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + resolution: + { + integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, + } async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, + } + engines: { node: ">= 0.4" } available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: ">= 0.4" } aws-ssl-profiles@1.1.2: - resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} - engines: {node: '>= 6.0.0'} + resolution: + { + integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==, + } + engines: { node: ">= 6.0.0" } axe-core@4.12.1: - resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==, + } + engines: { node: ">=4" } axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, + } + engines: { node: ">= 0.4" } balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} + resolution: + { + integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, + } + engines: { node: 18 || 20 || >=22 } baseline-browser-mapping@2.10.40: - resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==, + } + engines: { node: ">=6.0.0" } hasBin: true baseline-browser-mapping@2.10.42: - resolution: {integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==, + } + engines: { node: ">=6.0.0" } hasBin: true bcryptjs@3.0.3: - resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==} + resolution: + { + integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==, + } hasBin: true better-result@2.9.2: - resolution: {integrity: sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==} + resolution: + { + integrity: sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==, + } brace-expansion@1.1.16: - resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} + resolution: + { + integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==, + } brace-expansion@5.0.7: - resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} - engines: {node: 18 || 20 || >=22} + resolution: + { + integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==, + } + engines: { node: 18 || 20 || >=22 } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } browserslist@4.28.5: - resolution: {integrity: sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } c12@3.3.4: - resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} + resolution: + { + integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==, + } peerDependencies: - magicast: '*' + magicast: "*" peerDependenciesMeta: magicast: optional: true cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, + } + engines: { node: ">= 0.4" } call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==, + } + engines: { node: ">= 0.4" } call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, + } + engines: { node: ">= 0.4" } caniuse-lite@1.0.30001799: - resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + resolution: + { + integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==, + } caniuse-lite@1.0.30001803: - resolution: {integrity: sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==} + resolution: + { + integrity: sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==, + } chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==, + } + engines: { node: ">=18" } chart.js@4.5.1: - resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} - engines: {pnpm: '>=8'} + resolution: + { + integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==, + } + engines: { pnpm: ">=8" } check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} + resolution: + { + integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==, + } + engines: { node: ">= 16" } chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} + resolution: + { + integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==, + } + engines: { node: ">= 20.19.0" } class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + resolution: + { + integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, + } client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + } + engines: { node: ">=6" } cluster-key-slot@1.1.1: - resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==, + } + engines: { node: ">=0.10.0" } cmdk@1.1.1: - resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} + resolution: + { + integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==, + } peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } confbox@0.2.4: - resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + resolution: + { + integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==, + } content-type@2.0.0: - resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==, + } + engines: { node: ">=18" } convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + resolution: + { + integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, + } croner@10.0.1: - resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} - engines: {node: '>=18.0'} + resolution: + { + integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==, + } + engines: { node: ">=18.0" } cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: ">= 8" } cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, + } + engines: { node: ">=4" } hasBin: true csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + resolution: + { + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + } damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + resolution: + { + integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, + } data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, + } + engines: { node: ">= 0.4" } data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, + } + engines: { node: ">= 0.4" } data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, + } + engines: { node: ">= 0.4" } dayjs@1.11.21: - resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + resolution: + { + integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==, + } debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, + } + engines: { node: ">=6" } deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } deepmerge-ts@7.1.5: - resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==, + } + engines: { node: ">=16.0.0" } deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + } + engines: { node: ">=0.10.0" } define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: ">= 0.4" } defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + resolution: + { + integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==, + } denque@2.1.0: - resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==, + } + engines: { node: ">=0.10" } destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + resolution: + { + integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==, + } detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, + } dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + resolution: + { + integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, + } domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + resolution: + { + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, + } domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, + } + engines: { node: ">= 4" } domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + resolution: + { + integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==, + } dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==, + } + engines: { node: ">=12" } dotenv@17.4.2: - resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==, + } + engines: { node: ">=12" } drizzle-kit@0.30.6: - resolution: {integrity: sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==} + resolution: + { + integrity: sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==, + } hasBin: true drizzle-orm@0.38.4: - resolution: {integrity: sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q==} + resolution: + { + integrity: sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q==, + } peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/react': '>=18' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=14.0.0' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - react: '>=18' - sql.js: '>=1' - sqlite3: '>=5' + "@aws-sdk/client-rds-data": ">=3" + "@cloudflare/workers-types": ">=4" + "@electric-sql/pglite": ">=0.2.0" + "@libsql/client": ">=0.10.0" + "@libsql/client-wasm": ">=0.10.0" + "@neondatabase/serverless": ">=0.10.0" + "@op-engineering/op-sqlite": ">=2" + "@opentelemetry/api": ^1.4.1 + "@planetscale/database": ">=1" + "@prisma/client": "*" + "@tidbcloud/serverless": "*" + "@types/better-sqlite3": "*" + "@types/pg": "*" + "@types/react": ">=18" + "@types/sql.js": "*" + "@vercel/postgres": ">=0.8.0" + "@xata.io/client": "*" + better-sqlite3: ">=7" + bun-types: "*" + expo-sqlite: ">=14.0.0" + knex: "*" + kysely: "*" + mysql2: ">=2" + pg: ">=8" + postgres: ">=3" + prisma: "*" + react: ">=18" + sql.js: ">=1" + sqlite3: ">=5" peerDependenciesMeta: - '@aws-sdk/client-rds-data': + "@aws-sdk/client-rds-data": optional: true - '@cloudflare/workers-types': + "@cloudflare/workers-types": optional: true - '@electric-sql/pglite': + "@electric-sql/pglite": optional: true - '@libsql/client': + "@libsql/client": optional: true - '@libsql/client-wasm': + "@libsql/client-wasm": optional: true - '@neondatabase/serverless': + "@neondatabase/serverless": optional: true - '@op-engineering/op-sqlite': + "@op-engineering/op-sqlite": optional: true - '@opentelemetry/api': + "@opentelemetry/api": optional: true - '@planetscale/database': + "@planetscale/database": optional: true - '@prisma/client': + "@prisma/client": optional: true - '@tidbcloud/serverless': + "@tidbcloud/serverless": optional: true - '@types/better-sqlite3': + "@types/better-sqlite3": optional: true - '@types/pg': + "@types/pg": optional: true - '@types/react': + "@types/react": optional: true - '@types/sql.js': + "@types/sql.js": optional: true - '@vercel/postgres': + "@vercel/postgres": optional: true - '@xata.io/client': + "@xata.io/client": optional: true better-sqlite3: optional: true @@ -3096,209 +4504,359 @@ packages: optional: true dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, + } + engines: { node: ">= 0.4" } effect@3.20.0: - resolution: {integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==} + resolution: + { + integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==, + } electron-to-chromium@1.5.389: - resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} + resolution: + { + integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==, + } emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==, + } + engines: { node: ">=14" } enhanced-resolve@5.21.6: - resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==, + } + engines: { node: ">=10.13.0" } entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: ">=0.12" } entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} + resolution: + { + integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, + } + engines: { node: ">=0.12" } env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } es-abstract-get@1.0.0: - resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==, + } + engines: { node: ">= 0.4" } es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==, + } + engines: { node: ">= 0.4" } es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + } + engines: { node: ">= 0.4" } es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: ">= 0.4" } es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + resolution: + { + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, + } es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==, + } + engines: { node: ">= 0.4" } es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, + } + engines: { node: ">= 0.4" } es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, + } + engines: { node: ">= 0.4" } es-to-primitive@1.3.4: - resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==, + } + engines: { node: ">= 0.4" } esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + resolution: + { + integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==, + } peerDependencies: - esbuild: '>=0.12 <1' + esbuild: ">=0.12 <1" esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, + } + engines: { node: ">=12" } hasBin: true esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==, + } + engines: { node: ">=12" } hasBin: true esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, + } + engines: { node: ">=12" } hasBin: true esbuild@0.28.1: - resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==, + } + engines: { node: ">=18" } hasBin: true escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + resolution: + { + integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, + } hasBin: true peerDependencies: - eslint: '>=7.0.0' + eslint: ">=7.0.0" eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, + } + engines: { node: ">=4.0" } peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-react-hooks@7.1.1: - resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==, + } + engines: { node: ">=18" } peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 eslint-plugin-security@4.0.1: - resolution: {integrity: sha512-/lZCkOxPOWaf1jXAqgICrS8St3BMBccIPvhOSUYuV6VCr1o5nFVG998FnTLt6w2Nxb8Uo0nM8fzmnhp+GY/aEg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-/lZCkOxPOWaf1jXAqgICrS8St3BMBccIPvhOSUYuV6VCr1o5nFVG998FnTLt6w2Nxb8Uo0nM8fzmnhp+GY/aEg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint-scope@9.1.2: - resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + resolution: + { + integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + resolution: + { + integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } eslint@10.6.0: - resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + resolution: + { + integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } hasBin: true peerDependencies: - jiti: '*' + jiti: "*" peerDependenciesMeta: jiti: optional: true espree@11.2.0: - resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + resolution: + { + integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, + } + engines: { node: ">=0.10" } esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: ">=4.0" } estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } expect-type@1.4.0: - resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==, + } + engines: { node: ">=12.0.0" } exsolve@1.1.0: - resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} + resolution: + { + integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==, + } fast-check@3.23.2: - resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==, + } + engines: { node: ">=8.0.0" } fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, + } + engines: { node: ">=8.6.0" } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } fast-sha256@1.3.0: - resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + resolution: + { + integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==, + } fast-uri@3.1.3: - resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + resolution: + { + integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==, + } fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + resolution: + { + integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, + } fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + } + engines: { node: ">=12.0.0" } peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -3306,605 +4864,1040 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: ">=16.0.0" } file-type@21.3.4: - resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==, + } + engines: { node: ">=20" } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: ">=10" } flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: ">=16" } flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + resolution: + { + integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, + } for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, + } + engines: { node: ">= 0.4" } foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, + } + engines: { node: ">=14" } fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } function.prototype.name@1.2.0: - resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==, + } + engines: { node: ">= 0.4" } functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } gel@2.2.0: - resolution: {integrity: sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ==} - engines: {node: '>= 18.0.0'} + resolution: + { + integrity: sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ==, + } + engines: { node: ">= 18.0.0" } hasBin: true generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + resolution: + { + integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==, + } generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, + } + engines: { node: ">= 0.4" } gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: ">=6.9.0" } get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, + } + engines: { node: ">= 0.4" } get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, + } + engines: { node: ">=6" } get-port-please@3.2.0: - resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} + resolution: + { + integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==, + } get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, + } + engines: { node: ">= 0.4" } get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, + } + engines: { node: ">= 0.4" } get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + resolution: + { + integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==, + } giget@3.3.0: - resolution: {integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==} + resolution: + { + integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==, + } hasBin: true glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, + } + engines: { node: ">= 0.4" } gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + } + engines: { node: ">= 0.4" } graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } grammex@3.1.12: - resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} + resolution: + { + integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==, + } graphmatch@1.1.1: - resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} + resolution: + { + integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==, + } has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, + } + engines: { node: ">= 0.4" } has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, + } + engines: { node: ">= 0.4" } has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, + } + engines: { node: ">= 0.4" } has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: ">= 0.4" } hash-wasm@4.12.0: - resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==} + resolution: + { + integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==, + } hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==, + } + engines: { node: ">= 0.4" } hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + resolution: + { + integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==, + } hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + resolution: + { + integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==, + } hono@4.12.27: - resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} - engines: {node: '>=16.9.0'} + resolution: + { + integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==, + } + engines: { node: ">=16.9.0" } htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + resolution: + { + integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==, + } http-status-codes@2.3.0: - resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + resolution: + { + integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==, + } iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + } + engines: { node: ">=0.10.0" } iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==, + } + engines: { node: ">=0.10.0" } icu-minify@4.13.1: - resolution: {integrity: sha512-nFYW2im0WJ3RUVZwabd71J8QTZRtkK1xxZBY7klg7a6KS/os17LZSj9q1VhbRSnk3S8Mv2I7F1izr/aEJ6cUsw==} + resolution: + { + integrity: sha512-nFYW2im0WJ3RUVZwabd71J8QTZRtkK1xxZBY7klg7a6KS/os17LZSj9q1VhbRSnk3S8Mv2I7F1izr/aEJ6cUsw==, + } ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: ">= 4" } ignore@7.0.6: - resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==, + } + engines: { node: ">= 4" } immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + resolution: + { + integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, + } imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, + } + engines: { node: ">= 0.4" } intl-messageformat@11.2.9: - resolution: {integrity: sha512-cGzymZerpDhVXRKjKLgXKda9gI29TU2o88L7gwNMHp3WZVxA/0c5tX52udXbW9JklDApolvMXZG6Dhhdz5eirA==} + resolution: + { + integrity: sha512-cGzymZerpDhVXRKjKLgXKda9gI29TU2o88L7gwNMHp3WZVxA/0c5tX52udXbW9JklDApolvMXZG6Dhhdz5eirA==, + } ioredis@5.11.1: - resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==} - engines: {node: '>=12.22.0'} + resolution: + { + integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==, + } + engines: { node: ">=12.22.0" } is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, + } + engines: { node: ">= 0.4" } is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, + } + engines: { node: ">= 0.4" } is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, + } + engines: { node: ">= 0.4" } is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, + } + engines: { node: ">= 0.4" } is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, + } + engines: { node: ">= 0.4" } is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, + } + engines: { node: ">= 0.4" } is-document.all@1.0.0: - resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==, + } + engines: { node: ">= 0.4" } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, + } + engines: { node: ">= 0.4" } is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, + } + engines: { node: ">= 0.4" } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, + } + engines: { node: ">= 0.4" } is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, + } + engines: { node: ">= 0.4" } is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, + } + engines: { node: ">= 0.4" } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, + } + engines: { node: ">=0.10.0" } is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + resolution: + { + integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==, + } is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, + } + engines: { node: ">= 0.4" } is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, + } + engines: { node: ">= 0.4" } is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, + } + engines: { node: ">= 0.4" } is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, + } + engines: { node: ">= 0.4" } is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, + } + engines: { node: ">= 0.4" } is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, + } + engines: { node: ">= 0.4" } is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, + } + engines: { node: ">= 0.4" } is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, + } + engines: { node: ">= 0.4" } is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, + } + engines: { node: ">= 0.4" } isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + resolution: + { + integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, + } isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } isexe@3.1.5: - resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==, + } + engines: { node: ">=18" } jiti@2.7.0: - resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + resolution: + { + integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==, + } hasBin: true jose@6.2.3: - resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + resolution: + { + integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==, + } jpeg-js@0.4.4: - resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + resolution: + { + integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==, + } js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: ">=6" } hasBin: true json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + } json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: ">=6" } hasBin: true jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, + } + engines: { node: ">=4.0" } jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + resolution: + { + integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==, + } keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + resolution: + { + integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, + } language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, + } + engines: { node: ">=0.10" } launder@1.7.1: - resolution: {integrity: sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==} + resolution: + { + integrity: sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==, + } levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + resolution: + { + integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==, + } lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, + } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [android] lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, + } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, + } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, + } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [freebsd] lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, + } + engines: { node: ">= 12.0.0" } cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, + } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [linux] libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, + } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [linux] libc: [musl] lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, + } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [linux] libc: [glibc] lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, + } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [linux] libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, + } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, + } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [win32] lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, + } + engines: { node: ">= 12.0.0" } locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + resolution: + { + integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==, + } loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + resolution: + { + integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==, + } lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } lru.min@1.1.4: - resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} - engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + resolution: + { + integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==, + } + engines: { bun: ">=1.0.0", deno: ">=1.30.0", node: ">=8.0.0" } lucide-react@1.23.0: - resolution: {integrity: sha512-38BpJcD0JhFosxHApP/BYsBetLpQFRoTRzEzstM/XCc3jsAG7wqaY1lgVwxiUe3xqYE+lNxo2PkCmYwXWrwwIw==} + resolution: + { + integrity: sha512-38BpJcD0JhFosxHApP/BYsBetLpQFRoTRzEzstM/XCc3jsAG7wqaY1lgVwxiUe3xqYE+lNxo2PkCmYwXWrwwIw==, + } peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 lzma@2.3.2: - resolution: {integrity: sha512-DcfiawQ1avYbW+hsILhF38IKAlnguc/fjHrychs9hdxe4qLykvhT5VTGNs5YRWgaNePh7NTxGD4uv4gKsRomCQ==} + resolution: + { + integrity: sha512-DcfiawQ1avYbW+hsILhF38IKAlnguc/fjHrychs9hdxe4qLykvhT5VTGNs5YRWgaNePh7NTxGD4uv4gKsRomCQ==, + } hasBin: true magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } mariadb@3.4.5: - resolution: {integrity: sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==, + } + engines: { node: ">= 14" } math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + } + engines: { node: ">= 0.4" } media-typer@2.0.0: - resolution: {integrity: sha512-kOy3OxT2HH39N70UnKgu4NWDZjLOz8W/mfyvniHjRH/DrL3f2pOfvWQ4p60offbbtDAnXWp0v9LfMIqMec269Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-kOy3OxT2HH39N70UnKgu4NWDZjLOz8W/mfyvniHjRH/DrL3f2pOfvWQ4p60offbbtDAnXWp0v9LfMIqMec269Q==, + } + engines: { node: ">=18" } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } mini-svg-data-uri@1.4.4: - resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + resolution: + { + integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, + } hasBin: true minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} - engines: {node: 18 || 20 || >=22} + resolution: + { + integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==, + } + engines: { node: 18 || 20 || >=22 } minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + resolution: + { + integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, + } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } music-metadata@11.13.0: - resolution: {integrity: sha512-uXRaov9dfjSpQufXIU7sMxVZnh+FilCQv2mXn+K5EJ/decP3dTWrgvPYa5r6MtRbieNSCE708Da4J0u1UGfQIw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-uXRaov9dfjSpQufXIU7sMxVZnh+FilCQv2mXn+K5EJ/decP3dTWrgvPYa5r6MtRbieNSCE708Da4J0u1UGfQIw==, + } + engines: { node: ">=18" } mysql2@3.15.3: - resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} - engines: {node: '>= 8.0'} + resolution: + { + integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==, + } + engines: { node: ">= 8.0" } mysql2@3.22.5: - resolution: {integrity: sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==} - engines: {node: '>= 8.0'} + resolution: + { + integrity: sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==, + } + engines: { node: ">= 8.0" } peerDependencies: - '@types/node': '>= 8' + "@types/node": ">= 8" mysql2@3.22.6: - resolution: {integrity: sha512-fPKmeDGUzvFP7bMD5SASlJ5zIgvCC4hbanTmhbUlEmhyrY1hR4Hi3xLOWgTd3luYjLVifx6uGvMNJ2m/LlqEpg==} - engines: {node: '>= 8.0'} + resolution: + { + integrity: sha512-fPKmeDGUzvFP7bMD5SASlJ5zIgvCC4hbanTmhbUlEmhyrY1hR4Hi3xLOWgTd3luYjLVifx6uGvMNJ2m/LlqEpg==, + } + engines: { node: ">= 8.0" } peerDependencies: - '@types/node': '>= 8' + "@types/node": ">= 8" named-placeholders@1.1.6: - resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==, + } + engines: { node: ">=8.0.0" } nanoid@3.3.15: - resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, + } + engines: { node: ">= 0.6" } next-auth@5.0.0-beta.31: - resolution: {integrity: sha512-1OBgCKPzo+S7UWWMp3xgvGvIJ0OpV7B3vR4ZDRqD9a4Ch+OT6dakLXG9ivhtmIWVa71nTSXattOHyCg8sNi8/Q==} + resolution: + { + integrity: sha512-1OBgCKPzo+S7UWWMp3xgvGvIJ0OpV7B3vR4ZDRqD9a4Ch+OT6dakLXG9ivhtmIWVa71nTSXattOHyCg8sNi8/Q==, + } peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.2 + "@simplewebauthn/browser": ^9.0.1 + "@simplewebauthn/server": ^9.0.2 next: ^14.0.0-0 || ^15.0.0 || ^16.0.0 nodemailer: ^7.0.7 react: ^18.2.0 || ^19.0.0 peerDependenciesMeta: - '@simplewebauthn/browser': + "@simplewebauthn/browser": optional: true - '@simplewebauthn/server': + "@simplewebauthn/server": optional: true nodemailer: optional: true next-intl-swc-plugin-extractor@4.13.1: - resolution: {integrity: sha512-RhlH2DR1ViEXzcX7G3tDXAvzNrBL2Ph54Hq/q/9oP9eXQV/okh3UQpA/lx2k9U5Ck83CZOSgH0eFTNi5U+zyXw==} + resolution: + { + integrity: sha512-RhlH2DR1ViEXzcX7G3tDXAvzNrBL2Ph54Hq/q/9oP9eXQV/okh3UQpA/lx2k9U5Ck83CZOSgH0eFTNi5U+zyXw==, + } next-intl@4.13.1: - resolution: {integrity: sha512-aS8KTA+nNhSNJJBlIhxgvU135WzoObwzFwav4wTDti/Gmhxqe0fs/Q343igo8Z7HGqPB/xgmoagwySZAlHmIfA==} + resolution: + { + integrity: sha512-aS8KTA+nNhSNJJBlIhxgvU135WzoObwzFwav4wTDti/Gmhxqe0fs/Q343igo8Z7HGqPB/xgmoagwySZAlHmIfA==, + } peerDependencies: next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 - typescript: '*' + typescript: "*" peerDependenciesMeta: typescript: optional: true next@16.2.10: - resolution: {integrity: sha512-2som5AVXb3kE6Yjine3/mNbBayYF58eguBWIVVUdr1y/L426xyVEgYxgBG+1QC34P2x5E+tcDup6XkuOAX3dCA==} - engines: {node: '>=20.9.0'} + resolution: + { + integrity: sha512-2som5AVXb3kE6Yjine3/mNbBayYF58eguBWIVVUdr1y/L426xyVEgYxgBG+1QC34P2x5E+tcDup6XkuOAX3dCA==, + } + engines: { node: ">=20.9.0" } hasBin: true peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.51.1 - babel-plugin-react-compiler: '*' + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.51.1 + babel-plugin-react-compiler: "*" react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: - '@opentelemetry/api': + "@opentelemetry/api": optional: true - '@playwright/test': + "@playwright/test": optional: true babel-plugin-react-compiler: optional: true @@ -3912,152 +5905,269 @@ packages: optional: true node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + resolution: + { + integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==, + } node-releases@2.0.51: - resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==, + } + engines: { node: ">=18" } nodemailer@9.0.3: - resolution: {integrity: sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==, + } + engines: { node: ">=6.0.0" } oauth4webapi@3.8.6: - resolution: {integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==} + resolution: + { + integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==, + } object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, + } + engines: { node: ">= 0.4" } object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, + } + engines: { node: ">= 0.4" } object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, + } + engines: { node: ">= 0.4" } object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, + } + engines: { node: ">= 0.4" } ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + resolution: + { + integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==, + } optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: ">= 0.8.0" } otplib@12.0.1: - resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} + resolution: + { + integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==, + } own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, + } + engines: { node: ">= 0.4" } p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: ">=10" } pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + resolution: + { + integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, + } parse-srcset@1.0.2: - resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + resolution: + { + integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==, + } path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: ">=8" } path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + resolution: + { + integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, + } pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} + resolution: + { + integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==, + } + engines: { node: ">= 14.16" } perfect-debounce@2.1.0: - resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + resolution: + { + integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==, + } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, + } + engines: { node: ">=8.6" } picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, + } + engines: { node: ">=12" } pkg-types@2.3.1: - resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + resolution: + { + integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==, + } po-parser@2.1.1: - resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==} + resolution: + { + integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==, + } possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, + } + engines: { node: ">= 0.4" } postal-mime@2.7.4: - resolution: {integrity: sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==} + resolution: + { + integrity: sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==, + } postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, + } + engines: { node: ">=4" } postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==, + } + engines: { node: ^10 || ^12 || >=14 } postcss@8.5.16: - resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==, + } + engines: { node: ^10 || ^12 || >=14 } postgres@3.4.7: - resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==, + } + engines: { node: ">=12" } preact-render-to-string@6.5.11: - resolution: {integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==} + resolution: + { + integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==, + } peerDependencies: - preact: '>=10' + preact: ">=10" preact@10.24.3: - resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + resolution: + { + integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==, + } prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } prettier@3.9.5: - resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==, + } + engines: { node: ">=14" } hasBin: true prisma@7.8.0: - resolution: {integrity: sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==} - engines: {node: ^20.19 || ^22.12 || >=24.0} + resolution: + { + integrity: sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==, + } + engines: { node: ^20.19 || ^22.12 || >=24.0 } hasBin: true peerDependencies: - better-sqlite3: '>=9.0.0' - typescript: '>=5.4.0' + better-sqlite3: ">=9.0.0" + typescript: ">=5.4.0" peerDependenciesMeta: better-sqlite3: optional: true @@ -4065,490 +6175,814 @@ packages: optional: true process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + resolution: + { + integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, + } proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + resolution: + { + integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==, + } punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + resolution: + { + integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, + } queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } radix-ui@1.6.2: - resolution: {integrity: sha512-OwYUjzMwiInCUxgAWpPsavXC3Kh4iyi/49uU1/qZTG3RQDlvegyk1GOMiGvSkjua1RDb3JD3fo3eroL9FV4GQw==} + resolution: + { + integrity: sha512-OwYUjzMwiInCUxgAWpPsavXC3Kh4iyi/49uU1/qZTG3RQDlvegyk1GOMiGvSkjua1RDb3JD3fo3eroL9FV4GQw==, + } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true rc9@3.0.1: - resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} + resolution: + { + integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==, + } react-dom@19.2.7: - resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + resolution: + { + integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==, + } peerDependencies: react: ^19.2.7 react-hook-form@7.81.0: - resolution: {integrity: sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==, + } + engines: { node: ">=18.0.0" } peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-remove-scroll@2.7.2: - resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react@19.2.7: - resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==, + } + engines: { node: ">=0.10.0" } readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + resolution: + { + integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, + } readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} + resolution: + { + integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==, + } + engines: { node: ">= 20.19.0" } redis-errors@1.2.0: - resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==, + } + engines: { node: ">=4" } redis-parser@3.0.0: - resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==, + } + engines: { node: ">=4" } reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, + } + engines: { node: ">= 0.4" } regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + resolution: + { + integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==, + } hasBin: true regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, + } + engines: { node: ">= 0.4" } remeda@2.33.4: - resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + resolution: + { + integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==, + } require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: ">=0.10.0" } resend@6.17.1: - resolution: {integrity: sha512-QhHHIRPPM9Tq2uilWmNF8C8kd6nLkUmiFgDQCt1v4eR4o+6p86qrK+Vn12jnAs0jR8Gf6ABdxI18/90LGQ7GVA==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-QhHHIRPPM9Tq2uilWmNF8C8kd6nLkUmiFgDQCt1v4eR4o+6p86qrK+Vn12jnAs0jR8Gf6ABdxI18/90LGQ7GVA==, + } + engines: { node: ">=20" } peerDependencies: - '@react-email/render': '*' + "@react-email/render": "*" peerDependenciesMeta: - '@react-email/render': + "@react-email/render": optional: true resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, + } + engines: { node: ">= 4" } reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } rollup@4.62.2: - resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + resolution: + { + integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } hasBin: true run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} + resolution: + { + integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==, + } + engines: { node: ">=0.4" } safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + resolution: + { + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, + } safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, + } + engines: { node: ">= 0.4" } safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, + } + engines: { node: ">= 0.4" } safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + resolution: + { + integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==, + } safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } sanitize-html@2.17.5: - resolution: {integrity: sha512-ZmU1joGRrvoyctKIiuwUxqR6moLoU2Wk+2bMccN6f7UwhAmwYDvWziqPxRDDN2Qip62NqnIrVrT9akbL6Wretg==} + resolution: + { + integrity: sha512-ZmU1joGRrvoyctKIiuwUxqR6moLoU2Wk+2bMccN6f7UwhAmwYDvWziqPxRDDN2Qip62NqnIrVrT9akbL6Wretg==, + } scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + resolution: + { + integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + } semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } hasBin: true semver@7.8.5: - resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, + } + engines: { node: ">=10" } hasBin: true seq-queue@0.0.5: - resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + resolution: + { + integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==, + } set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, + } + engines: { node: ">= 0.4" } set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, + } + engines: { node: ">= 0.4" } setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + resolution: + { + integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, + } sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + resolution: + { + integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } shell-quote@1.9.0: - resolution: {integrity: sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==, + } + engines: { node: ">= 0.4" } side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==, + } + engines: { node: ">= 0.4" } side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, + } + engines: { node: ">= 0.4" } side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, + } + engines: { node: ">= 0.4" } side-channel@1.1.1: - resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==, + } + engines: { node: ">= 0.4" } siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } sonner@2.0.7: - resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + resolution: + { + integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==, + } peerDependencies: react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, + } source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } sql-escaper@1.3.3: - resolution: {integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==} - engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} + resolution: + { + integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==, + } + engines: { bun: ">=1.0.0", deno: ">=2.0.0", node: ">=12.0.0" } sql-escaper@1.4.0: - resolution: {integrity: sha512-Ti/Zx9J3aITMYUMFhCKbkplQjyi7Kk2SyYXp+rzrkyKZetIy19XbQtVZ+0ZR5aVm/178tIJ6+aVvBqXkH+Xs7w==} - engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} + resolution: + { + integrity: sha512-Ti/Zx9J3aITMYUMFhCKbkplQjyi7Kk2SyYXp+rzrkyKZetIy19XbQtVZ+0ZR5aVm/178tIJ6+aVvBqXkH+Xs7w==, + } + engines: { bun: ">=1.0.0", deno: ">=2.0.0", node: ">=12.0.0" } sqlstring@2.3.3: - resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==, + } + engines: { node: ">= 0.6" } stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } standard-as-callback@2.1.0: - resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + resolution: + { + integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==, + } standardwebhooks@1.0.0: - resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==} + resolution: + { + integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==, + } std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + resolution: + { + integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, + } stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, + } + engines: { node: ">= 0.4" } string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, + } + engines: { node: ">= 0.4" } string.prototype.trim@1.2.11: - resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==, + } + engines: { node: ">= 0.4" } string.prototype.trimend@1.0.10: - resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==, + } + engines: { node: ">= 0.4" } string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, + } + engines: { node: ">= 0.4" } string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + resolution: + { + integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, + } strtok3@10.3.5: - resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==, + } + engines: { node: ">=18" } styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} + resolution: + { + integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, + } + engines: { node: ">= 12.0.0" } peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" peerDependenciesMeta: - '@babel/core': + "@babel/core": optional: true babel-plugin-macros: optional: true tailwind-merge@3.6.0: - resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} + resolution: + { + integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==, + } tailwindcss@4.3.2: - resolution: {integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==} + resolution: + { + integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==, + } tapable@2.3.3: - resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==, + } + engines: { node: ">=6" } thirty-two@1.0.2: - resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} - engines: {node: '>=0.2.6'} + resolution: + { + integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==, + } + engines: { node: ">=0.2.6" } tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + } tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + resolution: + { + integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, + } tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, + } + engines: { node: ">=12.0.0" } tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==, + } + engines: { node: ^18.0.0 || >=20.0.0 } tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, + } + engines: { node: ">=14.0.0" } tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, + } + engines: { node: ">=14.0.0" } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } token-types@6.1.2: - resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==, + } + engines: { node: ">=14.16" } ts-api-utils@2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} + resolution: + { + integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, + } + engines: { node: ">=18.12" } peerDependencies: - typescript: '>=4.8.4' + typescript: ">=4.8.4" tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } tsx@4.22.5: - resolution: {integrity: sha512-F7JnSfPl5ASt6LqwWyUQ3T8BwN3q0eQEbFMYa2iRWaVQmmudo0d7fRmwM4O002gsvW1bs0yBYioutsAjqLJMvQ==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-F7JnSfPl5ASt6LqwWyUQ3T8BwN3q0eQEbFMYa2iRWaVQmmudo0d7fRmwM4O002gsvW1bs0yBYioutsAjqLJMvQ==, + } + engines: { node: ">=18.0.0" } hasBin: true type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, + } + engines: { node: ">= 0.4" } typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, + } + engines: { node: ">= 0.4" } typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, + } + engines: { node: ">= 0.4" } typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==, + } + engines: { node: ">= 0.4" } typescript-eslint@8.63.0: - resolution: {integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' + typescript: ">=4.8.4 <6.1.0" typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, + } + engines: { node: ">=14.17" } hasBin: true uint8array-extras@1.5.0: - resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==, + } + engines: { node: ">=18" } unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, + } + engines: { node: ">= 0.4" } undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + resolution: + { + integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, + } undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + resolution: + { + integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==, + } update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + resolution: + { + integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, + } hasBin: true peerDependencies: - browserslist: '>= 4.21.0' + browserslist: ">= 4.21.0" uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-intl@4.13.1: - resolution: {integrity: sha512-UU5C3zAC7yVg3m7rq5C8VF5J5jhAfvS19Wi9bPNCB9xB7jQYBsUcrqfdxs4Mxl9XR3x6BDB5K++iAw7/rcm3gg==} + resolution: + { + integrity: sha512-UU5C3zAC7yVg3m7rq5C8VF5J5jhAfvS19Wi9bPNCB9xB7jQYBsUcrqfdxs4Mxl9XR3x6BDB5K++iAw7/rcm3gg==, + } peerDependencies: react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, + } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + resolution: + { + integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==, + } peerDependencies: - typescript: '>=5' + typescript: ">=5" peerDependenciesMeta: typescript: optional: true vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==, + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true vite@5.4.21: - resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==, + } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" terser: ^5.4.0 peerDependenciesMeta: - '@types/node': + "@types/node": optional: true less: optional: true @@ -4566,24 +7000,27 @@ packages: optional: true vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} - engines: {node: ^18.0.0 || >=20.0.0} + resolution: + { + integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==, + } + 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.9 - '@vitest/ui': 2.1.9 - happy-dom: '*' - jsdom: '*' + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.9 + "@vitest/ui": 2.1.9 + happy-dom: "*" + jsdom: "*" peerDependenciesMeta: - '@edge-runtime/vm': + "@edge-runtime/vm": optional: true - '@types/node': + "@types/node": optional: true - '@vitest/browser': + "@vitest/browser": optional: true - '@vitest/ui': + "@vitest/ui": optional: true happy-dom: optional: true @@ -4591,69 +7028,110 @@ packages: optional: true which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, + } + engines: { node: ">= 0.4" } which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, + } + engines: { node: ">= 0.4" } which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, + } + engines: { node: ">= 0.4" } which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==, + } + engines: { node: ">= 0.4" } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } hasBin: true which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} + resolution: + { + integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==, + } + engines: { node: ^16.13.0 || >=18.0.0 } hasBin: true why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } hasBin: true win-guid@0.2.1: - resolution: {integrity: sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==} + resolution: + { + integrity: sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==, + } word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: ">=0.10.0" } yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } zeptomatch@2.1.0: - resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} + resolution: + { + integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==, + } zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==, + } + engines: { node: ">=18.0.0" } peerDependencies: zod: ^3.25.0 || ^4.0.0 zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + resolution: + { + integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, + } snapshots: + "@alloc/quick-lru@5.2.0": {} - '@alloc/quick-lru@5.2.0': {} - - '@auth/core@0.41.2(nodemailer@9.0.3)': + "@auth/core@0.41.2(nodemailer@9.0.3)": dependencies: - '@panva/hkdf': 1.2.1 + "@panva/hkdf": 1.2.1 jose: 6.2.3 oauth4webapi: 3.8.6 preact: 10.24.3 @@ -4661,26 +7139,26 @@ snapshots: optionalDependencies: nodemailer: 9.0.3 - '@babel/code-frame@7.29.7': + "@babel/code-frame@7.29.7": dependencies: - '@babel/helper-validator-identifier': 7.29.7 + "@babel/helper-validator-identifier": 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.7': {} + "@babel/compat-data@7.29.7": {} - '@babel/core@7.29.7': + "@babel/core@7.29.7": dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/remapping': 2.3.5 + "@babel/code-frame": 7.29.7 + "@babel/generator": 7.29.7 + "@babel/helper-compilation-targets": 7.29.7 + "@babel/helper-module-transforms": 7.29.7(@babel/core@7.29.7) + "@babel/helpers": 7.29.7 + "@babel/parser": 7.29.7 + "@babel/template": 7.29.7 + "@babel/traverse": 7.29.7 + "@babel/types": 7.29.7 + "@jridgewell/remapping": 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -4689,766 +7167,766 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.29.7': + "@babel/generator@7.29.7": dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + "@babel/parser": 7.29.7 + "@babel/types": 7.29.7 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.29.7': + "@babel/helper-compilation-targets@7.29.7": dependencies: - '@babel/compat-data': 7.29.7 - '@babel/helper-validator-option': 7.29.7 + "@babel/compat-data": 7.29.7 + "@babel/helper-validator-option": 7.29.7 browserslist: 4.28.5 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.29.7': {} + "@babel/helper-globals@7.29.7": {} - '@babel/helper-module-imports@7.29.7': + "@babel/helper-module-imports@7.29.7": dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + "@babel/traverse": 7.29.7 + "@babel/types": 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + "@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)": dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + "@babel/core": 7.29.7 + "@babel/helper-module-imports": 7.29.7 + "@babel/helper-validator-identifier": 7.29.7 + "@babel/traverse": 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.29.7': {} + "@babel/helper-string-parser@7.29.7": {} - '@babel/helper-validator-identifier@7.29.7': {} + "@babel/helper-validator-identifier@7.29.7": {} - '@babel/helper-validator-option@7.29.7': {} + "@babel/helper-validator-option@7.29.7": {} - '@babel/helpers@7.29.7': + "@babel/helpers@7.29.7": dependencies: - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + "@babel/template": 7.29.7 + "@babel/types": 7.29.7 - '@babel/parser@7.29.7': + "@babel/parser@7.29.7": dependencies: - '@babel/types': 7.29.7 + "@babel/types": 7.29.7 - '@babel/template@7.29.7': + "@babel/template@7.29.7": dependencies: - '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + "@babel/code-frame": 7.29.7 + "@babel/parser": 7.29.7 + "@babel/types": 7.29.7 - '@babel/traverse@7.29.7': + "@babel/traverse@7.29.7": dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + "@babel/code-frame": 7.29.7 + "@babel/generator": 7.29.7 + "@babel/helper-globals": 7.29.7 + "@babel/parser": 7.29.7 + "@babel/template": 7.29.7 + "@babel/types": 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.29.7': + "@babel/types@7.29.7": dependencies: - '@babel/helper-string-parser': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 + "@babel/helper-string-parser": 7.29.7 + "@babel/helper-validator-identifier": 7.29.7 - '@borewit/text-codec@0.2.2': {} + "@borewit/text-codec@0.2.2": {} - '@dnd-kit/accessibility@3.1.1(react@19.2.7)': + "@dnd-kit/accessibility@3.1.1(react@19.2.7)": dependencies: react: 19.2.7 tslib: 2.8.1 - '@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.2.7) - '@dnd-kit/utilities': 3.2.2(react@19.2.7) + "@dnd-kit/accessibility": 3.1.1(react@19.2.7) + "@dnd-kit/utilities": 3.2.2(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 - '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)': + "@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)": dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@dnd-kit/utilities': 3.2.2(react@19.2.7) + "@dnd-kit/core": 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@dnd-kit/utilities": 3.2.2(react@19.2.7) react: 19.2.7 tslib: 2.8.1 - '@dnd-kit/utilities@3.2.2(react@19.2.7)': + "@dnd-kit/utilities@3.2.2(react@19.2.7)": dependencies: react: 19.2.7 tslib: 2.8.1 - '@drizzle-team/brocli@0.10.2': {} + "@drizzle-team/brocli@0.10.2": {} - '@electric-sql/pglite-socket@0.1.1(@electric-sql/pglite@0.4.1)': + "@electric-sql/pglite-socket@0.1.1(@electric-sql/pglite@0.4.1)": dependencies: - '@electric-sql/pglite': 0.4.1 + "@electric-sql/pglite": 0.4.1 - '@electric-sql/pglite-tools@0.3.1(@electric-sql/pglite@0.4.1)': + "@electric-sql/pglite-tools@0.3.1(@electric-sql/pglite@0.4.1)": dependencies: - '@electric-sql/pglite': 0.4.1 + "@electric-sql/pglite": 0.4.1 - '@electric-sql/pglite@0.4.1': {} + "@electric-sql/pglite@0.4.1": {} - '@emnapi/runtime@1.11.1': + "@emnapi/runtime@1.11.1": dependencies: tslib: 2.8.1 optional: true - '@esbuild-kit/core-utils@3.3.2': + "@esbuild-kit/core-utils@3.3.2": dependencies: esbuild: 0.18.20 source-map-support: 0.5.21 - '@esbuild-kit/esm-loader@2.6.5': + "@esbuild-kit/esm-loader@2.6.5": dependencies: - '@esbuild-kit/core-utils': 3.3.2 + "@esbuild-kit/core-utils": 3.3.2 get-tsconfig: 4.14.0 - '@esbuild/aix-ppc64@0.19.12': + "@esbuild/aix-ppc64@0.19.12": optional: true - '@esbuild/aix-ppc64@0.21.5': + "@esbuild/aix-ppc64@0.21.5": optional: true - '@esbuild/aix-ppc64@0.28.1': + "@esbuild/aix-ppc64@0.28.1": optional: true - '@esbuild/android-arm64@0.18.20': + "@esbuild/android-arm64@0.18.20": optional: true - '@esbuild/android-arm64@0.19.12': + "@esbuild/android-arm64@0.19.12": optional: true - '@esbuild/android-arm64@0.21.5': + "@esbuild/android-arm64@0.21.5": optional: true - '@esbuild/android-arm64@0.28.1': + "@esbuild/android-arm64@0.28.1": optional: true - '@esbuild/android-arm@0.18.20': + "@esbuild/android-arm@0.18.20": optional: true - '@esbuild/android-arm@0.19.12': + "@esbuild/android-arm@0.19.12": optional: true - '@esbuild/android-arm@0.21.5': + "@esbuild/android-arm@0.21.5": optional: true - '@esbuild/android-arm@0.28.1': + "@esbuild/android-arm@0.28.1": optional: true - '@esbuild/android-x64@0.18.20': + "@esbuild/android-x64@0.18.20": optional: true - '@esbuild/android-x64@0.19.12': + "@esbuild/android-x64@0.19.12": optional: true - '@esbuild/android-x64@0.21.5': + "@esbuild/android-x64@0.21.5": optional: true - '@esbuild/android-x64@0.28.1': + "@esbuild/android-x64@0.28.1": optional: true - '@esbuild/darwin-arm64@0.18.20': + "@esbuild/darwin-arm64@0.18.20": optional: true - '@esbuild/darwin-arm64@0.19.12': + "@esbuild/darwin-arm64@0.19.12": optional: true - '@esbuild/darwin-arm64@0.21.5': + "@esbuild/darwin-arm64@0.21.5": optional: true - '@esbuild/darwin-arm64@0.28.1': + "@esbuild/darwin-arm64@0.28.1": optional: true - '@esbuild/darwin-x64@0.18.20': + "@esbuild/darwin-x64@0.18.20": optional: true - '@esbuild/darwin-x64@0.19.12': + "@esbuild/darwin-x64@0.19.12": optional: true - '@esbuild/darwin-x64@0.21.5': + "@esbuild/darwin-x64@0.21.5": optional: true - '@esbuild/darwin-x64@0.28.1': + "@esbuild/darwin-x64@0.28.1": optional: true - '@esbuild/freebsd-arm64@0.18.20': + "@esbuild/freebsd-arm64@0.18.20": optional: true - '@esbuild/freebsd-arm64@0.19.12': + "@esbuild/freebsd-arm64@0.19.12": optional: true - '@esbuild/freebsd-arm64@0.21.5': + "@esbuild/freebsd-arm64@0.21.5": optional: true - '@esbuild/freebsd-arm64@0.28.1': + "@esbuild/freebsd-arm64@0.28.1": optional: true - '@esbuild/freebsd-x64@0.18.20': + "@esbuild/freebsd-x64@0.18.20": optional: true - '@esbuild/freebsd-x64@0.19.12': + "@esbuild/freebsd-x64@0.19.12": optional: true - '@esbuild/freebsd-x64@0.21.5': + "@esbuild/freebsd-x64@0.21.5": optional: true - '@esbuild/freebsd-x64@0.28.1': + "@esbuild/freebsd-x64@0.28.1": optional: true - '@esbuild/linux-arm64@0.18.20': + "@esbuild/linux-arm64@0.18.20": optional: true - '@esbuild/linux-arm64@0.19.12': + "@esbuild/linux-arm64@0.19.12": optional: true - '@esbuild/linux-arm64@0.21.5': + "@esbuild/linux-arm64@0.21.5": optional: true - '@esbuild/linux-arm64@0.28.1': + "@esbuild/linux-arm64@0.28.1": optional: true - '@esbuild/linux-arm@0.18.20': + "@esbuild/linux-arm@0.18.20": optional: true - '@esbuild/linux-arm@0.19.12': + "@esbuild/linux-arm@0.19.12": optional: true - '@esbuild/linux-arm@0.21.5': + "@esbuild/linux-arm@0.21.5": optional: true - '@esbuild/linux-arm@0.28.1': + "@esbuild/linux-arm@0.28.1": optional: true - '@esbuild/linux-ia32@0.18.20': + "@esbuild/linux-ia32@0.18.20": optional: true - '@esbuild/linux-ia32@0.19.12': + "@esbuild/linux-ia32@0.19.12": optional: true - '@esbuild/linux-ia32@0.21.5': + "@esbuild/linux-ia32@0.21.5": optional: true - '@esbuild/linux-ia32@0.28.1': + "@esbuild/linux-ia32@0.28.1": optional: true - '@esbuild/linux-loong64@0.18.20': + "@esbuild/linux-loong64@0.18.20": optional: true - '@esbuild/linux-loong64@0.19.12': + "@esbuild/linux-loong64@0.19.12": optional: true - '@esbuild/linux-loong64@0.21.5': + "@esbuild/linux-loong64@0.21.5": optional: true - '@esbuild/linux-loong64@0.28.1': + "@esbuild/linux-loong64@0.28.1": optional: true - '@esbuild/linux-mips64el@0.18.20': + "@esbuild/linux-mips64el@0.18.20": optional: true - '@esbuild/linux-mips64el@0.19.12': + "@esbuild/linux-mips64el@0.19.12": optional: true - '@esbuild/linux-mips64el@0.21.5': + "@esbuild/linux-mips64el@0.21.5": optional: true - '@esbuild/linux-mips64el@0.28.1': + "@esbuild/linux-mips64el@0.28.1": optional: true - '@esbuild/linux-ppc64@0.18.20': + "@esbuild/linux-ppc64@0.18.20": optional: true - '@esbuild/linux-ppc64@0.19.12': + "@esbuild/linux-ppc64@0.19.12": optional: true - '@esbuild/linux-ppc64@0.21.5': + "@esbuild/linux-ppc64@0.21.5": optional: true - '@esbuild/linux-ppc64@0.28.1': + "@esbuild/linux-ppc64@0.28.1": optional: true - '@esbuild/linux-riscv64@0.18.20': + "@esbuild/linux-riscv64@0.18.20": optional: true - '@esbuild/linux-riscv64@0.19.12': + "@esbuild/linux-riscv64@0.19.12": optional: true - '@esbuild/linux-riscv64@0.21.5': + "@esbuild/linux-riscv64@0.21.5": optional: true - '@esbuild/linux-riscv64@0.28.1': + "@esbuild/linux-riscv64@0.28.1": optional: true - '@esbuild/linux-s390x@0.18.20': + "@esbuild/linux-s390x@0.18.20": optional: true - '@esbuild/linux-s390x@0.19.12': + "@esbuild/linux-s390x@0.19.12": optional: true - '@esbuild/linux-s390x@0.21.5': + "@esbuild/linux-s390x@0.21.5": optional: true - '@esbuild/linux-s390x@0.28.1': + "@esbuild/linux-s390x@0.28.1": optional: true - '@esbuild/linux-x64@0.18.20': + "@esbuild/linux-x64@0.18.20": optional: true - '@esbuild/linux-x64@0.19.12': + "@esbuild/linux-x64@0.19.12": optional: true - '@esbuild/linux-x64@0.21.5': + "@esbuild/linux-x64@0.21.5": optional: true - '@esbuild/linux-x64@0.28.1': + "@esbuild/linux-x64@0.28.1": optional: true - '@esbuild/netbsd-arm64@0.28.1': + "@esbuild/netbsd-arm64@0.28.1": optional: true - '@esbuild/netbsd-x64@0.18.20': + "@esbuild/netbsd-x64@0.18.20": optional: true - '@esbuild/netbsd-x64@0.19.12': + "@esbuild/netbsd-x64@0.19.12": optional: true - '@esbuild/netbsd-x64@0.21.5': + "@esbuild/netbsd-x64@0.21.5": optional: true - '@esbuild/netbsd-x64@0.28.1': + "@esbuild/netbsd-x64@0.28.1": optional: true - '@esbuild/openbsd-arm64@0.28.1': + "@esbuild/openbsd-arm64@0.28.1": optional: true - '@esbuild/openbsd-x64@0.18.20': + "@esbuild/openbsd-x64@0.18.20": optional: true - '@esbuild/openbsd-x64@0.19.12': + "@esbuild/openbsd-x64@0.19.12": optional: true - '@esbuild/openbsd-x64@0.21.5': + "@esbuild/openbsd-x64@0.21.5": optional: true - '@esbuild/openbsd-x64@0.28.1': + "@esbuild/openbsd-x64@0.28.1": optional: true - '@esbuild/openharmony-arm64@0.28.1': + "@esbuild/openharmony-arm64@0.28.1": optional: true - '@esbuild/sunos-x64@0.18.20': + "@esbuild/sunos-x64@0.18.20": optional: true - '@esbuild/sunos-x64@0.19.12': + "@esbuild/sunos-x64@0.19.12": optional: true - '@esbuild/sunos-x64@0.21.5': + "@esbuild/sunos-x64@0.21.5": optional: true - '@esbuild/sunos-x64@0.28.1': + "@esbuild/sunos-x64@0.28.1": optional: true - '@esbuild/win32-arm64@0.18.20': + "@esbuild/win32-arm64@0.18.20": optional: true - '@esbuild/win32-arm64@0.19.12': + "@esbuild/win32-arm64@0.19.12": optional: true - '@esbuild/win32-arm64@0.21.5': + "@esbuild/win32-arm64@0.21.5": optional: true - '@esbuild/win32-arm64@0.28.1': + "@esbuild/win32-arm64@0.28.1": optional: true - '@esbuild/win32-ia32@0.18.20': + "@esbuild/win32-ia32@0.18.20": optional: true - '@esbuild/win32-ia32@0.19.12': + "@esbuild/win32-ia32@0.19.12": optional: true - '@esbuild/win32-ia32@0.21.5': + "@esbuild/win32-ia32@0.21.5": optional: true - '@esbuild/win32-ia32@0.28.1': + "@esbuild/win32-ia32@0.28.1": optional: true - '@esbuild/win32-x64@0.18.20': + "@esbuild/win32-x64@0.18.20": optional: true - '@esbuild/win32-x64@0.19.12': + "@esbuild/win32-x64@0.19.12": optional: true - '@esbuild/win32-x64@0.21.5': + "@esbuild/win32-x64@0.21.5": optional: true - '@esbuild/win32-x64@0.28.1': + "@esbuild/win32-x64@0.28.1": optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': + "@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))": dependencies: eslint: 10.6.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.2': {} + "@eslint-community/regexpp@4.12.2": {} - '@eslint/config-array@0.23.5': + "@eslint/config-array@0.23.5": dependencies: - '@eslint/object-schema': 3.0.5 + "@eslint/object-schema": 3.0.5 debug: 4.4.3 minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.6.0': + "@eslint/config-helpers@0.6.0": dependencies: - '@eslint/core': 1.2.1 + "@eslint/core": 1.2.1 - '@eslint/core@1.2.1': + "@eslint/core@1.2.1": dependencies: - '@types/json-schema': 7.0.15 + "@types/json-schema": 7.0.15 - '@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))': + "@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))": optionalDependencies: eslint: 10.6.0(jiti@2.7.0) - '@eslint/object-schema@3.0.5': {} + "@eslint/object-schema@3.0.5": {} - '@eslint/plugin-kit@0.7.2': + "@eslint/plugin-kit@0.7.2": dependencies: - '@eslint/core': 1.2.1 + "@eslint/core": 1.2.1 levn: 0.4.1 - '@floating-ui/core@1.8.0': + "@floating-ui/core@1.8.0": dependencies: - '@floating-ui/utils': 0.2.12 + "@floating-ui/utils": 0.2.12 - '@floating-ui/dom@1.8.0': + "@floating-ui/dom@1.8.0": dependencies: - '@floating-ui/core': 1.8.0 - '@floating-ui/utils': 0.2.12 + "@floating-ui/core": 1.8.0 + "@floating-ui/utils": 0.2.12 - '@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@floating-ui/react-dom@2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@floating-ui/dom': 1.8.0 + "@floating-ui/dom": 1.8.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@floating-ui/utils@0.2.12': {} + "@floating-ui/utils@0.2.12": {} - '@formatjs/fast-memoize@3.1.6': {} + "@formatjs/fast-memoize@3.1.6": {} - '@formatjs/icu-messageformat-parser@3.5.12': + "@formatjs/icu-messageformat-parser@3.5.12": dependencies: - '@formatjs/icu-skeleton-parser': 2.1.10 + "@formatjs/icu-skeleton-parser": 2.1.10 - '@formatjs/icu-skeleton-parser@2.1.10': {} + "@formatjs/icu-skeleton-parser@2.1.10": {} - '@formatjs/intl-localematcher@0.8.10': + "@formatjs/intl-localematcher@0.8.10": dependencies: - '@formatjs/fast-memoize': 3.1.6 + "@formatjs/fast-memoize": 3.1.6 - '@hono/node-server@1.19.14(hono@4.12.27)': + "@hono/node-server@1.19.14(hono@4.12.27)": dependencies: hono: 4.12.27 - '@hookform/resolvers@5.4.0(react-hook-form@7.81.0(react@19.2.7))': + "@hookform/resolvers@5.4.0(react-hook-form@7.81.0(react@19.2.7))": dependencies: - '@standard-schema/utils': 0.3.0 + "@standard-schema/utils": 0.3.0 react-hook-form: 7.81.0(react@19.2.7) - '@humanfs/core@0.19.2': + "@humanfs/core@0.19.2": dependencies: - '@humanfs/types': 0.15.0 + "@humanfs/types": 0.15.0 - '@humanfs/node@0.16.8': + "@humanfs/node@0.16.8": dependencies: - '@humanfs/core': 0.19.2 - '@humanfs/types': 0.15.0 - '@humanwhocodes/retry': 0.4.3 + "@humanfs/core": 0.19.2 + "@humanfs/types": 0.15.0 + "@humanwhocodes/retry": 0.4.3 - '@humanfs/types@0.15.0': {} + "@humanfs/types@0.15.0": {} - '@humanwhocodes/module-importer@1.0.1': {} + "@humanwhocodes/module-importer@1.0.1": {} - '@humanwhocodes/retry@0.4.3': {} + "@humanwhocodes/retry@0.4.3": {} - '@img/colour@1.1.0': + "@img/colour@1.1.0": optional: true - '@img/sharp-darwin-arm64@0.34.5': + "@img/sharp-darwin-arm64@0.34.5": optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 + "@img/sharp-libvips-darwin-arm64": 1.2.4 optional: true - '@img/sharp-darwin-x64@0.34.5': + "@img/sharp-darwin-x64@0.34.5": optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': + "@img/sharp-libvips-darwin-arm64@1.2.4": optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': + "@img/sharp-libvips-darwin-x64@1.2.4": optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': + "@img/sharp-libvips-linux-arm64@1.2.4": optional: true - '@img/sharp-libvips-linux-arm@1.2.4': + "@img/sharp-libvips-linux-arm@1.2.4": optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': + "@img/sharp-libvips-linux-ppc64@1.2.4": optional: true - '@img/sharp-libvips-linux-riscv64@1.2.4': + "@img/sharp-libvips-linux-riscv64@1.2.4": optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': + "@img/sharp-libvips-linux-s390x@1.2.4": optional: true - '@img/sharp-libvips-linux-x64@1.2.4': + "@img/sharp-libvips-linux-x64@1.2.4": optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': + "@img/sharp-libvips-linuxmusl-x64@1.2.4": optional: true - '@img/sharp-linux-arm64@0.34.5': + "@img/sharp-linux-arm64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 optional: true - '@img/sharp-linux-arm@0.34.5': + "@img/sharp-linux-arm@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 + "@img/sharp-libvips-linux-arm": 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.34.5': + "@img/sharp-linux-ppc64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 optional: true - '@img/sharp-linux-riscv64@0.34.5': + "@img/sharp-linux-riscv64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 + "@img/sharp-libvips-linux-riscv64": 1.2.4 optional: true - '@img/sharp-linux-s390x@0.34.5': + "@img/sharp-linux-s390x@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 optional: true - '@img/sharp-linux-x64@0.34.5': + "@img/sharp-linux-x64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 + "@img/sharp-libvips-linux-x64": 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': + "@img/sharp-linuxmusl-arm64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.5': + "@img/sharp-linuxmusl-x64@0.34.5": optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 optional: true - '@img/sharp-wasm32@0.34.5': + "@img/sharp-wasm32@0.34.5": dependencies: - '@emnapi/runtime': 1.11.1 + "@emnapi/runtime": 1.11.1 optional: true - '@img/sharp-win32-arm64@0.34.5': + "@img/sharp-win32-arm64@0.34.5": optional: true - '@img/sharp-win32-ia32@0.34.5': + "@img/sharp-win32-ia32@0.34.5": optional: true - '@img/sharp-win32-x64@0.34.5': + "@img/sharp-win32-x64@0.34.5": optional: true - '@ioredis/commands@1.10.0': {} + "@ioredis/commands@1.10.0": {} - '@jridgewell/gen-mapping@0.3.13': + "@jridgewell/gen-mapping@0.3.13": dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + "@jridgewell/sourcemap-codec": 1.5.5 + "@jridgewell/trace-mapping": 0.3.31 - '@jridgewell/remapping@2.3.5': + "@jridgewell/remapping@2.3.5": dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 - '@jridgewell/resolve-uri@3.1.2': {} + "@jridgewell/resolve-uri@3.1.2": {} - '@jridgewell/sourcemap-codec@1.5.5': {} + "@jridgewell/sourcemap-codec@1.5.5": {} - '@jridgewell/trace-mapping@0.3.31': + "@jridgewell/trace-mapping@0.3.31": dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.5 - '@kurkle/color@0.3.4': {} + "@kurkle/color@0.3.4": {} - '@next/env@16.2.10': {} + "@next/env@16.2.10": {} - '@next/eslint-plugin-next@16.2.10': + "@next/eslint-plugin-next@16.2.10": dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.2.10': + "@next/swc-darwin-arm64@16.2.10": optional: true - '@next/swc-darwin-x64@16.2.10': + "@next/swc-darwin-x64@16.2.10": optional: true - '@next/swc-linux-arm64-gnu@16.2.10': + "@next/swc-linux-arm64-gnu@16.2.10": optional: true - '@next/swc-linux-arm64-musl@16.2.10': + "@next/swc-linux-arm64-musl@16.2.10": optional: true - '@next/swc-linux-x64-gnu@16.2.10': + "@next/swc-linux-x64-gnu@16.2.10": optional: true - '@next/swc-linux-x64-musl@16.2.10': + "@next/swc-linux-x64-musl@16.2.10": optional: true - '@next/swc-win32-arm64-msvc@16.2.10': + "@next/swc-win32-arm64-msvc@16.2.10": optional: true - '@next/swc-win32-x64-msvc@16.2.10': + "@next/swc-win32-x64-msvc@16.2.10": optional: true - '@nodelib/fs.scandir@2.1.5': + "@nodelib/fs.scandir@2.1.5": dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} + "@nodelib/fs.stat@2.0.5": {} - '@nodelib/fs.walk@1.2.8': + "@nodelib/fs.walk@1.2.8": dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.20.1 - '@otplib/core@12.0.1': {} + "@otplib/core@12.0.1": {} - '@otplib/plugin-crypto@12.0.1': + "@otplib/plugin-crypto@12.0.1": dependencies: - '@otplib/core': 12.0.1 + "@otplib/core": 12.0.1 - '@otplib/plugin-thirty-two@12.0.1': + "@otplib/plugin-thirty-two@12.0.1": dependencies: - '@otplib/core': 12.0.1 + "@otplib/core": 12.0.1 thirty-two: 1.0.2 - '@otplib/preset-default@12.0.1': + "@otplib/preset-default@12.0.1": dependencies: - '@otplib/core': 12.0.1 - '@otplib/plugin-crypto': 12.0.1 - '@otplib/plugin-thirty-two': 12.0.1 + "@otplib/core": 12.0.1 + "@otplib/plugin-crypto": 12.0.1 + "@otplib/plugin-thirty-two": 12.0.1 - '@otplib/preset-v11@12.0.1': + "@otplib/preset-v11@12.0.1": dependencies: - '@otplib/core': 12.0.1 - '@otplib/plugin-crypto': 12.0.1 - '@otplib/plugin-thirty-two': 12.0.1 + "@otplib/core": 12.0.1 + "@otplib/plugin-crypto": 12.0.1 + "@otplib/plugin-thirty-two": 12.0.1 - '@panva/hkdf@1.2.1': {} + "@panva/hkdf@1.2.1": {} - '@parcel/watcher-android-arm64@2.5.6': + "@parcel/watcher-android-arm64@2.5.6": optional: true - '@parcel/watcher-darwin-arm64@2.5.6': + "@parcel/watcher-darwin-arm64@2.5.6": optional: true - '@parcel/watcher-darwin-x64@2.5.6': + "@parcel/watcher-darwin-x64@2.5.6": optional: true - '@parcel/watcher-freebsd-x64@2.5.6': + "@parcel/watcher-freebsd-x64@2.5.6": optional: true - '@parcel/watcher-linux-arm-glibc@2.5.6': + "@parcel/watcher-linux-arm-glibc@2.5.6": optional: true - '@parcel/watcher-linux-arm-musl@2.5.6': + "@parcel/watcher-linux-arm-musl@2.5.6": optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.6': + "@parcel/watcher-linux-arm64-glibc@2.5.6": optional: true - '@parcel/watcher-linux-arm64-musl@2.5.6': + "@parcel/watcher-linux-arm64-musl@2.5.6": optional: true - '@parcel/watcher-linux-x64-glibc@2.5.6': + "@parcel/watcher-linux-x64-glibc@2.5.6": optional: true - '@parcel/watcher-linux-x64-musl@2.5.6': + "@parcel/watcher-linux-x64-musl@2.5.6": optional: true - '@parcel/watcher-win32-arm64@2.5.6': + "@parcel/watcher-win32-arm64@2.5.6": optional: true - '@parcel/watcher-win32-ia32@2.5.6': + "@parcel/watcher-win32-ia32@2.5.6": optional: true - '@parcel/watcher-win32-x64@2.5.6': + "@parcel/watcher-win32-x64@2.5.6": optional: true - '@parcel/watcher@2.5.6': + "@parcel/watcher@2.5.6": dependencies: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 picomatch: 4.0.4 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 + "@parcel/watcher-android-arm64": 2.5.6 + "@parcel/watcher-darwin-arm64": 2.5.6 + "@parcel/watcher-darwin-x64": 2.5.6 + "@parcel/watcher-freebsd-x64": 2.5.6 + "@parcel/watcher-linux-arm-glibc": 2.5.6 + "@parcel/watcher-linux-arm-musl": 2.5.6 + "@parcel/watcher-linux-arm64-glibc": 2.5.6 + "@parcel/watcher-linux-arm64-musl": 2.5.6 + "@parcel/watcher-linux-x64-glibc": 2.5.6 + "@parcel/watcher-linux-x64-musl": 2.5.6 + "@parcel/watcher-win32-arm64": 2.5.6 + "@parcel/watcher-win32-ia32": 2.5.6 + "@parcel/watcher-win32-x64": 2.5.6 - '@petamoriken/float16@3.9.3': {} + "@petamoriken/float16@3.9.3": {} - '@prisma/adapter-mariadb@7.8.0': + "@prisma/adapter-mariadb@7.8.0": dependencies: - '@prisma/driver-adapter-utils': 7.8.0 + "@prisma/driver-adapter-utils": 7.8.0 mariadb: 3.4.5 - '@prisma/client-runtime-utils@7.8.0': {} + "@prisma/client-runtime-utils@7.8.0": {} - '@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3)': + "@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3)": dependencies: - '@prisma/client-runtime-utils': 7.8.0 + "@prisma/client-runtime-utils": 7.8.0 optionalDependencies: prisma: 7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3) typescript: 5.9.3 - '@prisma/config@7.8.0': + "@prisma/config@7.8.0": dependencies: c12: 3.3.4 deepmerge-ts: 7.1.5 @@ -5457,19 +7935,19 @@ snapshots: transitivePeerDependencies: - magicast - '@prisma/debug@7.2.0': {} + "@prisma/debug@7.2.0": {} - '@prisma/debug@7.8.0': {} + "@prisma/debug@7.8.0": {} - '@prisma/dev@0.24.3(typescript@5.9.3)': + "@prisma/dev@0.24.3(typescript@5.9.3)": dependencies: - '@electric-sql/pglite': 0.4.1 - '@electric-sql/pglite-socket': 0.1.1(@electric-sql/pglite@0.4.1) - '@electric-sql/pglite-tools': 0.3.1(@electric-sql/pglite@0.4.1) - '@hono/node-server': 1.19.14(hono@4.12.27) - '@prisma/get-platform': 7.2.0 - '@prisma/query-plan-executor': 7.2.0 - '@prisma/streams-local': 0.1.2 + "@electric-sql/pglite": 0.4.1 + "@electric-sql/pglite-socket": 0.1.1(@electric-sql/pglite@0.4.1) + "@electric-sql/pglite-tools": 0.3.1(@electric-sql/pglite@0.4.1) + "@hono/node-server": 1.19.14(hono@4.12.27) + "@prisma/get-platform": 7.2.0 + "@prisma/query-plan-executor": 7.2.0 + "@prisma/streams-local": 0.1.2 foreground-child: 3.3.1 get-port-please: 3.2.0 hono: 4.12.27 @@ -5483,1009 +7961,1009 @@ snapshots: transitivePeerDependencies: - typescript - '@prisma/driver-adapter-utils@7.8.0': + "@prisma/driver-adapter-utils@7.8.0": dependencies: - '@prisma/debug': 7.8.0 + "@prisma/debug": 7.8.0 - '@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a': {} + "@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a": {} - '@prisma/engines@7.8.0': + "@prisma/engines@7.8.0": dependencies: - '@prisma/debug': 7.8.0 - '@prisma/engines-version': 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a - '@prisma/fetch-engine': 7.8.0 - '@prisma/get-platform': 7.8.0 + "@prisma/debug": 7.8.0 + "@prisma/engines-version": 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a + "@prisma/fetch-engine": 7.8.0 + "@prisma/get-platform": 7.8.0 - '@prisma/fetch-engine@7.8.0': + "@prisma/fetch-engine@7.8.0": dependencies: - '@prisma/debug': 7.8.0 - '@prisma/engines-version': 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a - '@prisma/get-platform': 7.8.0 + "@prisma/debug": 7.8.0 + "@prisma/engines-version": 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a + "@prisma/get-platform": 7.8.0 - '@prisma/get-platform@7.2.0': + "@prisma/get-platform@7.2.0": dependencies: - '@prisma/debug': 7.2.0 + "@prisma/debug": 7.2.0 - '@prisma/get-platform@7.8.0': + "@prisma/get-platform@7.8.0": dependencies: - '@prisma/debug': 7.8.0 + "@prisma/debug": 7.8.0 - '@prisma/query-plan-executor@7.2.0': {} + "@prisma/query-plan-executor@7.2.0": {} - '@prisma/streams-local@0.1.2': + "@prisma/streams-local@0.1.2": dependencies: ajv: 8.20.0 better-result: 2.9.2 env-paths: 3.0.0 proper-lockfile: 4.1.2 - '@prisma/studio-core@0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@prisma/studio-core@0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@types/react': 19.2.17 + "@radix-ui/react-toggle": 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@types/react": 19.2.17 chart.js: 4.5.1 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - - '@types/react-dom' + - "@types/react-dom" - '@radix-ui/number@1.1.2': {} + "@radix-ui/number@1.1.2": {} - '@radix-ui/primitive@1.1.3': {} + "@radix-ui/primitive@1.1.3": {} - '@radix-ui/primitive@1.1.5': {} + "@radix-ui/primitive@1.1.5": {} - '@radix-ui/react-accessible-icon@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-accessible-icon@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-accordion@1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-accordion@1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collapsible': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collapsible": 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-alert-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-alert-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-arrow@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-arrow@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-aspect-ratio@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-aspect-ratio@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-avatar@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-avatar@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-checkbox@1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-checkbox@1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-collapsible@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-collapsible@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-collection@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-collection@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-compose-refs@1.1.3(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-compose-refs@1.1.3(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-context-menu@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-context-menu@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-context@1.2.0(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-context@1.2.0(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-direction@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-direction@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-dismissable-layer@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-dismissable-layer@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-dropdown-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-dropdown-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-focus-guards@1.1.4(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-focus-guards@1.1.4(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-focus-scope@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-focus-scope@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-form@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-form@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-label': 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-label": 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-hover-card@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-hover-card@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-id@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-id@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-label@2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-label@2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-menubar@1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-menubar@1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-navigation-menu@1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-navigation-menu@1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-one-time-password-field@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-one-time-password-field@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/number': 1.1.2 - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/number": 1.1.2 + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-password-toggle-field@0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-password-toggle-field@0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-popover@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-popover@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-popper@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-popper@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@floating-ui/react-dom': 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-arrow': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-rect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/rect': 1.1.2 + "@floating-ui/react-dom": 2.1.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-arrow": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-rect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/rect": 1.1.2 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-portal@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-portal@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-presence@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-presence@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-primitive@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-primitive@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-progress@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-progress@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-radio-group@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-radio-group@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-roving-focus@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-roving-focus@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-scroll-area@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-scroll-area@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/number': 1.1.2 - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/number": 1.1.2 + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-select@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-select@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/number': 1.1.2 - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/number": 1.1.2 + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) aria-hidden: 1.2.6 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-separator@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-separator@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-slider@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-slider@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/number': 1.1.2 - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/number": 1.1.2 + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-slot@1.2.3(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-slot@1.3.0(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-slot@1.3.0(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-switch@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-switch@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-previous": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-tabs@1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-tabs@1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-toast@1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-toast@1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-toggle-group@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-toggle-group@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-toggle': 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-toggle": 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-toggle@1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-toggle@1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-toolbar@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-toolbar@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-separator': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-toggle-group': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-separator": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-toggle-group": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-tooltip@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-tooltip@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/react-use-callback-ref@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-callback-ref@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-controllable-state@1.2.3(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-controllable-state@1.2.3(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-effect-event@0.0.3(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-effect-event@0.0.3(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-escape-keydown@1.1.3(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-escape-keydown@1.1.3(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-is-hydrated@0.1.1(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-is-hydrated@0.1.1(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-layout-effect@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-layout-effect@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-previous@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-previous@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-rect@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-rect@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/rect': 1.1.2 + "@radix-ui/rect": 1.1.2 react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-use-size@1.1.2(@types/react@19.2.17)(react@19.2.7)': + "@radix-ui/react-use-size@1.1.2(@types/react@19.2.17)(react@19.2.7)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) react: 19.2.7 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@radix-ui/react-visually-hidden@1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@radix-ui/react-visually-hidden@1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) - '@radix-ui/rect@1.1.2': {} + "@radix-ui/rect@1.1.2": {} - '@rollup/rollup-android-arm-eabi@4.62.2': + "@rollup/rollup-android-arm-eabi@4.62.2": optional: true - '@rollup/rollup-android-arm64@4.62.2': + "@rollup/rollup-android-arm64@4.62.2": optional: true - '@rollup/rollup-darwin-arm64@4.62.2': + "@rollup/rollup-darwin-arm64@4.62.2": optional: true - '@rollup/rollup-darwin-x64@4.62.2': + "@rollup/rollup-darwin-x64@4.62.2": optional: true - '@rollup/rollup-freebsd-arm64@4.62.2': + "@rollup/rollup-freebsd-arm64@4.62.2": optional: true - '@rollup/rollup-freebsd-x64@4.62.2': + "@rollup/rollup-freebsd-x64@4.62.2": optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + "@rollup/rollup-linux-arm-gnueabihf@4.62.2": optional: true - '@rollup/rollup-linux-arm-musleabihf@4.62.2': + "@rollup/rollup-linux-arm-musleabihf@4.62.2": optional: true - '@rollup/rollup-linux-arm64-gnu@4.62.2': + "@rollup/rollup-linux-arm64-gnu@4.62.2": optional: true - '@rollup/rollup-linux-arm64-musl@4.62.2': + "@rollup/rollup-linux-arm64-musl@4.62.2": optional: true - '@rollup/rollup-linux-loong64-gnu@4.62.2': + "@rollup/rollup-linux-loong64-gnu@4.62.2": optional: true - '@rollup/rollup-linux-loong64-musl@4.62.2': + "@rollup/rollup-linux-loong64-musl@4.62.2": optional: true - '@rollup/rollup-linux-ppc64-gnu@4.62.2': + "@rollup/rollup-linux-ppc64-gnu@4.62.2": optional: true - '@rollup/rollup-linux-ppc64-musl@4.62.2': + "@rollup/rollup-linux-ppc64-musl@4.62.2": optional: true - '@rollup/rollup-linux-riscv64-gnu@4.62.2': + "@rollup/rollup-linux-riscv64-gnu@4.62.2": optional: true - '@rollup/rollup-linux-riscv64-musl@4.62.2': + "@rollup/rollup-linux-riscv64-musl@4.62.2": optional: true - '@rollup/rollup-linux-s390x-gnu@4.62.2': + "@rollup/rollup-linux-s390x-gnu@4.62.2": optional: true - '@rollup/rollup-linux-x64-gnu@4.62.2': + "@rollup/rollup-linux-x64-gnu@4.62.2": optional: true - '@rollup/rollup-linux-x64-musl@4.62.2': + "@rollup/rollup-linux-x64-musl@4.62.2": optional: true - '@rollup/rollup-openbsd-x64@4.62.2': + "@rollup/rollup-openbsd-x64@4.62.2": optional: true - '@rollup/rollup-openharmony-arm64@4.62.2': + "@rollup/rollup-openharmony-arm64@4.62.2": optional: true - '@rollup/rollup-win32-arm64-msvc@4.62.2': + "@rollup/rollup-win32-arm64-msvc@4.62.2": optional: true - '@rollup/rollup-win32-ia32-msvc@4.62.2': + "@rollup/rollup-win32-ia32-msvc@4.62.2": optional: true - '@rollup/rollup-win32-x64-gnu@4.62.2': + "@rollup/rollup-win32-x64-gnu@4.62.2": optional: true - '@rollup/rollup-win32-x64-msvc@4.62.2': + "@rollup/rollup-win32-x64-msvc@4.62.2": optional: true - '@schummar/icu-type-parser@1.21.5': {} + "@schummar/icu-type-parser@1.21.5": {} - '@stablelib/base64@1.0.1': {} + "@stablelib/base64@1.0.1": {} - '@standard-schema/spec@1.1.0': {} + "@standard-schema/spec@1.1.0": {} - '@standard-schema/utils@0.3.0': {} + "@standard-schema/utils@0.3.0": {} - '@swc/core-darwin-arm64@1.15.43': + "@swc/core-darwin-arm64@1.15.43": optional: true - '@swc/core-darwin-x64@1.15.43': + "@swc/core-darwin-x64@1.15.43": optional: true - '@swc/core-linux-arm-gnueabihf@1.15.43': + "@swc/core-linux-arm-gnueabihf@1.15.43": optional: true - '@swc/core-linux-arm64-gnu@1.15.43': + "@swc/core-linux-arm64-gnu@1.15.43": optional: true - '@swc/core-linux-arm64-musl@1.15.43': + "@swc/core-linux-arm64-musl@1.15.43": optional: true - '@swc/core-linux-ppc64-gnu@1.15.43': + "@swc/core-linux-ppc64-gnu@1.15.43": optional: true - '@swc/core-linux-s390x-gnu@1.15.43': + "@swc/core-linux-s390x-gnu@1.15.43": optional: true - '@swc/core-linux-x64-gnu@1.15.43': + "@swc/core-linux-x64-gnu@1.15.43": optional: true - '@swc/core-linux-x64-musl@1.15.43': + "@swc/core-linux-x64-musl@1.15.43": optional: true - '@swc/core-win32-arm64-msvc@1.15.43': + "@swc/core-win32-arm64-msvc@1.15.43": optional: true - '@swc/core-win32-ia32-msvc@1.15.43': + "@swc/core-win32-ia32-msvc@1.15.43": optional: true - '@swc/core-win32-x64-msvc@1.15.43': + "@swc/core-win32-x64-msvc@1.15.43": optional: true - '@swc/core@1.15.43': + "@swc/core@1.15.43": dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.27 + "@swc/counter": 0.1.3 + "@swc/types": 0.1.27 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.43 - '@swc/core-darwin-x64': 1.15.43 - '@swc/core-linux-arm-gnueabihf': 1.15.43 - '@swc/core-linux-arm64-gnu': 1.15.43 - '@swc/core-linux-arm64-musl': 1.15.43 - '@swc/core-linux-ppc64-gnu': 1.15.43 - '@swc/core-linux-s390x-gnu': 1.15.43 - '@swc/core-linux-x64-gnu': 1.15.43 - '@swc/core-linux-x64-musl': 1.15.43 - '@swc/core-win32-arm64-msvc': 1.15.43 - '@swc/core-win32-ia32-msvc': 1.15.43 - '@swc/core-win32-x64-msvc': 1.15.43 + "@swc/core-darwin-arm64": 1.15.43 + "@swc/core-darwin-x64": 1.15.43 + "@swc/core-linux-arm-gnueabihf": 1.15.43 + "@swc/core-linux-arm64-gnu": 1.15.43 + "@swc/core-linux-arm64-musl": 1.15.43 + "@swc/core-linux-ppc64-gnu": 1.15.43 + "@swc/core-linux-s390x-gnu": 1.15.43 + "@swc/core-linux-x64-gnu": 1.15.43 + "@swc/core-linux-x64-musl": 1.15.43 + "@swc/core-win32-arm64-msvc": 1.15.43 + "@swc/core-win32-ia32-msvc": 1.15.43 + "@swc/core-win32-x64-msvc": 1.15.43 - '@swc/counter@0.1.3': {} + "@swc/counter@0.1.3": {} - '@swc/helpers@0.5.15': + "@swc/helpers@0.5.15": dependencies: tslib: 2.8.1 - '@swc/types@0.1.27': + "@swc/types@0.1.27": dependencies: - '@swc/counter': 0.1.3 + "@swc/counter": 0.1.3 - '@tailwindcss/forms@0.5.11(tailwindcss@4.3.2)': + "@tailwindcss/forms@0.5.11(tailwindcss@4.3.2)": dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: 4.3.2 - '@tailwindcss/node@4.3.2': + "@tailwindcss/node@4.3.2": dependencies: - '@jridgewell/remapping': 2.3.5 + "@jridgewell/remapping": 2.3.5 enhanced-resolve: 5.21.6 jiti: 2.7.0 lightningcss: 1.32.0 @@ -6493,131 +8971,131 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.3.2 - '@tailwindcss/oxide-android-arm64@4.3.2': + "@tailwindcss/oxide-android-arm64@4.3.2": optional: true - '@tailwindcss/oxide-darwin-arm64@4.3.2': + "@tailwindcss/oxide-darwin-arm64@4.3.2": optional: true - '@tailwindcss/oxide-darwin-x64@4.3.2': + "@tailwindcss/oxide-darwin-x64@4.3.2": optional: true - '@tailwindcss/oxide-freebsd-x64@4.3.2': + "@tailwindcss/oxide-freebsd-x64@4.3.2": optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': + "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2": optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': + "@tailwindcss/oxide-linux-arm64-gnu@4.3.2": optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.3.2': + "@tailwindcss/oxide-linux-arm64-musl@4.3.2": optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.3.2': + "@tailwindcss/oxide-linux-x64-gnu@4.3.2": optional: true - '@tailwindcss/oxide-linux-x64-musl@4.3.2': + "@tailwindcss/oxide-linux-x64-musl@4.3.2": optional: true - '@tailwindcss/oxide-wasm32-wasi@4.3.2': + "@tailwindcss/oxide-wasm32-wasi@4.3.2": optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': + "@tailwindcss/oxide-win32-arm64-msvc@4.3.2": optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.3.2': + "@tailwindcss/oxide-win32-x64-msvc@4.3.2": optional: true - '@tailwindcss/oxide@4.3.2': + "@tailwindcss/oxide@4.3.2": optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.3.2 - '@tailwindcss/oxide-darwin-arm64': 4.3.2 - '@tailwindcss/oxide-darwin-x64': 4.3.2 - '@tailwindcss/oxide-freebsd-x64': 4.3.2 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.2 - '@tailwindcss/oxide-linux-arm64-gnu': 4.3.2 - '@tailwindcss/oxide-linux-arm64-musl': 4.3.2 - '@tailwindcss/oxide-linux-x64-gnu': 4.3.2 - '@tailwindcss/oxide-linux-x64-musl': 4.3.2 - '@tailwindcss/oxide-wasm32-wasi': 4.3.2 - '@tailwindcss/oxide-win32-arm64-msvc': 4.3.2 - '@tailwindcss/oxide-win32-x64-msvc': 4.3.2 + "@tailwindcss/oxide-android-arm64": 4.3.2 + "@tailwindcss/oxide-darwin-arm64": 4.3.2 + "@tailwindcss/oxide-darwin-x64": 4.3.2 + "@tailwindcss/oxide-freebsd-x64": 4.3.2 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.3.2 + "@tailwindcss/oxide-linux-arm64-gnu": 4.3.2 + "@tailwindcss/oxide-linux-arm64-musl": 4.3.2 + "@tailwindcss/oxide-linux-x64-gnu": 4.3.2 + "@tailwindcss/oxide-linux-x64-musl": 4.3.2 + "@tailwindcss/oxide-wasm32-wasi": 4.3.2 + "@tailwindcss/oxide-win32-arm64-msvc": 4.3.2 + "@tailwindcss/oxide-win32-x64-msvc": 4.3.2 - '@tailwindcss/postcss@4.3.2': + "@tailwindcss/postcss@4.3.2": dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.3.2 - '@tailwindcss/oxide': 4.3.2 + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.3.2 + "@tailwindcss/oxide": 4.3.2 postcss: 8.5.16 tailwindcss: 4.3.2 - '@tailwindcss/typography@0.5.20(tailwindcss@4.3.2)': + "@tailwindcss/typography@0.5.20(tailwindcss@4.3.2)": dependencies: postcss-selector-parser: 6.0.10 tailwindcss: 4.3.2 - '@tanstack/react-virtual@3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + "@tanstack/react-virtual@3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)": dependencies: - '@tanstack/virtual-core': 3.17.3 + "@tanstack/virtual-core": 3.17.3 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@tanstack/virtual-core@3.17.3': {} + "@tanstack/virtual-core@3.17.3": {} - '@tokenizer/inflate@0.4.1': + "@tokenizer/inflate@0.4.1": dependencies: debug: 4.4.3 token-types: 6.1.2 transitivePeerDependencies: - supports-color - '@tokenizer/token@0.3.0': {} + "@tokenizer/token@0.3.0": {} - '@types/esrecurse@4.3.1': {} + "@types/esrecurse@4.3.1": {} - '@types/estree@1.0.9': {} + "@types/estree@1.0.9": {} - '@types/geojson@7946.0.16': {} + "@types/geojson@7946.0.16": {} - '@types/jpeg-js@0.3.7': + "@types/jpeg-js@0.3.7": dependencies: jpeg-js: 0.4.4 - '@types/json-schema@7.0.15': {} + "@types/json-schema@7.0.15": {} - '@types/node@22.20.0': + "@types/node@22.20.0": dependencies: undici-types: 6.21.0 - '@types/node@24.13.2': + "@types/node@24.13.2": dependencies: undici-types: 7.18.2 - '@types/nodemailer@6.4.24': + "@types/nodemailer@6.4.24": dependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 - '@types/react-dom@19.2.3(@types/react@19.2.17)': + "@types/react-dom@19.2.3(@types/react@19.2.17)": dependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 - '@types/react@19.2.17': + "@types/react@19.2.17": dependencies: csstype: 3.2.3 - '@types/sanitize-html@2.16.1': + "@types/sanitize-html@2.16.1": dependencies: htmlparser2: 10.1.0 - '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': + "@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/type-utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.63.0 + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/scope-manager": 8.63.0 + "@typescript-eslint/type-utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.63.0 eslint: 10.6.0(jiti@2.7.0) ignore: 7.0.6 natural-compare: 1.4.0 @@ -6626,41 +9104,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': + "@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.63.0 + "@typescript-eslint/scope-manager": 8.63.0 + "@typescript-eslint/types": 8.63.0 + "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.63.0 debug: 4.4.3 eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.63.0(typescript@5.9.3)': + "@typescript-eslint/project-service@8.63.0(typescript@5.9.3)": dependencies: - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) - '@typescript-eslint/types': 8.63.0 + "@typescript-eslint/tsconfig-utils": 8.63.0(typescript@5.9.3) + "@typescript-eslint/types": 8.63.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.63.0': + "@typescript-eslint/scope-manager@8.63.0": dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + "@typescript-eslint/types": 8.63.0 + "@typescript-eslint/visitor-keys": 8.63.0 - '@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)': + "@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)": dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': + "@typescript-eslint/type-utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/types": 8.63.0 + "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) + "@typescript-eslint/utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 eslint: 10.6.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -6668,14 +9146,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.63.0': {} + "@typescript-eslint/types@8.63.0": {} - '@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)': + "@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)": dependencies: - '@typescript-eslint/project-service': 8.63.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + "@typescript-eslint/project-service": 8.63.0(typescript@5.9.3) + "@typescript-eslint/tsconfig-utils": 8.63.0(typescript@5.9.3) + "@typescript-eslint/types": 8.63.0 + "@typescript-eslint/visitor-keys": 8.63.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -6685,67 +9163,67 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': + "@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.6.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.63.0 + "@typescript-eslint/types": 8.63.0 + "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.63.0': + "@typescript-eslint/visitor-keys@8.63.0": dependencies: - '@typescript-eslint/types': 8.63.0 + "@typescript-eslint/types": 8.63.0 eslint-visitor-keys: 5.0.1 - '@vitest/expect@2.1.9': + "@vitest/expect@2.1.9": dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 chai: 5.3.3 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0))': + "@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0))": dependencies: - '@vitest/spy': 2.1.9 + "@vitest/spy": 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 5.4.21(@types/node@22.20.0)(lightningcss@1.32.0) - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0))': + "@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.0))": dependencies: - '@vitest/spy': 2.1.9 + "@vitest/spy": 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 5.4.21(@types/node@22.20.0) - '@vitest/pretty-format@2.1.9': + "@vitest/pretty-format@2.1.9": dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.9': + "@vitest/runner@2.1.9": dependencies: - '@vitest/utils': 2.1.9 + "@vitest/utils": 2.1.9 pathe: 1.1.2 - '@vitest/snapshot@2.1.9': + "@vitest/snapshot@2.1.9": dependencies: - '@vitest/pretty-format': 2.1.9 + "@vitest/pretty-format": 2.1.9 magic-string: 0.30.21 pathe: 1.1.2 - '@vitest/spy@2.1.9': + "@vitest/spy@2.1.9": dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.9': + "@vitest/utils@2.1.9": dependencies: - '@vitest/pretty-format': 2.1.9 + "@vitest/pretty-format": 2.1.9 loupe: 3.2.1 tinyrainbow: 1.2.0 @@ -6914,7 +9392,7 @@ snapshots: chart.js@4.5.1: dependencies: - '@kurkle/color': 0.3.4 + "@kurkle/color": 0.3.4 check-error@2.1.3: {} @@ -6934,15 +9412,15 @@ snapshots: cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-id': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-id": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' + - "@types/react" + - "@types/react-dom" concat-map@0.0.1: {} @@ -7046,8 +9524,8 @@ snapshots: drizzle-kit@0.30.6: dependencies: - '@drizzle-team/brocli': 0.10.2 - '@esbuild-kit/esm-loader': 2.6.5 + "@drizzle-team/brocli": 0.10.2 + "@esbuild-kit/esm-loader": 2.6.5 esbuild: 0.19.12 esbuild-register: 3.6.0(esbuild@0.19.12) gel: 2.2.0 @@ -7066,7 +9544,7 @@ snapshots: effect@3.20.0: dependencies: - '@standard-schema/spec': 1.1.0 + "@standard-schema/spec": 1.1.0 fast-check: 3.23.2 electron-to-chromium@1.5.389: {} @@ -7189,109 +9667,109 @@ snapshots: esbuild@0.18.20: optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 + "@esbuild/android-arm": 0.18.20 + "@esbuild/android-arm64": 0.18.20 + "@esbuild/android-x64": 0.18.20 + "@esbuild/darwin-arm64": 0.18.20 + "@esbuild/darwin-x64": 0.18.20 + "@esbuild/freebsd-arm64": 0.18.20 + "@esbuild/freebsd-x64": 0.18.20 + "@esbuild/linux-arm": 0.18.20 + "@esbuild/linux-arm64": 0.18.20 + "@esbuild/linux-ia32": 0.18.20 + "@esbuild/linux-loong64": 0.18.20 + "@esbuild/linux-mips64el": 0.18.20 + "@esbuild/linux-ppc64": 0.18.20 + "@esbuild/linux-riscv64": 0.18.20 + "@esbuild/linux-s390x": 0.18.20 + "@esbuild/linux-x64": 0.18.20 + "@esbuild/netbsd-x64": 0.18.20 + "@esbuild/openbsd-x64": 0.18.20 + "@esbuild/sunos-x64": 0.18.20 + "@esbuild/win32-arm64": 0.18.20 + "@esbuild/win32-ia32": 0.18.20 + "@esbuild/win32-x64": 0.18.20 esbuild@0.19.12: optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 + "@esbuild/aix-ppc64": 0.19.12 + "@esbuild/android-arm": 0.19.12 + "@esbuild/android-arm64": 0.19.12 + "@esbuild/android-x64": 0.19.12 + "@esbuild/darwin-arm64": 0.19.12 + "@esbuild/darwin-x64": 0.19.12 + "@esbuild/freebsd-arm64": 0.19.12 + "@esbuild/freebsd-x64": 0.19.12 + "@esbuild/linux-arm": 0.19.12 + "@esbuild/linux-arm64": 0.19.12 + "@esbuild/linux-ia32": 0.19.12 + "@esbuild/linux-loong64": 0.19.12 + "@esbuild/linux-mips64el": 0.19.12 + "@esbuild/linux-ppc64": 0.19.12 + "@esbuild/linux-riscv64": 0.19.12 + "@esbuild/linux-s390x": 0.19.12 + "@esbuild/linux-x64": 0.19.12 + "@esbuild/netbsd-x64": 0.19.12 + "@esbuild/openbsd-x64": 0.19.12 + "@esbuild/sunos-x64": 0.19.12 + "@esbuild/win32-arm64": 0.19.12 + "@esbuild/win32-ia32": 0.19.12 + "@esbuild/win32-x64": 0.19.12 esbuild@0.21.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + "@esbuild/aix-ppc64": 0.21.5 + "@esbuild/android-arm": 0.21.5 + "@esbuild/android-arm64": 0.21.5 + "@esbuild/android-x64": 0.21.5 + "@esbuild/darwin-arm64": 0.21.5 + "@esbuild/darwin-x64": 0.21.5 + "@esbuild/freebsd-arm64": 0.21.5 + "@esbuild/freebsd-x64": 0.21.5 + "@esbuild/linux-arm": 0.21.5 + "@esbuild/linux-arm64": 0.21.5 + "@esbuild/linux-ia32": 0.21.5 + "@esbuild/linux-loong64": 0.21.5 + "@esbuild/linux-mips64el": 0.21.5 + "@esbuild/linux-ppc64": 0.21.5 + "@esbuild/linux-riscv64": 0.21.5 + "@esbuild/linux-s390x": 0.21.5 + "@esbuild/linux-x64": 0.21.5 + "@esbuild/netbsd-x64": 0.21.5 + "@esbuild/openbsd-x64": 0.21.5 + "@esbuild/sunos-x64": 0.21.5 + "@esbuild/win32-arm64": 0.21.5 + "@esbuild/win32-ia32": 0.21.5 + "@esbuild/win32-x64": 0.21.5 esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.28.1 - '@esbuild/android-arm': 0.28.1 - '@esbuild/android-arm64': 0.28.1 - '@esbuild/android-x64': 0.28.1 - '@esbuild/darwin-arm64': 0.28.1 - '@esbuild/darwin-x64': 0.28.1 - '@esbuild/freebsd-arm64': 0.28.1 - '@esbuild/freebsd-x64': 0.28.1 - '@esbuild/linux-arm': 0.28.1 - '@esbuild/linux-arm64': 0.28.1 - '@esbuild/linux-ia32': 0.28.1 - '@esbuild/linux-loong64': 0.28.1 - '@esbuild/linux-mips64el': 0.28.1 - '@esbuild/linux-ppc64': 0.28.1 - '@esbuild/linux-riscv64': 0.28.1 - '@esbuild/linux-s390x': 0.28.1 - '@esbuild/linux-x64': 0.28.1 - '@esbuild/netbsd-arm64': 0.28.1 - '@esbuild/netbsd-x64': 0.28.1 - '@esbuild/openbsd-arm64': 0.28.1 - '@esbuild/openbsd-x64': 0.28.1 - '@esbuild/openharmony-arm64': 0.28.1 - '@esbuild/sunos-x64': 0.28.1 - '@esbuild/win32-arm64': 0.28.1 - '@esbuild/win32-ia32': 0.28.1 - '@esbuild/win32-x64': 0.28.1 + "@esbuild/aix-ppc64": 0.28.1 + "@esbuild/android-arm": 0.28.1 + "@esbuild/android-arm64": 0.28.1 + "@esbuild/android-x64": 0.28.1 + "@esbuild/darwin-arm64": 0.28.1 + "@esbuild/darwin-x64": 0.28.1 + "@esbuild/freebsd-arm64": 0.28.1 + "@esbuild/freebsd-x64": 0.28.1 + "@esbuild/linux-arm": 0.28.1 + "@esbuild/linux-arm64": 0.28.1 + "@esbuild/linux-ia32": 0.28.1 + "@esbuild/linux-loong64": 0.28.1 + "@esbuild/linux-mips64el": 0.28.1 + "@esbuild/linux-ppc64": 0.28.1 + "@esbuild/linux-riscv64": 0.28.1 + "@esbuild/linux-s390x": 0.28.1 + "@esbuild/linux-x64": 0.28.1 + "@esbuild/netbsd-arm64": 0.28.1 + "@esbuild/netbsd-x64": 0.28.1 + "@esbuild/openbsd-arm64": 0.28.1 + "@esbuild/openbsd-x64": 0.28.1 + "@esbuild/openharmony-arm64": 0.28.1 + "@esbuild/sunos-x64": 0.28.1 + "@esbuild/win32-arm64": 0.28.1 + "@esbuild/win32-ia32": 0.28.1 + "@esbuild/win32-x64": 0.28.1 escalade@3.2.0: {} @@ -7322,8 +9800,8 @@ snapshots: eslint-plugin-react-hooks@7.1.1(eslint@10.6.0(jiti@2.7.0)): dependencies: - '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 + "@babel/core": 7.29.7 + "@babel/parser": 7.29.7 eslint: 10.6.0(jiti@2.7.0) hermes-parser: 0.25.1 zod: 3.25.76 @@ -7337,8 +9815,8 @@ snapshots: eslint-scope@9.1.2: dependencies: - '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.9 + "@types/esrecurse": 4.3.1 + "@types/estree": 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -7348,16 +9826,16 @@ snapshots: eslint@10.6.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.6.0 - '@eslint/core': 1.2.1 - '@eslint/plugin-kit': 0.7.2 - '@humanfs/node': 0.16.8 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.9 + "@eslint-community/eslint-utils": 4.9.1(eslint@10.6.0(jiti@2.7.0)) + "@eslint-community/regexpp": 4.12.2 + "@eslint/config-array": 0.23.5 + "@eslint/config-helpers": 0.6.0 + "@eslint/core": 1.2.1 + "@eslint/plugin-kit": 0.7.2 + "@humanfs/node": 0.16.8 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 @@ -7401,7 +9879,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.9 + "@types/estree": 1.0.9 esutils@2.0.3: {} @@ -7417,8 +9895,8 @@ snapshots: fast-glob@3.3.1: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -7445,7 +9923,7 @@ snapshots: file-type@21.3.4: dependencies: - '@tokenizer/inflate': 0.4.1 + "@tokenizer/inflate": 0.4.1 strtok3: 10.3.5 token-types: 6.1.2 uint8array-extras: 1.5.0 @@ -7498,7 +9976,7 @@ snapshots: gel@2.2.0: dependencies: - '@petamoriken/float16': 3.9.3 + "@petamoriken/float16": 3.9.3 debug: 4.4.3 env-paths: 3.0.0 semver: 7.8.5 @@ -7619,7 +10097,7 @@ snapshots: icu-minify@4.13.1: dependencies: - '@formatjs/icu-messageformat-parser': 3.5.12 + "@formatjs/icu-messageformat-parser": 3.5.12 ieee754@1.2.1: {} @@ -7641,12 +10119,12 @@ snapshots: intl-messageformat@11.2.9: dependencies: - '@formatjs/fast-memoize': 3.1.6 - '@formatjs/icu-messageformat-parser': 3.5.12 + "@formatjs/fast-memoize": 3.1.6 + "@formatjs/icu-messageformat-parser": 3.5.12 ioredis@5.11.1: dependencies: - '@ioredis/commands': 1.10.0 + "@ioredis/commands": 1.10.0 cluster-key-slot: 1.1.1 debug: 4.4.3 denque: 2.1.0 @@ -7906,12 +10384,12 @@ snapshots: magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + "@jridgewell/sourcemap-codec": 1.5.5 mariadb@3.4.5: dependencies: - '@types/geojson': 7946.0.16 - '@types/node': 24.13.2 + "@types/geojson": 7946.0.16 + "@types/node": 24.13.2 denque: 2.1.0 iconv-lite: 0.6.3 lru-cache: 10.4.3 @@ -7941,8 +10419,8 @@ snapshots: music-metadata@11.13.0: dependencies: - '@borewit/text-codec': 0.2.2 - '@tokenizer/token': 0.3.0 + "@borewit/text-codec": 0.2.2 + "@tokenizer/token": 0.3.0 content-type: 2.0.0 debug: 4.4.3 file-type: 21.3.4 @@ -7968,7 +10446,7 @@ snapshots: mysql2@3.22.5(@types/node@22.20.0): dependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 @@ -7980,7 +10458,7 @@ snapshots: mysql2@3.22.6(@types/node@22.20.0): dependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 @@ -8002,7 +10480,7 @@ snapshots: next-auth@5.0.0-beta.31(next@16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(nodemailer@9.0.3)(react@19.2.7): dependencies: - '@auth/core': 0.41.2(nodemailer@9.0.3) + "@auth/core": 0.41.2(nodemailer@9.0.3) next: 16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 optionalDependencies: @@ -8012,9 +10490,9 @@ snapshots: next-intl@4.13.1(next@16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)(typescript@5.9.3): dependencies: - '@formatjs/intl-localematcher': 0.8.10 - '@parcel/watcher': 2.5.6 - '@swc/core': 1.15.43 + "@formatjs/intl-localematcher": 0.8.10 + "@parcel/watcher": 2.5.6 + "@swc/core": 1.15.43 icu-minify: 4.13.1 negotiator: 1.0.0 next: 16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -8025,12 +10503,12 @@ snapshots: optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - - '@swc/helpers' + - "@swc/helpers" next@16.2.10(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@next/env': 16.2.10 - '@swc/helpers': 0.5.15 + "@next/env": 16.2.10 + "@swc/helpers": 0.5.15 baseline-browser-mapping: 2.10.40 caniuse-lite: 1.0.30001799 postcss: 8.5.16 @@ -8038,17 +10516,17 @@ snapshots: react-dom: 19.2.7(react@19.2.7) styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.7) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.10 - '@next/swc-darwin-x64': 16.2.10 - '@next/swc-linux-arm64-gnu': 16.2.10 - '@next/swc-linux-arm64-musl': 16.2.10 - '@next/swc-linux-x64-gnu': 16.2.10 - '@next/swc-linux-x64-musl': 16.2.10 - '@next/swc-win32-arm64-msvc': 16.2.10 - '@next/swc-win32-x64-msvc': 16.2.10 + "@next/swc-darwin-arm64": 16.2.10 + "@next/swc-darwin-x64": 16.2.10 + "@next/swc-linux-arm64-gnu": 16.2.10 + "@next/swc-linux-arm64-musl": 16.2.10 + "@next/swc-linux-x64-gnu": 16.2.10 + "@next/swc-linux-x64-musl": 16.2.10 + "@next/swc-win32-arm64-msvc": 16.2.10 + "@next/swc-win32-x64-msvc": 16.2.10 sharp: 0.34.5 transitivePeerDependencies: - - '@babel/core' + - "@babel/core" - babel-plugin-macros node-addon-api@7.1.1: {} @@ -8099,9 +10577,9 @@ snapshots: otplib@12.0.1: dependencies: - '@otplib/core': 12.0.1 - '@otplib/preset-default': 12.0.1 - '@otplib/preset-v11': 12.0.1 + "@otplib/core": 12.0.1 + "@otplib/preset-default": 12.0.1 + "@otplib/preset-v11": 12.0.1 own-keys@1.0.1: dependencies: @@ -8182,17 +10660,17 @@ snapshots: prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3): dependencies: - '@prisma/config': 7.8.0 - '@prisma/dev': 0.24.3(typescript@5.9.3) - '@prisma/engines': 7.8.0 - '@prisma/studio-core': 0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@prisma/config": 7.8.0 + "@prisma/dev": 0.24.3(typescript@5.9.3) + "@prisma/engines": 7.8.0 + "@prisma/studio-core": 0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) mysql2: 3.15.3 postgres: 3.4.7 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' + - "@types/react" + - "@types/react-dom" - magicast - react - react-dom @@ -8213,66 +10691,66 @@ snapshots: radix-ui@1.6.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@radix-ui/primitive': 1.1.5 - '@radix-ui/react-accessible-icon': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-accordion': 1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-alert-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-arrow': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-aspect-ratio': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-avatar': 1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-checkbox': 1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-collapsible': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context': 1.2.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-context-menu': 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-direction': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-dropdown-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-form': 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-hover-card': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-label': 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-menubar': 1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-navigation-menu': 1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-one-time-password-field': 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-password-toggle-field': 0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-popover': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-progress': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-radio-group': 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-scroll-area': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-select': 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-separator': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slider': 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-slot': 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-switch': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-tabs': 1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-toast': 1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-toggle': 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-toggle-group': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-toolbar': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-tooltip': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-escape-keydown': 1.1.3(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-use-size': 1.1.2(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/primitive": 1.1.5 + "@radix-ui/react-accessible-icon": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-accordion": 1.2.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-alert-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-arrow": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-aspect-ratio": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-avatar": 1.2.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-checkbox": 1.3.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-collapsible": 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-collection": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-compose-refs": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context": 1.2.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-context-menu": 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-dialog": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-direction": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-dismissable-layer": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-dropdown-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-focus-guards": 1.1.4(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-focus-scope": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-form": 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-hover-card": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-label": 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-menu": 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-menubar": 1.1.20(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-navigation-menu": 1.2.18(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-one-time-password-field": 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-password-toggle-field": 0.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-popover": 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-popper": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-portal": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-presence": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-primitive": 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-progress": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-radio-group": 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-roving-focus": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-scroll-area": 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-select": 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-separator": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slider": 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-slot": 1.3.0(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-switch": 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-tabs": 1.1.17(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-toast": 1.2.19(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-toggle": 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-toggle-group": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-toolbar": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-tooltip": 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + "@radix-ui/react-use-callback-ref": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-controllable-state": 1.2.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-effect-event": 0.0.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-escape-keydown": 1.1.3(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-is-hydrated": 0.1.1(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-layout-effect": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-use-size": 1.1.2(@types/react@19.2.17)(react@19.2.7) + "@radix-ui/react-visually-hidden": 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) + "@types/react": 19.2.17 + "@types/react-dom": 19.2.3(@types/react@19.2.17) rc9@3.0.1: dependencies: @@ -8294,7 +10772,7 @@ snapshots: react-style-singleton: 2.2.3(@types/react@19.2.17)(react@19.2.7) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 react-remove-scroll@2.7.2(@types/react@19.2.17)(react@19.2.7): dependencies: @@ -8305,7 +10783,7 @@ snapshots: use-callback-ref: 1.3.3(@types/react@19.2.17)(react@19.2.7) use-sidecar: 1.1.3(@types/react@19.2.17)(react@19.2.7) optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 react-style-singleton@2.2.3(@types/react@19.2.17)(react@19.2.7): dependencies: @@ -8313,7 +10791,7 @@ snapshots: react: 19.2.7 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 react@19.2.7: {} @@ -8374,33 +10852,33 @@ snapshots: rollup@4.62.2: dependencies: - '@types/estree': 1.0.9 + "@types/estree": 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.62.2 - '@rollup/rollup-android-arm64': 4.62.2 - '@rollup/rollup-darwin-arm64': 4.62.2 - '@rollup/rollup-darwin-x64': 4.62.2 - '@rollup/rollup-freebsd-arm64': 4.62.2 - '@rollup/rollup-freebsd-x64': 4.62.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 - '@rollup/rollup-linux-arm-musleabihf': 4.62.2 - '@rollup/rollup-linux-arm64-gnu': 4.62.2 - '@rollup/rollup-linux-arm64-musl': 4.62.2 - '@rollup/rollup-linux-loong64-gnu': 4.62.2 - '@rollup/rollup-linux-loong64-musl': 4.62.2 - '@rollup/rollup-linux-ppc64-gnu': 4.62.2 - '@rollup/rollup-linux-ppc64-musl': 4.62.2 - '@rollup/rollup-linux-riscv64-gnu': 4.62.2 - '@rollup/rollup-linux-riscv64-musl': 4.62.2 - '@rollup/rollup-linux-s390x-gnu': 4.62.2 - '@rollup/rollup-linux-x64-gnu': 4.62.2 - '@rollup/rollup-linux-x64-musl': 4.62.2 - '@rollup/rollup-openbsd-x64': 4.62.2 - '@rollup/rollup-openharmony-arm64': 4.62.2 - '@rollup/rollup-win32-arm64-msvc': 4.62.2 - '@rollup/rollup-win32-ia32-msvc': 4.62.2 - '@rollup/rollup-win32-x64-gnu': 4.62.2 - '@rollup/rollup-win32-x64-msvc': 4.62.2 + "@rollup/rollup-android-arm-eabi": 4.62.2 + "@rollup/rollup-android-arm64": 4.62.2 + "@rollup/rollup-darwin-arm64": 4.62.2 + "@rollup/rollup-darwin-x64": 4.62.2 + "@rollup/rollup-freebsd-arm64": 4.62.2 + "@rollup/rollup-freebsd-x64": 4.62.2 + "@rollup/rollup-linux-arm-gnueabihf": 4.62.2 + "@rollup/rollup-linux-arm-musleabihf": 4.62.2 + "@rollup/rollup-linux-arm64-gnu": 4.62.2 + "@rollup/rollup-linux-arm64-musl": 4.62.2 + "@rollup/rollup-linux-loong64-gnu": 4.62.2 + "@rollup/rollup-linux-loong64-musl": 4.62.2 + "@rollup/rollup-linux-ppc64-gnu": 4.62.2 + "@rollup/rollup-linux-ppc64-musl": 4.62.2 + "@rollup/rollup-linux-riscv64-gnu": 4.62.2 + "@rollup/rollup-linux-riscv64-musl": 4.62.2 + "@rollup/rollup-linux-s390x-gnu": 4.62.2 + "@rollup/rollup-linux-x64-gnu": 4.62.2 + "@rollup/rollup-linux-x64-musl": 4.62.2 + "@rollup/rollup-openbsd-x64": 4.62.2 + "@rollup/rollup-openharmony-arm64": 4.62.2 + "@rollup/rollup-win32-arm64-msvc": 4.62.2 + "@rollup/rollup-win32-ia32-msvc": 4.62.2 + "@rollup/rollup-win32-x64-gnu": 4.62.2 + "@rollup/rollup-win32-x64-msvc": 4.62.2 fsevents: 2.3.3 run-parallel@1.2.0: @@ -8478,34 +10956,34 @@ snapshots: sharp@0.34.5: dependencies: - '@img/colour': 1.1.0 + "@img/colour": 1.1.0 detect-libc: 2.1.2 semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 + "@img/sharp-darwin-arm64": 0.34.5 + "@img/sharp-darwin-x64": 0.34.5 + "@img/sharp-libvips-darwin-arm64": 1.2.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 + "@img/sharp-libvips-linux-arm": 1.2.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 + "@img/sharp-libvips-linux-riscv64": 1.2.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 + "@img/sharp-libvips-linux-x64": 1.2.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + "@img/sharp-linux-arm": 0.34.5 + "@img/sharp-linux-arm64": 0.34.5 + "@img/sharp-linux-ppc64": 0.34.5 + "@img/sharp-linux-riscv64": 0.34.5 + "@img/sharp-linux-s390x": 0.34.5 + "@img/sharp-linux-x64": 0.34.5 + "@img/sharp-linuxmusl-arm64": 0.34.5 + "@img/sharp-linuxmusl-x64": 0.34.5 + "@img/sharp-wasm32": 0.34.5 + "@img/sharp-win32-arm64": 0.34.5 + "@img/sharp-win32-ia32": 0.34.5 + "@img/sharp-win32-x64": 0.34.5 optional: true shebang-command@2.0.0: @@ -8576,7 +11054,7 @@ snapshots: standardwebhooks@1.0.0: dependencies: - '@stablelib/base64': 1.0.1 + "@stablelib/base64": 1.0.1 fast-sha256: 1.3.0 std-env@3.10.0: {} @@ -8622,14 +11100,14 @@ snapshots: strtok3@10.3.5: dependencies: - '@tokenizer/token': 0.3.0 + "@tokenizer/token": 0.3.0 styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.7): dependencies: client-only: 0.0.1 react: 19.2.7 optionalDependencies: - '@babel/core': 7.29.7 + "@babel/core": 7.29.7 tailwind-merge@3.6.0: {} @@ -8660,8 +11138,8 @@ snapshots: token-types@6.1.2: dependencies: - '@borewit/text-codec': 0.2.2 - '@tokenizer/token': 0.3.0 + "@borewit/text-codec": 0.2.2 + "@tokenizer/token": 0.3.0 ieee754: 1.2.1 ts-api-utils@2.5.0(typescript@5.9.3): @@ -8715,10 +11193,10 @@ snapshots: typescript-eslint@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/eslint-plugin": 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/parser": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/typescript-estree": 8.63.0(typescript@5.9.3) + "@typescript-eslint/utils": 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: @@ -8754,12 +11232,12 @@ snapshots: react: 19.2.7 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 use-intl@4.13.1(react@19.2.7): dependencies: - '@formatjs/fast-memoize': 3.1.6 - '@schummar/icu-type-parser': 1.21.5 + "@formatjs/fast-memoize": 3.1.6 + "@schummar/icu-type-parser": 1.21.5 icu-minify: 4.13.1 intl-messageformat: 11.2.9 react: 19.2.7 @@ -8770,7 +11248,7 @@ snapshots: react: 19.2.7 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.17 + "@types/react": 19.2.17 util-deprecate@1.0.2: {} @@ -8786,7 +11264,7 @@ snapshots: pathe: 1.1.2 vite: 5.4.21(@types/node@22.20.0) transitivePeerDependencies: - - '@types/node' + - "@types/node" - less - lightningcss - sass @@ -8804,7 +11282,7 @@ snapshots: pathe: 1.1.2 vite: 5.4.21(@types/node@22.20.0)(lightningcss@1.32.0) transitivePeerDependencies: - - '@types/node' + - "@types/node" - less - lightningcss - sass @@ -8820,7 +11298,7 @@ snapshots: postcss: 8.5.15 rollup: 4.62.2 optionalDependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 fsevents: 2.3.3 vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0): @@ -8829,19 +11307,19 @@ snapshots: postcss: 8.5.16 rollup: 4.62.2 optionalDependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 fsevents: 2.3.3 lightningcss: 1.32.0 vitest@2.1.9(@types/node@22.20.0): dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.20.0)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + "@vitest/expect": 2.1.9 + "@vitest/mocker": 2.1.9(vite@5.4.21(@types/node@22.20.0)) + "@vitest/pretty-format": 2.1.9 + "@vitest/runner": 2.1.9 + "@vitest/snapshot": 2.1.9 + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 chai: 5.3.3 debug: 4.4.3 expect-type: 1.4.0 @@ -8856,7 +11334,7 @@ snapshots: vite-node: 2.1.9(@types/node@22.20.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 transitivePeerDependencies: - less - lightningcss @@ -8870,13 +11348,13 @@ snapshots: vitest@2.1.9(@types/node@22.20.0)(lightningcss@1.32.0): dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + "@vitest/expect": 2.1.9 + "@vitest/mocker": 2.1.9(vite@5.4.21(@types/node@22.20.0)(lightningcss@1.32.0)) + "@vitest/pretty-format": 2.1.9 + "@vitest/runner": 2.1.9 + "@vitest/snapshot": 2.1.9 + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 chai: 5.3.3 debug: 4.4.3 expect-type: 1.4.0 @@ -8891,7 +11369,7 @@ snapshots: vite-node: 2.1.9(@types/node@22.20.0)(lightningcss@1.32.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.20.0 + "@types/node": 22.20.0 transitivePeerDependencies: - less - lightningcss diff --git a/scripts/db-url.test.ts b/scripts/db-url.test.ts index 7c42c31b..92e4a64a 100644 --- a/scripts/db-url.test.ts +++ b/scripts/db-url.test.ts @@ -3,7 +3,9 @@ import { mysqlConnectionUrl } from "./db-url"; describe("mysqlConnectionUrl", () => { it("removes Prisma-only pool options before passing the URL to MySQL2", () => { - const result = mysqlConnectionUrl("mysql://user:pass@localhost:3306/cms?connection_limit=20&pool_timeout=30&charset=utf8mb4"); + const result = mysqlConnectionUrl( + "mysql://user:pass@localhost:3306/cms?connection_limit=20&pool_timeout=30&charset=utf8mb4", + ); expect(result).not.toContain("connection_limit"); expect(result).not.toContain("pool_timeout"); expect(result).toContain("charset=utf8mb4"); diff --git a/scripts/sql-statements.ts b/scripts/sql-statements.ts index 223ddb96..98ca1991 100644 --- a/scripts/sql-statements.ts +++ b/scripts/sql-statements.ts @@ -1,7 +1,5 @@ export function splitSqlStatements(sql: string): string[] { - const withoutComments = sql - .replace(/\/\*[\s\S]*?\*\//g, "") - .replace(/^\s*--.*$/gm, ""); + const withoutComments = sql.replace(/\/\*[\s\S]*?\*\//g, "").replace(/^\s*--.*$/gm, ""); return withoutComments .split(";") diff --git a/src/actions/badges.ts b/src/actions/badges.ts index 3d28e087..92598924 100644 --- a/src/actions/badges.ts +++ b/src/actions/badges.ts @@ -19,7 +19,13 @@ export async function updateBadge({ code, name, desc }: { code: string; name: st await prisma.websiteBadges.upsert({ where: { badgeKey: code }, update: { badgeName: name, badgeDescription: desc, updatedAt: new Date() }, - create: { badgeKey: code, badgeName: name, badgeDescription: desc, createdAt: new Date(), updatedAt: new Date() }, + create: { + badgeKey: code, + badgeName: name, + badgeDescription: desc, + createdAt: new Date(), + updatedAt: new Date(), + }, }); revalidatePath("/admin/import/badges"); } diff --git a/src/actions/banners.ts b/src/actions/banners.ts index 2e122afb..b324ba5c 100644 --- a/src/actions/banners.ts +++ b/src/actions/banners.ts @@ -1,70 +1,70 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; const bannerSchema = z.object({ title: z.string().min(1).max(255), - subtitle: z.string().max(500).optional().default(''), + subtitle: z.string().max(500).optional().default(""), image: z.string().max(500), - link: z.string().max(500).optional().default(''), - color: z.string().max(20).optional().default(''), + link: z.string().max(500).optional().default(""), + color: z.string().max(20).optional().default(""), isActive: z.coerce.number().int().min(0).max(1).default(1), sortOrder: z.coerce.number().int().min(0).default(0), startDate: z.string().max(50).nullable().optional(), endDate: z.string().max(50).nullable().optional(), -}) +}); export const createBanner = adminAction( { permission: PERMS.BANNERS_EDIT, schema: bannerSchema }, async (ctx) => { - const banner = await prisma.websiteBanner.create({ data: ctx.data }) + const banner = await prisma.websiteBanner.create({ data: ctx.data }); logAudit({ userId: ctx.session.user.id, - action: 'banner_create', - target: 'WebsiteBanner', + action: "banner_create", + target: "WebsiteBanner", targetId: banner.id, after: { title: banner.title }, - }) - return actionOk({ id: banner.id }) + }); + return actionOk({ id: banner.id }); }, -) +); -const updateBannerInput = bannerSchema.partial().extend({ id: z.coerce.number().int().positive() }) +const updateBannerInput = bannerSchema.partial().extend({ id: z.coerce.number().int().positive() }); export const updateBanner = adminAction( { permission: PERMS.BANNERS_EDIT, schema: updateBannerInput }, async (ctx) => { - const { id, ...data } = ctx.data - const existing = await prisma.websiteBanner.findUnique({ where: { id } }) - if (!existing) throw new ActionError('Banner not found') - await prisma.websiteBanner.update({ where: { id }, data }) + const { id, ...data } = ctx.data; + const existing = await prisma.websiteBanner.findUnique({ where: { id } }); + if (!existing) throw new ActionError("Banner not found"); + await prisma.websiteBanner.update({ where: { id }, data }); logAudit({ userId: ctx.session.user.id, - action: 'banner_update', - target: 'WebsiteBanner', + action: "banner_update", + target: "WebsiteBanner", targetId: id, - }) - return actionOk({ id }) + }); + return actionOk({ id }); }, -) +); -const deleteBannerInput = z.object({ id: z.coerce.number().int().positive() }) +const deleteBannerInput = z.object({ id: z.coerce.number().int().positive() }); export const deleteBanner = adminAction( { permission: PERMS.BANNERS_EDIT, schema: deleteBannerInput }, async (ctx) => { - await prisma.websiteBanner.delete({ where: { id: ctx.data.id } }) + await prisma.websiteBanner.delete({ where: { id: ctx.data.id } }); logAudit({ userId: ctx.session.user.id, - action: 'banner_delete', - target: 'WebsiteBanner', + action: "banner_delete", + target: "WebsiteBanner", targetId: ctx.data.id, - }) - return actionOk() + }); + return actionOk(); }, -) +); diff --git a/src/actions/bulk-users.ts b/src/actions/bulk-users.ts index 331b343a..d3402a42 100644 --- a/src/actions/bulk-users.ts +++ b/src/actions/bulk-users.ts @@ -7,7 +7,11 @@ import { rcon } from "@/lib/services/rcon"; import { logStaffActivity } from "@/lib/services/staff-activity"; import type { ActionResult } from "@/lib/safe-action-shared"; -export async function bulkUnban({ userIds }: { userIds: number[] }): Promise> { +export async function bulkUnban({ + userIds, +}: { + userIds: number[]; +}): Promise> { const staff = await requireStaff(); const result = await prisma.ban.deleteMany({ where: { userId: { in: userIds } } }); await logStaffActivity({ @@ -19,7 +23,15 @@ export async function bulkUnban({ userIds }: { userIds: number[] }): Promise> { +export async function bulkBan({ + userIds, + reason, + duration, +}: { + userIds: number[]; + reason: string; + duration: number; +}): Promise> { const staff = await requireStaff(); const now = Math.floor(Date.now() / 1000); let banned = 0; @@ -53,7 +65,17 @@ export async function bulkBan({ userIds, reason, duration }: { userIds: number[] return { ok: true as const, data: { banned } }; } -export async function bulkGiveCurrency({ userIds, amount, type }: { userIds: number[]; amount: number; type: "credits" | "pixels" | "points" }): Promise }>> { +export async function bulkGiveCurrency({ + userIds, + amount, + type, +}: { + userIds: number[]; + amount: number; + type: "credits" | "pixels" | "points"; +}): Promise< + ActionResult<{ given: number; total: number; failedIds: Array<{ userId: number; reason: string }> }> +> { const staff = await requireStaff(); let given = 0; const failedIds: Array<{ userId: number; reason: string }> = []; @@ -93,7 +115,15 @@ export async function bulkGiveCurrency({ userIds, amount, type }: { userIds: num return { ok: true as const, data: { given, total: userIds.length, failedIds } }; } -export async function bulkGiveBadge({ userIds, badgeCode }: { userIds: number[]; badgeCode: string }): Promise }>> { +export async function bulkGiveBadge({ + userIds, + badgeCode, +}: { + userIds: number[]; + badgeCode: string; +}): Promise< + ActionResult<{ given: number; total: number; failedIds: Array<{ userId: number; reason: string }> }> +> { const staff = await requireStaff(); let given = 0; const failedIds: Array<{ userId: number; reason: string }> = []; diff --git a/src/actions/catalog-bc.ts b/src/actions/catalog-bc.ts index 442f106f..a458cddc 100644 --- a/src/actions/catalog-bc.ts +++ b/src/actions/catalog-bc.ts @@ -33,7 +33,16 @@ export async function deleteBcItem({ id }: { id: number }) { revalidatePath("/admin/catalog/builder-club"); } -export async function updateBcItem({ id, ...data }: { id: number; itemIds?: string; catalogName?: string; orderNumber?: number; extradata?: string }) { +export async function updateBcItem({ + id, + ...data +}: { + id: number; + itemIds?: string; + catalogName?: string; + orderNumber?: number; + extradata?: string; +}) { const staff = await requireStaff(); await prisma.catalogItemsBc.update({ where: { id }, data: data as any }); await logStaffActivity({ @@ -46,7 +55,16 @@ export async function updateBcItem({ id, ...data }: { id: number; itemIds?: stri revalidatePath("/admin/catalog/builder-club"); } -export async function createBcItem({ pageId, ...data }: { pageId: number; itemIds: string; catalogName: string; orderNumber: number; extradata: string }) { +export async function createBcItem({ + pageId, + ...data +}: { + pageId: number; + itemIds: string; + catalogName: string; + orderNumber: number; + extradata: string; +}) { const staff = await requireStaff(); const created = await prisma.catalogItemsBc.create({ data: { pageId, ...data }, @@ -63,7 +81,10 @@ export async function createBcItem({ pageId, ...data }: { pageId: number; itemId export async function toggleBcPage({ id, field }: { id: number; field: "enabled" | "visible" }) { await requireStaff(); - const page = await prisma.catalogPagesBc.findUnique({ where: { id }, select: { enabled: true, visible: true } }); + const page = await prisma.catalogPagesBc.findUnique({ + where: { id }, + select: { enabled: true, visible: true }, + }); if (!page) return; await prisma.catalogPagesBc.update({ where: { id }, diff --git a/src/actions/catalog-items.ts b/src/actions/catalog-items.ts index 94d6b880..71242215 100644 --- a/src/actions/catalog-items.ts +++ b/src/actions/catalog-items.ts @@ -62,7 +62,11 @@ export async function moveCatalogItems({ ids, targetPageId }: { ids: number[]; t return { ok: true as const, data: {} }; } -export async function reorderCatalogItems({ orders }: { orders: Array<{ id: number; orderNumber: number }> }) { +export async function reorderCatalogItems({ + orders, +}: { + orders: Array<{ id: number; orderNumber: number }>; +}) { await requireStaff(); for (const { id, orderNumber } of orders) { await prisma.catalogItems.update({ where: { id }, data: { orderNumber } }); @@ -72,7 +76,15 @@ export async function reorderCatalogItems({ orders }: { orders: Array<{ id: numb return { ok: true as const, data: {} }; } -export async function updateCatalogItem({ id, catalogFields, baseItem }: { id: number; catalogFields: Record; baseItem?: { id: number; fields: Record } }) { +export async function updateCatalogItem({ + id, + catalogFields, + baseItem, +}: { + id: number; + catalogFields: Record; + baseItem?: { id: number; fields: Record }; +}) { const staff = await requireStaff(); await prisma.catalogItems.update({ where: { id }, data: catalogFields as any }); if (baseItem) { @@ -90,15 +102,22 @@ export async function updateCatalogItem({ id, catalogFields, baseItem }: { id: n return { ok: true as const, data: {} }; } -export async function translateCatalogItems({ items }: { items: Array<{ id: number; publicName: string; description: string }> }) { +export async function translateCatalogItems({ + items, +}: { + items: Array<{ id: number; publicName: string; description: string }>; +}) { await requireStaff(); let namesUpdated = 0; let descriptionsUpdated = 0; let furniDataUpdated = 0; - let furniDataInserted = 0; + const furniDataInserted = 0; for (const item of items) { - const existing = await prisma.catalogItems.findUnique({ where: { id: item.id }, select: { catalogName: true } }); + const existing = await prisma.catalogItems.findUnique({ + where: { id: item.id }, + select: { catalogName: true }, + }); if (!existing) continue; if (item.publicName && item.publicName !== existing.catalogName) { @@ -127,5 +146,14 @@ export async function translateCatalogItems({ items }: { items: Array<{ id: numb await rcon.updateCatalog(); revalidatePath("/admin/catalog"); - return { ok: true as const, data: { namesUpdated, descriptionsUpdated, furniDataUpdated, furniDataInserted: 0, updated: items.length } }; + return { + ok: true as const, + data: { + namesUpdated, + descriptionsUpdated, + furniDataUpdated, + furniDataInserted: 0, + updated: items.length, + }, + }; } diff --git a/src/actions/catalog.ts b/src/actions/catalog.ts index b54c431b..032d229d 100644 --- a/src/actions/catalog.ts +++ b/src/actions/catalog.ts @@ -7,7 +7,10 @@ import { rcon } from "@/lib/services/rcon"; import { logStaffActivity } from "@/lib/services/staff-activity"; import type { ActionResult } from "@/lib/safe-action-shared"; -export async function updateCatalogPage({ id, ...fields }: { id: number } & Record): Promise { +export async function updateCatalogPage({ + id, + ...fields +}: { id: number } & Record): Promise { const staff = await requireStaff(); await prisma.catalogPages.update({ where: { id }, data: fields as any }); await rcon.updateCatalog(); @@ -37,9 +40,18 @@ export async function deleteCatalogPage({ id }: { id: number }) { return { ok: true as const, data: {} }; } -export async function toggleCatalogPage({ id, action }: { id: number; action: "toggleEnabled" | "toggleVisible" }) { +export async function toggleCatalogPage({ + id, + action, +}: { + id: number; + action: "toggleEnabled" | "toggleVisible"; +}) { await requireStaff(); - const page = await prisma.catalogPages.findUnique({ where: { id }, select: { enabled: true, visible: true } }); + const page = await prisma.catalogPages.findUnique({ + where: { id }, + select: { enabled: true, visible: true }, + }); if (!page) return { ok: false as const, error: "Catalog page not found" }; const field = action === "toggleEnabled" ? "enabled" : "visible"; const current = action === "toggleEnabled" ? page.enabled : page.visible; @@ -51,7 +63,17 @@ export async function toggleCatalogPage({ id, action }: { id: number; action: "t return { ok: true as const, data: {} }; } -export async function createCatalogPage(input: { caption: string; parentId: number; pageLayout?: string; iconImage?: number; iconColor?: number; enabled?: "0" | "1"; visible?: "0" | "1"; minRank?: number; orderNum?: number }): Promise> { +export async function createCatalogPage(input: { + caption: string; + parentId: number; + pageLayout?: string; + iconImage?: number; + iconColor?: number; + enabled?: "0" | "1"; + visible?: "0" | "1"; + minRank?: number; + orderNum?: number; +}): Promise> { const staff = await requireStaff(); const created = await prisma.catalogPages.create({ data: { @@ -83,11 +105,7 @@ export async function createCatalogPage(input: { caption: string; parentId: numb return { ok: true as const, data: { id: created.id } }; } -export async function reorderTreePage(input: { - pageId: number; - newParentId?: number; - newOrderNum: number; -}) { +export async function reorderTreePage(input: { pageId: number; newParentId?: number; newOrderNum: number }) { await requireStaff(); await prisma.catalogPages.update({ where: { id: input.pageId }, diff --git a/src/actions/emulator.ts b/src/actions/emulator.ts index 7d4dcda3..94181da6 100644 --- a/src/actions/emulator.ts +++ b/src/actions/emulator.ts @@ -1,39 +1,39 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' -import { rcon } from '@/lib/services/rcon' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; +import { rcon } from "@/lib/services/rcon"; const saveEmulatorSettingsSchema = z.object({ settings: z.record(z.string(), z.string()), -}) +}); export const saveEmulatorSettings = adminAction( { permission: PERMS.SETTINGS_EDIT, schema: saveEmulatorSettingsSchema }, async (ctx) => { - const entries = Object.entries(ctx.data.settings) + const entries = Object.entries(ctx.data.settings); for (const [key, value] of entries) { await prisma.emulatorSettings.upsert({ where: { key }, update: { value: String(value) }, create: { key, value: String(value) }, - }) + }); } - await rcon.updateConfig() + await rcon.updateConfig(); logAudit({ userId: ctx.session.user.id, - action: 'emulator_settings_update', - target: 'EmulatorSettings', + action: "emulator_settings_update", + target: "EmulatorSettings", after: ctx.data.settings, - }) + }); - return actionOk() + return actionOk(); }, -) +); diff --git a/src/actions/events.ts b/src/actions/events.ts index c6d832ab..3bcdbcbe 100644 --- a/src/actions/events.ts +++ b/src/actions/events.ts @@ -1,18 +1,18 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; import { createEventSchema, eventPrizeSchema, eventTypeSchema, eventWinnerSchema, updateEventSchema, -} from '@/lib/validators/event' +} from "@/lib/validators/event"; // ── Event Types ───────────────────────────────────────────────────── @@ -21,63 +21,63 @@ export const createEventType = adminAction( async (ctx) => { const eventType = await prisma.websiteEventType.create({ data: ctx.data, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'event_type_create', - target: 'WebsiteEventType', + action: "event_type_create", + target: "WebsiteEventType", targetId: eventType.id, after: { name: eventType.name }, - }) - return actionOk({ id: eventType.id }) + }); + return actionOk({ id: eventType.id }); }, -) +); const updateEventTypeInput = eventTypeSchema.partial().extend({ id: z.coerce.number().int().positive(), -}) +}); export const updateEventType = adminAction( { permission: PERMS.EVENTS_EDIT, schema: updateEventTypeInput }, async (ctx) => { - const { id, ...data } = ctx.data - const existing = await prisma.websiteEventType.findUnique({ where: { id } }) - if (!existing) throw new ActionError('Event type not found') + const { id, ...data } = ctx.data; + const existing = await prisma.websiteEventType.findUnique({ where: { id } }); + if (!existing) throw new ActionError("Event type not found"); - await prisma.websiteEventType.update({ where: { id }, data }) + await prisma.websiteEventType.update({ where: { id }, data }); logAudit({ userId: ctx.session.user.id, - action: 'event_type_update', - target: 'WebsiteEventType', + action: "event_type_update", + target: "WebsiteEventType", targetId: id, before: { name: existing.name }, after: data, - }) - return actionOk({ id }) + }); + return actionOk({ id }); }, -) +); const deleteEventTypeInput = z.object({ id: z.coerce.number().int().positive(), -}) +}); export const deleteEventType = adminAction( { permission: PERMS.EVENTS_EDIT, schema: deleteEventTypeInput }, async (ctx) => { - const existing = await prisma.websiteEventType.findUnique({ where: { id: ctx.data.id } }) - if (!existing) throw new ActionError('Event type not found') + const existing = await prisma.websiteEventType.findUnique({ where: { id: ctx.data.id } }); + if (!existing) throw new ActionError("Event type not found"); - await prisma.websiteEventType.delete({ where: { id: ctx.data.id } }) + await prisma.websiteEventType.delete({ where: { id: ctx.data.id } }); logAudit({ userId: ctx.session.user.id, - action: 'event_type_delete', - target: 'WebsiteEventType', + action: "event_type_delete", + target: "WebsiteEventType", targetId: ctx.data.id, before: { name: existing.name }, - }) - return actionOk() + }); + return actionOk(); }, -) +); // ── Events ────────────────────────────────────────────────────────── @@ -89,97 +89,97 @@ export const createEvent = adminAction( ...ctx.data, hostUserId: Number(ctx.session.user.id), }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'event_create', - target: 'WebsiteEvent', + action: "event_create", + target: "WebsiteEvent", targetId: event.id, after: { title: event.title }, - }) - return actionOk({ id: event.id }) + }); + return actionOk({ id: event.id }); }, -) +); const updateEventInput = updateEventSchema.extend({ id: z.coerce.number().int().positive(), -}) +}); export const updateEvent = adminAction( { permission: PERMS.EVENTS_EDIT, schema: updateEventInput }, async (ctx) => { - const { id, ...data } = ctx.data - const existing = await prisma.websiteEvent.findUnique({ where: { id } }) - if (!existing) throw new ActionError('Event not found') + const { id, ...data } = ctx.data; + const existing = await prisma.websiteEvent.findUnique({ where: { id } }); + if (!existing) throw new ActionError("Event not found"); - await prisma.websiteEvent.update({ where: { id }, data }) + await prisma.websiteEvent.update({ where: { id }, data }); logAudit({ userId: ctx.session.user.id, - action: 'event_update', - target: 'WebsiteEvent', + action: "event_update", + target: "WebsiteEvent", targetId: id, before: { title: existing.title, status: existing.status }, after: data, - }) - return actionOk({ id }) + }); + return actionOk({ id }); }, -) +); const deleteEventInput = z.object({ id: z.coerce.number().int().positive(), -}) +}); export const deleteEvent = adminAction( { permission: PERMS.EVENTS_EDIT, schema: deleteEventInput }, async (ctx) => { - const existing = await prisma.websiteEvent.findUnique({ where: { id: ctx.data.id } }) - if (!existing) throw new ActionError('Event not found') + const existing = await prisma.websiteEvent.findUnique({ where: { id: ctx.data.id } }); + if (!existing) throw new ActionError("Event not found"); - await prisma.websiteEvent.delete({ where: { id: ctx.data.id } }) + await prisma.websiteEvent.delete({ where: { id: ctx.data.id } }); logAudit({ userId: ctx.session.user.id, - action: 'event_delete', - target: 'WebsiteEvent', + action: "event_delete", + target: "WebsiteEvent", targetId: ctx.data.id, before: { title: existing.title }, - }) - return actionOk() + }); + return actionOk(); }, -) +); // ── Prizes ────────────────────────────────────────────────────────── export const addEventPrize = adminAction( { permission: PERMS.EVENTS_EDIT, schema: eventPrizeSchema }, async (ctx) => { - const prize = await prisma.websiteEventPrize.create({ data: ctx.data }) - return actionOk({ id: prize.id }) + const prize = await prisma.websiteEventPrize.create({ data: ctx.data }); + return actionOk({ id: prize.id }); }, -) +); -const deletePrizeInput = z.object({ id: z.coerce.number().int().positive() }) +const deletePrizeInput = z.object({ id: z.coerce.number().int().positive() }); export const deleteEventPrize = adminAction( { permission: PERMS.EVENTS_EDIT, schema: deletePrizeInput }, async (ctx) => { - await prisma.websiteEventPrize.delete({ where: { id: ctx.data.id } }) - return actionOk() + await prisma.websiteEventPrize.delete({ where: { id: ctx.data.id } }); + return actionOk(); }, -) +); // ── Winners ───────────────────────────────────────────────────────── export const addEventWinner = adminAction( { permission: PERMS.EVENTS_EDIT, schema: eventWinnerSchema }, async (ctx) => { - const winner = await prisma.websiteEventWinner.create({ data: ctx.data }) + const winner = await prisma.websiteEventWinner.create({ data: ctx.data }); logAudit({ userId: ctx.session.user.id, - action: 'event_winner_add', - target: 'WebsiteEventWinner', + action: "event_winner_add", + target: "WebsiteEventWinner", targetId: winner.id, after: { eventId: ctx.data.eventId, userId: ctx.data.userId, position: ctx.data.position }, - }) - return actionOk({ id: winner.id }) + }); + return actionOk({ id: winner.id }); }, -) +); diff --git a/src/actions/import-badges.ts b/src/actions/import-badges.ts index 890feaae..7d9aed58 100644 --- a/src/actions/import-badges.ts +++ b/src/actions/import-badges.ts @@ -3,13 +3,27 @@ import { requireStaff } from "@/lib/admin/guard"; import { prisma } from "@/lib/prisma"; -export async function importBadgeFromRemote({ code, name, description }: { code: string; name: string; description: string }) { +export async function importBadgeFromRemote({ + code, + name, + description, +}: { + code: string; + name: string; + description: string; +}) { await requireStaff(); try { await prisma.websiteBadges.upsert({ where: { badgeKey: code }, update: { badgeName: name, badgeDescription: description, updatedAt: new Date() }, - create: { badgeKey: code, badgeName: name, badgeDescription: description, createdAt: new Date(), updatedAt: new Date() }, + create: { + badgeKey: code, + badgeName: name, + badgeDescription: description, + createdAt: new Date(), + updatedAt: new Date(), + }, }); return { ok: true as const }; } catch { diff --git a/src/actions/import-furni.ts b/src/actions/import-furni.ts index 5f2a680a..02c91196 100644 --- a/src/actions/import-furni.ts +++ b/src/actions/import-furni.ts @@ -1,19 +1,20 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { adminAction } from '@/lib/safe-action' -import { actionOk } from '@/lib/safe-action-shared' -import { cleanupConvertedSwfs, deleteImportedItem } from '@/lib/services/furni-import' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { adminAction } from "@/lib/safe-action"; +import { actionOk } from "@/lib/safe-action-shared"; +import { cleanupConvertedSwfs, deleteImportedItem } from "@/lib/services/furni-import"; export const cleanSwfFiles = adminAction({ permission: PERMS.ASSETS_IMPORT }, async () => { - const result = await cleanupConvertedSwfs() - return actionOk(result as unknown as Record) -}) + const result = await cleanupConvertedSwfs(); + return actionOk(result as unknown as Record); +}); -const deleteSchema = z.object({ classname: z.string().trim().min(1) }) +const deleteSchema = z.object({ classname: z.string().trim().min(1) }); export const deleteImportedFurni = adminAction( { permission: PERMS.ASSETS_IMPORT, schema: deleteSchema }, - async (ctx) => actionOk((await deleteImportedItem(ctx.data.classname)) as unknown as Record), -) + async (ctx) => + actionOk((await deleteImportedItem(ctx.data.classname)) as unknown as Record), +); diff --git a/src/actions/moderation.ts b/src/actions/moderation.ts index b95f21c6..7564f1bf 100644 --- a/src/actions/moderation.ts +++ b/src/actions/moderation.ts @@ -1,67 +1,67 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' -import { rcon } from '@/lib/services/rcon' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; +import { rcon } from "@/lib/services/rcon"; // ── CFH Ticket Actions ────────────────────────────────────────────── -const cfhIdSchema = z.object({ ticketId: z.coerce.number().int().positive() }) +const cfhIdSchema = z.object({ ticketId: z.coerce.number().int().positive() }); export const assignCfhTicket = adminAction( { permission: PERMS.MODERATION_EDIT, schema: cfhIdSchema }, async (ctx) => { - const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }) - if (!ticket) throw new ActionError('Ticket not found') + const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }); + if (!ticket) throw new ActionError("Ticket not found"); await prisma.supportTickets.update({ where: { id: ctx.data.ticketId }, data: { modId: ctx.session.user.id, state: 1 }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'cfh_assign', - target: 'support_tickets', + action: "cfh_assign", + target: "support_tickets", targetId: ctx.data.ticketId, - }) + }); - return actionOk() + return actionOk(); }, -) +); const cfhStateSchema = z.object({ ticketId: z.coerce.number().int().positive(), state: z.coerce.number().int().min(0).max(3), -}) +}); export const updateCfhState = adminAction( { permission: PERMS.MODERATION_EDIT, schema: cfhStateSchema }, async (ctx) => { - const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }) - if (!ticket) throw new ActionError('Ticket not found') + const ticket = await prisma.supportTickets.findUnique({ where: { id: ctx.data.ticketId } }); + if (!ticket) throw new ActionError("Ticket not found"); await prisma.supportTickets.update({ where: { id: ctx.data.ticketId }, data: { state: ctx.data.state, modId: ctx.session.user.id }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'cfh_state_change', - target: 'support_tickets', + action: "cfh_state_change", + target: "support_tickets", targetId: ctx.data.ticketId, before: { state: ticket.state }, after: { state: ctx.data.state }, - }) + }); - return actionOk() + return actionOk(); }, -) +); export const closeCfhTicket = adminAction( { permission: PERMS.MODERATION_EDIT, schema: cfhIdSchema }, @@ -69,138 +69,138 @@ export const closeCfhTicket = adminAction( await prisma.supportTickets.update({ where: { id: ctx.data.ticketId }, data: { state: 2, modId: ctx.session.user.id }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'cfh_close', - target: 'support_tickets', + action: "cfh_close", + target: "support_tickets", targetId: ctx.data.ticketId, - }) + }); - return actionOk() + return actionOk(); }, -) +); // ── Quick Mod Actions ──────────────────────────────────────────────── -const userIdSchema = z.object({ userId: z.coerce.number().int().positive() }) +const userIdSchema = z.object({ userId: z.coerce.number().int().positive() }); export const quickKick = adminAction( { permission: PERMS.MODERATION_EDIT, schema: userIdSchema }, async (ctx) => { - await rcon.disconnectUser(ctx.data.userId) + await rcon.disconnectUser(ctx.data.userId); logAudit({ userId: ctx.session.user.id, - action: 'mod_kick', - target: 'User', + action: "mod_kick", + target: "User", targetId: ctx.data.userId, - }) + }); - return actionOk() + return actionOk(); }, -) +); const muteSchema = z.object({ userId: z.coerce.number().int().positive(), duration: z.coerce.number().int().min(0).max(525600), // max 1 year in minutes -}) +}); export const quickMute = adminAction( { permission: PERMS.MODERATION_EDIT, schema: muteSchema }, async (ctx) => { - await rcon.muteUser(ctx.data.userId, ctx.data.duration) + await rcon.muteUser(ctx.data.userId, ctx.data.duration); logAudit({ userId: ctx.session.user.id, - action: 'mod_mute', - target: 'User', + action: "mod_mute", + target: "User", targetId: ctx.data.userId, after: { duration: ctx.data.duration }, - }) + }); - return actionOk() + return actionOk(); }, -) +); export const quickUnmute = adminAction( { permission: PERMS.MODERATION_EDIT, schema: userIdSchema }, async (ctx) => { - await rcon.unmuteUser(ctx.data.userId) + await rcon.unmuteUser(ctx.data.userId); logAudit({ userId: ctx.session.user.id, - action: 'mod_unmute', - target: 'User', + action: "mod_unmute", + target: "User", targetId: ctx.data.userId, - }) + }); - return actionOk() + return actionOk(); }, -) +); const alertSchema = z.object({ userId: z.coerce.number().int().positive(), message: z.string().min(1).max(500), -}) +}); export const quickAlert = adminAction( { permission: PERMS.MODERATION_EDIT, schema: alertSchema }, async (ctx) => { - await rcon.alertUser(ctx.data.userId, ctx.data.message) + await rcon.alertUser(ctx.data.userId, ctx.data.message); logAudit({ userId: ctx.session.user.id, - action: 'mod_alert', - target: 'User', + action: "mod_alert", + target: "User", targetId: ctx.data.userId, after: { message: ctx.data.message }, - }) + }); - return actionOk() + return actionOk(); }, -) +); -const roomIdSchema = z.object({ roomId: z.coerce.number().int().positive() }) +const roomIdSchema = z.object({ roomId: z.coerce.number().int().positive() }); export const quickRoomKick = adminAction( { permission: PERMS.MODERATION_EDIT, schema: roomIdSchema }, async (ctx) => { - await rcon.kickAll(ctx.data.roomId) + await rcon.kickAll(ctx.data.roomId); logAudit({ userId: ctx.session.user.id, - action: 'mod_room_kick', - target: 'Room', + action: "mod_room_kick", + target: "Room", targetId: ctx.data.roomId, - }) + }); - return actionOk() + return actionOk(); }, -) +); const broadcastSchema = z.object({ message: z.string().min(1).max(500), - type: z.enum(['hotel', 'staff']), -}) + type: z.enum(["hotel", "staff"]), +}); export const broadcastAlert = adminAction( { permission: PERMS.MODERATION_EDIT, schema: broadcastSchema }, async (ctx) => { - if (ctx.data.type === 'hotel') { - await rcon.hotelAlert(ctx.data.message) + if (ctx.data.type === "hotel") { + await rcon.hotelAlert(ctx.data.message); } else { - await rcon.staffAlert(ctx.data.message) + await rcon.staffAlert(ctx.data.message); } logAudit({ userId: ctx.session.user.id, action: `mod_broadcast_${ctx.data.type}`, - target: 'broadcast', + target: "broadcast", after: { message: ctx.data.message }, - }) + }); - return actionOk() + return actionOk(); }, -) +); diff --git a/src/actions/permissions.ts b/src/actions/permissions.ts index 58c153db..c5c4c3c8 100644 --- a/src/actions/permissions.ts +++ b/src/actions/permissions.ts @@ -1,102 +1,140 @@ -'use server' +"use server"; -import { revalidateTag } from 'next/cache' -import { z } from 'zod' -import { PERMS } from '@/lib/permission-slugs' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { createEmulatorRank, deleteEmulatorRank, updateEmulatorRank } from '@/lib/services/permission-ranks' -import { rcon } from '@/lib/services/rcon' -import { logStaffActivity } from '@/lib/services/staff-activity' +import { revalidateTag } from "next/cache"; +import { z } from "zod"; +import { PERMS } from "@/lib/permission-slugs"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { createEmulatorRank, deleteEmulatorRank, updateEmulatorRank } from "@/lib/services/permission-ranks"; +import { rcon } from "@/lib/services/rcon"; +import { logStaffActivity } from "@/lib/services/staff-activity"; const createRankSchema = z.object({ rank_name: z.string().trim().min(1).max(25), level: z.coerce.number().int().min(1), -}) +}); export const createRank = adminAction( { schema: createRankSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - const id = await createEmulatorRank(prisma, ctx.data) + const id = await createEmulatorRank(prisma, ctx.data); await prisma.aclRole.upsert({ where: { slug: `rank_${id}` }, - create: { slug: `rank_${id}`, title: ctx.data.rank_name, description: 'CMS role synchronized from permission_ranks' }, + create: { + slug: `rank_${id}`, + title: ctx.data.rank_name, + description: "CMS role synchronized from permission_ranks", + }, update: { title: ctx.data.rank_name }, - }) - await logStaffActivity({ staffId: ctx.session.user.id, action: 'rank_create', description: `Created rank #${id}`, targetType: 'rank', targetId: id }) - await rcon.send('updatepermissions') - revalidateTag('permissions', { expire: 0 }) - return actionOk({ id }) + }); + await logStaffActivity({ + staffId: ctx.session.user.id, + action: "rank_create", + description: `Created rank #${id}`, + targetType: "rank", + targetId: id, + }); + await rcon.send("updatepermissions"); + revalidateTag("permissions", { expire: 0 }); + return actionOk({ id }); }, -) +); -const deleteRankSchema = z.object({ id: z.coerce.number().int().positive() }) +const deleteRankSchema = z.object({ id: z.coerce.number().int().positive() }); export const deleteRank = adminAction( { schema: deleteRankSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - const users = await prisma.user.count({ where: { rank: ctx.data.id } }) - if (users > 0) throw new ActionError(`Cannot delete: ${users} users have this rank`) - const role = await prisma.aclRole.findFirst({ where: { slug: `rank_${ctx.data.id}` } }) - await deleteEmulatorRank(prisma, ctx.data.id) + const users = await prisma.user.count({ where: { rank: ctx.data.id } }); + if (users > 0) throw new ActionError(`Cannot delete: ${users} users have this rank`); + const role = await prisma.aclRole.findFirst({ where: { slug: `rank_${ctx.data.id}` } }); + await deleteEmulatorRank(prisma, ctx.data.id); if (role) { await prisma.$transaction([ - prisma.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: 'Role' } }), + prisma.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: "Role" } }), prisma.aclModelRole.deleteMany({ where: { roleId: role.id } }), prisma.aclRole.delete({ where: { id: role.id } }), - ]) + ]); } - await logStaffActivity({ staffId: ctx.session.user.id, action: 'rank_delete', description: `Deleted rank #${ctx.data.id}`, targetType: 'rank', targetId: ctx.data.id }) - await rcon.send('updatepermissions') - revalidateTag('permissions', { expire: 0 }) - return actionOk() + await logStaffActivity({ + staffId: ctx.session.user.id, + action: "rank_delete", + description: `Deleted rank #${ctx.data.id}`, + targetType: "rank", + targetId: ctx.data.id, + }); + await rcon.send("updatepermissions"); + revalidateTag("permissions", { expire: 0 }); + return actionOk(); }, -) +); const saveRankSchema = z.object({ id: z.coerce.number().int().positive(), fields: z.record(z.string(), z.union([z.string(), z.number()])), -}) +}); export const saveRank = adminAction( { schema: saveRankSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - await updateEmulatorRank(prisma, ctx.data.id, ctx.data.fields) - if (typeof ctx.data.fields.rank_name === 'string') { - await prisma.aclRole.updateMany({ where: { slug: `rank_${ctx.data.id}` }, data: { title: ctx.data.fields.rank_name } }) + await updateEmulatorRank(prisma, ctx.data.id, ctx.data.fields); + if (typeof ctx.data.fields.rank_name === "string") { + await prisma.aclRole.updateMany({ + where: { slug: `rank_${ctx.data.id}` }, + data: { title: ctx.data.fields.rank_name }, + }); } - await logStaffActivity({ staffId: ctx.session.user.id, action: 'rank_update', description: `Updated rank #${ctx.data.id}`, targetType: 'rank', targetId: ctx.data.id }) - await rcon.send('updatepermissions') - revalidateTag('permissions', { expire: 0 }) - return actionOk() + await logStaffActivity({ + staffId: ctx.session.user.id, + action: "rank_update", + description: `Updated rank #${ctx.data.id}`, + targetType: "rank", + targetId: ctx.data.id, + }); + await rcon.send("updatepermissions"); + revalidateTag("permissions", { expire: 0 }); + return actionOk(); }, -) +); const setCmsPermsSchema = z.object({ roleId: z.coerce.number().int().positive(), permissionSlugs: z.array(z.string().trim().min(1)).max(500), -}) +}); export const setCmsPermissions = adminAction( { schema: setCmsPermsSchema, permission: PERMS.PERMISSIONS_MANAGE }, async (ctx) => { - const role = await prisma.aclRole.findUnique({ where: { id: ctx.data.roleId }, select: { id: true, slug: true } }) - if (!role) throw new ActionError('Role not found') + const role = await prisma.aclRole.findUnique({ + where: { id: ctx.data.roleId }, + select: { id: true, slug: true }, + }); + if (!role) throw new ActionError("Role not found"); const permissions = await prisma.aclPermission.findMany({ where: { slug: { in: ctx.data.permissionSlugs } }, select: { id: true }, - }) + }); await prisma.$transaction(async (tx) => { - await tx.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: 'Role' } }) + await tx.aclModelPermission.deleteMany({ where: { modelId: role.id, modelType: "Role" } }); if (permissions.length) { await tx.aclModelPermission.createMany({ - data: permissions.map((permission) => ({ modelId: role.id, modelType: 'Role', permissionId: permission.id })), - }) + data: permissions.map((permission) => ({ + modelId: role.id, + modelType: "Role", + permissionId: permission.id, + })), + }); } - }) - await logStaffActivity({ staffId: ctx.session.user.id, action: 'acl_role_permissions_update', description: `Updated ${permissions.length} permissions for ${role.slug}`, targetType: 'acl_role', targetId: role.id }) - revalidateTag('permissions', { expire: 0 }) - return actionOk() + }); + await logStaffActivity({ + staffId: ctx.session.user.id, + action: "acl_role_permissions_update", + description: `Updated ${permissions.length} permissions for ${role.slug}`, + targetType: "acl_role", + targetId: role.id, + }); + revalidateTag("permissions", { expire: 0 }); + return actionOk(); }, -) +); diff --git a/src/actions/polls.ts b/src/actions/polls.ts index aa16a06a..928da045 100644 --- a/src/actions/polls.ts +++ b/src/actions/polls.ts @@ -1,107 +1,107 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' -import { createPollSchema, pollQuestionSchema, updatePollSchema } from '@/lib/validators/poll' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; +import { createPollSchema, pollQuestionSchema, updatePollSchema } from "@/lib/validators/poll"; // ── Polls ─────────────────────────────────────────────────────────── export const createPoll = adminAction( { permission: PERMS.POLLS_EDIT, schema: createPollSchema }, async (ctx) => { - const poll = await prisma.websitePoll.create({ data: ctx.data }) + const poll = await prisma.websitePoll.create({ data: ctx.data }); logAudit({ userId: ctx.session.user.id, - action: 'poll_create', - target: 'WebsitePoll', + action: "poll_create", + target: "WebsitePoll", targetId: poll.id, after: { title: poll.title }, - }) - return actionOk({ id: poll.id }) + }); + return actionOk({ id: poll.id }); }, -) +); const updatePollInput = updatePollSchema.extend({ id: z.coerce.number().int().positive(), -}) +}); export const updatePoll = adminAction( { permission: PERMS.POLLS_EDIT, schema: updatePollInput }, async (ctx) => { - const { id, ...data } = ctx.data - const existing = await prisma.websitePoll.findUnique({ where: { id } }) - if (!existing) throw new ActionError('Poll not found') + const { id, ...data } = ctx.data; + const existing = await prisma.websitePoll.findUnique({ where: { id } }); + if (!existing) throw new ActionError("Poll not found"); - await prisma.websitePoll.update({ where: { id }, data }) + await prisma.websitePoll.update({ where: { id }, data }); logAudit({ userId: ctx.session.user.id, - action: 'poll_update', - target: 'WebsitePoll', + action: "poll_update", + target: "WebsitePoll", targetId: id, before: { title: existing.title, status: existing.status }, after: data, - }) - return actionOk({ id }) + }); + return actionOk({ id }); }, -) +); const deletePollInput = z.object({ id: z.coerce.number().int().positive(), -}) +}); export const deletePoll = adminAction( { permission: PERMS.POLLS_EDIT, schema: deletePollInput }, async (ctx) => { - const existing = await prisma.websitePoll.findUnique({ where: { id: ctx.data.id } }) - if (!existing) throw new ActionError('Poll not found') + const existing = await prisma.websitePoll.findUnique({ where: { id: ctx.data.id } }); + if (!existing) throw new ActionError("Poll not found"); - await prisma.websitePoll.delete({ where: { id: ctx.data.id } }) + await prisma.websitePoll.delete({ where: { id: ctx.data.id } }); logAudit({ userId: ctx.session.user.id, - action: 'poll_delete', - target: 'WebsitePoll', + action: "poll_delete", + target: "WebsitePoll", targetId: ctx.data.id, before: { title: existing.title }, - }) - return actionOk() + }); + return actionOk(); }, -) +); // ── Questions ─────────────────────────────────────────────────────── export const addPollQuestion = adminAction( { permission: PERMS.POLLS_EDIT, schema: pollQuestionSchema }, async (ctx) => { - const question = await prisma.websitePollQuestion.create({ data: ctx.data }) - return actionOk({ id: question.id }) + const question = await prisma.websitePollQuestion.create({ data: ctx.data }); + return actionOk({ id: question.id }); }, -) +); const updateQuestionInput = pollQuestionSchema.partial().extend({ id: z.coerce.number().int().positive(), -}) +}); export const updatePollQuestion = adminAction( { permission: PERMS.POLLS_EDIT, schema: updateQuestionInput }, async (ctx) => { - const { id, ...data } = ctx.data - await prisma.websitePollQuestion.update({ where: { id }, data }) - return actionOk({ id }) + const { id, ...data } = ctx.data; + await prisma.websitePollQuestion.update({ where: { id }, data }); + return actionOk({ id }); }, -) +); const deleteQuestionInput = z.object({ id: z.coerce.number().int().positive(), -}) +}); export const deletePollQuestion = adminAction( { permission: PERMS.POLLS_EDIT, schema: deleteQuestionInput }, async (ctx) => { - await prisma.websitePollQuestion.delete({ where: { id: ctx.data.id } }) - return actionOk() + await prisma.websitePollQuestion.delete({ where: { id: ctx.data.id } }); + return actionOk(); }, -) +); diff --git a/src/actions/prefixes.ts b/src/actions/prefixes.ts index 640eca7d..2814740c 100644 --- a/src/actions/prefixes.ts +++ b/src/actions/prefixes.ts @@ -1,10 +1,10 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; // Models custom_prefixes / custom_prefix_blacklist / custom_prefix_settings // are not represented in prisma/schema.prisma yet — we use raw queries with @@ -19,26 +19,26 @@ const createPrefixSchema = z.object({ icon: z.string().optional(), effect: z.string().optional(), active: z.coerce.number().int().min(0).max(1).default(1), -}) +}); export const createPrefix = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: createPrefixSchema }, async (ctx) => { - const { username, text, color, icon, effect, active } = ctx.data + const { username, text, color, icon, effect, active } = ctx.data; const users = await prisma.$queryRaw<{ id: number }[]>` SELECT id FROM users WHERE username = ${username} LIMIT 1 - ` - if (users.length === 0) throw new ActionError('User not found') + `; + if (users.length === 0) throw new ActionError("User not found"); await prisma.$executeRaw` INSERT INTO custom_prefixes (user_id, text, color, icon, effect, active) - VALUES (${users[0].id}, ${text}, ${color}, ${icon || ''}, ${effect || ''}, ${active}) - ` + VALUES (${users[0].id}, ${text}, ${color}, ${icon || ""}, ${effect || ""}, ${active}) + `; - return actionOk() + return actionOk(); }, -) +); // ── Update prefix ─────────────────────────────────────────────────── @@ -49,94 +49,94 @@ const updatePrefixSchema = z.object({ icon: z.string().optional(), effect: z.string().optional(), active: z.coerce.number().int().min(0).max(1).optional(), -}) +}); export const updatePrefix = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: updatePrefixSchema }, async (ctx) => { - const { id, text, color, icon, effect, active } = ctx.data + const { id, text, color, icon, effect, active } = ctx.data; await prisma.$executeRaw` UPDATE custom_prefixes - SET text = ${text}, color = ${color}, icon = ${icon || ''}, effect = ${effect || ''}, active = ${active ?? 1} + SET text = ${text}, color = ${color}, icon = ${icon || ""}, effect = ${effect || ""}, active = ${active ?? 1} WHERE id = ${id} - ` + `; - return actionOk() + return actionOk(); }, -) +); // ── Delete prefix ─────────────────────────────────────────────────── const deletePrefixSchema = z.object({ id: z.coerce.number().int().positive(), -}) +}); export const deletePrefix = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: deletePrefixSchema }, async (ctx) => { - await prisma.$executeRaw`DELETE FROM custom_prefixes WHERE id = ${ctx.data.id}` - return actionOk() + await prisma.$executeRaw`DELETE FROM custom_prefixes WHERE id = ${ctx.data.id}`; + return actionOk(); }, -) +); // ── Add blacklist word ────────────────────────────────────────────── const addBlacklistWordSchema = z.object({ word: z.string().min(1).max(100), -}) +}); export const addBlacklistWord = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: addBlacklistWordSchema }, async (ctx) => { await prisma.$executeRaw` INSERT INTO custom_prefix_blacklist (word) VALUES (${ctx.data.word.trim()}) - ` - return actionOk() + `; + return actionOk(); }, -) +); // ── Remove blacklist word ─────────────────────────────────────────── const removeBlacklistWordSchema = z.object({ id: z.coerce.number().int().positive(), -}) +}); export const removeBlacklistWord = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: removeBlacklistWordSchema }, async (ctx) => { - await prisma.$executeRaw`DELETE FROM custom_prefix_blacklist WHERE id = ${ctx.data.id}` - return actionOk() + await prisma.$executeRaw`DELETE FROM custom_prefix_blacklist WHERE id = ${ctx.data.id}`; + return actionOk(); }, -) +); // ── Update prefix settings ────────────────────────────────────────── const SETTINGS_WHITELIST = new Set([ - 'enabled', - 'max_length', - 'min_rank', - 'allow_colors', - 'allow_bold', - 'allow_italic', - 'default_color', -]) + "enabled", + "max_length", + "min_rank", + "allow_colors", + "allow_bold", + "allow_italic", + "default_color", +]); const updatePrefixSettingsSchema = z.object({ settings: z.record(z.string(), z.string()), -}) +}); export const updatePrefixSettings = adminAction( { permission: PERMS.PREFIXES_EDIT, schema: updatePrefixSettingsSchema }, async (ctx) => { for (const [key, value] of Object.entries(ctx.data.settings)) { - if (!SETTINGS_WHITELIST.has(key)) continue + if (!SETTINGS_WHITELIST.has(key)) continue; await prisma.$executeRaw` INSERT INTO custom_prefix_settings (\`key\`, \`value\`) VALUES (${key}, ${value}) ON DUPLICATE KEY UPDATE \`value\` = ${value} - ` + `; } - return actionOk() + return actionOk(); }, -) +); diff --git a/src/actions/rooms.ts b/src/actions/rooms.ts index b0779bee..a4fb121b 100644 --- a/src/actions/rooms.ts +++ b/src/actions/rooms.ts @@ -71,7 +71,16 @@ export async function deleteRoom({ id }: { id: number }) { revalidatePath("/admin/rooms"); } -export async function updateRoom({ id, ...data }: { id: number; name?: string; description?: string; state?: string; usersMax?: number }) { +export async function updateRoom({ + id, + ...data +}: { + id: number; + name?: string; + description?: string; + state?: string; + usersMax?: number; +}) { const staff = await requireStaff(); await prisma.rooms.update({ where: { id }, data: data as any }); await logStaffActivity({ diff --git a/src/actions/soundtracks.ts b/src/actions/soundtracks.ts index a9772671..9649c182 100644 --- a/src/actions/soundtracks.ts +++ b/src/actions/soundtracks.ts @@ -10,7 +10,19 @@ export async function deleteSoundtrack({ id }: { id: number }) { revalidatePath("/admin/sounds"); } -export async function updateSoundtrack({ id, name, author, track, length }: { id: number; name: string; author: string; track: string; length: number }) { +export async function updateSoundtrack({ + id, + name, + author, + track, + length, +}: { + id: number; + name: string; + author: string; + track: string; + length: number; +}) { await requireStaff(); await prisma.soundtracks.update({ where: { id }, diff --git a/src/actions/ticket-templates.ts b/src/actions/ticket-templates.ts index 1e290b23..52bf9a83 100644 --- a/src/actions/ticket-templates.ts +++ b/src/actions/ticket-templates.ts @@ -1,47 +1,45 @@ -'use server' +"use server"; -import { z } from 'zod' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' +import { z } from "zod"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; const templateSchema = z.object({ title: z.string().min(1).max(255), content: z.string().min(1), - category: z.string().max(50).optional().default('general'), + category: z.string().max(50).optional().default("general"), sortOrder: z.coerce.number().int().min(0).default(0), -}) +}); export const createTemplate = adminAction( { permission: PERMS.TICKETS_EDIT, schema: templateSchema }, async (ctx) => { - const tpl = await prisma.websiteTicketTemplate.create({ data: ctx.data }) - return actionOk({ id: tpl.id }) + const tpl = await prisma.websiteTicketTemplate.create({ data: ctx.data }); + return actionOk({ id: tpl.id }); }, -) +); -const updateTemplateInput = templateSchema - .partial() - .extend({ id: z.coerce.number().int().positive() }) +const updateTemplateInput = templateSchema.partial().extend({ id: z.coerce.number().int().positive() }); export const updateTemplate = adminAction( { permission: PERMS.TICKETS_EDIT, schema: updateTemplateInput }, async (ctx) => { - const { id, ...data } = ctx.data - const existing = await prisma.websiteTicketTemplate.findUnique({ where: { id } }) - if (!existing) throw new ActionError('Template not found') - await prisma.websiteTicketTemplate.update({ where: { id }, data }) - return actionOk({ id }) + const { id, ...data } = ctx.data; + const existing = await prisma.websiteTicketTemplate.findUnique({ where: { id } }); + if (!existing) throw new ActionError("Template not found"); + await prisma.websiteTicketTemplate.update({ where: { id }, data }); + return actionOk({ id }); }, -) +); -const deleteTemplateInput = z.object({ id: z.coerce.number().int().positive() }) +const deleteTemplateInput = z.object({ id: z.coerce.number().int().positive() }); export const deleteTemplate = adminAction( { permission: PERMS.TICKETS_EDIT, schema: deleteTemplateInput }, async (ctx) => { - await prisma.websiteTicketTemplate.delete({ where: { id: ctx.data.id } }) - return actionOk() + await prisma.websiteTicketTemplate.delete({ where: { id: ctx.data.id } }); + return actionOk(); }, -) +); diff --git a/src/actions/tickets.ts b/src/actions/tickets.ts index 9c5ad45a..b3b46e9d 100644 --- a/src/actions/tickets.ts +++ b/src/actions/tickets.ts @@ -1,18 +1,18 @@ -'use server' +"use server"; -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction, authAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' -import { notify } from '@/lib/services/webhook' +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction, authAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; +import { notify } from "@/lib/services/webhook"; import { assignTicketSchema, createTicketSchema, replyTicketSchema, updateTicketPrioritySchema, updateTicketStatusSchema, -} from '@/lib/validators/ticket' +} from "@/lib/validators/ticket"; // ── User actions (authenticated, no admin perms needed) ────────────── @@ -23,7 +23,7 @@ export const createTicket = authAction({ schema: createTicketSchema }, async (ct category: ctx.data.category, creatorId: ctx.session.user.id, }, - }) + }); // Create the first message await prisma.websiteTicketMessage.create({ @@ -33,26 +33,26 @@ export const createTicket = authAction({ schema: createTicketSchema }, async (ct message: ctx.data.message, isStaff: 0, }, - }) + }); notify({ - action: 'ticket_create', + action: "ticket_create", actor: ctx.session.user.username, target: `#${ticket.id} - ${ticket.subject}`, details: `Category: ${ticket.category}`, - }) + }); - return actionOk({ id: ticket.id }) -}) + return actionOk({ id: ticket.id }); +}); export const userReplyTicket = authAction({ schema: replyTicketSchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }) + }); - if (!ticket) throw new ActionError('Ticket not found') - if (ticket.creatorId !== ctx.session.user.id) throw new ActionError('Unauthorized') - if (ticket.status === 'closed') throw new ActionError('Ticket is closed') + if (!ticket) throw new ActionError("Ticket not found"); + if (ticket.creatorId !== ctx.session.user.id) throw new ActionError("Unauthorized"); + if (ticket.status === "closed") throw new ActionError("Ticket is closed"); await prisma.websiteTicketMessage.create({ data: { @@ -61,38 +61,38 @@ export const userReplyTicket = authAction({ schema: replyTicketSchema }, async ( message: ctx.data.message, isStaff: 0, }, - }) + }); // If ticket was in "waiting" (waiting for user), move back to open - if (ticket.status === 'waiting') { + if (ticket.status === "waiting") { await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, - data: { status: 'open' }, - }) + data: { status: "open" }, + }); } - return actionOk() -}) + return actionOk(); +}); export const closeTicketByUser = authAction( { schema: replyTicketSchema.pick({ ticketId: true }) }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }) + }); - if (!ticket) throw new ActionError('Ticket not found') - if (ticket.creatorId !== ctx.session.user.id) throw new ActionError('Unauthorized') - if (ticket.status === 'closed') throw new ActionError('Ticket is already closed') + if (!ticket) throw new ActionError("Ticket not found"); + if (ticket.creatorId !== ctx.session.user.id) throw new ActionError("Unauthorized"); + if (ticket.status === "closed") throw new ActionError("Ticket is already closed"); await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, - data: { status: 'closed', closedAt: new Date() }, - }) + data: { status: "closed", closedAt: new Date() }, + }); - return actionOk() + return actionOk(); }, -) +); // ── Admin actions ──────────────────────────────────────────────────── @@ -101,9 +101,9 @@ export const adminReplyTicket = adminAction( async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }) + }); - if (!ticket) throw new ActionError('Ticket not found') + if (!ticket) throw new ActionError("Ticket not found"); await prisma.websiteTicketMessage.create({ data: { @@ -112,118 +112,118 @@ export const adminReplyTicket = adminAction( message: ctx.data.message, isStaff: 1, }, - }) + }); // Auto-assign if not assigned yet - const updates: Record = { status: 'waiting' } + const updates: Record = { status: "waiting" }; if (!ticket.assigneeId) { - updates.assigneeId = ctx.session.user.id + updates.assigneeId = ctx.session.user.id; } await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data: updates, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'ticket_reply', - target: 'WebsiteTicket', + action: "ticket_reply", + target: "WebsiteTicket", targetId: ctx.data.ticketId, - }) + }); - return actionOk() + return actionOk(); }, -) +); export const updateTicketStatus = adminAction( { permission: PERMS.TICKETS_EDIT, schema: updateTicketStatusSchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }) + }); - if (!ticket) throw new ActionError('Ticket not found') + if (!ticket) throw new ActionError("Ticket not found"); - const data: Record = { status: ctx.data.status } - if (ctx.data.status === 'closed') { - data.closedAt = new Date() + const data: Record = { status: ctx.data.status }; + if (ctx.data.status === "closed") { + data.closedAt = new Date(); } - if (ctx.data.status === 'in_progress' && !ticket.assigneeId) { - data.assigneeId = ctx.session.user.id + if (ctx.data.status === "in_progress" && !ticket.assigneeId) { + data.assigneeId = ctx.session.user.id; } await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'ticket_status_change', - target: 'WebsiteTicket', + action: "ticket_status_change", + target: "WebsiteTicket", targetId: ctx.data.ticketId, before: { status: ticket.status }, after: { status: ctx.data.status }, - }) + }); - return actionOk() + return actionOk(); }, -) +); export const assignTicket = adminAction( { permission: PERMS.TICKETS_EDIT, schema: assignTicketSchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }) + }); - if (!ticket) throw new ActionError('Ticket not found') + if (!ticket) throw new ActionError("Ticket not found"); await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data: { assigneeId: ctx.data.assigneeId, - status: ctx.data.assigneeId ? 'in_progress' : 'open', + status: ctx.data.assigneeId ? "in_progress" : "open", }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'ticket_assign', - target: 'WebsiteTicket', + action: "ticket_assign", + target: "WebsiteTicket", targetId: ctx.data.ticketId, before: { assigneeId: ticket.assigneeId }, after: { assigneeId: ctx.data.assigneeId }, - }) + }); - return actionOk() + return actionOk(); }, -) +); export const updateTicketPriority = adminAction( { permission: PERMS.TICKETS_EDIT, schema: updateTicketPrioritySchema }, async (ctx) => { const ticket = await prisma.websiteTicket.findUnique({ where: { id: ctx.data.ticketId }, - }) + }); - if (!ticket) throw new ActionError('Ticket not found') + if (!ticket) throw new ActionError("Ticket not found"); await prisma.websiteTicket.update({ where: { id: ctx.data.ticketId }, data: { priority: ctx.data.priority }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'ticket_priority_change', - target: 'WebsiteTicket', + action: "ticket_priority_change", + target: "WebsiteTicket", targetId: ctx.data.ticketId, before: { priority: ticket.priority }, after: { priority: ctx.data.priority }, - }) + }); - return actionOk() + return actionOk(); }, -) +); diff --git a/src/actions/translations.ts b/src/actions/translations.ts index fa0d0b5c..9f15d916 100644 --- a/src/actions/translations.ts +++ b/src/actions/translations.ts @@ -1,76 +1,73 @@ -'use server' +"use server"; -import fs from 'node:fs/promises' -import path from 'node:path' -import JSON5 from 'json5' -import { z } from 'zod' -import { CLIENT_TRANSLATION_FILES, getClientTranslationFile } from '@/lib/client-translation-files' -import { patchJson5 } from '@/lib/json5-patch' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' +import fs from "node:fs/promises"; +import path from "node:path"; +import JSON5 from "json5"; +import { z } from "zod"; +import { CLIENT_TRANSLATION_FILES, getClientTranslationFile } from "@/lib/client-translation-files"; +import { patchJson5 } from "@/lib/json5-patch"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; const saveTranslationsSchema = z.object({ - locale: z.enum(['en', 'it']), + locale: z.enum(["en", "it"]), data: z.record(z.string(), z.unknown()), -}) +}); export const saveTranslations = adminAction({ schema: saveTranslationsSchema }, async (ctx) => { - if (ctx.session.user.rank < 7) throw new ActionError('Forbidden') + if (ctx.session.user.rank < 7) throw new ActionError("Forbidden"); - const filePath = path.join(process.cwd(), 'messages', `${ctx.data.locale}.json`) - await fs.writeFile(filePath, JSON.stringify(ctx.data.data, null, 2), 'utf-8') + const filePath = path.join(process.cwd(), "messages", `${ctx.data.locale}.json`); + await fs.writeFile(filePath, JSON.stringify(ctx.data.data, null, 2), "utf-8"); - return actionOk() -}) + return actionOk(); +}); const saveClientTranslationsSchema = z.object({ fileId: z.enum(CLIENT_TRANSLATION_FILES.map((f) => f.id) as [string, ...string[]]), data: z.record(z.string(), z.string()), -}) +}); -export const saveClientTranslations = adminAction( - { schema: saveClientTranslationsSchema }, - async (ctx) => { - if (ctx.session.user.rank < 7) throw new ActionError('Forbidden') +export const saveClientTranslations = adminAction({ schema: saveClientTranslationsSchema }, async (ctx) => { + if (ctx.session.user.rank < 7) throw new ActionError("Forbidden"); - const file = getClientTranslationFile(ctx.data.fileId) - if (!file) throw new ActionError('Unknown file') - if (file.readOnly) throw new ActionError('File is read-only') + const file = getClientTranslationFile(ctx.data.fileId); + if (!file) throw new ActionError("Unknown file"); + if (file.readOnly) throw new ActionError("File is read-only"); - // file.relPath comes from CLIENT_TRANSLATION_FILES (closed enum) but - // Turbopack's static tracer can't prove that — without the hint it - // pulls the entire project into the NFT list. - const absPath = path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath) - const raw = await fs.readFile(absPath, 'utf-8') + // file.relPath comes from CLIENT_TRANSLATION_FILES (closed enum) but + // Turbopack's static tracer can't prove that — without the hint it + // pulls the entire project into the NFT list. + const absPath = path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath); + const raw = await fs.readFile(absPath, "utf-8"); - if (file.format === 'json') { - // Plain JSON — no comments to preserve, just round-trip. - await fs.writeFile(absPath, JSON.stringify(ctx.data.data, null, 4), 'utf-8') - return actionOk({ commentsLost: false, unpatchedKeys: [] as string[] }) + if (file.format === "json") { + // Plain JSON — no comments to preserve, just round-trip. + await fs.writeFile(absPath, JSON.stringify(ctx.data.data, null, 4), "utf-8"); + return actionOk({ commentsLost: false, unpatchedKeys: [] as string[] }); + } + + // JSON5: surgical line-level patch keeps headers and section comments + // intact. Falls back to a full re-serialization (which DOES drop comments) + // only when an edited key cannot be located via the patch contract. + const original: Record = {}; + const parsed = JSON5.parse(raw); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + for (const [k, v] of Object.entries(parsed)) { + original[k] = v == null ? "" : String(v); } + } - // JSON5: surgical line-level patch keeps headers and section comments - // intact. Falls back to a full re-serialization (which DOES drop comments) - // only when an edited key cannot be located via the patch contract. - const original: Record = {} - const parsed = JSON5.parse(raw) - if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) { - for (const [k, v] of Object.entries(parsed)) { - original[k] = v == null ? '' : String(v) - } - } + const { content, unpatchedKeys } = patchJson5(raw, original, ctx.data.data); - const { content, unpatchedKeys } = patchJson5(raw, original, ctx.data.data) + if (unpatchedKeys.length === 0) { + await fs.writeFile(absPath, content, "utf-8"); + return actionOk({ commentsLost: false, unpatchedKeys }); + } - if (unpatchedKeys.length === 0) { - await fs.writeFile(absPath, content, 'utf-8') - return actionOk({ commentsLost: false, unpatchedKeys }) - } - - // At least one key could not be patched surgically (e.g. unusual - // formatting or a brand-new key). Fall back to a full re-serialization - // and warn the caller that comments were lost. - await fs.writeFile(absPath, JSON5.stringify(ctx.data.data, null, 4), 'utf-8') - return actionOk({ commentsLost: true, unpatchedKeys }) - }, -) + // At least one key could not be patched surgically (e.g. unusual + // formatting or a brand-new key). Fall back to a full re-serialization + // and warn the caller that comments were lost. + await fs.writeFile(absPath, JSON5.stringify(ctx.data.data, null, 4), "utf-8"); + return actionOk({ commentsLost: true, unpatchedKeys }); +}); diff --git a/src/actions/users.ts b/src/actions/users.ts index 1ef75f3f..aed67c5a 100644 --- a/src/actions/users.ts +++ b/src/actions/users.ts @@ -1,36 +1,31 @@ -'use server' +"use server"; -import crypto from 'node:crypto' -import { hash } from 'bcryptjs' -import { z } from 'zod' -import { Prisma } from '@/generated/prisma/client' -import { PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { ActionError, actionOk } from '@/lib/safe-action-shared' -import { logAudit } from '@/lib/services/audit' -import { rcon } from '@/lib/services/rcon' -import { notify } from '@/lib/services/webhook' -import { - banUserSchema, - createUserSchema, - giveBadgeSchema, - updateUserSchema, -} from '@/lib/validators/user' +import crypto from "node:crypto"; +import { hash } from "bcryptjs"; +import { z } from "zod"; +import { Prisma } from "@/generated/prisma/client"; +import { PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { ActionError, actionOk } from "@/lib/safe-action-shared"; +import { logAudit } from "@/lib/services/audit"; +import { rcon } from "@/lib/services/rcon"; +import { notify } from "@/lib/services/webhook"; +import { banUserSchema, createUserSchema, giveBadgeSchema, updateUserSchema } from "@/lib/validators/user"; -const DEFAULT_LOOK = 'hr-115-42.hd-195-19.ch-3030-82.lg-275-1408.fa-1201.ca-1804-64' +const DEFAULT_LOOK = "hr-115-42.hd-195-19.ch-3030-82.lg-275-1408.fa-1201.ca-1804-64"; export const createUser = adminAction( { permission: PERMS.USERS_EDIT, schema: createUserSchema }, async (ctx) => { - const { username, mail, password, rank, motto } = ctx.data + const { username, mail, password, rank, motto } = ctx.data; if (rank >= ctx.session.user.rank && ctx.session.user.rank < 7) { - throw new ActionError('Cannot assign rank equal or higher than your own') + throw new ActionError("Cannot assign rank equal or higher than your own"); } - const hashedPassword = await hash(password, 12) - const now = Math.floor(Date.now() / 1000) + const hashedPassword = await hash(password, 12); + const now = Math.floor(Date.now() / 1000); try { const user = await prisma.$transaction(async (tx) => { @@ -45,221 +40,211 @@ export const createUser = adminAction( credits: 5000, pixels: 5000, accountCreated: now, - ipRegister: '0.0.0.0', - ipCurrent: '0.0.0.0', + ipRegister: "0.0.0.0", + ipCurrent: "0.0.0.0", }, - }) + }); - await tx.usersSettings.create({ data: { userId: created.id } }) + await tx.usersSettings.create({ data: { userId: created.id } }); await tx.usersCurrency.createMany({ data: [ { userId: created.id, type: 0, amount: 5000 }, { userId: created.id, type: 5, amount: 5000 }, ], - }) + }); - return created - }) + return created; + }); logAudit({ userId: ctx.session.user.id, - action: 'user_create', - target: 'User', + action: "user_create", + target: "User", targetId: user.id, after: { username, mail, rank }, - }) + }); notify({ - action: 'user_edit', + action: "user_edit", actor: ctx.session.user.username, target: username, targetId: user.id, - details: 'Account created by admin', - }) + details: "Account created by admin", + }); - return actionOk({ id: user.id, username: user.username }) + return actionOk({ id: user.id, username: user.username }); } catch (err) { - if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2002') { - const target = (err.meta?.target as string[]) ?? [] - if (target.includes('username')) throw new ActionError('Username already taken') - if (target.includes('mail')) throw new ActionError('Email already registered') - throw new ActionError('Username or email already in use') + if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === "P2002") { + const target = (err.meta?.target as string[]) ?? []; + if (target.includes("username")) throw new ActionError("Username already taken"); + if (target.includes("mail")) throw new ActionError("Email already registered"); + throw new ActionError("Username or email already in use"); } - throw err + throw err; } }, -) +); const updateUserInput = updateUserSchema.extend({ id: z.coerce.number().int().positive(), -}) +}); export const updateUser = adminAction( { permission: PERMS.USERS_EDIT, schema: updateUserInput }, async (ctx) => { - const { id, diamonds, duckets, ...userData } = ctx.data + const { id, diamonds, duckets, ...userData } = ctx.data; - const targetUser = await guardRank(id, ctx.session.user.rank) + const targetUser = await guardRank(id, ctx.session.user.rank); - if ( - userData.rank !== undefined && - userData.rank >= ctx.session.user.rank && - ctx.session.user.rank < 7 - ) { - throw new ActionError('Cannot assign rank equal or higher than your own') + if (userData.rank !== undefined && userData.rank >= ctx.session.user.rank && ctx.session.user.rank < 7) { + throw new ActionError("Cannot assign rank equal or higher than your own"); } - await prisma.user.update({ where: { id }, data: userData }) + await prisma.user.update({ where: { id }, data: userData }); if (diamonds !== undefined) { await prisma.usersCurrency.upsert({ where: { userId_type: { userId: id, type: 5 } }, update: { amount: diamonds }, create: { userId: id, type: 5, amount: diamonds }, - }) + }); } if (duckets !== undefined) { await prisma.usersCurrency.upsert({ where: { userId_type: { userId: id, type: 0 } }, update: { amount: duckets }, create: { userId: id, type: 0, amount: duckets }, - }) + }); } logAudit({ userId: ctx.session.user.id, - action: 'user_edit', - target: 'User', + action: "user_edit", + target: "User", targetId: id, before: { username: targetUser.username, mail: targetUser.mail, rank: targetUser.rank }, after: userData, - }) + }); notify({ - action: 'user_edit', + action: "user_edit", actor: ctx.session.user.username, target: targetUser.username, targetId: id, - }) + }); - return actionOk() + return actionOk(); }, -) +); -const banInput = banUserSchema.extend({}) +const banInput = banUserSchema.extend({}); -export const banUser = adminAction( - { permission: PERMS.USERS_BAN, schema: banInput }, - async (ctx) => { - const { userId, reason, duration, type, ip } = ctx.data +export const banUser = adminAction({ permission: PERMS.USERS_BAN, schema: banInput }, async (ctx) => { + const { userId, reason, duration, type, ip } = ctx.data; - const targetUser = await guardRank(userId, ctx.session.user.rank) + const targetUser = await guardRank(userId, ctx.session.user.rank); - const now = Math.floor(Date.now() / 1000) - const banExpire = duration > 0 ? now + duration * 3600 : 0 + const now = Math.floor(Date.now() / 1000); + const banExpire = duration > 0 ? now + duration * 3600 : 0; - await prisma.ban.create({ - data: { - userId, - userStaffId: ctx.session.user.id, - timestamp: now, - banExpire, - banReason: reason, - type: type || 'account', - ip: ip || '', - machineId: '', - }, - }) + await prisma.ban.create({ + data: { + userId, + userStaffId: ctx.session.user.id, + timestamp: now, + banExpire, + banReason: reason, + type: type || "account", + ip: ip || "", + machineId: "", + }, + }); - await rcon.disconnectUser(userId) + await rcon.disconnectUser(userId); - logAudit({ - userId: ctx.session.user.id, - action: 'ban', - target: 'User', - targetId: userId, - after: { reason, type, duration }, - }) + logAudit({ + userId: ctx.session.user.id, + action: "ban", + target: "User", + targetId: userId, + after: { reason, type, duration }, + }); - notify({ - action: 'ban', - actor: ctx.session.user.username, - target: targetUser.username, - details: reason, - }) + notify({ + action: "ban", + actor: ctx.session.user.username, + target: targetUser.username, + details: reason, + }); - return actionOk() - }, -) + return actionOk(); +}); -const unbanInput = z.object({ userId: z.coerce.number().int().positive() }) +const unbanInput = z.object({ userId: z.coerce.number().int().positive() }); -export const unbanUser = adminAction( - { permission: PERMS.USERS_BAN, schema: unbanInput }, - async (ctx) => { - const { userId } = ctx.data +export const unbanUser = adminAction({ permission: PERMS.USERS_BAN, schema: unbanInput }, async (ctx) => { + const { userId } = ctx.data; - const targetUser = await guardRank(userId, ctx.session.user.rank) + const targetUser = await guardRank(userId, ctx.session.user.rank); - await prisma.ban.deleteMany({ where: { userId } }) + await prisma.ban.deleteMany({ where: { userId } }); - logAudit({ - userId: ctx.session.user.id, - action: 'unban', - target: 'User', - targetId: userId, - }) + logAudit({ + userId: ctx.session.user.id, + action: "unban", + target: "User", + targetId: userId, + }); - notify({ - action: 'unban', - actor: ctx.session.user.username, - target: targetUser.username, - }) + notify({ + action: "unban", + actor: ctx.session.user.username, + target: targetUser.username, + }); - return actionOk() - }, -) + return actionOk(); +}); export const giveBadge = adminAction( { permission: PERMS.USERS_EDIT, schema: giveBadgeSchema }, async (ctx) => { - const { userId, badgeCode } = ctx.data + const { userId, badgeCode } = ctx.data; - await guardRank(userId, ctx.session.user.rank) + await guardRank(userId, ctx.session.user.rank); - const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }) - if (existing) throw new ActionError('Badge already assigned') + const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }); + if (existing) throw new ActionError("Badge already assigned"); - await prisma.usersBadges.create({ data: { userId, badgeCode } }) - await rcon.giveBadge(userId, badgeCode) + await prisma.usersBadges.create({ data: { userId, badgeCode } }); + await rcon.giveBadge(userId, badgeCode); - return actionOk() + return actionOk(); }, -) +); // ── Remove Badge ──────────────────────────────────────────────────── const removeBadgeSchema = z.object({ userId: z.coerce.number().int().positive(), badgeCode: z.string().min(1), -}) +}); export const removeBadge = adminAction( { permission: PERMS.USERS_EDIT, schema: removeBadgeSchema }, async (ctx) => { - const { userId, badgeCode } = ctx.data + const { userId, badgeCode } = ctx.data; - await guardRank(userId, ctx.session.user.rank) + await guardRank(userId, ctx.session.user.rank); - const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }) - if (!existing) throw new ActionError('Badge not found') + const existing = await prisma.usersBadges.findFirst({ where: { userId, badgeCode } }); + if (!existing) throw new ActionError("Badge not found"); - await prisma.usersBadges.delete({ where: { id: existing.id } }) - await rcon.removeBadge(userId, badgeCode) + await prisma.usersBadges.delete({ where: { id: existing.id } }); + await rcon.removeBadge(userId, badgeCode); - return actionOk() + return actionOk(); }, -) +); // ── Rank guard helper ─────────────────────────────────────────────── @@ -267,169 +252,163 @@ async function guardRank(targetUserId: number, sessionRank: number) { const target = await prisma.user.findUnique({ where: { id: targetUserId }, select: { username: true, rank: true, mail: true }, - }) - if (!target) throw new ActionError('User not found') + }); + if (!target) throw new ActionError("User not found"); if (target.rank >= sessionRank && sessionRank < 7) { - throw new ActionError('Cannot modify user with equal or higher rank') + throw new ActionError("Cannot modify user with equal or higher rank"); } - return target + return target; } // ── Reset Password ────────────────────────────────────────────────── const resetPasswordSchema = z.object({ userId: z.coerce.number().int().positive(), -}) +}); export const resetPassword = adminAction( { permission: PERMS.USERS_RESET_PASSWORD, schema: resetPasswordSchema }, async (ctx) => { - const target = await guardRank(ctx.data.userId, ctx.session.user.rank) + const target = await guardRank(ctx.data.userId, ctx.session.user.rank); - const newPassword = crypto.randomBytes(12).toString('base64url').slice(0, 16) - const hashed = await hash(newPassword, 10) + const newPassword = crypto.randomBytes(12).toString("base64url").slice(0, 16); + const hashed = await hash(newPassword, 10); await prisma.user.update({ where: { id: ctx.data.userId }, data: { password: hashed }, - }) + }); logAudit({ userId: ctx.session.user.id, - action: 'reset_password', - target: 'User', + action: "reset_password", + target: "User", targetId: ctx.data.userId, - }) + }); notify({ - action: 'user_edit', + action: "user_edit", actor: ctx.session.user.username, target: target.username, - details: 'Password reset', - }) + details: "Password reset", + }); - return actionOk({ newPassword }) + return actionOk({ newPassword }); }, -) +); // ── Disconnect User ───────────────────────────────────────────────── const disconnectSchema = z.object({ userId: z.coerce.number().int().positive(), -}) +}); export const disconnectUser = adminAction( { permission: PERMS.USERS_EDIT, schema: disconnectSchema }, async (ctx) => { - const target = await guardRank(ctx.data.userId, ctx.session.user.rank) - const success = await rcon.disconnectUser(ctx.data.userId) - if (!success) throw new ActionError('Failed to disconnect. Is the emulator running?') + const target = await guardRank(ctx.data.userId, ctx.session.user.rank); + const success = await rcon.disconnectUser(ctx.data.userId); + if (!success) throw new ActionError("Failed to disconnect. Is the emulator running?"); logAudit({ userId: ctx.session.user.id, - action: 'user_disconnect', - target: 'User', + action: "user_disconnect", + target: "User", targetId: ctx.data.userId, - }) + }); notify({ - action: 'disconnect', + action: "disconnect", actor: ctx.session.user.username, target: target.username, - }) + }); - return actionOk() + return actionOk(); }, -) +); // ── Alert User (in-game message) ──────────────────────────────────── const alertUserSchema = z.object({ userId: z.coerce.number().int().positive(), message: z.string().min(1).max(500), -}) +}); export const alertUser = adminAction( { permission: PERMS.USERS_EDIT, schema: alertUserSchema }, async (ctx) => { - const success = await rcon.alertUser(ctx.data.userId, ctx.data.message) - if (!success) throw new ActionError('Failed to send alert. Is the emulator running?') - return actionOk() + const success = await rcon.alertUser(ctx.data.userId, ctx.data.message); + if (!success) throw new ActionError("Failed to send alert. Is the emulator running?"); + return actionOk(); }, -) +); // ── Mute User ─────────────────────────────────────────────────────── const muteSchema = z.object({ userId: z.coerce.number().int().positive(), duration: z.coerce.number().int().min(0).default(0), -}) +}); -export const muteUser = adminAction( - { permission: PERMS.USERS_EDIT, schema: muteSchema }, - async (ctx) => { - const _target = await guardRank(ctx.data.userId, ctx.session.user.rank) - const success = await rcon.muteUser(ctx.data.userId, ctx.data.duration) - if (!success) throw new ActionError('Failed to mute. Is the emulator running?') +export const muteUser = adminAction({ permission: PERMS.USERS_EDIT, schema: muteSchema }, async (ctx) => { + const _target = await guardRank(ctx.data.userId, ctx.session.user.rank); + const success = await rcon.muteUser(ctx.data.userId, ctx.data.duration); + if (!success) throw new ActionError("Failed to mute. Is the emulator running?"); - logAudit({ - userId: ctx.session.user.id, - action: 'user_mute', - target: 'User', - targetId: ctx.data.userId, - after: { duration: ctx.data.duration }, - }) + logAudit({ + userId: ctx.session.user.id, + action: "user_mute", + target: "User", + targetId: ctx.data.userId, + after: { duration: ctx.data.duration }, + }); - return actionOk() - }, -) + return actionOk(); +}); // ── Unmute User ───────────────────────────────────────────────────── const unmuteSchema = z.object({ userId: z.coerce.number().int().positive(), -}) +}); -export const unmuteUser = adminAction( - { permission: PERMS.USERS_EDIT, schema: unmuteSchema }, - async (ctx) => { - await guardRank(ctx.data.userId, ctx.session.user.rank) - const success = await rcon.unmuteUser(ctx.data.userId) - if (!success) throw new ActionError('Failed to unmute. Is the emulator running?') +export const unmuteUser = adminAction({ permission: PERMS.USERS_EDIT, schema: unmuteSchema }, async (ctx) => { + await guardRank(ctx.data.userId, ctx.session.user.rank); + const success = await rcon.unmuteUser(ctx.data.userId); + if (!success) throw new ActionError("Failed to unmute. Is the emulator running?"); - logAudit({ - userId: ctx.session.user.id, - action: 'user_unmute', - target: 'User', - targetId: ctx.data.userId, - }) + logAudit({ + userId: ctx.session.user.id, + action: "user_unmute", + target: "User", + targetId: ctx.data.userId, + }); - return actionOk() - }, -) + return actionOk(); +}); // ── Send Credits via RCON ─────────────────────────────────────────── const sendCreditsSchema = z.object({ userId: z.coerce.number().int().positive(), amount: z.coerce.number().int().min(1).max(1000000), -}) +}); export const sendCredits = adminAction( { permission: PERMS.USERS_EDIT, schema: sendCreditsSchema }, async (ctx) => { - const _target = await guardRank(ctx.data.userId, ctx.session.user.rank) - const success = await rcon.giveCredits(ctx.data.userId, ctx.data.amount) - if (!success) throw new ActionError('Failed to send credits. Is the emulator running?') + const _target = await guardRank(ctx.data.userId, ctx.session.user.rank); + const success = await rcon.giveCredits(ctx.data.userId, ctx.data.amount); + if (!success) throw new ActionError("Failed to send credits. Is the emulator running?"); logAudit({ userId: ctx.session.user.id, - action: 'user_send_credits', - target: 'User', + action: "user_send_credits", + target: "User", targetId: ctx.data.userId, after: { amount: ctx.data.amount }, - }) + }); - return actionOk() + return actionOk(); }, -) +); diff --git a/src/actions/watch.ts b/src/actions/watch.ts index f9668acb..42eb1f62 100644 --- a/src/actions/watch.ts +++ b/src/actions/watch.ts @@ -1,16 +1,16 @@ -'use server' +"use server"; -import { revalidateTag } from 'next/cache' -import { z } from 'zod' -import { PERMS } from '@/lib/permission-slugs' -import { prisma } from '@/lib/prisma' -import { adminAction } from '@/lib/safe-action' -import { actionOk } from '@/lib/safe-action-shared' +import { revalidateTag } from "next/cache"; +import { z } from "zod"; +import { PERMS } from "@/lib/permission-slugs"; +import { prisma } from "@/lib/prisma"; +import { adminAction } from "@/lib/safe-action"; +import { actionOk } from "@/lib/safe-action-shared"; const toggleWatchSchema = z.object({ targetUserId: z.coerce.number().int().positive(), reason: z.string().max(255).optional(), -}) +}); /** * Toggle a watch entry for the calling staff on the given target user. @@ -21,23 +21,23 @@ const toggleWatchSchema = z.object({ export const toggleUserWatch = adminAction( { permission: PERMS.USERS_VIEW, schema: toggleWatchSchema }, async (ctx) => { - const staffId = ctx.session.user.id - const { targetUserId, reason } = ctx.data + const staffId = ctx.session.user.id; + const { targetUserId, reason } = ctx.data; const existing = await prisma.userWatch.findUnique({ where: { staffId_targetUserId: { staffId, targetUserId } }, - }) + }); if (existing) { - await prisma.userWatch.delete({ where: { id: existing.id } }) - revalidateTag(`user-watch:${staffId}`, { expire: 0 }) - return actionOk({ watching: false }) + await prisma.userWatch.delete({ where: { id: existing.id } }); + revalidateTag(`user-watch:${staffId}`, { expire: 0 }); + return actionOk({ watching: false }); } await prisma.userWatch.create({ - data: { staffId, targetUserId, reason: reason ?? '' }, - }) - revalidateTag(`user-watch:${staffId}`, { expire: 0 }) - return actionOk({ watching: true }) + data: { staffId, targetUserId, reason: reason ?? "" }, + }); + revalidateTag(`user-watch:${staffId}`, { expire: 0 }); + return actionOk({ watching: true }); }, -) +); diff --git a/src/app/admin/analytics/activity/page.tsx b/src/app/admin/analytics/activity/page.tsx index 32402e67..376ee137 100644 --- a/src/app/admin/analytics/activity/page.tsx +++ b/src/app/admin/analytics/activity/page.tsx @@ -1,17 +1,17 @@ -import { MessageSquare, Shield, Terminal, Users } from 'lucide-react' -import { redirect } from 'next/navigation' -import { StatsCard } from '@/components/admin/stats-card' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' +import { MessageSquare, Shield, Terminal, Users } from "lucide-react"; +import { redirect } from "next/navigation"; +import { StatsCard } from "@/components/admin/stats-card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; async function getActivityData() { - const now = Math.floor(Date.now() / 1000) - const todayStart = now - (now % 86400) - const weekAgo = now - 7 * 86400 + const now = Math.floor(Date.now() / 1000); + const todayStart = now - (now % 86400); + const weekAgo = now - 7 * 86400; // Daily activity breakdown — 4 GROUP BY queries instead of 28 sequential queries - const rangeStart = todayStart - 6 * 86400 + const rangeStart = todayStart - 6 * 86400; const [chatRows, cmdRows, banRows, regRows] = await Promise.all([ prisma.$queryRaw<{ day_bucket: bigint; count: bigint }[]>` SELECT FLOOR(timestamp / 86400) AS day_bucket, COUNT(*) AS count @@ -25,57 +25,61 @@ async function getActivityData() { prisma.$queryRaw<{ day_bucket: bigint; count: bigint }[]>` SELECT FLOOR(account_created / 86400) AS day_bucket, COUNT(*) AS count FROM users WHERE account_created >= ${rangeStart} GROUP BY day_bucket`, - ]) + ]); const toMap = (rows: { day_bucket: bigint; count: bigint }[]) => - new Map(rows.map((r) => [Number(r.day_bucket), Number(r.count)])) - const chatMap = toMap(chatRows) - const cmdMap = toMap(cmdRows) - const banMap = toMap(banRows) - const regMap = toMap(regRows) + new Map(rows.map((r) => [Number(r.day_bucket), Number(r.count)])); + const chatMap = toMap(chatRows); + const cmdMap = toMap(cmdRows); + const banMap = toMap(banRows); + const regMap = toMap(regRows); - const dailyData = [] + const dailyData = []; for (let i = 6; i >= 0; i--) { - const dayStart = todayStart - i * 86400 - const bucket = Math.floor(dayStart / 86400) - const date = new Date(dayStart * 1000) + const dayStart = todayStart - i * 86400; + const bucket = Math.floor(dayStart / 86400); + const date = new Date(dayStart * 1000); dailyData.push({ - label: date.toLocaleDateString('en', { weekday: 'short', month: 'short', day: 'numeric' }), + label: date.toLocaleDateString("en", { weekday: "short", month: "short", day: "numeric" }), chats: chatMap.get(bucket) ?? 0, commands: cmdMap.get(bucket) ?? 0, bans: banMap.get(bucket) ?? 0, registrations: regMap.get(bucket) ?? 0, - }) + }); } // Totals const [weekChatRows, weekCommandRows, weekBans, weekRegistrations] = await Promise.all([ - prisma.$queryRaw<{ count: bigint }[]>`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, - prisma.$queryRaw<{ count: bigint }[]>`SELECT COUNT(*) AS count FROM commandlogs WHERE timestamp >= ${weekAgo}`, + prisma.$queryRaw< + { count: bigint }[] + >`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, + prisma.$queryRaw< + { count: bigint }[] + >`SELECT COUNT(*) AS count FROM commandlogs WHERE timestamp >= ${weekAgo}`, prisma.ban.count({ where: { timestamp: { gte: weekAgo } } }), prisma.user.count({ where: { accountCreated: { gte: weekAgo } } }), - ]) - const weekChats = Number(weekChatRows[0]?.count ?? 0) - const weekCommands = Number(weekCommandRows[0]?.count ?? 0) + ]); + const weekChats = Number(weekChatRows[0]?.count ?? 0); + const weekCommands = Number(weekCommandRows[0]?.count ?? 0); // Most active users (by chat messages) const topChatters = await prisma.$queryRaw<{ userId: number; messages: bigint }[]>` SELECT user_from_id AS userId, COUNT(*) AS messages FROM chatlogs_room WHERE timestamp >= ${weekAgo} GROUP BY user_from_id ORDER BY messages DESC LIMIT 10 - ` + `; - const userIds = topChatters.map((c) => c.userId) + const userIds = topChatters.map((c) => c.userId); const users = await prisma.user.findMany({ where: { id: { in: userIds } }, select: { id: true, username: true }, - }) - const userMap = new Map(users.map((u) => [u.id, u.username])) + }); + const userMap = new Map(users.map((u) => [u.id, u.username])); const topChattersWithNames = topChatters.map((c) => ({ userId: c.userId, username: userMap.get(c.userId) ?? `User #${c.userId}`, messages: Number(c.messages), - })) + })); return { dailyData, @@ -84,16 +88,16 @@ async function getActivityData() { weekBans, weekRegistrations, topChatters: topChattersWithNames, - } + }; } export default async function ActivityPage() { - const { session, permissions } = await getAdminContext() + const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.ANALYTICS_VIEW, session.user.rank)) { - redirect('/admin') + redirect("/admin"); } - const data = await getActivityData() + const data = await getActivityData(); return (
@@ -174,10 +178,7 @@ export default async function ActivityPage() { ) : (
{data.topChatters.map((user, i) => ( -
+
{i + 1} @@ -193,5 +194,5 @@ export default async function ActivityPage() {
- ) + ); } diff --git a/src/app/admin/analytics/economy/page.tsx b/src/app/admin/analytics/economy/page.tsx index 61e45368..59f95eb5 100644 --- a/src/app/admin/analytics/economy/page.tsx +++ b/src/app/admin/analytics/economy/page.tsx @@ -1,47 +1,47 @@ -import { ArrowLeftRight, Coins, TrendingDown, TrendingUp } from 'lucide-react' -import dynamic from 'next/dynamic' -import { redirect } from 'next/navigation' -import { StatsCard } from '@/components/admin/stats-card' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { Skeleton } from '@/components/ui/skeleton' -import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' +import { ArrowLeftRight, Coins, TrendingDown, TrendingUp } from "lucide-react"; +import dynamic from "next/dynamic"; +import { redirect } from "next/navigation"; +import { StatsCard } from "@/components/admin/stats-card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Skeleton } from "@/components/ui/skeleton"; +import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; const RevenueChart = dynamic( - () => import('@/components/admin/revenue-chart').then((m) => ({ default: m.RevenueChart })), + () => import("@/components/admin/revenue-chart").then((m) => ({ default: m.RevenueChart })), { loading: () => }, -) +); async function getEconomyData() { - const now = Math.floor(Date.now() / 1000) - const todayStart = now - (now % 86400) - const weekAgo = now - 7 * 86400 + const now = Math.floor(Date.now() / 1000); + const todayStart = now - (now % 86400); + const weekAgo = now - 7 * 86400; // Total currency in circulation — parallel instead of sequential const [creditsAgg, pixelsAgg, pointsAgg] = await Promise.all([ prisma.user.aggregate({ _sum: { credits: true } }), prisma.user.aggregate({ _sum: { pixels: true } }), prisma.user.aggregate({ _sum: { points: true } }), - ]) - const totalCredits = creditsAgg._sum.credits ?? 0 - const totalPixels = pixelsAgg._sum.pixels ?? 0 - const totalPoints = pointsAgg._sum.points ?? 0 + ]); + const totalCredits = creditsAgg._sum.credits ?? 0; + const totalPixels = pixelsAgg._sum.pixels ?? 0; + const totalPoints = pointsAgg._sum.points ?? 0; // Shop revenue (7 days) const shopRevenue = await prisma.logsShopPurchases.aggregate({ where: { timestamp: { gte: weekAgo } }, _sum: { costCredits: true, costPoints: true }, _count: true, - }) + }); // Marketplace stats - const marketplaceActive = await prisma.marketplaceItems.count({ where: { state: 1 } }) + const marketplaceActive = await prisma.marketplaceItems.count({ where: { state: 1 } }); const marketplaceSold = await prisma.marketplaceItems.count({ where: { state: 2, soldTimestamp: { gte: weekAgo } }, - }) + }); // Revenue chart (7 days) — single GROUP BY query instead of 7 sequential queries - const rangeStart = todayStart - 6 * 86400 + const rangeStart = todayStart - 6 * 86400; const revRows = await prisma.$queryRaw<{ day_bucket: bigint; credits: number; points: number }[]>` SELECT FLOOR(timestamp / 86400) AS day_bucket, COALESCE(SUM(cost_credits), 0) AS credits, @@ -49,60 +49,55 @@ async function getEconomyData() { FROM logs_shop_purchases WHERE timestamp >= ${rangeStart} GROUP BY day_bucket ORDER BY day_bucket - ` + `; const revMap = new Map( - revRows.map((r) => [ - Number(r.day_bucket), - { credits: Number(r.credits), points: Number(r.points) }, - ]), - ) - const revenueData = [] + revRows.map((r) => [Number(r.day_bucket), { credits: Number(r.credits), points: Number(r.points) }]), + ); + const revenueData = []; for (let i = 6; i >= 0; i--) { - const dayStart = todayStart - i * 86400 - const bucket = Math.floor(dayStart / 86400) - const date = new Date(dayStart * 1000) - const entry = revMap.get(bucket) + const dayStart = todayStart - i * 86400; + const bucket = Math.floor(dayStart / 86400); + const date = new Date(dayStart * 1000); + const entry = revMap.get(bucket); revenueData.push({ - label: date.toLocaleDateString('en', { weekday: 'short' }), + label: date.toLocaleDateString("en", { weekday: "short" }), credits: entry?.credits ?? 0, points: entry?.points ?? 0, - }) + }); } // Trades (7 days) const weekTrades = await prisma.roomTradeLog.count({ where: { timestamp: { gte: weekAgo } }, - }) + }); return { totalCredits, totalPixels, totalPoints, - shopPurchases: typeof shopRevenue._count === 'number' ? shopRevenue._count : 0, + shopPurchases: typeof shopRevenue._count === "number" ? shopRevenue._count : 0, shopCreditsSpent: shopRevenue._sum?.costCredits ?? 0, shopPointsSpent: shopRevenue._sum?.costPoints ?? 0, marketplaceActive, marketplaceSold, weekTrades, revenueData, - } + }; } export default async function EconomyPage() { - const { session, permissions } = await getAdminContext() + const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.ANALYTICS_VIEW, session.user.rank)) { - redirect('/admin') + redirect("/admin"); } - const data = await getEconomyData() + const data = await getEconomyData(); return (

Economy

-

- Currency circulation, shop revenue and marketplace activity -

+

Currency circulation, shop revenue and marketplace activity

@@ -196,5 +191,5 @@ export default async function EconomyPage() {
- ) + ); } diff --git a/src/app/admin/analytics/page.tsx b/src/app/admin/analytics/page.tsx index 4b6452eb..d8680b11 100644 --- a/src/app/admin/analytics/page.tsx +++ b/src/app/admin/analytics/page.tsx @@ -1,28 +1,27 @@ -import { ArrowLeftRight, Clock, DoorOpen, MessageSquare, TrendingUp, Users } from 'lucide-react' -import dynamic from 'next/dynamic' -import { redirect } from 'next/navigation' -import { StatsCard } from '@/components/admin/stats-card' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { Skeleton } from '@/components/ui/skeleton' -import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' +import { ArrowLeftRight, Clock, DoorOpen, MessageSquare, TrendingUp, Users } from "lucide-react"; +import dynamic from "next/dynamic"; +import { redirect } from "next/navigation"; +import { StatsCard } from "@/components/admin/stats-card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Skeleton } from "@/components/ui/skeleton"; +import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; const DashboardChart = dynamic( - () => import('@/components/admin/dashboard-chart').then((m) => ({ default: m.DashboardChart })), + () => import("@/components/admin/dashboard-chart").then((m) => ({ default: m.DashboardChart })), { loading: () => }, -) +); const PeakHoursHeatmap = dynamic( - () => - import('@/components/admin/peak-hours-heatmap').then((m) => ({ default: m.PeakHoursHeatmap })), + () => import("@/components/admin/peak-hours-heatmap").then((m) => ({ default: m.PeakHoursHeatmap })), { loading: () => }, -) +); async function getAnalyticsData() { - const now = Math.floor(Date.now() / 1000) - const todayStart = now - (now % 86400) - const weekAgo = now - 7 * 86400 - const monthAgo = now - 30 * 86400 + const now = Math.floor(Date.now() / 1000); + const todayStart = now - (now % 86400); + const weekAgo = now - 7 * 86400; + const monthAgo = now - 30 * 86400; const [ totalUsers, @@ -36,15 +35,17 @@ async function getAnalyticsData() { weekBans, ] = await Promise.all([ prisma.user.count(), - prisma.user.count({ where: { online: '1' } }), + prisma.user.count({ where: { online: "1" } }), prisma.user.count({ where: { accountCreated: { gte: weekAgo } } }), prisma.user.count({ where: { accountCreated: { gte: monthAgo } } }), prisma.rooms.count(), prisma.rooms.count({ where: { users: { gt: 0 } } }), - prisma.$queryRaw<{ count: bigint }[]>`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, + prisma.$queryRaw< + { count: bigint }[] + >`SELECT COUNT(*) AS count FROM chatlogs_room WHERE timestamp >= ${weekAgo}`, prisma.roomTradeLog.count({ where: { timestamp: { gte: weekAgo } } }), prisma.ban.count({ where: { timestamp: { gte: weekAgo } } }), - ]) + ]); // Registration chart (30 days) — single GROUP BY query instead of 30 sequential queries const regRows = await prisma.$queryRaw<{ day_bucket: bigint; count: bigint }[]>` @@ -52,17 +53,17 @@ async function getAnalyticsData() { FROM users WHERE account_created >= ${monthAgo} GROUP BY day_bucket ORDER BY day_bucket - ` - const regCountMap = new Map(regRows.map((r) => [Number(r.day_bucket), Number(r.count)])) - const registrationChart = [] + `; + const regCountMap = new Map(regRows.map((r) => [Number(r.day_bucket), Number(r.count)])); + const registrationChart = []; for (let i = 29; i >= 0; i--) { - const dayStart = todayStart - i * 86400 - const bucket = Math.floor(dayStart / 86400) - const date = new Date(dayStart * 1000) + const dayStart = todayStart - i * 86400; + const bucket = Math.floor(dayStart / 86400); + const date = new Date(dayStart * 1000); registrationChart.push({ - label: date.toLocaleDateString('en', { month: 'short', day: 'numeric' }), + label: date.toLocaleDateString("en", { month: "short", day: "numeric" }), value: regCountMap.get(bucket) ?? 0, - }) + }); } // Peak hours — single GROUP BY query instead of fetching all user rows @@ -73,13 +74,13 @@ async function getAnalyticsData() { FROM users WHERE last_online >= ${weekAgo} GROUP BY d, h - ` - const grid: number[][] = Array.from({ length: 7 }, () => Array(24).fill(0)) - let max = 0 + `; + const grid: number[][] = Array.from({ length: 7 }, () => Array(24).fill(0)); + let max = 0; for (const r of peakRows) { - const count = Number(r.c) - grid[r.d][r.h] = count - if (count > max) max = count + const count = Number(r.c); + grid[r.d][r.h] = count; + if (count > max) max = count; } return { @@ -94,16 +95,16 @@ async function getAnalyticsData() { weekBans, registrationChart, peakHours: { grid, max }, - } + }; } export default async function AnalyticsPage() { - const { session, permissions } = await getAdminContext() + const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.ANALYTICS_VIEW, session.user.rank)) { - redirect('/admin') + redirect("/admin"); } - const data = await getAnalyticsData() + const data = await getAnalyticsData(); return (
@@ -187,5 +188,5 @@ export default async function AnalyticsPage() {
- ) + ); } diff --git a/src/app/admin/articles/[id]/page.tsx b/src/app/admin/articles/[id]/page.tsx index 7f2f4a83..4a4d0be2 100644 --- a/src/app/admin/articles/[id]/page.tsx +++ b/src/app/admin/articles/[id]/page.tsx @@ -39,7 +39,11 @@ export default async function EditArticle({

- {error ?

Error: {error}

: null} + {error ? ( +

+ Error: {error} +

+ ) : null} { "use server"; diff --git a/src/app/admin/articles/new/page.tsx b/src/app/admin/articles/new/page.tsx index 0e6896d1..9acd1567 100644 --- a/src/app/admin/articles/new/page.tsx +++ b/src/app/admin/articles/new/page.tsx @@ -21,7 +21,11 @@ export default async function NewArticle({ searchParams }: { searchParams: Promi

- {error ?

Error: {error}

: null} + {error ? ( +

+ Error: {error} +

+ ) : null} ); diff --git a/src/app/admin/articles/page.tsx b/src/app/admin/articles/page.tsx index ec6fff91..c987311f 100644 --- a/src/app/admin/articles/page.tsx +++ b/src/app/admin/articles/page.tsx @@ -35,7 +35,11 @@ export default async function AdminArticles({ searchParams }: { searchParams: Pr - {error ?

Error: {error}

: null} + {error ? ( +

+ Error: {error} +

+ ) : null}
diff --git a/src/app/admin/banners/banners-manager.tsx b/src/app/admin/banners/banners-manager.tsx index 39f0019b..8373bb78 100644 --- a/src/app/admin/banners/banners-manager.tsx +++ b/src/app/admin/banners/banners-manager.tsx @@ -1,64 +1,64 @@ -'use client' +"use client"; -import { Pencil, Plus, Trash2 } from 'lucide-react' -import { useState } from 'react' -import { createBanner, deleteBanner, updateBanner } from '@/actions/banners' -import { Badge } from '@/components/ui/badge' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { DateTimePicker } from '@/components/ui/date-time-picker' -import { Input } from '@/components/ui/input' -import { Label } from '@/components/ui/label' -import { Switch } from '@/components/ui/switch' -import { useServerAction } from '@/hooks/use-server-action' +import { Pencil, Plus, Trash2 } from "lucide-react"; +import { useState } from "react"; +import { createBanner, deleteBanner, updateBanner } from "@/actions/banners"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { DateTimePicker } from "@/components/ui/date-time-picker"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Switch } from "@/components/ui/switch"; +import { useServerAction } from "@/hooks/use-server-action"; interface Banner { - id: number - title: string - subtitle: string - image: string - link: string - color: string - isActive: number - sortOrder: number - startDate: string | null - endDate: string | null + id: number; + title: string; + subtitle: string; + image: string; + link: string; + color: string; + isActive: number; + sortOrder: number; + startDate: string | null; + endDate: string | null; } interface Props { - banners: Banner[] + banners: Banner[]; } export function BannersManager({ banners }: Props) { - const { run, isPending } = useServerAction() - const [showForm, setShowForm] = useState(false) - const [editingId, setEditingId] = useState(null) + const { run, isPending } = useServerAction(); + const [showForm, setShowForm] = useState(false); + const [editingId, setEditingId] = useState(null); const [form, setForm] = useState({ - title: '', - subtitle: '', - image: '', - link: '', - color: '', + title: "", + subtitle: "", + image: "", + link: "", + color: "", isActive: 1, sortOrder: 0, - startDate: '' as string | null, - endDate: '' as string | null, - }) + startDate: "" as string | null, + endDate: "" as string | null, + }); function resetForm() { setForm({ - title: '', - subtitle: '', - image: '', - link: '', - color: '', + title: "", + subtitle: "", + image: "", + link: "", + color: "", isActive: 1, sortOrder: 0, - startDate: '', - endDate: '', - }) - setEditingId(null) - setShowForm(false) + startDate: "", + endDate: "", + }); + setEditingId(null); + setShowForm(false); } function handleEdit(b: Banner) { @@ -72,20 +72,20 @@ export function BannersManager({ banners }: Props) { sortOrder: b.sortOrder, startDate: b.startDate, endDate: b.endDate, - }) - setEditingId(b.id) - setShowForm(true) + }); + setEditingId(b.id); + setShowForm(true); } function handleSubmit(e: React.FormEvent) { - e.preventDefault() - const data = { ...form, startDate: form.startDate || null, endDate: form.endDate || null } + e.preventDefault(); + const data = { ...form, startDate: form.startDate || null, endDate: form.endDate || null }; if (editingId) { - run(() => updateBanner({ id: editingId, ...data }), { successMessage: 'Banner updated!' }) + run(() => updateBanner({ id: editingId, ...data }), { successMessage: "Banner updated!" }); } else { - run(() => createBanner(data), { successMessage: 'Banner created!' }) + run(() => createBanner(data), { successMessage: "Banner created!" }); } - resetForm() + resetForm(); } return ( @@ -93,8 +93,8 @@ export function BannersManager({ banners }: Props) {
- setForm({ ...form, link: e.target.value })} - /> + setForm({ ...form, link: e.target.value })} />
@@ -147,7 +144,7 @@ export function BannersManager({ banners }: Props) { setForm({ ...form, color: e.target.value })} />
@@ -191,7 +188,7 @@ export function BannersManager({ banners }: Props) { Cancel @@ -206,10 +203,7 @@ export function BannersManager({ banners }: Props) { {banners.map((b) => ( {b.image && ( -
+
)}
@@ -217,19 +211,14 @@ export function BannersManager({ banners }: Props) {

{b.title}

{b.subtitle &&

{b.subtitle}

}
- - {b.isActive ? 'Active' : 'Inactive'} + + {b.isActive ? "Active" : "Inactive"} {b.startDate && Scheduled}
-
- ) + ); } diff --git a/src/app/admin/banners/page.tsx b/src/app/admin/banners/page.tsx index f45bc7b6..7fc6acda 100644 --- a/src/app/admin/banners/page.tsx +++ b/src/app/admin/banners/page.tsx @@ -1,17 +1,17 @@ -import { redirect } from 'next/navigation' -import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' -import { prisma } from '@/lib/prisma' -import { BannersManager } from './banners-manager' +import { redirect } from "next/navigation"; +import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; +import { prisma } from "@/lib/prisma"; +import { BannersManager } from "./banners-manager"; export default async function BannersPage() { - const { session, permissions } = await getAdminContext() + const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.BANNERS_VIEW, session.user.rank)) { - redirect('/admin') + redirect("/admin"); } const banners = await prisma.websiteBanner.findMany({ - orderBy: { sortOrder: 'asc' }, - }) + orderBy: { sortOrder: "asc" }, + }); return (
@@ -21,5 +21,5 @@ export default async function BannersPage() {
- ) + ); } diff --git a/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx b/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx index 00a69a0a..ab6fbe2f 100644 --- a/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx +++ b/src/app/admin/catalog/[id]/catalog-detail-tabs.tsx @@ -1,54 +1,54 @@ -'use client' +"use client"; -import { Languages, Package, Settings } from 'lucide-react' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import type { CatalogItemData } from './catalog-items-table' -import { CatalogItemsTable } from './catalog-items-table' -import { CatalogPageForm } from './catalog-page-form' -import { CatalogTranslateTab } from './catalog-translate-tab' +import { Languages, Package, Settings } from "lucide-react"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import type { CatalogItemData } from "./catalog-items-table"; +import { CatalogItemsTable } from "./catalog-items-table"; +import { CatalogPageForm } from "./catalog-page-form"; +import { CatalogTranslateTab } from "./catalog-translate-tab"; interface CatalogPageData { - id: number - caption: string - parentId: number - pageLayout: string - enabled: string - visible: string - minRank: number - clubOnly: string - orderNum: number - iconImage: number - iconColor: number - pageHeadline: string - pageTeaser: string - pageSpecial: string | null - pageText1: string | null - pageText2: string | null - pageTextDetails: string | null - pageTextTeaser: string | null + id: number; + caption: string; + parentId: number; + pageLayout: string; + enabled: string; + visible: string; + minRank: number; + clubOnly: string; + orderNum: number; + iconImage: number; + iconColor: number; + pageHeadline: string; + pageTeaser: string; + pageSpecial: string | null; + pageText1: string | null; + pageText2: string | null; + pageTextDetails: string | null; + pageTextTeaser: string | null; } interface BaseItemData { - id: number - publicName: string - itemName: string - spriteId: number - type: string + id: number; + publicName: string; + itemName: string; + spriteId: number; + type: string; } interface CatalogDetailTabsProps { - catalogPage: CatalogPageData - items: CatalogItemData[] - baseItems: BaseItemData[] - catalogNameMap: Record - childPages: { id: number; caption: string; enabled: string }[] - pageId: number - canEdit: boolean - furniDataIdList: number[] - furniDescriptionMap: Record - furniRevisionMap: Record - allPages: { id: number; caption: string }[] - interactionTypes: string[] + catalogPage: CatalogPageData; + items: CatalogItemData[]; + baseItems: BaseItemData[]; + catalogNameMap: Record; + childPages: { id: number; caption: string; enabled: string }[]; + pageId: number; + canEdit: boolean; + furniDataIdList: number[]; + furniDescriptionMap: Record; + furniRevisionMap: Record; + allPages: { id: number; caption: string }[]; + interactionTypes: string[]; } export function CatalogDetailTabs({ @@ -78,14 +78,15 @@ export function CatalogDetailTabs({ - Translate ({baseItems.length}){(() => { - const furniSet = new Set(furniDataIdList) - const missing = baseItems.filter((b) => !furniSet.has(b.id)).length + Translate ({baseItems.length}) + {(() => { + const furniSet = new Set(furniDataIdList); + const missing = baseItems.filter((b) => !furniSet.has(b.id)).length; return missing > 0 ? ( - + {missing} - ) : null + ) : null; })()} @@ -122,5 +123,5 @@ export function CatalogDetailTabs({ /> - ) + ); } diff --git a/src/app/admin/catalog/[id]/catalog-items-table.tsx b/src/app/admin/catalog/[id]/catalog-items-table.tsx index c3a80fa3..3f6e3b2d 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table.tsx @@ -2,6 +2,6 @@ * Re-export barrel for backward compatibility. * Implementation moved to ./catalog-items-table/ directory. */ -export { CatalogItemsTable } from './catalog-items-table/catalog-items-table' -export { FurniIcon } from './catalog-items-table/furni-icon' -export type { BaseItemData, CatalogItemData } from './catalog-items-table/types' +export { CatalogItemsTable } from "./catalog-items-table/catalog-items-table"; +export { FurniIcon } from "./catalog-items-table/furni-icon"; +export type { BaseItemData, CatalogItemData } from "./catalog-items-table/types"; diff --git a/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx b/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx index bed97222..f7c38e62 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table/catalog-items-table.tsx @@ -1,4 +1,4 @@ -'use client' +"use client"; import { closestCenter, @@ -9,14 +9,9 @@ import { PointerSensor, useSensor, useSensors, -} from '@dnd-kit/core' -import { - arrayMove, - SortableContext, - useSortable, - verticalListSortingStrategy, -} from '@dnd-kit/sortable' -import { CSS } from '@dnd-kit/utilities' +} from "@dnd-kit/core"; +import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; import { ArrowRightLeft, Copy, @@ -33,59 +28,40 @@ import { Search, Trash2, X, -} from 'lucide-react' -import { useRouter } from 'next/navigation' -import { useCallback, useEffect, useMemo, useState } from 'react' -import { toast } from 'sonner' +} from "lucide-react"; +import { useRouter } from "next/navigation"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { toast } from "sonner"; import { createCatalogItem, deleteCatalogItems, moveCatalogItems, reorderCatalogItems, updateCatalogItem, -} from '@/actions/catalog-items' -import { BulkImportItems } from '@/components/admin/catalog/bulk-import-items' -import { ItemsShopPreview } from '@/components/admin/catalog/items-shop-preview' -import { QuickAddFurni } from '@/components/admin/catalog/quick-add-furni' -import { Badge } from '@/components/ui/badge' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { Checkbox } from '@/components/ui/checkbox' -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@/components/ui/dialog' -import { Input } from '@/components/ui/input' -import { Label } from '@/components/ui/label' -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select' -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '@/components/ui/table' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import { useServerAction } from '@/hooks/use-server-action' -import { getSuggestions, recordMove } from '@/lib/move-suggestions' -import { cn } from '@/lib/utils' -import { InteractionTypeCombobox, MovePageCombobox, ToggleField } from './field-helpers' -import { FurniIcon } from './furni-icon' -import { SongPicker } from './song-picker' -import type { BaseItemData, CatalogItemData, InlineEdit } from './types' -import { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from './types' +} from "@/actions/catalog-items"; +import { BulkImportItems } from "@/components/admin/catalog/bulk-import-items"; +import { ItemsShopPreview } from "@/components/admin/catalog/items-shop-preview"; +import { QuickAddFurni } from "@/components/admin/catalog/quick-add-furni"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { useServerAction } from "@/hooks/use-server-action"; +import { getSuggestions, recordMove } from "@/lib/move-suggestions"; +import { cn } from "@/lib/utils"; +import { InteractionTypeCombobox, MovePageCombobox, ToggleField } from "./field-helpers"; +import { FurniIcon } from "./furni-icon"; +import { SongPicker } from "./song-picker"; +import type { BaseItemData, CatalogItemData, InlineEdit } from "./types"; +import { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from "./types"; -export type { BaseItemData, CatalogItemData } +export type { BaseItemData, CatalogItemData }; // ── Sortable row wrapper (dnd-kit) ───────────────────────────── function SortableRow({ @@ -93,22 +69,22 @@ function SortableRow({ className, children, }: { - id: number - className?: string - children: (props: { dragHandleProps: React.HTMLAttributes }) => React.ReactNode + id: number; + className?: string; + children: (props: { dragHandleProps: React.HTMLAttributes }) => React.ReactNode; }) { const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id, - }) + }); const style: React.CSSProperties = { transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.35 : 1, - } + }; const dragHandleProps = { ...attributes, ...listeners, - } as unknown as React.HTMLAttributes + } as unknown as React.HTMLAttributes; return ( } @@ -117,17 +93,17 @@ function SortableRow({ > {children({ dragHandleProps })} - ) + ); } interface CatalogItemsTableProps { - items: CatalogItemData[] - pageId: number - pageLayout: string - canEdit: boolean - interactionTypes: string[] - furniRevisionMap: Record - allPages: { id: number; caption: string }[] + items: CatalogItemData[]; + pageId: number; + pageLayout: string; + canEdit: boolean; + interactionTypes: string[]; + furniRevisionMap: Record; + allPages: { id: number; caption: string }[]; } export function CatalogItemsTable({ @@ -139,24 +115,24 @@ export function CatalogItemsTable({ furniRevisionMap, allPages, }: CatalogItemsTableProps) { - const router = useRouter() - const { run, isPending } = useServerAction() - const [addOpen, setAddOpen] = useState(false) - const [editingItem, setEditingItem] = useState(null) - const [editingBase, setEditingBase] = useState(null) - const [savingItemId, setSavingItemId] = useState(null) + const router = useRouter(); + const { run, isPending } = useServerAction(); + const [addOpen, setAddOpen] = useState(false); + const [editingItem, setEditingItem] = useState(null); + const [editingBase, setEditingBase] = useState(null); + const [savingItemId, setSavingItemId] = useState(null); - const [newItem, setNewItem] = useState({ ...DEFAULT_NEW_ITEM }) + const [newItem, setNewItem] = useState({ ...DEFAULT_NEW_ITEM }); // ── View mode (table / grid) ──────────────────────────────────── - const [viewMode, setViewMode] = useState<'table' | 'grid'>('table') + const [viewMode, setViewMode] = useState<"table" | "grid">("table"); // ── Search / Filter ───────────────────────────────────────────── - const [searchQuery, setSearchQuery] = useState('') + const [searchQuery, setSearchQuery] = useState(""); const filteredItems = useMemo(() => { - if (!searchQuery.trim()) return items - const q = searchQuery.toLowerCase() + if (!searchQuery.trim()) return items; + const q = searchQuery.toLowerCase(); return items.filter( (item) => item.catalogName.toLowerCase().includes(q) || @@ -164,47 +140,47 @@ export function CatalogItemsTable({ item.baseName.toLowerCase().includes(q) || item.itemIds.includes(q) || String(item.id).includes(q), - ) - }, [items, searchQuery]) + ); + }, [items, searchQuery]); // ── Move items dialog ─────────────────────────────────────────── - const [moveOpen, setMoveOpen] = useState(false) - const [moveTargetPageId, setMoveTargetPageId] = useState(null) + const [moveOpen, setMoveOpen] = useState(false); + const [moveTargetPageId, setMoveTargetPageId] = useState(null); // ── Bulk price dialog ─────────────────────────────────────────── - const [bulkPriceOpen, setBulkPriceOpen] = useState(false) - const [bulkPriceField, setBulkPriceField] = useState<'costCredits' | 'costPoints'>('costCredits') - const [bulkPriceMode, setBulkPriceMode] = useState<'set' | 'add' | 'percent'>('set') - const [bulkPriceValue, setBulkPriceValue] = useState(0) + const [bulkPriceOpen, setBulkPriceOpen] = useState(false); + const [bulkPriceField, setBulkPriceField] = useState<"costCredits" | "costPoints">("costCredits"); + const [bulkPriceMode, setBulkPriceMode] = useState<"set" | "add" | "percent">("set"); + const [bulkPriceValue, setBulkPriceValue] = useState(0); // ── Drag & Drop (dnd-kit) ─────────────────────────────────────── - const [activeDragId, setActiveDragId] = useState(null) - const [itemOrder, setItemOrder] = useState(items.map((i) => i.id)) - const dndSensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 8 } })) + const [activeDragId, setActiveDragId] = useState(null); + const [itemOrder, setItemOrder] = useState(items.map((i) => i.id)); + const dndSensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 8 } })); const orderedFilteredItems = useMemo(() => { - if (searchQuery.trim()) return filteredItems - const orderMap = new Map(itemOrder.map((id, idx) => [id, idx])) - return [...filteredItems].sort((a, b) => (orderMap.get(a.id) ?? 0) - (orderMap.get(b.id) ?? 0)) - }, [filteredItems, itemOrder, searchQuery]) + if (searchQuery.trim()) return filteredItems; + const orderMap = new Map(itemOrder.map((id, idx) => [id, idx])); + return [...filteredItems].sort((a, b) => (orderMap.get(a.id) ?? 0) - (orderMap.get(b.id) ?? 0)); + }, [filteredItems, itemOrder, searchQuery]); // ── Selection ──────────────────────────────────────────────────── - const [selected, setSelected] = useState>(new Set()) + const [selected, setSelected] = useState>(new Set()); const toggleOne = useCallback((id: number) => { setSelected((prev) => { - const next = new Set(prev) - if (next.has(id)) next.delete(id) - else next.add(id) - return next - }) - }, []) + const next = new Set(prev); + if (next.has(id)) next.delete(id); + else next.add(id); + return next; + }); + }, []); const toggleAll = useCallback(() => { setSelected((prev) => prev.size === filteredItems.length ? new Set() : new Set(filteredItems.map((i) => i.id)), - ) - }, [filteredItems]) + ); + }, [filteredItems]); // ── Inline edits ───────────────────────────────────────────────── const [inlineEdits, setInlineEdits] = useState>( @@ -219,65 +195,65 @@ export function CatalogItemsTable({ }, ]), ), - ) + ); function updateInline(id: number, key: keyof InlineEdit, value: string | number) { setInlineEdits((prev) => ({ ...prev, [id]: { ...prev[id], [key]: value }, - })) + })); } const isItemModified = useCallback( (item: CatalogItemData) => { - const edit = inlineEdits[item.id] - if (!edit) return false + const edit = inlineEdits[item.id]; + if (!edit) return false; return ( edit.costCredits !== item.costCredits || edit.costPoints !== item.costPoints || edit.pointsType !== item.pointsType || edit.amount !== item.amount - ) + ); }, [inlineEdits], - ) + ); - const modifiedItems = useMemo(() => items.filter(isItemModified), [items, isItemModified]) + const modifiedItems = useMemo(() => items.filter(isItemModified), [items, isItemModified]); const hasOrderChanges = useMemo(() => { - const originalOrder = items.map((i) => i.id) - return itemOrder.some((id, idx) => id !== originalOrder[idx]) - }, [items, itemOrder]) + const originalOrder = items.map((i) => i.id); + return itemOrder.some((id, idx) => id !== originalOrder[idx]); + }, [items, itemOrder]); - const hasUnsavedChanges = modifiedItems.length > 0 || hasOrderChanges + const hasUnsavedChanges = modifiedItems.length > 0 || hasOrderChanges; // Warn before navigating away with unsaved changes useEffect(() => { - if (!hasUnsavedChanges) return + if (!hasUnsavedChanges) return; function onBeforeUnload(e: BeforeUnloadEvent) { - e.preventDefault() + e.preventDefault(); } - window.addEventListener('beforeunload', onBeforeUnload) - return () => window.removeEventListener('beforeunload', onBeforeUnload) - }, [hasUnsavedChanges]) + window.addEventListener("beforeunload", onBeforeUnload); + return () => window.removeEventListener("beforeunload", onBeforeUnload); + }, [hasUnsavedChanges]); // Ctrl+S / Cmd+S to save modified items useEffect(() => { - if (!canEdit) return + if (!canEdit) return; function onKeyDown(e: KeyboardEvent) { - if ((e.metaKey || e.ctrlKey) && e.key === 's') { - e.preventDefault() - if (modifiedItems.length > 0) handleSaveAllModified() - else if (hasOrderChanges) handleSaveOrder() + if ((e.metaKey || e.ctrlKey) && e.key === "s") { + e.preventDefault(); + if (modifiedItems.length > 0) handleSaveAllModified(); + else if (hasOrderChanges) handleSaveOrder(); } } - document.addEventListener('keydown', onKeyDown) - return () => document.removeEventListener('keydown', onKeyDown) - }) + document.addEventListener("keydown", onKeyDown); + return () => document.removeEventListener("keydown", onKeyDown); + }); function resetInlineEdit(id: number) { - const item = items.find((i) => i.id === id) - if (!item) return + const item = items.find((i) => i.id === id); + if (!item) return; setInlineEdits((prev) => ({ ...prev, [id]: { @@ -286,7 +262,7 @@ export function CatalogItemsTable({ pointsType: item.pointsType, amount: item.amount, }, - })) + })); } function resetAllEdits() { @@ -302,20 +278,20 @@ export function CatalogItemsTable({ }, ]), ), - ) + ); } // ── Open edit dialog ─────────────────────────────────────────── function openEditDialog(item: CatalogItemData) { - setEditingItem({ ...item }) - setEditingBase(item.baseItem ? { ...item.baseItem } : null) + setEditingItem({ ...item }); + setEditingBase(item.baseItem ? { ...item.baseItem } : null); } // ── Save single item inline ────────────────────────────────────── async function handleSaveOne(item: CatalogItemData) { - const edit = inlineEdits[item.id] - if (!edit) return - setSavingItemId(item.id) + const edit = inlineEdits[item.id]; + if (!edit) return; + setSavingItemId(item.id); run( () => @@ -341,25 +317,25 @@ export function CatalogItemsTable({ successMessage: `Item #${item.id} saved.`, errorMessage: `Failed to save item #${item.id}.`, onSuccess: () => { - setSavingItemId(null) - router.refresh() + setSavingItemId(null); + router.refresh(); }, }, - ) + ); } // ── Save all modified items ────────────────────────────────────── async function handleSaveAllModified() { - if (modifiedItems.length === 0) return + if (modifiedItems.length === 0) return; run( async () => { - let savedCount = 0 - let failedCount = 0 + let savedCount = 0; + let failedCount = 0; for (const item of modifiedItems) { - const edit = inlineEdits[item.id] - if (!edit) continue + const edit = inlineEdits[item.id]; + if (!edit) continue; const result = await updateCatalogItem({ id: item.id, @@ -378,137 +354,137 @@ export function CatalogItemsTable({ clubOnly: item.clubOnly, extradata: item.extradata, }, - }) + }); - if (result.ok) savedCount++ - else failedCount++ + if (result.ok) savedCount++; + else failedCount++; } if (failedCount > 0) { - return { ok: false as const, error: `Saved ${savedCount}, failed ${failedCount}.` } + return { ok: false as const, error: `Saved ${savedCount}, failed ${failedCount}.` }; } - return { ok: true as const, data: { savedCount } } + return { ok: true as const, data: { savedCount } }; }, { successMessage: `Saved ${modifiedItems.length} item(s).`, - errorMessage: 'Failed to save items.', + errorMessage: "Failed to save items.", }, - ) + ); } // ── Bulk delete selected ───────────────────────────────────────── async function handleBulkDelete() { - if (selected.size === 0) return - if (!confirm(`Delete ${selected.size} selected item(s)?`)) return + if (selected.size === 0) return; + if (!confirm(`Delete ${selected.size} selected item(s)?`)) return; run(() => deleteCatalogItems({ ids: [...selected] }), { successMessage: `Deleted ${selected.size} item(s).`, - errorMessage: 'Failed to delete items.', + errorMessage: "Failed to delete items.", onSuccess: () => { - setSelected(new Set()) - router.refresh() + setSelected(new Set()); + router.refresh(); }, - }) + }); } // ── Move selected items to another page ───────────────────────── async function handleMoveItems() { - if (selected.size === 0 || !moveTargetPageId) return + if (selected.size === 0 || !moveTargetPageId) return; // Record move patterns for all selected items for (const id of selected) { - const item = items.find((i) => i.id === id) + const item = items.find((i) => i.id === id); if (item) { recordMove({ interactionType: item.baseItem?.interactionType, itemName: item.baseItemName, targetPageId: moveTargetPageId, - }) + }); } } run(() => moveCatalogItems({ ids: [...selected], targetPageId: moveTargetPageId }), { successMessage: `Moved ${selected.size} item(s) to page #${moveTargetPageId}.`, - errorMessage: 'Failed to move items.', + errorMessage: "Failed to move items.", onSuccess: () => { - setSelected(new Set()) - setMoveOpen(false) - setMoveTargetPageId(null) - router.refresh() + setSelected(new Set()); + setMoveOpen(false); + setMoveTargetPageId(null); + router.refresh(); }, - }) + }); } // ── Apply bulk price update to inline edits ──────────────────── function applyBulkPrice() { - const targetIds = selected.size > 0 ? selected : new Set(filteredItems.map((i) => i.id)) + const targetIds = selected.size > 0 ? selected : new Set(filteredItems.map((i) => i.id)); setInlineEdits((prev) => { - const next = { ...prev } + const next = { ...prev }; for (const id of targetIds) { - const edit = next[id] - if (!edit) continue - const currentVal = edit[bulkPriceField] - let newVal: number - if (bulkPriceMode === 'set') { - newVal = bulkPriceValue - } else if (bulkPriceMode === 'add') { - newVal = currentVal + bulkPriceValue + const edit = next[id]; + if (!edit) continue; + const currentVal = edit[bulkPriceField]; + let newVal: number; + if (bulkPriceMode === "set") { + newVal = bulkPriceValue; + } else if (bulkPriceMode === "add") { + newVal = currentVal + bulkPriceValue; } else { - newVal = Math.round(currentVal * (1 + bulkPriceValue / 100)) + newVal = Math.round(currentVal * (1 + bulkPriceValue / 100)); } - next[id] = { ...edit, [bulkPriceField]: Math.max(0, newVal) } + next[id] = { ...edit, [bulkPriceField]: Math.max(0, newVal) }; } - return next - }) - setBulkPriceOpen(false) - toast.success(`Price update applied to ${targetIds.size} item(s). Save to persist.`) + return next; + }); + setBulkPriceOpen(false); + toast.success(`Price update applied to ${targetIds.size} item(s). Save to persist.`); } // ── Drag & Drop handlers (dnd-kit) ────────────────────────────── const handleDragStart = useCallback((event: DragStartEvent) => { - setActiveDragId(Number(event.active.id)) - }, []) + setActiveDragId(Number(event.active.id)); + }, []); const handleDragEnd = useCallback((event: DragEndEvent) => { - const { active, over } = event - setActiveDragId(null) - if (!over || active.id === over.id) return + const { active, over } = event; + setActiveDragId(null); + if (!over || active.id === over.id) return; setItemOrder((prev) => { - const fromIdx = prev.indexOf(Number(active.id)) - const toIdx = prev.indexOf(Number(over.id)) - if (fromIdx === -1 || toIdx === -1) return prev - return arrayMove(prev, fromIdx, toIdx) - }) - }, []) + const fromIdx = prev.indexOf(Number(active.id)); + const toIdx = prev.indexOf(Number(over.id)); + if (fromIdx === -1 || toIdx === -1) return prev; + return arrayMove(prev, fromIdx, toIdx); + }); + }, []); const handleDragCancel = useCallback(() => { - setActiveDragId(null) - }, []) + setActiveDragId(null); + }, []); async function handleSaveOrder() { - const orders = itemOrder.map((id, idx) => ({ id, orderNumber: idx + 1 })) + const orders = itemOrder.map((id, idx) => ({ id, orderNumber: idx + 1 })); run(() => reorderCatalogItems({ orders }), { - successMessage: 'Item order saved.', - errorMessage: 'Failed to save order.', - }) + successMessage: "Item order saved.", + errorMessage: "Failed to save order.", + }); } function resetOrder() { - setItemOrder(items.map((i) => i.id)) + setItemOrder(items.map((i) => i.id)); } // Helper to get furni revision info for an item function getFurniInfo(item: CatalogItemData) { const firstBaseId = item.itemIds - .split(';') + .split(";") .map(Number) - .find((n) => n > 0) - if (!firstBaseId) return { classname: item.baseItemName, revision: 0 } - const furni = furniRevisionMap[firstBaseId] + .find((n) => n > 0); + if (!firstBaseId) return { classname: item.baseItemName, revision: 0 }; + const furni = furniRevisionMap[firstBaseId]; return furni ? { classname: furni.classname || item.baseItemName, revision: furni.revision } - : { classname: item.baseItemName, revision: 0 } + : { classname: item.baseItemName, revision: 0 }; } // ── Original CRUD handlers ─────────────────────────────────────── @@ -518,62 +494,62 @@ export function CatalogItemsTable({ createCatalogItem({ ...newItem, pageId, - haveOffer: newItem.haveOffer as '0' | '1', - clubOnly: newItem.clubOnly as '0' | '1', + haveOffer: newItem.haveOffer as "0" | "1", + clubOnly: newItem.clubOnly as "0" | "1", }), { - successMessage: 'Item added.', - errorMessage: 'Failed to add item', + successMessage: "Item added.", + errorMessage: "Failed to add item", onSuccess: () => { - setAddOpen(false) - setNewItem({ ...DEFAULT_NEW_ITEM }) - router.refresh() + setAddOpen(false); + setNewItem({ ...DEFAULT_NEW_ITEM }); + router.refresh(); }, }, - ) + ); } async function handleDeleteItem(id: number) { - if (!confirm('Delete this catalog item?')) return + if (!confirm("Delete this catalog item?")) return; run(() => deleteCatalogItems({ ids: [id] }), { - successMessage: 'Item deleted.', - errorMessage: 'Failed to delete item.', - }) + successMessage: "Item deleted.", + errorMessage: "Failed to delete item.", + }); } // ── Move single item to another page ───────────────────────── - const [moveOneId, setMoveOneId] = useState(null) - const [moveOneTarget, setMoveOneTarget] = useState(null) + const [moveOneId, setMoveOneId] = useState(null); + const [moveOneTarget, setMoveOneTarget] = useState(null); // Get the item being moved for suggestions - const moveOneItem = moveOneId ? items.find((i) => i.id === moveOneId) : null + const moveOneItem = moveOneId ? items.find((i) => i.id === moveOneId) : null; const moveOneSuggestions = useMemo(() => { - if (!moveOneItem) return [] + if (!moveOneItem) return []; return getSuggestions({ interactionType: moveOneItem.baseItem?.interactionType, itemName: moveOneItem.baseItemName, - }) - }, [moveOneItem]) + }); + }, [moveOneItem]); async function handleMoveSingleItem() { - if (!moveOneId || !moveOneTarget) return + if (!moveOneId || !moveOneTarget) return; // Record for learning before moving if (moveOneItem) { recordMove({ interactionType: moveOneItem.baseItem?.interactionType, itemName: moveOneItem.baseItemName, targetPageId: moveOneTarget, - }) + }); } run(() => moveCatalogItems({ ids: [moveOneId], targetPageId: moveOneTarget }), { successMessage: `Item #${moveOneId} moved to page #${moveOneTarget}.`, - errorMessage: 'Failed to move item.', + errorMessage: "Failed to move item.", onSuccess: () => { - setMoveOneId(null) - setMoveOneTarget(null) - router.refresh() + setMoveOneId(null); + setMoveOneTarget(null); + router.refresh(); }, - }) + }); } async function handleDuplicateItem(item: CatalogItemData) { @@ -592,19 +568,19 @@ export function CatalogItemsTable({ orderNumber: item.orderNumber + 1, offerId: item.offerId, songId: item.songId, - haveOffer: item.haveOffer as '0' | '1', - clubOnly: item.clubOnly as '0' | '1', + haveOffer: item.haveOffer as "0" | "1", + clubOnly: item.clubOnly as "0" | "1", extradata: item.extradata, }), { successMessage: `Item #${item.id} duplicated.`, - errorMessage: 'Failed to duplicate item.', + errorMessage: "Failed to duplicate item.", }, - ) + ); } async function handleUpdateItem() { - if (!editingItem) return + if (!editingItem) return; run( () => updateCatalogItem({ @@ -636,14 +612,14 @@ export function CatalogItemsTable({ }), { successMessage: `Item #${editingItem.id} updated.`, - errorMessage: 'Failed to update item', + errorMessage: "Failed to update item", onSuccess: () => { - setEditingItem(null) - setEditingBase(null) - router.refresh() + setEditingItem(null); + setEditingBase(null); + router.refresh(); }, }, - ) + ); } // ── Add Item Form Fields (for "Add" dialog) ─────────────────── @@ -651,21 +627,18 @@ export function CatalogItemsTable({ data, onChange, }: { - data: typeof DEFAULT_NEW_ITEM - onChange: (key: string, value: string | number) => void + data: typeof DEFAULT_NEW_ITEM; + onChange: (key: string, value: string | number) => void; }) { return (
- onChange('catalogName', e.target.value)} - /> + onChange("catalogName", e.target.value)} />
- onChange('itemIds', e.target.value)} /> + onChange("itemIds", e.target.value)} />
@@ -674,7 +647,7 @@ export function CatalogItemsTable({ onChange('costCredits', parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange("costCredits", parseInt(e.target.value, 10) || 0)} />
@@ -682,14 +655,14 @@ export function CatalogItemsTable({ onChange('costPoints', parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange("costPoints", parseInt(e.target.value, 10) || 0)} />
onChange('amount', parseInt(e.target.value, 10) || 1)} + onChange={(e) => onChange("amount", parseInt(e.target.value, 10) || 1)} />
@@ -719,7 +692,7 @@ export function CatalogItemsTable({ onChange('orderNumber', parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange("orderNumber", parseInt(e.target.value, 10) || 0)} />
@@ -727,7 +700,7 @@ export function CatalogItemsTable({ onChange('offerId', parseInt(e.target.value, 10))} + onChange={(e) => onChange("offerId", parseInt(e.target.value, 10))} />
@@ -738,7 +711,7 @@ export function CatalogItemsTable({ onChange('limitedSells', parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange("limitedSells", parseInt(e.target.value, 10) || 0)} />
@@ -746,7 +719,7 @@ export function CatalogItemsTable({ onChange('limitedStack', parseInt(e.target.value, 10) || 0)} + onChange={(e) => onChange("limitedStack", parseInt(e.target.value, 10) || 0)} />
@@ -754,7 +727,7 @@ export function CatalogItemsTable({
- onChange("haveOffer", v)}> @@ -766,7 +739,7 @@ export function CatalogItemsTable({
- onChange("clubOnly", v)}> @@ -782,12 +755,12 @@ export function CatalogItemsTable({ onChange('extradata', e.target.value)} + onChange={(e) => onChange("extradata", e.target.value)} placeholder="Optional extra data" />
- ) + ); } return ( @@ -812,12 +785,12 @@ export function CatalogItemsTable({
- @@ -890,12 +858,7 @@ export function CatalogItemsTable({ )} {modifiedItems.length > 0 && ( <> - @@ -946,11 +909,10 @@ export function CatalogItemsTable({
You have unsaved changes ( - {modifiedItems.length > 0 ? `${modifiedItems.length} item(s) modified` : ''} - {modifiedItems.length > 0 && hasOrderChanges ? ', ' : ''} - {hasOrderChanges ? 'order changed' : ''}). Press{' '} - Ctrl+S to - save. + {modifiedItems.length > 0 ? `${modifiedItems.length} item(s) modified` : ""} + {modifiedItems.length > 0 && hasOrderChanges ? ", " : ""} + {hasOrderChanges ? "order changed" : ""}). Press{" "} + Ctrl+S to save.
)} @@ -969,7 +931,7 @@ export function CatalogItemsTable({ @@ -992,7 +954,7 @@ export function CatalogItemsTable({

No items match "{searchQuery}".

- ) : viewMode === 'grid' ? ( + ) : viewMode === "grid" ? ( 0 && selected.size === filteredItems.length - } + checked={filteredItems.length > 0 && selected.size === filteredItems.length} onCheckedChange={toggleAll} aria-label="Select all" /> @@ -1041,17 +1001,20 @@ export function CatalogItemsTable({ > {orderedFilteredItems.map((item) => { - const pts = getPointsLabel(item.pointsType) - const edit = inlineEdits[item.id] - const modified = isItemModified(item) - const isSaving = savingItemId === item.id - const furniInfo = getFurniInfo(item) - const sortableDisabled = !canEdit || !!searchQuery + const pts = getPointsLabel(item.pointsType); + const edit = inlineEdits[item.id]; + const modified = isItemModified(item); + const isSaving = savingItemId === item.id; + const furniInfo = getFurniInfo(item); + const sortableDisabled = !canEdit || !!searchQuery; return ( {({ dragHandleProps }) => ( <> @@ -1080,10 +1043,7 @@ export function CatalogItemsTable({ )} - + {item.id} @@ -1093,7 +1053,7 @@ export function CatalogItemsTable({ {item.itemIds} - {item.baseItemName || '-'} + {item.baseItemName || "-"} {canEdit ? ( @@ -1104,7 +1064,7 @@ export function CatalogItemsTable({ onChange={(e) => updateInline( item.id, - 'costCredits', + "costCredits", parseInt(e.target.value, 10) || 0, ) } @@ -1116,27 +1076,23 @@ export function CatalogItemsTable({ type="number" value={edit?.costPoints ?? item.costPoints} onChange={(e) => - updateInline( - item.id, - 'costPoints', - parseInt(e.target.value, 10) || 0, - ) + updateInline(item.id, "costPoints", parseInt(e.target.value, 10) || 0) } className="h-8 text-xs w-16" title="Points" /> - - {pts.label.charAt(0)} - + {pts.label.charAt(0)}
) : (
{item.costCredits > 0 && ( - {item.costCredits}c + + {item.costCredits}c{" "} + )} {item.costPoints > 0 && ( - {item.costPoints} {pts.label}{' '} + {item.costPoints} {pts.label}{" "} )} {item.costCredits === 0 && item.costPoints === 0 && ( @@ -1151,11 +1107,7 @@ export function CatalogItemsTable({ type="number" value={edit?.amount ?? item.amount} onChange={(e) => - updateInline( - item.id, - 'amount', - parseInt(e.target.value, 10) || 1, - ) + updateInline(item.id, "amount", parseInt(e.target.value, 10) || 1) } className="h-8 text-xs w-16" /> @@ -1166,17 +1118,17 @@ export function CatalogItemsTable({
- {item.haveOffer === '1' ? 'Offer' : 'No Offer'} + {item.haveOffer === "1" ? "Offer" : "No Offer"} {item.limitedStack > 0 && ( LTD {item.limitedSells}/{item.limitedStack} )} - {item.clubOnly === '1' && ( + {item.clubOnly === "1" && ( HC @@ -1258,7 +1210,7 @@ export function CatalogItemsTable({ )} - ) + ); })} @@ -1267,9 +1219,9 @@ export function CatalogItemsTable({ {activeDragId !== null && (() => { - const dragged = items.find((i) => i.id === activeDragId) - if (!dragged) return null - const info = getFurniInfo(dragged) + const dragged = items.find((i) => i.id === activeDragId); + if (!dragged) return null; + const info = getFurniInfo(dragged); return (
@@ -1280,7 +1232,7 @@ export function CatalogItemsTable({

#{dragged.id}

- ) + ); })()} @@ -1292,8 +1244,8 @@ export function CatalogItemsTable({ open={!!editingItem} onOpenChange={(open) => { if (!open) { - setEditingItem(null) - setEditingBase(null) + setEditingItem(null); + setEditingBase(null); } }} > @@ -1307,9 +1259,7 @@ export function CatalogItemsTable({
- {editingItem.catalogName || ( - unnamed - )} + {editingItem.catalogName || unnamed}
@@ -1327,9 +1277,7 @@ export function CatalogItemsTable({ Furniture Settings - {!editingBase && ( - (N/A) - )} + {!editingBase && (N/A)} @@ -1342,9 +1290,7 @@ export function CatalogItemsTable({ type="number" value={editingItem.costCredits} onChange={(e) => - setEditingItem( - (p) => p && { ...p, costCredits: parseInt(e.target.value, 10) || 0 }, - ) + setEditingItem((p) => p && { ...p, costCredits: parseInt(e.target.value, 10) || 0 }) } />
@@ -1354,9 +1300,7 @@ export function CatalogItemsTable({ type="number" value={editingItem.costPoints} onChange={(e) => - setEditingItem( - (p) => p && { ...p, costPoints: parseInt(e.target.value, 10) || 0 }, - ) + setEditingItem((p) => p && { ...p, costPoints: parseInt(e.target.value, 10) || 0 }) } />
@@ -1389,9 +1333,7 @@ export function CatalogItemsTable({ type="number" value={editingItem.amount} onChange={(e) => - setEditingItem( - (p) => p && { ...p, amount: parseInt(e.target.value, 10) || 1 }, - ) + setEditingItem((p) => p && { ...p, amount: parseInt(e.target.value, 10) || 1 }) } /> @@ -1401,9 +1343,7 @@ export function CatalogItemsTable({ type="number" value={editingItem.orderNumber} onChange={(e) => - setEditingItem( - (p) => p && { ...p, orderNumber: parseInt(e.target.value, 10) || 0 }, - ) + setEditingItem((p) => p && { ...p, orderNumber: parseInt(e.target.value, 10) || 0 }) } /> @@ -1413,9 +1353,7 @@ export function CatalogItemsTable({ type="number" value={editingItem.offerId} onChange={(e) => - setEditingItem( - (p) => p && { ...p, offerId: parseInt(e.target.value, 10) }, - ) + setEditingItem((p) => p && { ...p, offerId: parseInt(e.target.value, 10) }) } /> @@ -1485,9 +1423,7 @@ export function CatalogItemsTable({ - setEditingItem((p) => p && { ...p, extradata: e.target.value }) - } + onChange={(e) => setEditingItem((p) => p && { ...p, extradata: e.target.value })} placeholder="Optional extra data" /> @@ -1499,7 +1435,7 @@ export function CatalogItemsTable({ onChange={(id) => setEditingItem((p) => p && { ...p, songId: id })} />

- Select a soundtrack to play when this item is used in-game. Uploaded from{' '} + Select a soundtrack to play when this item is used in-game. Uploaded from{" "} /admin/sounds.

@@ -1567,9 +1503,7 @@ export function CatalogItemsTable({ type="number" value={editingBase.width} onChange={(e) => - setEditingBase( - (p) => p && { ...p, width: parseInt(e.target.value, 10) || 0 }, - ) + setEditingBase((p) => p && { ...p, width: parseInt(e.target.value, 10) || 0 }) } /> @@ -1579,9 +1513,7 @@ export function CatalogItemsTable({ type="number" value={editingBase.length} onChange={(e) => - setEditingBase( - (p) => p && { ...p, length: parseInt(e.target.value, 10) || 0 }, - ) + setEditingBase((p) => p && { ...p, length: parseInt(e.target.value, 10) || 0 }) } /> @@ -1611,9 +1543,7 @@ export function CatalogItemsTable({ - setEditingBase((p) => p && { ...p, interactionType: v }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, interactionType: v })} types={interactionTypes} /> @@ -1645,51 +1575,37 @@ export function CatalogItemsTable({ - setEditingBase((p) => p && { ...p, allowStack: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowStack: v ? 1 : 0 })} /> - setEditingBase((p) => p && { ...p, allowSit: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowSit: v ? 1 : 0 })} /> - setEditingBase((p) => p && { ...p, allowLay: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowLay: v ? 1 : 0 })} /> - setEditingBase((p) => p && { ...p, allowWalk: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowWalk: v ? 1 : 0 })} /> - setEditingBase((p) => p && { ...p, allowGift: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowGift: v ? 1 : 0 })} /> - setEditingBase((p) => p && { ...p, allowTrade: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowTrade: v ? 1 : 0 })} /> - setEditingBase((p) => p && { ...p, allowRecycle: v ? 1 : 0 }) - } + onChange={(v) => setEditingBase((p) => p && { ...p, allowRecycle: v ? 1 : 0 })} /> setEditingBase( - (p) => - p && { ...p, effectIdMale: parseInt(e.target.value, 10) || 0 }, + (p) => p && { ...p, effectIdMale: parseInt(e.target.value, 10) || 0 }, ) } /> @@ -1796,8 +1711,8 @@ export function CatalogItemsTable({ @@ -92,15 +92,15 @@ export function InteractionTypeCombobox({ type="button" className="w-full px-2 py-1.5 text-left text-sm hover:bg-accent rounded" onClick={() => { - onChange(inputValue.trim()) - setOpen(false) - setInputValue('') + onChange(inputValue.trim()); + setOpen(false); + setInputValue(""); }} > Use "{inputValue.trim()}" ) : ( - 'No types found.' + "No types found." )} @@ -109,14 +109,12 @@ export function InteractionTypeCombobox({ key={t} value={t} onSelect={() => { - onChange(t) - setOpen(false) - setInputValue('') + onChange(t); + setOpen(false); + setInputValue(""); }} > - + {t} ))} @@ -125,7 +123,7 @@ export function InteractionTypeCombobox({ - ) + ); } // ── Move Page Combobox with smart suggestions ───────────────── @@ -137,35 +135,32 @@ export function MovePageCombobox({ currentPageId, suggestedPageIds, }: { - value: number | null - onChange: (id: number | null) => void - pages: { id: number; caption: string }[] - currentPageId: number + value: number | null; + onChange: (id: number | null) => void; + pages: { id: number; caption: string }[]; + currentPageId: number; /** Page IDs to show first as suggestions (from move-suggestions.ts) */ - suggestedPageIds?: number[] + suggestedPageIds?: number[]; }) { - const [open, setOpen] = useState(false) + const [open, setOpen] = useState(false); - const options = useMemo(() => pages.filter((p) => p.id !== currentPageId), [pages, currentPageId]) + const options = useMemo(() => pages.filter((p) => p.id !== currentPageId), [pages, currentPageId]); - const selectedPage = value ? pages.find((p) => p.id === value) : null + const selectedPage = value ? pages.find((p) => p.id === value) : null; // Build suggested pages list const suggested = useMemo(() => { - if (!suggestedPageIds?.length) return [] - const pageMap = new Map(options.map((p) => [p.id, p])) + if (!suggestedPageIds?.length) return []; + const pageMap = new Map(options.map((p) => [p.id, p])); return suggestedPageIds.map((id) => pageMap.get(id)).filter(Boolean) as { - id: number - caption: string - }[] - }, [suggestedPageIds, options]) + id: number; + caption: string; + }[]; + }, [suggestedPageIds, options]); // Non-suggested pages (exclude those already in suggestions) - const suggestedSet = useMemo(() => new Set(suggested.map((s) => s.id)), [suggested]) - const remaining = useMemo( - () => options.filter((p) => !suggestedSet.has(p.id)), - [options, suggestedSet], - ) + const suggestedSet = useMemo(() => new Set(suggested.map((s) => s.id)), [suggested]); + const remaining = useMemo(() => options.filter((p) => !suggestedSet.has(p.id)), [options, suggestedSet]); return ( @@ -178,9 +173,7 @@ export function MovePageCombobox({ > {selectedPage ? ( - - #{selectedPage.id} - + #{selectedPage.id} {selectedPage.caption} ) : ( @@ -203,20 +196,13 @@ export function MovePageCombobox({ key={`s-${page.id}`} value={`${page.id} ${page.caption}`} onSelect={() => { - onChange(page.id) - setOpen(false) + onChange(page.id); + setOpen(false); }} > - + - - #{page.id} - + #{page.id} {page.caption} ))} @@ -224,19 +210,17 @@ export function MovePageCombobox({ )} {/* All pages */} - 0 ? 'All pages' : undefined}> + 0 ? "All pages" : undefined}> {remaining.map((page) => ( { - onChange(page.id) - setOpen(false) + onChange(page.id); + setOpen(false); }} > - + #{page.id} {page.caption} @@ -246,5 +230,5 @@ export function MovePageCombobox({ - ) + ); } diff --git a/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx b/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx index 1c0dd9bb..343f7b08 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table/furni-icon.tsx @@ -1,7 +1,7 @@ -'use client' +"use client"; -import { Image as ImageIcon } from 'lucide-react' -import { getHabboCdnIconUrl, getLocalIconUrl } from '@/lib/furni/classname' +import { Image as ImageIcon } from "lucide-react"; +import { getHabboCdnIconUrl, getLocalIconUrl } from "@/lib/furni/classname"; export function FurniIcon({ classname, revision }: { classname: string; revision: number }) { if (!classname) { @@ -9,34 +9,34 @@ export function FurniIcon({ classname, revision }: { classname: string; revision
- ) + ); } - const localUrl = getLocalIconUrl(classname) + const localUrl = getLocalIconUrl(classname); function handleError(e: React.SyntheticEvent) { - const img = e.target as HTMLImageElement - const stage = img.dataset.fallback + const img = e.target as HTMLImageElement; + const stage = img.dataset.fallback; if (!stage && revision > 0) { - img.dataset.fallback = 'cdn' - img.src = getHabboCdnIconUrl(classname, revision) + img.dataset.fallback = "cdn"; + img.src = getHabboCdnIconUrl(classname, revision); } else { - img.dataset.fallback = 'none' - img.style.opacity = '0' + img.dataset.fallback = "none"; + img.style.opacity = "0"; } } return (
- {/* eslint-disable-next-line @next/next/no-img-element */} + { } {classname}
- ) + ); } diff --git a/src/app/admin/catalog/[id]/catalog-items-table/index.ts b/src/app/admin/catalog/[id]/catalog-items-table/index.ts index ad35d6ff..f9e39c92 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/index.ts +++ b/src/app/admin/catalog/[id]/catalog-items-table/index.ts @@ -1,4 +1,4 @@ -export { CatalogItemsTable } from './catalog-items-table' -export { FurniIcon } from './furni-icon' -export type { BaseItemData, CatalogItemData, InlineEdit } from './types' -export { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from './types' +export { CatalogItemsTable } from "./catalog-items-table"; +export { FurniIcon } from "./furni-icon"; +export type { BaseItemData, CatalogItemData, InlineEdit } from "./types"; +export { DEFAULT_NEW_ITEM, getPointsLabel, POINTS_TYPES } from "./types"; diff --git a/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx b/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx index 5d0eca70..defa656c 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx +++ b/src/app/admin/catalog/[id]/catalog-items-table/song-picker.tsx @@ -1,59 +1,53 @@ -'use client' +"use client"; -import { Loader2, Music } from 'lucide-react' -import { useEffect, useState } from 'react' -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select' +import { Loader2, Music } from "lucide-react"; +import { useEffect, useState } from "react"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { getCachedSongPickerOptions, loadSongPickerOptions, type SoundtrackOption, -} from '@/lib/client-cache/song-picker-cache' +} from "@/lib/client-cache/song-picker-cache"; // Re-export so existing `import { invalidateSongPickerCache } from '.../song-picker'` // callsites keep working. New code should import from the lib module directly. -export { invalidateSongPickerCache } from '@/lib/client-cache/song-picker-cache' +export { invalidateSongPickerCache } from "@/lib/client-cache/song-picker-cache"; interface Props { - value: number - onChange: (id: number) => void - disabled?: boolean + value: number; + onChange: (id: number) => void; + disabled?: boolean; } function formatLength(seconds: number): string { - if (!seconds || seconds <= 0) return '' - const m = Math.floor(seconds / 60) - const s = seconds % 60 - return `${m}:${String(s).padStart(2, '0')}` + if (!seconds || seconds <= 0) return ""; + const m = Math.floor(seconds / 60); + const s = seconds % 60; + return `${m}:${String(s).padStart(2, "0")}`; } export function SongPicker({ value, onChange, disabled }: Props) { - const initial = getCachedSongPickerOptions() - const [options, setOptions] = useState(initial ?? []) - const [loading, setLoading] = useState(!initial) + const initial = getCachedSongPickerOptions(); + const [options, setOptions] = useState(initial ?? []); + const [loading, setLoading] = useState(!initial); useEffect(() => { - if (getCachedSongPickerOptions()) return - let cancelled = false + if (getCachedSongPickerOptions()) return; + let cancelled = false; loadSongPickerOptions() .then((items) => { - if (!cancelled) setOptions(items) + if (!cancelled) setOptions(items); }) .catch(() => { - if (!cancelled) setOptions([]) + if (!cancelled) setOptions([]); }) .finally(() => { - if (!cancelled) setLoading(false) - }) + if (!cancelled) setLoading(false); + }); return () => { - cancelled = true - } - }, []) + cancelled = true; + }; + }, []); return ( - ) + ); } diff --git a/src/app/admin/catalog/[id]/catalog-items-table/types.ts b/src/app/admin/catalog/[id]/catalog-items-table/types.ts index 907820fe..d69b70ec 100644 --- a/src/app/admin/catalog/[id]/catalog-items-table/types.ts +++ b/src/app/admin/catalog/[id]/catalog-items-table/types.ts @@ -1,71 +1,71 @@ export interface BaseItemData { - id: number - spriteId: number - publicName: string - itemName: string - type: string - width: number - length: number - stackHeight: number - allowStack: number - allowSit: number - allowLay: number - allowWalk: number - allowGift: number - allowTrade: number - allowRecycle: number - allowMarketplaceSell: number - allowInventoryStack: number - interactionType: string - interactionModesCount: number - vendingIds: string - customparams: string - effectIdMale: number - effectIdFemale: number - clothingOnWalk: string + id: number; + spriteId: number; + publicName: string; + itemName: string; + type: string; + width: number; + length: number; + stackHeight: number; + allowStack: number; + allowSit: number; + allowLay: number; + allowWalk: number; + allowGift: number; + allowTrade: number; + allowRecycle: number; + allowMarketplaceSell: number; + allowInventoryStack: number; + interactionType: string; + interactionModesCount: number; + vendingIds: string; + customparams: string; + effectIdMale: number; + effectIdFemale: number; + clothingOnWalk: string; } export interface CatalogItemData { - id: number - catalogName: string - itemIds: string - costCredits: number - costPoints: number - pointsType: number - amount: number - limitedSells: number - limitedStack: number - orderNumber: number - offerId: number - songId: number - haveOffer: string - clubOnly: string - extradata: string - baseName: string - baseItemName: string - spriteId: number - baseItem: BaseItemData | null + id: number; + catalogName: string; + itemIds: string; + costCredits: number; + costPoints: number; + pointsType: number; + amount: number; + limitedSells: number; + limitedStack: number; + orderNumber: number; + offerId: number; + songId: number; + haveOffer: string; + clubOnly: string; + extradata: string; + baseName: string; + baseItemName: string; + spriteId: number; + baseItem: BaseItemData | null; } export interface InlineEdit { - costCredits: number - costPoints: number - pointsType: number - amount: number + costCredits: number; + costPoints: number; + pointsType: number; + amount: number; } export const POINTS_TYPES: Record = { - 0: { label: 'Duckets', color: 'text-[var(--admin-info)]' }, - 5: { label: 'Diamonds', color: 'text-[var(--admin-accent-text)]' }, - 101: { label: 'Snowflakes', color: 'text-[var(--admin-info)]' }, - 103: { label: 'Hearts', color: 'text-[var(--admin-error)]' }, - 104: { label: 'Stars', color: 'text-[var(--admin-warning)]' }, - 105: { label: 'Shells', color: 'text-[var(--admin-warning)]' }, -} + 0: { label: "Duckets", color: "text-[var(--admin-info)]" }, + 5: { label: "Diamonds", color: "text-[var(--admin-accent-text)]" }, + 101: { label: "Snowflakes", color: "text-[var(--admin-info)]" }, + 103: { label: "Hearts", color: "text-[var(--admin-error)]" }, + 104: { label: "Stars", color: "text-[var(--admin-warning)]" }, + 105: { label: "Shells", color: "text-[var(--admin-warning)]" }, +}; export const DEFAULT_NEW_ITEM = { - catalogName: '', - itemIds: '0', + catalogName: "", + itemIds: "0", costCredits: 0, costPoints: 0, pointsType: 0, @@ -75,11 +75,11 @@ export const DEFAULT_NEW_ITEM = { orderNumber: 1, offerId: -1, songId: 0, - haveOffer: '1', - clubOnly: '0', - extradata: '', -} + haveOffer: "1", + clubOnly: "0", + extradata: "", +}; export function getPointsLabel(type: number) { - return POINTS_TYPES[type] || { label: `Type ${type}`, color: 'theme-text-muted' } + return POINTS_TYPES[type] || { label: `Type ${type}`, color: "theme-text-muted" }; } diff --git a/src/app/admin/catalog/[id]/catalog-page-form.tsx b/src/app/admin/catalog/[id]/catalog-page-form.tsx index a3e6a091..a3197a09 100644 --- a/src/app/admin/catalog/[id]/catalog-page-form.tsx +++ b/src/app/admin/catalog/[id]/catalog-page-form.tsx @@ -1,4 +1,4 @@ -'use client' +"use client"; import { Check, @@ -11,17 +11,17 @@ import { Save, Settings, Trash2, -} from 'lucide-react' -import Link from 'next/link' -import { useEffect, useRef, useState } from 'react' -import { deleteCatalogPage, updateCatalogPage } from '@/actions/catalog' -import { CatalogImagePicker } from '@/components/admin/catalog/catalog-image-picker' -import { IconPicker } from '@/components/admin/catalog/icon-picker' -import { ImagePreview } from '@/components/admin/catalog-manager/image-preview' -import { CatalogIcon, LAYOUT_COLORS } from '@/components/admin/catalog-tree' -import { Badge } from '@/components/ui/badge' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +} from "lucide-react"; +import Link from "next/link"; +import { useEffect, useRef, useState } from "react"; +import { deleteCatalogPage, updateCatalogPage } from "@/actions/catalog"; +import { CatalogImagePicker } from "@/components/admin/catalog/catalog-image-picker"; +import { IconPicker } from "@/components/admin/catalog/icon-picker"; +import { ImagePreview } from "@/components/admin/catalog-manager/image-preview"; +import { CatalogIcon, LAYOUT_COLORS } from "@/components/admin/catalog-tree"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Command, CommandEmpty, @@ -29,120 +29,109 @@ import { CommandInput, CommandItem, CommandList, -} from '@/components/ui/command' -import { Input } from '@/components/ui/input' -import { Label } from '@/components/ui/label' -import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select' -import { Switch } from '@/components/ui/switch' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import { Textarea } from '@/components/ui/textarea' -import { useServerAction } from '@/hooks/use-server-action' -import { CATALOG_LAYOUTS, type CatalogLayout, LAYOUT_DESCRIPTIONS } from '@/lib/catalog-layouts' -import { cn } from '@/lib/utils' +} from "@/components/ui/command"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Textarea } from "@/components/ui/textarea"; +import { useServerAction } from "@/hooks/use-server-action"; +import { CATALOG_LAYOUTS, type CatalogLayout, LAYOUT_DESCRIPTIONS } from "@/lib/catalog-layouts"; +import { cn } from "@/lib/utils"; interface CatalogPageData { - id: number - caption: string - parentId: number - pageLayout: string - enabled: string - visible: string - minRank: number - clubOnly: string - orderNum: number - iconImage: number - iconColor: number - pageHeadline: string - pageTeaser: string - pageSpecial: string | null - pageText1: string | null - pageText2: string | null - pageTextDetails: string | null - pageTextTeaser: string | null + id: number; + caption: string; + parentId: number; + pageLayout: string; + enabled: string; + visible: string; + minRank: number; + clubOnly: string; + orderNum: number; + iconImage: number; + iconColor: number; + pageHeadline: string; + pageTeaser: string; + pageSpecial: string | null; + pageText1: string | null; + pageText2: string | null; + pageTextDetails: string | null; + pageTextTeaser: string | null; } interface CatalogPageFormProps { - catalogPage: CatalogPageData - childPages: { id: number; caption: string; enabled: string }[] - canEdit: boolean - allPages: { id: number; caption: string }[] + catalogPage: CatalogPageData; + childPages: { id: number; caption: string; enabled: string }[]; + canEdit: boolean; + allPages: { id: number; caption: string }[]; } -export function CatalogPageForm({ - catalogPage, - childPages, - canEdit, - allPages, -}: CatalogPageFormProps) { - const { isPending, run } = useServerAction() - const formRef = useRef(null) +export function CatalogPageForm({ catalogPage, childPages, canEdit, allPages }: CatalogPageFormProps) { + const { isPending, run } = useServerAction(); + const formRef = useRef(null); const [form, setForm] = useState({ caption: catalogPage.caption, parentId: catalogPage.parentId, pageLayout: catalogPage.pageLayout, - enabled: catalogPage.enabled as '0' | '1', - visible: catalogPage.visible as '0' | '1', + enabled: catalogPage.enabled as "0" | "1", + visible: catalogPage.visible as "0" | "1", minRank: catalogPage.minRank, - clubOnly: catalogPage.clubOnly as '0' | '1', + clubOnly: catalogPage.clubOnly as "0" | "1", orderNum: catalogPage.orderNum, iconImage: catalogPage.iconImage, iconColor: catalogPage.iconColor, pageHeadline: catalogPage.pageHeadline, pageTeaser: catalogPage.pageTeaser, - pageSpecial: catalogPage.pageSpecial || '', - pageText1: catalogPage.pageText1 || '', - pageText2: catalogPage.pageText2 || '', - pageTextDetails: catalogPage.pageTextDetails || '', - pageTextTeaser: catalogPage.pageTextTeaser || '', - }) + pageSpecial: catalogPage.pageSpecial || "", + pageText1: catalogPage.pageText1 || "", + pageText2: catalogPage.pageText2 || "", + pageTextDetails: catalogPage.pageTextDetails || "", + pageTextTeaser: catalogPage.pageTextTeaser || "", + }); // Ctrl+S / Cmd+S to save useEffect(() => { - if (!canEdit) return + if (!canEdit) return; function onKeyDown(e: KeyboardEvent) { - if ((e.metaKey || e.ctrlKey) && e.key === 's') { - e.preventDefault() - formRef.current?.requestSubmit() + if ((e.metaKey || e.ctrlKey) && e.key === "s") { + e.preventDefault(); + formRef.current?.requestSubmit(); } } - document.addEventListener('keydown', onKeyDown) - return () => document.removeEventListener('keydown', onKeyDown) - }, [canEdit]) + document.addEventListener("keydown", onKeyDown); + return () => document.removeEventListener("keydown", onKeyDown); + }, [canEdit]); function update(key: K, value: (typeof form)[K]) { - setForm((prev) => ({ ...prev, [key]: value })) + setForm((prev) => ({ ...prev, [key]: value })); } function handleSubmit(e: React.FormEvent) { - e.preventDefault() + e.preventDefault(); run(() => updateCatalogPage({ id: catalogPage.id, ...form }), { - successMessage: 'Page updated and catalog synced.', - errorMessage: 'Failed to update.', - }) + successMessage: "Page updated and catalog synced.", + errorMessage: "Failed to update.", + }); } function handleDelete() { - const childCount = childPages.length + const childCount = childPages.length; const msg = childCount > 0 ? `Delete this catalog page? Its ${childCount} child page(s) will be moved to root. All items in this page will be deleted.` - : 'Delete this catalog page and all its items?' - if (!confirm(msg)) return + : "Delete this catalog page and all its items?"; + if (!confirm(msg)) return; run(() => deleteCatalogPage({ id: catalogPage.id }), { - successMessage: 'Page deleted.', - redirectTo: '/admin/catalog', - }) + successMessage: "Page deleted.", + redirectTo: "/admin/catalog", + }); } - const layoutColorClass = LAYOUT_COLORS[form.pageLayout] || 'bg-muted text-muted-foreground' + const layoutColorClass = LAYOUT_COLORS[form.pageLayout] || "bg-muted text-muted-foreground"; return (
@@ -175,7 +164,7 @@ export function CatalogPageForm({ update('caption', e.target.value)} + onChange={(e) => update("caption", e.target.value)} disabled={!canEdit} /> @@ -183,7 +172,7 @@ export function CatalogPageForm({ update('parentId', id)} + onChange={(id) => update("parentId", id)} pages={allPages} currentPageId={catalogPage.id} disabled={!canEdit} @@ -195,11 +184,11 @@ export function CatalogPageForm({ update('pageLayout', v)} + onChange={(v) => update("pageLayout", v)} disabled={!canEdit} />

- {LAYOUT_DESCRIPTIONS[form.pageLayout as CatalogLayout] ?? 'Custom layout'} + {LAYOUT_DESCRIPTIONS[form.pageLayout as CatalogLayout] ?? "Custom layout"}

@@ -210,7 +199,7 @@ export function CatalogPageForm({ id="orderNum" type="number" value={form.orderNum} - onChange={(e) => update('orderNum', parseInt(e.target.value, 10) || 0)} + onChange={(e) => update("orderNum", parseInt(e.target.value, 10) || 0)} disabled={!canEdit} /> @@ -222,7 +211,7 @@ export function CatalogPageForm({ min={1} max={100} value={form.minRank} - onChange={(e) => update('minRank', parseInt(e.target.value, 10) || 1)} + onChange={(e) => update("minRank", parseInt(e.target.value, 10) || 1)} disabled={!canEdit} /> @@ -235,7 +224,7 @@ export function CatalogPageForm({ update('pageHeadline', v)} + onChange={(v) => update("pageHeadline", v)} type="header" label="Headline image" disabled={!canEdit} @@ -246,7 +235,7 @@ export function CatalogPageForm({ update('pageTeaser', v)} + onChange={(v) => update("pageTeaser", v)} type="teaser" label="Teaser image" disabled={!canEdit} @@ -258,7 +247,7 @@ export function CatalogPageForm({ id="pageText1" label="Text 1" value={form.pageText1} - onChange={(v) => update('pageText1', v)} + onChange={(v) => update("pageText1", v)} disabled={!canEdit} rows={4} max={5000} @@ -267,7 +256,7 @@ export function CatalogPageForm({ id="pageText2" label="Text 2" value={form.pageText2} - onChange={(v) => update('pageText2', v)} + onChange={(v) => update("pageText2", v)} disabled={!canEdit} rows={4} max={5000} @@ -278,7 +267,7 @@ export function CatalogPageForm({ id="pageTextDetails" label="Details" value={form.pageTextDetails} - onChange={(v) => update('pageTextDetails', v)} + onChange={(v) => update("pageTextDetails", v)} disabled={!canEdit} rows={3} max={5000} @@ -287,7 +276,7 @@ export function CatalogPageForm({ id="pageTextTeaser" label="Text Teaser" value={form.pageTextTeaser} - onChange={(v) => update('pageTextTeaser', v)} + onChange={(v) => update("pageTextTeaser", v)} disabled={!canEdit} rows={3} max={5000} @@ -297,7 +286,7 @@ export function CatalogPageForm({ id="pageSpecial" label="Special" value={form.pageSpecial} - onChange={(v) => update('pageSpecial', v)} + onChange={(v) => update("pageSpecial", v)} disabled={!canEdit} rows={2} max={2048} @@ -311,7 +300,7 @@ export function CatalogPageForm({
update('iconImage', id)} + onChange={(id) => update("iconImage", id)} disabled={!canEdit} />

@@ -328,12 +317,11 @@ export function CatalogPageForm({ min={0} className="w-32" value={form.iconColor} - onChange={(e) => update('iconColor', parseInt(e.target.value, 10) || 0)} + onChange={(e) => update("iconColor", parseInt(e.target.value, 10) || 0)} disabled={!canEdit} />

- Legacy tint value. Leave at default unless you need to match a specific - theme. + Legacy tint value. Leave at default unless you need to match a specific theme.

@@ -361,12 +349,10 @@ export function CatalogPageForm({ > {child.caption} - - #{child.id} - + #{child.id} - - {child.enabled === '1' ? 'Enabled' : 'Disabled'} + + {child.enabled === "1" ? "Enabled" : "Disabled"} ))} @@ -389,13 +375,8 @@ export function CatalogPageForm({
-

{form.caption || 'Untitled'}

- +

{form.caption || "Untitled"}

+ {form.pageLayout}
@@ -407,24 +388,24 @@ export function CatalogPageForm({ id="tg-enabled" label="Enabled" description="Active in the catalog" - checked={form.enabled === '1'} - onChange={(v) => update('enabled', v ? '1' : '0')} + checked={form.enabled === "1"} + onChange={(v) => update("enabled", v ? "1" : "0")} disabled={!canEdit} /> update('visible', v ? '1' : '0')} + checked={form.visible === "1"} + onChange={(v) => update("visible", v ? "1" : "0")} disabled={!canEdit} /> update('clubOnly', v ? '1' : '0')} + checked={form.clubOnly === "1"} + onChange={(v) => update("clubOnly", v ? "1" : "0")} disabled={!canEdit} /> @@ -471,7 +452,7 @@ export function CatalogPageForm({ - ) + ); } // ── Toggle row ───────────────────────────────────────────────── @@ -484,12 +465,12 @@ function ToggleRow({ onChange, disabled, }: { - id: string - label: string - description: string - checked: boolean - onChange: (v: boolean) => void - disabled?: boolean + id: string; + label: string; + description: string; + checked: boolean; + onChange: (v: boolean) => void; + disabled?: boolean; }) { return (
@@ -501,7 +482,7 @@ function ToggleRow({
- ) + ); } // ── Text field with counter ──────────────────────────────────── @@ -514,12 +495,12 @@ function _TextField({ disabled, max, }: { - id: string - label: string - value: string - onChange: (v: string) => void - disabled?: boolean - max?: number + id: string; + label: string; + value: string; + onChange: (v: string) => void; + disabled?: boolean; + max?: number; }) { return (
@@ -539,7 +520,7 @@ function _TextField({ maxLength={max} />
- ) + ); } function TextareaField({ @@ -551,13 +532,13 @@ function TextareaField({ rows = 3, max, }: { - id: string - label: string - value: string - onChange: (v: string) => void - disabled?: boolean - rows?: number - max?: number + id: string; + label: string; + value: string; + onChange: (v: string) => void; + disabled?: boolean; + rows?: number; + max?: number; }) { return (
@@ -578,7 +559,7 @@ function TextareaField({ maxLength={max} />
- ) + ); } // ── Layout select with color swatch ──────────────────────────── @@ -588,9 +569,9 @@ function LayoutSelect({ onChange, disabled, }: { - value: string - onChange: (v: string) => void - disabled?: boolean + value: string; + onChange: (v: string) => void; + disabled?: boolean; }) { return ( - ) + ); } // ── Parent page combobox with search ──────────────────────────── @@ -623,16 +604,16 @@ function ParentCombobox({ currentPageId, disabled, }: { - value: number - onChange: (id: number) => void - pages: { id: number; caption: string }[] - currentPageId: number - disabled?: boolean + value: number; + onChange: (id: number) => void; + pages: { id: number; caption: string }[]; + currentPageId: number; + disabled?: boolean; }) { - const [open, setOpen] = useState(false) + const [open, setOpen] = useState(false); - const options = pages.filter((p) => p.id !== currentPageId) - const selected = value === -1 ? { id: -1, caption: 'Root' } : pages.find((p) => p.id === value) + const options = pages.filter((p) => p.id !== currentPageId); + const selected = value === -1 ? { id: -1, caption: "Root" } : pages.find((p) => p.id === value); return ( @@ -648,7 +629,7 @@ function ParentCombobox({ {selected ? ( - {selected.id === -1 ? '—' : `#${selected.id}`} + {selected.id === -1 ? "—" : `#${selected.id}`} {selected.caption} @@ -667,11 +648,11 @@ function ParentCombobox({ { - onChange(-1) - setOpen(false) + onChange(-1); + setOpen(false); }} > - + — Root @@ -680,13 +661,11 @@ function ParentCombobox({ key={page.id} value={`${page.id} ${page.caption}`} onSelect={() => { - onChange(page.id) - setOpen(false) + onChange(page.id); + setOpen(false); }} > - + #{page.id} {page.caption} @@ -696,5 +675,5 @@ function ParentCombobox({ - ) + ); } diff --git a/src/app/admin/catalog/[id]/catalog-translate-tab.tsx b/src/app/admin/catalog/[id]/catalog-translate-tab.tsx index f01ea9ee..8065346b 100644 --- a/src/app/admin/catalog/[id]/catalog-translate-tab.tsx +++ b/src/app/admin/catalog/[id]/catalog-translate-tab.tsx @@ -1,4 +1,4 @@ -'use client' +"use client"; import { AlertTriangle, @@ -11,46 +11,39 @@ import { Save, ShoppingCart, Sparkles, -} from 'lucide-react' -import { useRouter } from 'next/navigation' -import { useCallback, useMemo, useState } from 'react' -import { toast } from 'sonner' -import { translateCatalogItems } from '@/actions/catalog-items' -import { Badge } from '@/components/ui/badge' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { Checkbox } from '@/components/ui/checkbox' -import { Input } from '@/components/ui/input' -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '@/components/ui/table' -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' -import { useServerAction } from '@/hooks/use-server-action' -import { FurniIcon } from './catalog-items-table' +} from "lucide-react"; +import { useRouter } from "next/navigation"; +import { useCallback, useMemo, useState } from "react"; +import { toast } from "sonner"; +import { translateCatalogItems } from "@/actions/catalog-items"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Input } from "@/components/ui/input"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; +import { useServerAction } from "@/hooks/use-server-action"; +import { FurniIcon } from "./catalog-items-table"; interface BaseItemForTranslation { - id: number - publicName: string - itemName: string - spriteId: number - type: string + id: number; + publicName: string; + itemName: string; + spriteId: number; + type: string; } interface CatalogTranslateTabProps { - baseItems: BaseItemForTranslation[] - catalogNameMap: Record - canEdit: boolean - furniDataIdList: number[] - furniDescriptionMap: Record - furniRevisionMap?: Record + baseItems: BaseItemForTranslation[]; + catalogNameMap: Record; + canEdit: boolean; + furniDataIdList: number[]; + furniDescriptionMap: Record; + furniRevisionMap?: Record; } -type FilterMode = 'all' | 'missing' | 'modified' +type FilterMode = "all" | "missing" | "modified"; export function CatalogTranslateTab({ baseItems, @@ -60,164 +53,164 @@ export function CatalogTranslateTab({ furniDescriptionMap, furniRevisionMap = {}, }: CatalogTranslateTabProps) { - const router = useRouter() - const { run, isPending } = useServerAction() - const [isSuggesting, setIsSuggesting] = useState(false) - const [filterMode, setFilterMode] = useState('all') + const router = useRouter(); + const { run, isPending } = useServerAction(); + const [isSuggesting, setIsSuggesting] = useState(false); + const [filterMode, setFilterMode] = useState("all"); - const furniDataIdSet = useMemo(() => new Set(furniDataIdList), [furniDataIdList]) - const [selected, setSelected] = useState>(new Set()) + const furniDataIdSet = useMemo(() => new Set(furniDataIdList), [furniDataIdList]); + const [selected, setSelected] = useState>(new Set()); // ── Editable state: names + descriptions ───────────────────────── const [editedNames, setEditedNames] = useState>( Object.fromEntries(baseItems.map((item) => [item.id, item.publicName])), - ) + ); const [editedDescs, setEditedDescs] = useState>( - Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ''])), - ) + Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ""])), + ); // Track which items have name or description changes const isNameChanged = useCallback( (item: BaseItemForTranslation) => editedNames[item.id] !== item.publicName, [editedNames], - ) + ); const isDescChanged = useCallback( - (item: BaseItemForTranslation) => editedDescs[item.id] !== (furniDescriptionMap[item.id] ?? ''), + (item: BaseItemForTranslation) => editedDescs[item.id] !== (furniDescriptionMap[item.id] ?? ""), [editedDescs, furniDescriptionMap], - ) + ); const changedItems = useMemo( () => baseItems.filter((item) => isNameChanged(item) || isDescChanged(item)), [baseItems, isNameChanged, isDescChanged], - ) + ); const missingItems = useMemo( () => baseItems.filter((item) => !furniDataIdSet.has(item.id)), [baseItems, furniDataIdSet], - ) + ); const filteredItems = useMemo(() => { switch (filterMode) { - case 'missing': - return baseItems.filter((item) => !furniDataIdSet.has(item.id)) - case 'modified': - return baseItems.filter((item) => isNameChanged(item) || isDescChanged(item)) + case "missing": + return baseItems.filter((item) => !furniDataIdSet.has(item.id)); + case "modified": + return baseItems.filter((item) => isNameChanged(item) || isDescChanged(item)); default: - return baseItems + return baseItems; } - }, [baseItems, filterMode, furniDataIdSet, isNameChanged, isDescChanged]) + }, [baseItems, filterMode, furniDataIdSet, isNameChanged, isDescChanged]); const toggleOne = useCallback((id: number) => { setSelected((prev) => { - const next = new Set(prev) - if (next.has(id)) next.delete(id) - else next.add(id) - return next - }) - }, []) + const next = new Set(prev); + if (next.has(id)) next.delete(id); + else next.add(id); + return next; + }); + }, []); const toggleAll = useCallback(() => { setSelected((prev) => prev.size === filteredItems.length ? new Set() : new Set(filteredItems.map((i) => i.id)), - ) - }, [filteredItems]) + ); + }, [filteredItems]); // Items to act on: selected ones if any, otherwise all const targetItems = useMemo(() => { - if (selected.size === 0) return baseItems - return baseItems.filter((i) => selected.has(i.id)) - }, [baseItems, selected]) + if (selected.size === 0) return baseItems; + return baseItems.filter((i) => selected.has(i.id)); + }, [baseItems, selected]); function handleNameChange(id: number, value: string) { - setEditedNames((prev) => ({ ...prev, [id]: value })) + setEditedNames((prev) => ({ ...prev, [id]: value })); } function handleDescChange(id: number, value: string) { - setEditedDescs((prev) => ({ ...prev, [id]: value })) + setEditedDescs((prev) => ({ ...prev, [id]: value })); } function handleReset() { - setEditedNames(Object.fromEntries(baseItems.map((item) => [item.id, item.publicName]))) + setEditedNames(Object.fromEntries(baseItems.map((item) => [item.id, item.publicName]))); setEditedDescs( - Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ''])), - ) + Object.fromEntries(baseItems.map((item) => [item.id, furniDescriptionMap[item.id] ?? ""])), + ); } async function handleSuggestFromHabboFurni() { - if (targetItems.length === 0) return - setIsSuggesting(true) + if (targetItems.length === 0) return; + setIsSuggesting(true); try { // Collect classnames from selected items (or all if none selected) - const classnames = targetItems.map((item) => item.itemName).filter(Boolean) + const classnames = targetItems.map((item) => item.itemName).filter(Boolean); if (classnames.length === 0) { - toast.info('No classnames found to look up.') - setIsSuggesting(false) - return + toast.info("No classnames found to look up."); + setIsSuggesting(false); + return; } // Batch in chunks of 50 to avoid too-long URLs - const CHUNK_SIZE = 50 - const allSuggestions: Record = {} + const CHUNK_SIZE = 50; + const allSuggestions: Record = {}; for (let i = 0; i < classnames.length; i += CHUNK_SIZE) { - const chunk = classnames.slice(i, i + CHUNK_SIZE) + const chunk = classnames.slice(i, i + CHUNK_SIZE); const res = await fetch( - `/api/admin/catalog/suggest?classnames=${encodeURIComponent(chunk.join(','))}`, - ) + `/api/admin/catalog/suggest?classnames=${encodeURIComponent(chunk.join(","))}`, + ); if (res.ok) { - const data = await res.json() - Object.assign(allSuggestions, data.suggestions || {}) + const data = await res.json(); + Object.assign(allSuggestions, data.suggestions || {}); } } // Apply suggestions to items that have a match (names + descriptions) - let nameCount = 0 - let descCount = 0 - const newNames = { ...editedNames } - const newDescs = { ...editedDescs } + let nameCount = 0; + let descCount = 0; + const newNames = { ...editedNames }; + const newDescs = { ...editedDescs }; for (const item of targetItems) { - const suggestion = allSuggestions[item.itemName] - if (!suggestion) continue + const suggestion = allSuggestions[item.itemName]; + if (!suggestion) continue; if (suggestion.name && suggestion.name !== item.publicName) { - newNames[item.id] = suggestion.name - nameCount++ + newNames[item.id] = suggestion.name; + nameCount++; } - const currentDesc = furniDescriptionMap[item.id] ?? '' + const currentDesc = furniDescriptionMap[item.id] ?? ""; if (suggestion.description && suggestion.description !== currentDesc) { - newDescs[item.id] = suggestion.description - descCount++ + newDescs[item.id] = suggestion.description; + descCount++; } } - setEditedNames(newNames) - setEditedDescs(newDescs) + setEditedNames(newNames); + setEditedDescs(newDescs); - const total = nameCount + descCount + const total = nameCount + descCount; if (total > 0) { - const parts = [] - if (nameCount > 0) parts.push(`${nameCount} name(s)`) - if (descCount > 0) parts.push(`${descCount} description(s)`) - toast.success(`HabboFurni: ${parts.join(' + ')} suggested from habbo.it. Review and save.`) + const parts = []; + if (nameCount > 0) parts.push(`${nameCount} name(s)`); + if (descCount > 0) parts.push(`${descCount} description(s)`); + toast.success(`HabboFurni: ${parts.join(" + ")} suggested from habbo.it. Review and save.`); } else { toast.info( `HabboFurni: No new suggestions found (${Object.keys(allSuggestions).length} looked up, all already match).`, - ) + ); } } catch (err) { - toast.error(`HabboFurni error: ${(err as Error).message}`) + toast.error(`HabboFurni error: ${(err as Error).message}`); } finally { - setIsSuggesting(false) + setIsSuggesting(false); } } async function handleSaveAll() { - if (changedItems.length === 0) return + if (changedItems.length === 0) return; run( () => @@ -229,26 +222,26 @@ export function CatalogTranslateTab({ })), }), { - successMessage: 'Translations saved.', - errorMessage: 'Failed to save translations.', + successMessage: "Translations saved.", + errorMessage: "Failed to save translations.", onSuccess: (data) => { - const d = data as Record - const parts = [] + const d = data as Record; + const parts = []; if (d.namesUpdated && (d.namesUpdated as number) > 0) - parts.push(`${d.namesUpdated} name(s) updated`) + parts.push(`${d.namesUpdated} name(s) updated`); if (d.descriptionsUpdated && (d.descriptionsUpdated as number) > 0) - parts.push(`${d.descriptionsUpdated} description(s) updated`) - if (parts.length === 0) parts.push(`${d.updated ?? 0} item(s) processed`) - if (d.furniDataUpdated) parts.push('FurnitureData.json synced') + parts.push(`${d.descriptionsUpdated} description(s) updated`); + if (parts.length === 0) parts.push(`${d.updated ?? 0} item(s) processed`); + if (d.furniDataUpdated) parts.push("FurnitureData.json synced"); if (d.furniDataInserted && (d.furniDataInserted as number) > 0) { - parts.push(`${d.furniDataInserted} new item(s) added to FurnitureData.json`) + parts.push(`${d.furniDataInserted} new item(s) added to FurnitureData.json`); } - parts.push('emulator cache refreshed') - toast.success(`${parts.join(' · ')}.`) - router.refresh() + parts.push("emulator cache refreshed"); + toast.success(`${parts.join(" · ")}.`); + router.refresh(); }, }, - ) + ); } return ( @@ -274,8 +267,7 @@ export function CatalogTranslateTab({
- {missingItems.length} item(s) missing from FurnitureData.json — will be - auto-inserted on save + {missingItems.length} item(s) missing from FurnitureData.json — will be auto-inserted on save
)} @@ -294,7 +286,7 @@ export function CatalogTranslateTab({ ) : ( )} - Suggest IT{selected.size > 0 ? ` (${selected.size})` : ''} + Suggest IT{selected.size > 0 ? ` (${selected.size})` : ""} -