From 6a1fa62fdbbb16988a07fb3167f91c0dbcaefc5e Mon Sep 17 00:00:00 2001 From: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Thu, 16 Oct 2025 16:08:19 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20merge=20in=20plan=20edit?= =?UTF-8?q?or?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 18 + CLAUDE.md | 36 +- bun.lock | 1027 ++- example/.gitignore | 43 - example/README.md | 0 example/components.json | 21 - example/eslint.config.mjs | 21 - example/next.config.ts | 7 - example/package-lock.json | 7021 ----------------- example/package.json | 39 - example/postcss.config.mjs | 5 - example/public/file.svg | 1 - example/public/globe.svg | 1 - example/public/next.svg | 1 - example/public/vercel.svg | 1 - example/public/window.svg | 1 - example/src/app/demo.tsx | 16 - example/src/app/favicon.ico | Bin 25931 -> 0 bytes example/src/app/globals.css | 143 - example/src/app/layout.tsx | 45 - example/src/app/page.tsx | 21 - example/src/app/referrals/functions.tsx | 28 - example/src/app/referrals/page.tsx | 169 - example/src/components/application.tsx | 66 - example/src/components/billing.tsx | 103 - example/src/components/introduction.tsx | 52 - example/src/components/ui/input.tsx | 21 - example/src/components/ui/sonner.tsx | 25 - example/src/hooks/use-mobile.ts | 21 - example/src/lib/utils.ts | 6 - example/tsconfig.json | 28 - opencode.json | 4 + package.json | 1 + server/example.ts | 2 +- server/package.json | 1 + .../createStripePrice/createStripeInArrear.ts | 21 +- .../external/stripe/stripeOnboardingUtils.ts | 6 +- .../src/external/stripe/stripePriceUtils.ts | 4 +- .../webhookHandlers/handleInvoicePaid.ts | 2 +- .../honoMiddlewares/betterAuthMiddleware.ts | 6 +- server/src/index.ts | 32 +- server/src/initHono.ts | 15 +- .../getUpdateEntsPreview.ts | 31 - .../cusEnts/CusEntitlementService.ts | 32 +- server/src/internal/features/featureUtils.ts | 44 - .../features/handlers/handleUpdateFeature.ts | 40 +- .../getObjectsUsingFeature.ts | 66 + .../handleFeatureTypeChanged.ts | 116 + .../features/internalFeatureRouter.ts | 2 +- .../internal/invoices/invoiceFormatUtils.ts | 96 +- server/src/internal/mainRouter.ts | 2 +- .../entitlements/EntitlementService.ts | 43 +- .../handlers/handleGetProductDeleteInfo.ts | 2 - .../handleUpdateProduct.ts | 17 +- .../updateProductDetails.ts | 5 +- .../products/internalProductRouter.ts | 59 +- .../product-items/compareItemUtils.ts | 267 - .../product-items/itemIntervalUtils.ts | 48 - .../product-items/productItemUtils.ts | 33 +- .../productItemUtils/itemToPriceAndEnt.ts | 24 +- .../product-items/validateProductItems.ts | 140 +- .../productUtils/compareProductUtils.ts | 6 +- server/src/utils/auth.ts | 3 +- shared/CLAUDE.md | 0 .../changes/V0_2_CusProductChange.ts | 2 +- .../api/errors/classes/featureErrClasses.ts | 29 + shared/api/errors/codes/featureErrCodes.ts | 7 + shared/api/features/apiFeature.ts | 1 + shared/api/features/updateFeatureParams.ts | 29 +- shared/api/models.ts | 3 +- shared/api/products/productOpModels.ts | 2 +- shared/index.ts | 8 +- shared/models/featureModels/featureModels.ts | 8 +- .../freeTrialModels/freeTrialModels.ts | 5 +- .../priceConfig/fixedPriceConfig.ts | 2 + shared/models/productModels/productModels.ts | 11 +- .../productItemModels/featurePriceItem.ts | 1 + .../productItemModels/productItemModels.ts | 7 +- .../models/productV2Models/productV2Models.ts | 2 + .../productV3Models/productV3Response.ts | 34 + shared/package.json | 2 + shared/utils/displayUtils.ts | 13 +- shared/utils/featureUtils.ts | 5 + .../featureUtils/apiFeatureToDbFeature.ts | 106 + .../featureUtils/constructFeatureUtils.ts | 152 + .../utils/featureUtils/convertFeatureUtils.ts | 27 + shared/utils/index.ts | 4 + shared/utils/intervalUtils.ts | 6 +- shared/utils/productDisplayUtils.ts | 120 +- .../productDisplayUtils/sortProductItems.ts | 23 +- shared/utils/productUtils.ts | 2 +- shared/utils/productUtils/freeTrialUtils.ts | 47 + .../productUtils/priceToInvoiceAmount.ts | 36 +- .../compareItemUtils.ts | 390 + .../compareProductUtils.ts | 253 + shared/utils/productV2Utils/mapToProductV2.ts | 58 +- .../productItemUtils/classifyItemUtils.ts | 18 + .../productItemUtils/convertItemUtils.ts | 39 + .../productItemUtils}/getItemType.ts | 4 +- .../productItemUtils}/getProductItemRes.ts | 15 +- .../productItemUtils/itemIntervalUtils.ts | 60 + .../productItemUtils/mapToItem.ts | 25 +- .../productItemUtils/productItemUtils.ts | 83 +- shared/utils/productV3Utils/mapToProductV3.ts | 26 + .../productItemUtils/productV3ItemUtils.ts | 49 + shared/utils/utils.ts | 14 + temp_svg_analysis.svg | 208 + vite/FORM_DESIGN_GUIDELINES.md | 50 + vite/biome.json | 6 +- vite/index.html | 4 +- vite/package.json | 11 +- vite/public/frameworks/react.png | Bin 78488 -> 194880 bytes vite/src/App.tsx | 32 +- vite/src/app/OnboardingLayout.tsx | 66 + vite/src/app/layout.tsx | 64 +- .../src/components/autumn/PlanCardPreview.tsx | 209 + .../autumn/PricingTableContainer.tsx | 28 + .../autumn/pricing-table-preview.tsx | 104 + vite/src/components/compareDbFeature.ts | 116 + vite/src/components/general/CopyButton.tsx | 5 +- vite/src/components/general/CopyablePre.tsx | 55 +- vite/src/components/general/CustomToaster.tsx | 37 +- .../general/buttons/ClickableIcon.tsx | 29 + .../general/modal-components/InfoTooltip.tsx | 4 +- vite/src/components/ui/button.tsx | 32 +- vite/src/components/ui/command.tsx | 31 +- vite/src/components/ui/dialog.tsx | 17 +- vite/src/components/ui/popover.tsx | 2 +- vite/src/components/ui/separator.tsx | 4 +- vite/src/components/v2/CodeGroup.tsx | 388 + vite/src/components/v2/badges/Badge.tsx | 60 + vite/src/components/v2/badges/IconBadge.tsx | 118 + .../components/v2/badges/PlanTypeBadge.tsx | 59 + .../components/v2/badges/PlanTypeBadges.tsx | 39 + vite/src/components/v2/badges/StackBadge.tsx | 72 + vite/src/components/v2/badges/StepBadge.tsx | 9 + vite/src/components/v2/breadcrumb.tsx | 48 + vite/src/components/v2/buttons/Button.tsx | 170 + vite/src/components/v2/buttons/CopyButton.tsx | 62 + .../v2/buttons/GroupedTabButton.tsx | 68 + .../v2/buttons/HoverClickableIcon.tsx | 44 + vite/src/components/v2/buttons/IconButton.tsx | 149 + .../src/components/v2/buttons/PanelButton.tsx | 78 + .../components/v2/buttons/ShortcutButton.tsx | 86 + vite/src/components/v2/cards/Card.tsx | 92 + .../components/v2/checkboxes/AreaCheckbox.tsx | 91 + .../src/components/v2/checkboxes/Checkbox.tsx | 66 + .../components/v2/checkboxes/IconCheckbox.tsx | 165 + .../components/v2/checkboxes/LongCheckbox.tsx | 56 + .../components/v2/checkboxes/TextCheckbox.tsx | 37 + vite/src/components/v2/dialogs/Dialog.tsx | 146 + vite/src/components/v2/form/FormLabel.tsx | 23 + vite/src/components/v2/icons/AutumnIcons.tsx | 339 + vite/src/components/v2/inputs/Input.tsx | 58 + vite/src/components/v2/inputs/InputGroup.tsx | 186 + vite/src/components/v2/inputs/LabelInput.tsx | 22 + vite/src/components/v2/inputs/LongInput.tsx | 26 + vite/src/components/v2/inputs/TagInput.tsx | 128 + .../v2/radio-groups/AreaRadioGroupItem.tsx | 53 + .../components/v2/radio-groups/RadioGroup.tsx | 53 + .../src/components/v2/selects/LabelSelect.tsx | 54 + vite/src/components/v2/selects/Select.tsx | 230 + vite/src/components/v2/selects/TagSelect.tsx | 103 + vite/src/components/v2/separator.tsx | 28 + vite/src/components/v2/sheets/InlineSheet.tsx | 26 + .../v2/sheets/SharedSheetComponents.tsx | 120 + .../{ui/sheet.tsx => v2/sheets/Sheet.tsx} | 10 +- .../components/v2/sheets/SheetAccordion.tsx | 81 + vite/src/components/v2/tooltips/Tooltip.tsx | 82 + vite/src/hooks/common/useAutoSlug.tsx | 71 + vite/src/hooks/common/useClearQueryParams.ts | 42 + vite/src/hooks/common/useClickWithoutDrag.ts | 43 + vite/src/hooks/queries/useProductsQuery.tsx | 17 +- vite/src/hooks/stores/useFeatureStore.ts | 51 + vite/src/hooks/stores/useProductStore.ts | 104 + vite/src/hooks/stores/useProductSync.ts | 39 + vite/src/hooks/stores/useRewardStore.ts | 48 + vite/src/hooks/stores/useSheetStore.ts | 54 + vite/src/index.css | 297 +- vite/src/lib/auth-client.ts | 5 +- vite/src/lib/autumn/checkout-content.tsx | 4 +- vite/src/lib/autumn/get-paywall-texts.tsx | 6 +- vite/src/lib/autumn/pricing-table-content.tsx | 10 +- vite/src/main.tsx | 14 +- vite/src/services/FeatureService.tsx | 10 +- vite/src/services/products/ProductService.tsx | 3 +- vite/src/services/products/RewardService.tsx | 4 +- vite/src/styles/button.css | 67 + vite/src/styles/custom.css | 239 + vite/src/styles/form/base.css | 24 + vite/src/styles/form/effects.css | 44 + vite/src/styles/form/states.css | 83 + vite/src/styles/input.css | 82 + vite/src/styles/typography.css | 110 + vite/src/utils/genUtils.ts | 57 +- vite/src/utils/product/itemIntervalUtils.ts | 43 - .../product-item/validateProductItem.ts | 48 +- vite/src/utils/product/productItemUtils.ts | 11 + vite/src/utils/supabase/client.ts | 4 +- vite/src/views/admin/hooks/useAdmin.tsx | 4 +- vite/src/views/auth/SignIn.tsx | 14 +- vite/src/views/command-bar/CommandBar.tsx | 648 ++ vite/src/views/command-bar/command-row.tsx | 110 + vite/src/views/command-bar/commandUtils.ts | 59 + .../views/command-bar/useCommandBarHotkeys.ts | 101 + vite/src/views/customers/CustomersPage.tsx | 179 +- .../customers/components/CreateCustomer.tsx | 88 +- .../filter-dropdown/CustomersFilterButton.tsx | 11 +- .../customers/customer/CustomerToolbar.tsx | 46 +- .../customer/analytics/components/AGGrid.ts | 2 +- .../customer/components/CustomerConfig.tsx | 6 +- .../components/DeleteCustomerDialog.tsx | 24 +- .../components/UpdateCustomerDialog.tsx | 24 +- .../customer-sidebar/CustomerSidebar.tsx | 6 +- .../CusProductStripeLink.tsx | 4 +- vite/src/views/developer/DevView.tsx | 4 +- vite/src/views/developer/api-keys/ApiKeys.tsx | 42 - .../views/developer/api-keys/ApiKeysPage.tsx | 81 + .../api-keys/components/APIKeyTable.tsx | 12 +- .../api-keys/components/APIKeyToolbar.tsx | 22 +- .../api-keys/components/CreateAPIKey.tsx | 118 - .../components/CreateApiKeyDialog.tsx | 191 + .../components/DeleteApiKeyDialog.tsx | 33 +- vite/src/views/main-sidebar/EnvDropdown.tsx | 40 +- vite/src/views/main-sidebar/NavButton.tsx | 16 +- .../main-sidebar/components/OrgDropdown.tsx | 73 +- .../env-dropdown/ExpandedEnvTrigger.tsx | 7 +- .../org-dropdown/components/OrgLogo.tsx | 2 +- .../onboarding-steps/ProductList.tsx | 53 +- vite/src/views/onboarding2/SampleApp.tsx | 12 +- .../integrate/components/CodeSpan.tsx | 17 +- .../CheckoutPricingTable.tsx | 10 +- .../onboarding2/model-pricing/EditProduct.tsx | 41 +- .../model-pricing/SelectEditProduct.tsx | 22 +- .../edit-product/EditProductDetails.tsx | 22 +- .../views/onboarding3/ConnectStripeDialog.tsx | 90 + .../onboarding3/OnboardingCheckoutDialog.tsx | 131 + .../views/onboarding3/OnboardingPreview.tsx | 152 + .../src/views/onboarding3/OnboardingView3.tsx | 140 + .../onboarding3/components/CompletionStep.tsx | 101 + .../components/DummyFeatureRow.tsx | 64 + .../onboarding3/components/ExitButton.tsx | 62 + .../components/FeatureConfigurationStep.tsx | 9 + .../components/FeatureCreationStep.tsx | 28 + .../components/IntegrationStep.tsx | 43 + .../components/OnboardingStepRenderer.tsx | 204 + .../components/OnboardingSteps.tsx | 83 + .../components/PlanDetailsStep.tsx | 78 + .../onboarding3/components/StepHeaders.tsx | 41 + .../integration-step/BackendSection.tsx | 93 + .../integration-step/ConnectStripeSection.tsx | 81 + .../integration-step/EnvSection.tsx | 117 + .../integration-step/FrontendSection.tsx | 60 + .../integration-step/InstallSection.tsx | 77 + .../integration-step/IntegrationContext.tsx | 70 + .../integration-step/MCPSection.tsx | 57 + .../integration-step/NextStepsSection.tsx | 104 + .../integration-step/PricingTableSection.tsx | 62 + .../integration-step/SectionHeader.tsx | 29 + .../StackSelectionSection.tsx | 165 + .../components/integration-step/snippets.ts | 485 ++ .../playground-step/AvailableFeatures.tsx | 133 + .../playground-step/PlaygroundToolbar.tsx | 79 + .../playground-step/QuickStartCodeGroup.tsx | 119 + .../hooks/actions/useFeatureConfigActions.tsx | 52 + .../actions/useFeatureCreationActions.tsx | 134 + .../hooks/actions/usePlanDetailsActions.tsx | 58 + .../hooks/actions/useSharedActions.tsx | 155 + .../hooks/actions/useStepActions.tsx | 172 + .../onboarding3/hooks/useAutoSetProductId.ts | 38 + .../hooks/useAutoSkipToPlayground.ts | 93 + .../onboarding3/hooks/useInitFeatureItem.tsx | 68 + .../hooks/useOnboarding3QueryState.tsx | 22 + .../onboarding3/hooks/useOnboardingData.tsx | 12 + .../hooks/useOnboardingFeatureSync.tsx | 86 + .../onboarding3/hooks/useOnboardingFlow.tsx | 102 + .../onboarding3/hooks/useOnboardingLogic.tsx | 129 + .../hooks/useOnboardingProductSync.ts | 58 + .../onboarding3/hooks/useOnboardingSteps.tsx | 74 + .../onboarding3/store/useOnboardingStore.ts | 99 + .../onboarding3/utils/completionStepCode.ts | 147 + .../onboarding3/utils/onboardingUtils.ts | 500 ++ vite/src/views/products/ProductConfig.tsx | 80 +- vite/src/views/products/ProductsView.tsx | 29 +- .../products/components/PlanTypeBadge.tsx | 32 + .../views/products/features/FeaturesPage.tsx | 51 +- .../features/components/CreateFeature.tsx | 8 +- .../components/CreateFeatureSheet.tsx | 140 + .../features/components/FeaturesTable.tsx | 8 +- .../features/components/UpdateFeature.tsx | 4 +- .../components/UpdateFeatureSheet.tsx | 118 + .../credit-systems/CreditSystemsTable.tsx | 21 +- .../{ => archives}/CreateCreditSystem.tsx | 32 +- .../{ => archives}/CreditSystemConfig.tsx | 0 .../{ => archives}/UpdateCreditSystem.tsx | 0 .../components/CreateCreditSystemSheet.tsx | 126 + .../components/CreditSystemDetails.tsx | 44 + .../components/CreditSystemSchema.tsx | 154 + .../components/UpdateCreditSystemSheet.tsx | 136 + .../DeleteFeatureDialog.tsx | 120 +- .../archives/DeleteFeatureDialog.tsx | 163 + .../products/features/utils/defaultFeature.ts | 3 +- .../features/utils/getFeatureIcon.tsx | 23 + .../views/products/plan/PlanEditorView.tsx | 76 + .../src/views/products/plan/ProductSheets.tsx | 80 + .../components/ConfirmMigrationDialog.tsx | 104 + .../components/CustomiseIntervalPopover.tsx | 74 + .../plan/components/DeletePlanDialog.tsx | 268 + .../plan/components/EditPlanHeader.tsx | 176 + .../plan/components/EditPlanSheet.tsx | 28 + .../products/plan/components/ManagePlan.tsx | 9 + .../plan/components/SaveChangesBar.tsx | 116 + .../plan/components/SelectFeatureSheet.tsx | 113 + .../edit-plan-details/AdditionalOptions.tsx | 39 + .../edit-plan-details/BasePriceSection.tsx | 151 + .../edit-plan-details/FreeTrialSection.tsx | 103 + .../edit-plan-details/MainDetailsSection.tsx | 44 + .../edit-plan-details/SelectBillingCycle.tsx | 63 + .../edit-plan-feature/AdvancedSettings.tsx | 117 + .../edit-plan-feature/BillingType.tsx | 125 + .../edit-plan-feature/BillingUnits.tsx | 87 + .../EditPlanFeatureSheet.tsx | 73 + .../edit-plan-feature/IncludedUsage.tsx | 182 + .../edit-plan-feature/PriceTiers.tsx | 227 + .../PricedFeatureSettings.tsx | 45 + .../edit-plan-feature/UsageReset.tsx | 92 + .../advanced-settings/EntityFeatureConfig.tsx | 81 + .../advanced-settings/ProrationConfig.tsx | 170 + .../advanced-settings/RolloverConfig.tsx | 187 + .../advanced-settings/UsageLimit.tsx | 52 + .../new-feature/NewFeatureAdvanced.tsx | 58 + .../new-feature/NewFeatureBehaviour.tsx | 82 + .../new-feature/NewFeatureDetails.tsx | 62 + .../new-feature/NewFeatureSheet.tsx | 133 + .../components/new-feature/NewFeatureType.tsx | 81 + .../components/plan-card/AddFeatureRow.tsx | 36 + .../plan-card/DeleteFeatureRowDialog.tsx | 47 + .../plan/components/plan-card/PlanCard.tsx | 29 + .../components/plan-card/PlanCardHeader.tsx | 65 + .../components/plan-card/PlanCardToolbar.tsx | 89 + .../components/plan-card/PlanFeatureIcon.tsx | 115 + .../components/plan-card/PlanFeatureList.tsx | 120 + .../components/plan-card/PlanFeatureRow.tsx | 197 + .../plan/hooks/useFeatureNavigation.ts | 219 + .../plan/hooks/useHasEntityFeatureId.ts | 14 + .../plan/hooks/useProductChangedAlert.tsx | 24 + .../plan/hooks/useSaveRestoreFeature.ts | 48 + .../products/plan/utils/defaultProduct.ts | 21 + .../plan/utils/getDefaultFreeTrial.ts | 10 + .../products/plan/utils/getDefaultItem.ts | 38 + .../views/products/plan/utils/tierUtils.ts | 119 + .../plan/utils/validateItemsBeforeSave.ts | 14 + .../versioning/ConfirmNewVersionDialog.tsx | 90 + .../views/products/product/ManageProduct.tsx | 6 +- .../views/products/product/ProductContext.tsx | 11 +- .../views/products/product/ProductProps.tsx | 268 +- .../views/products/product/ProductSidebar.tsx | 19 +- .../views/products/product/ProductView.tsx | 15 +- .../product/free-trial/FreeTrialConfig.tsx | 16 +- .../hooks/queries/useProductCountsQuery.tsx | 2 +- .../products/product/hooks/useBlocker.ts | 193 +- .../products/product/hooks/useProductData.tsx | 40 +- .../product/hooks/useProductQuery.tsx | 40 +- .../product-item/ProductItemContext.tsx | 23 +- .../CreateItemDialogContent.tsx | 28 +- .../components/IncludedUsage.tsx | 263 +- .../components/SelectResetCycle.tsx | 47 +- .../components/feature-price/FeaturePrice.tsx | 38 +- .../product/product-item/useSteps.tsx | 22 +- .../products/product/utils/updateProduct.ts | 46 +- .../views/products/products/ProductsPage.tsx | 49 +- .../products/components/CopyProductDialog.tsx | 126 + .../products/components/CreatePlanDialog.tsx | 119 + .../components/CreateProductDialog.tsx | 2 +- .../components/CreateProductMainDetails.tsx | 42 + .../components/CreateProductSheet.tsx | 135 + .../products/components/ProductsTable.tsx | 15 +- .../components/UpdateProductDialog.tsx | 82 + .../archives}/CopyDialog.tsx | 27 +- .../archives}/DeleteProductDialog.tsx | 13 +- .../archives/DeleteProductDialog2.tsx | 252 + .../components/archives}/UpdateProduct.tsx | 19 +- .../product-row-toolbar/ProductRowToolbar.tsx | 176 +- .../views/products/rewards/RewardsPage.tsx | 41 +- .../rewards/components/RewardsTable.tsx | 5 +- .../{ => archives}/CreateReward.tsx | 0 .../{ => archives}/DiscountConfig.tsx | 0 .../{ => archives}/RewardConfig.tsx | 0 .../{ => archives}/UpdateReward.tsx | 0 .../components/CreateRewardSheet.tsx | 159 + .../components/DiscountRewardConfig.tsx | 156 + .../components/FreeProductRewardConfig.tsx | 69 + .../components/ProductPriceSelector.tsx | 199 + .../components/RewardDetails.tsx | 42 + .../components/SelectRewardType.tsx | 71 + .../components/UpdateRewardSheet.tsx | 158 + .../CreateRewardProgramSheet.tsx | 149 + .../reward-programs/RewardProgramConfig.tsx | 27 +- .../products/rewards/types/frontendReward.ts | 27 + .../products/rewards/utils/rewardMappers.ts | 65 + vite/src/vite-env.d.ts | 1 + vite/vite.config.ts | 15 + 402 files changed, 23838 insertions(+), 10823 deletions(-) delete mode 100644 example/.gitignore delete mode 100644 example/README.md delete mode 100644 example/components.json delete mode 100644 example/eslint.config.mjs delete mode 100644 example/next.config.ts delete mode 100644 example/package-lock.json delete mode 100644 example/package.json delete mode 100644 example/postcss.config.mjs delete mode 100644 example/public/file.svg delete mode 100644 example/public/globe.svg delete mode 100644 example/public/next.svg delete mode 100644 example/public/vercel.svg delete mode 100644 example/public/window.svg delete mode 100644 example/src/app/demo.tsx delete mode 100644 example/src/app/favicon.ico delete mode 100644 example/src/app/globals.css delete mode 100644 example/src/app/layout.tsx delete mode 100644 example/src/app/page.tsx delete mode 100644 example/src/app/referrals/functions.tsx delete mode 100644 example/src/app/referrals/page.tsx delete mode 100644 example/src/components/application.tsx delete mode 100644 example/src/components/billing.tsx delete mode 100644 example/src/components/introduction.tsx delete mode 100644 example/src/components/ui/input.tsx delete mode 100644 example/src/components/ui/sonner.tsx delete mode 100644 example/src/hooks/use-mobile.ts delete mode 100644 example/src/lib/utils.ts delete mode 100644 example/tsconfig.json create mode 100644 opencode.json delete mode 100644 server/src/internal/customers/attach/handleAttachPreview/getUpdateEntsPreview.ts create mode 100644 server/src/internal/features/handlers/handleUpdateFeature/getObjectsUsingFeature.ts create mode 100644 server/src/internal/features/handlers/handleUpdateFeature/handleFeatureTypeChanged.ts delete mode 100644 server/src/internal/products/product-items/compareItemUtils.ts delete mode 100644 server/src/internal/products/product-items/itemIntervalUtils.ts delete mode 100644 shared/CLAUDE.md create mode 100644 shared/api/errors/classes/featureErrClasses.ts create mode 100644 shared/api/errors/codes/featureErrCodes.ts create mode 100644 shared/models/productV3Models/productV3Response.ts create mode 100644 shared/utils/featureUtils/apiFeatureToDbFeature.ts create mode 100644 shared/utils/featureUtils/constructFeatureUtils.ts create mode 100644 shared/utils/featureUtils/convertFeatureUtils.ts create mode 100644 shared/utils/productUtils/freeTrialUtils.ts create mode 100644 shared/utils/productV2Utils/compareProductUtils.ts/compareItemUtils.ts create mode 100644 shared/utils/productV2Utils/compareProductUtils.ts/compareProductUtils.ts create mode 100644 shared/utils/productV2Utils/productItemUtils/classifyItemUtils.ts create mode 100644 shared/utils/productV2Utils/productItemUtils/convertItemUtils.ts rename shared/utils/{productDisplayUtils => productV2Utils/productItemUtils}/getItemType.ts (87%) rename shared/utils/{productDisplayUtils => productV2Utils/productItemUtils}/getProductItemRes.ts (86%) create mode 100644 shared/utils/productV2Utils/productItemUtils/itemIntervalUtils.ts create mode 100644 shared/utils/productV3Utils/mapToProductV3.ts create mode 100644 shared/utils/productV3Utils/productItemUtils/productV3ItemUtils.ts create mode 100644 temp_svg_analysis.svg create mode 100644 vite/FORM_DESIGN_GUIDELINES.md create mode 100644 vite/src/app/OnboardingLayout.tsx create mode 100644 vite/src/components/autumn/PlanCardPreview.tsx create mode 100644 vite/src/components/autumn/PricingTableContainer.tsx create mode 100644 vite/src/components/autumn/pricing-table-preview.tsx create mode 100644 vite/src/components/compareDbFeature.ts create mode 100644 vite/src/components/general/buttons/ClickableIcon.tsx create mode 100644 vite/src/components/v2/CodeGroup.tsx create mode 100644 vite/src/components/v2/badges/Badge.tsx create mode 100644 vite/src/components/v2/badges/IconBadge.tsx create mode 100644 vite/src/components/v2/badges/PlanTypeBadge.tsx create mode 100644 vite/src/components/v2/badges/PlanTypeBadges.tsx create mode 100644 vite/src/components/v2/badges/StackBadge.tsx create mode 100644 vite/src/components/v2/badges/StepBadge.tsx create mode 100644 vite/src/components/v2/breadcrumb.tsx create mode 100644 vite/src/components/v2/buttons/Button.tsx create mode 100644 vite/src/components/v2/buttons/CopyButton.tsx create mode 100644 vite/src/components/v2/buttons/GroupedTabButton.tsx create mode 100644 vite/src/components/v2/buttons/HoverClickableIcon.tsx create mode 100644 vite/src/components/v2/buttons/IconButton.tsx create mode 100644 vite/src/components/v2/buttons/PanelButton.tsx create mode 100644 vite/src/components/v2/buttons/ShortcutButton.tsx create mode 100644 vite/src/components/v2/cards/Card.tsx create mode 100644 vite/src/components/v2/checkboxes/AreaCheckbox.tsx create mode 100644 vite/src/components/v2/checkboxes/Checkbox.tsx create mode 100644 vite/src/components/v2/checkboxes/IconCheckbox.tsx create mode 100644 vite/src/components/v2/checkboxes/LongCheckbox.tsx create mode 100644 vite/src/components/v2/checkboxes/TextCheckbox.tsx create mode 100644 vite/src/components/v2/dialogs/Dialog.tsx create mode 100644 vite/src/components/v2/form/FormLabel.tsx create mode 100644 vite/src/components/v2/icons/AutumnIcons.tsx create mode 100644 vite/src/components/v2/inputs/Input.tsx create mode 100644 vite/src/components/v2/inputs/InputGroup.tsx create mode 100644 vite/src/components/v2/inputs/LabelInput.tsx create mode 100644 vite/src/components/v2/inputs/LongInput.tsx create mode 100644 vite/src/components/v2/inputs/TagInput.tsx create mode 100644 vite/src/components/v2/radio-groups/AreaRadioGroupItem.tsx create mode 100644 vite/src/components/v2/radio-groups/RadioGroup.tsx create mode 100644 vite/src/components/v2/selects/LabelSelect.tsx create mode 100644 vite/src/components/v2/selects/Select.tsx create mode 100644 vite/src/components/v2/selects/TagSelect.tsx create mode 100644 vite/src/components/v2/separator.tsx create mode 100644 vite/src/components/v2/sheets/InlineSheet.tsx create mode 100644 vite/src/components/v2/sheets/SharedSheetComponents.tsx rename vite/src/components/{ui/sheet.tsx => v2/sheets/Sheet.tsx} (90%) create mode 100644 vite/src/components/v2/sheets/SheetAccordion.tsx create mode 100644 vite/src/components/v2/tooltips/Tooltip.tsx create mode 100644 vite/src/hooks/common/useAutoSlug.tsx create mode 100644 vite/src/hooks/common/useClearQueryParams.ts create mode 100644 vite/src/hooks/common/useClickWithoutDrag.ts create mode 100644 vite/src/hooks/stores/useFeatureStore.ts create mode 100644 vite/src/hooks/stores/useProductStore.ts create mode 100644 vite/src/hooks/stores/useProductSync.ts create mode 100644 vite/src/hooks/stores/useRewardStore.ts create mode 100644 vite/src/hooks/stores/useSheetStore.ts create mode 100644 vite/src/styles/button.css create mode 100644 vite/src/styles/custom.css create mode 100644 vite/src/styles/form/base.css create mode 100644 vite/src/styles/form/effects.css create mode 100644 vite/src/styles/form/states.css create mode 100644 vite/src/styles/input.css create mode 100644 vite/src/styles/typography.css create mode 100644 vite/src/views/command-bar/CommandBar.tsx create mode 100644 vite/src/views/command-bar/command-row.tsx create mode 100644 vite/src/views/command-bar/commandUtils.ts create mode 100644 vite/src/views/command-bar/useCommandBarHotkeys.ts delete mode 100644 vite/src/views/developer/api-keys/ApiKeys.tsx create mode 100644 vite/src/views/developer/api-keys/ApiKeysPage.tsx delete mode 100644 vite/src/views/developer/api-keys/components/CreateAPIKey.tsx create mode 100644 vite/src/views/developer/api-keys/components/CreateApiKeyDialog.tsx create mode 100644 vite/src/views/onboarding3/ConnectStripeDialog.tsx create mode 100644 vite/src/views/onboarding3/OnboardingCheckoutDialog.tsx create mode 100644 vite/src/views/onboarding3/OnboardingPreview.tsx create mode 100644 vite/src/views/onboarding3/OnboardingView3.tsx create mode 100644 vite/src/views/onboarding3/components/CompletionStep.tsx create mode 100644 vite/src/views/onboarding3/components/DummyFeatureRow.tsx create mode 100644 vite/src/views/onboarding3/components/ExitButton.tsx create mode 100644 vite/src/views/onboarding3/components/FeatureConfigurationStep.tsx create mode 100644 vite/src/views/onboarding3/components/FeatureCreationStep.tsx create mode 100644 vite/src/views/onboarding3/components/IntegrationStep.tsx create mode 100644 vite/src/views/onboarding3/components/OnboardingStepRenderer.tsx create mode 100644 vite/src/views/onboarding3/components/OnboardingSteps.tsx create mode 100644 vite/src/views/onboarding3/components/PlanDetailsStep.tsx create mode 100644 vite/src/views/onboarding3/components/StepHeaders.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/BackendSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/ConnectStripeSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/EnvSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/FrontendSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/InstallSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/IntegrationContext.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/MCPSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/NextStepsSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/PricingTableSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/SectionHeader.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/StackSelectionSection.tsx create mode 100644 vite/src/views/onboarding3/components/integration-step/snippets.ts create mode 100644 vite/src/views/onboarding3/components/playground-step/AvailableFeatures.tsx create mode 100644 vite/src/views/onboarding3/components/playground-step/PlaygroundToolbar.tsx create mode 100644 vite/src/views/onboarding3/components/playground-step/QuickStartCodeGroup.tsx create mode 100644 vite/src/views/onboarding3/hooks/actions/useFeatureConfigActions.tsx create mode 100644 vite/src/views/onboarding3/hooks/actions/useFeatureCreationActions.tsx create mode 100644 vite/src/views/onboarding3/hooks/actions/usePlanDetailsActions.tsx create mode 100644 vite/src/views/onboarding3/hooks/actions/useSharedActions.tsx create mode 100644 vite/src/views/onboarding3/hooks/actions/useStepActions.tsx create mode 100644 vite/src/views/onboarding3/hooks/useAutoSetProductId.ts create mode 100644 vite/src/views/onboarding3/hooks/useAutoSkipToPlayground.ts create mode 100644 vite/src/views/onboarding3/hooks/useInitFeatureItem.tsx create mode 100644 vite/src/views/onboarding3/hooks/useOnboarding3QueryState.tsx create mode 100644 vite/src/views/onboarding3/hooks/useOnboardingData.tsx create mode 100644 vite/src/views/onboarding3/hooks/useOnboardingFeatureSync.tsx create mode 100644 vite/src/views/onboarding3/hooks/useOnboardingFlow.tsx create mode 100644 vite/src/views/onboarding3/hooks/useOnboardingLogic.tsx create mode 100644 vite/src/views/onboarding3/hooks/useOnboardingProductSync.ts create mode 100644 vite/src/views/onboarding3/hooks/useOnboardingSteps.tsx create mode 100644 vite/src/views/onboarding3/store/useOnboardingStore.ts create mode 100644 vite/src/views/onboarding3/utils/completionStepCode.ts create mode 100644 vite/src/views/onboarding3/utils/onboardingUtils.ts create mode 100644 vite/src/views/products/components/PlanTypeBadge.tsx create mode 100644 vite/src/views/products/features/components/CreateFeatureSheet.tsx create mode 100644 vite/src/views/products/features/components/UpdateFeatureSheet.tsx rename vite/src/views/products/features/credit-systems/{ => archives}/CreateCreditSystem.tsx (92%) rename vite/src/views/products/features/credit-systems/{ => archives}/CreditSystemConfig.tsx (100%) rename vite/src/views/products/features/credit-systems/{ => archives}/UpdateCreditSystem.tsx (100%) create mode 100644 vite/src/views/products/features/credit-systems/components/CreateCreditSystemSheet.tsx create mode 100644 vite/src/views/products/features/credit-systems/components/CreditSystemDetails.tsx create mode 100644 vite/src/views/products/features/credit-systems/components/CreditSystemSchema.tsx create mode 100644 vite/src/views/products/features/credit-systems/components/UpdateCreditSystemSheet.tsx create mode 100644 vite/src/views/products/features/feature-row-toolbar/archives/DeleteFeatureDialog.tsx create mode 100644 vite/src/views/products/features/utils/getFeatureIcon.tsx create mode 100644 vite/src/views/products/plan/PlanEditorView.tsx create mode 100644 vite/src/views/products/plan/ProductSheets.tsx create mode 100644 vite/src/views/products/plan/components/ConfirmMigrationDialog.tsx create mode 100644 vite/src/views/products/plan/components/CustomiseIntervalPopover.tsx create mode 100644 vite/src/views/products/plan/components/DeletePlanDialog.tsx create mode 100644 vite/src/views/products/plan/components/EditPlanHeader.tsx create mode 100644 vite/src/views/products/plan/components/EditPlanSheet.tsx create mode 100644 vite/src/views/products/plan/components/ManagePlan.tsx create mode 100644 vite/src/views/products/plan/components/SaveChangesBar.tsx create mode 100644 vite/src/views/products/plan/components/SelectFeatureSheet.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-details/AdditionalOptions.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-details/BasePriceSection.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-details/FreeTrialSection.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-details/MainDetailsSection.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-details/SelectBillingCycle.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/AdvancedSettings.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/BillingType.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/BillingUnits.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/EditPlanFeatureSheet.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/IncludedUsage.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/PriceTiers.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/PricedFeatureSettings.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/UsageReset.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/advanced-settings/EntityFeatureConfig.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/advanced-settings/ProrationConfig.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/advanced-settings/RolloverConfig.tsx create mode 100644 vite/src/views/products/plan/components/edit-plan-feature/advanced-settings/UsageLimit.tsx create mode 100644 vite/src/views/products/plan/components/new-feature/NewFeatureAdvanced.tsx create mode 100644 vite/src/views/products/plan/components/new-feature/NewFeatureBehaviour.tsx create mode 100644 vite/src/views/products/plan/components/new-feature/NewFeatureDetails.tsx create mode 100644 vite/src/views/products/plan/components/new-feature/NewFeatureSheet.tsx create mode 100644 vite/src/views/products/plan/components/new-feature/NewFeatureType.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/AddFeatureRow.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/DeleteFeatureRowDialog.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/PlanCard.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/PlanCardHeader.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/PlanCardToolbar.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/PlanFeatureIcon.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/PlanFeatureList.tsx create mode 100644 vite/src/views/products/plan/components/plan-card/PlanFeatureRow.tsx create mode 100644 vite/src/views/products/plan/hooks/useFeatureNavigation.ts create mode 100644 vite/src/views/products/plan/hooks/useHasEntityFeatureId.ts create mode 100644 vite/src/views/products/plan/hooks/useProductChangedAlert.tsx create mode 100644 vite/src/views/products/plan/hooks/useSaveRestoreFeature.ts create mode 100644 vite/src/views/products/plan/utils/defaultProduct.ts create mode 100644 vite/src/views/products/plan/utils/getDefaultFreeTrial.ts create mode 100644 vite/src/views/products/plan/utils/getDefaultItem.ts create mode 100644 vite/src/views/products/plan/utils/tierUtils.ts create mode 100644 vite/src/views/products/plan/utils/validateItemsBeforeSave.ts create mode 100644 vite/src/views/products/plan/versioning/ConfirmNewVersionDialog.tsx create mode 100644 vite/src/views/products/products/components/CopyProductDialog.tsx create mode 100644 vite/src/views/products/products/components/CreatePlanDialog.tsx create mode 100644 vite/src/views/products/products/components/CreateProductMainDetails.tsx create mode 100644 vite/src/views/products/products/components/CreateProductSheet.tsx create mode 100644 vite/src/views/products/products/components/UpdateProductDialog.tsx rename vite/src/views/products/products/{product-row-toolbar => components/archives}/CopyDialog.tsx (92%) rename vite/src/views/products/products/{product-row-toolbar => components/archives}/DeleteProductDialog.tsx (99%) create mode 100644 vite/src/views/products/products/components/archives/DeleteProductDialog2.tsx rename vite/src/views/products/{ => products/components/archives}/UpdateProduct.tsx (93%) rename vite/src/views/products/rewards/reward-config/{ => archives}/CreateReward.tsx (100%) rename vite/src/views/products/rewards/reward-config/{ => archives}/DiscountConfig.tsx (100%) rename vite/src/views/products/rewards/reward-config/{ => archives}/RewardConfig.tsx (100%) rename vite/src/views/products/rewards/reward-config/{ => archives}/UpdateReward.tsx (100%) create mode 100644 vite/src/views/products/rewards/reward-config/components/CreateRewardSheet.tsx create mode 100644 vite/src/views/products/rewards/reward-config/components/DiscountRewardConfig.tsx create mode 100644 vite/src/views/products/rewards/reward-config/components/FreeProductRewardConfig.tsx create mode 100644 vite/src/views/products/rewards/reward-config/components/ProductPriceSelector.tsx create mode 100644 vite/src/views/products/rewards/reward-config/components/RewardDetails.tsx create mode 100644 vite/src/views/products/rewards/reward-config/components/SelectRewardType.tsx create mode 100644 vite/src/views/products/rewards/reward-config/components/UpdateRewardSheet.tsx create mode 100644 vite/src/views/products/rewards/reward-programs/CreateRewardProgramSheet.tsx create mode 100644 vite/src/views/products/rewards/types/frontendReward.ts create mode 100644 vite/src/views/products/rewards/utils/rewardMappers.ts diff --git a/AGENTS.md b/AGENTS.md index b0243813d..5d03c3369 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,6 +4,7 @@ - DO NOT alter .gitignore - JS Doc comments should be SHORT and SWEET. Don't need examples unless ABSOLUTELY necessary - When writing DB queries, for the `customers`, `products` and `features` tables (and others possibly not mentioned here), the primary key when updating is `internal_id`, not `id` +- When using db schemas in Drizzle, import them from '@autumn/shared', and don't do schemas. # Linting and Codebase rules - You can access the biome linter by running `npx biome check `. Always specify a folder path, as the codebase is quite large and you will get out of scope errors that you are not burdened to correct. If you would like to let biome automatically fix as much as it can, use `npx biome check --write ` @@ -34,3 +35,20 @@ ## File Naming DON'T name files one word (like index.ts, model.ts, etc.). Give proper indication in the filename to which resource it's targeting. For example, a utility file for organizations should be named orgUtils.ts. This is because it's easier to search for files like this. That being said, the filename shouldn't be overly long (less than three words is ideal) +# Vite +## Components +- Always use v2 components from `@/components/v2/` (buttons, inputs, dialogs, sheets, selects, etc.) for new features. Old components in `@/components/ui/` are deprecated. + +## Sheets +- Use `Sheet.tsx` for overlay sheets (modal-style with backdrop). Use `SheetHeader`, `SheetFooter`, `SheetSection` from `SharedSheetComponents.tsx` for consistent styling. +- `InlineSheet.tsx` provides `SheetContainer` for inline sheets (embedded in page layout). It re-exports shared components for backwards compatibility. +- Both sheet types support the same header/footer/section components, ensuring consistent UI patterns across overlay and inline implementations. + +## Styling +- DO NOT hardcode styles when possible. Always try to reuse existing Tailwind classes or component patterns from similar components in the codebase. +- When adding interactive elements (hover, focus, active states), look for existing patterns in similar components and reuse those class combinations. +- Consistency is key - if a pattern exists, use it rather than creating a new one. + +## Form Elements +- When creating form input elements (inputs, selects, textareas, etc.) in the vite folder, ALWAYS read `vite/FORM_DESIGN_GUIDELINES.md` first to understand the atomic CSS class system. + diff --git a/CLAUDE.md b/CLAUDE.md index 7b7e836bc..fbe69850d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,6 +3,7 @@ - Never ever ever write a "TO DO" comment. If you've been told to do something, DO IT. Don't stop halfway. Never give up and just leave a "to do" comment and say - "haha heres working code :)" - that is unacceptible. Always finish your task, no matter how many iterations you need to perform. - DO NOT alter .gitignore - JS Doc comments should be SHORT and SWEET. Don't need examples unless ABSOLUTELY necessary +- When using db schemas in Drizzle, import them from '@autumn/shared', and don't do schemas. # Linting and Codebase rules - You can access the biome linter by running `npx biome check `. Always specify a folder path, as the codebase is quite large and you will get out of scope errors that you are not burdened to correct. If you would like to let biome automatically fix as much as it can, use `npx biome check --write ` @@ -14,23 +15,42 @@ - Always prefer foo({ bar }) over foo(bar) method signatures - no matter if we are using only one argument or not, object as param are always better, as in the future when wanting to change the order of parameters, or add new ones - its easier. - When creating "hooks" folders, don't nest them under "components" +## Bad example +/ root +-> components +|-> hooks +## Good example +/ root +-> components +-> hooks - Functions (unless there's a very good reason) should always take in objects as arguments. Object params are named and easy to understand. - This codebase uses Bun for all of its operations in `/server`, `/vite` and `/shared`. It uses Bun for the package management, Bun for the workspace management and Bun for the runtime. Prefer Bun over PNPM. If you ever want to trace a package dependency tree, run `bun why ` which will tell you why a certain package was installed and by who. -## Bad example -/ root --> components -|-> hooks +- Prefer Guard clauses "if(!admin) return;" over explicity "if(admin) do X;" Early returns are better -## Good example -/ root --> components --> hooks +- Do not run "npx tsc" - run "tsc" instead as it is installed globally. # Figma MCP guidance - When you are using the Figma MCP server, you **must** follow our design system. Below is an example implementation of CVA with out design system ## File Naming DON'T name files one word (like index.ts, model.ts, etc.). Give proper indication in the filename to which resource it's targeting. For example, a utility file for organizations should be named orgUtils.ts. This is because it's easier to search for files like this. That being said, the filename shouldn't be overly long (less than three words is ideal) + +# Vite +## Components +- Always use v2 components from `@/components/v2/` (buttons, inputs, dialogs, sheets, selects, etc.) for new features. Old components in `@/components/ui/` are deprecated. + +## Sheets +- Use `Sheet.tsx` for overlay sheets (modal-style with backdrop). Use `SheetHeader`, `SheetFooter`, `SheetSection` from `SharedSheetComponents.tsx` for consistent styling. +- `InlineSheet.tsx` provides `SheetContainer` for inline sheets (embedded in page layout). It re-exports shared components for backwards compatibility. +- Both sheet types support the same header/footer/section components, ensuring consistent UI patterns across overlay and inline implementations. + +## Styling +- DO NOT hardcode styles when possible. Always try to reuse existing Tailwind classes or component patterns from similar components in the codebase. +- When adding interactive elements (hover, focus, active states), look for existing patterns in similar components and reuse those class combinations. +- Consistency is key - if a pattern exists, use it rather than creating a new one. + +## Form Elements +- When creating form input elements (inputs, selects, textareas, etc.) in the vite folder, ALWAYS read `vite/FORM_DESIGN_GUIDELINES.md` first to understand the atomic CSS class system. diff --git a/bun.lock b/bun.lock index fa2cd259a..bf4029070 100644 --- a/bun.lock +++ b/bun.lock @@ -11,6 +11,7 @@ "tailwind-scrollbar-hide": "^4.0.0", }, "devDependencies": { + "@biomejs/biome": "^2.2.4", "@types/node": "^24.0.3", "concurrently": "^9.1.2", "dotenv": "^16.5.0", @@ -80,6 +81,7 @@ "lodash-es": "^4.17.21", "loops": "^5.0.1", "mime-detect": "^1.3.0", + "nanoid": "^5.1.6", "openai": "^4.85.2", "pg": "^8.13.1", "pino": "^9.6.0", @@ -131,6 +133,8 @@ "drizzle-kit": "^0.31.1", "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.8.2", + "stripe": "^18.4.0", + "yaml": "^2.8.1", "zod-openapi": "^5.4.1", }, "devDependencies": { @@ -155,12 +159,14 @@ "@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@heroicons/react": "^2.2.0", + "@phosphor-icons/react": "^2.1.10", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-radio-group": "^1.3.8", "@radix-ui/react-scroll-area": "^1.2.3", "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-separator": "^1.1.2", @@ -168,6 +174,9 @@ "@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-tabs": "^1.1.3", "@radix-ui/react-tooltip": "^1.1.8", + "@squircle/core": "^1.0.6", + "@squircle/paint-polyfill": "^1.0.6", + "@squircle/tailwindcss": "^1.0.6", "@supabase/ssr": "^0.5.2", "@tailwindcss/vite": "^4.0.13", "@tanstack/react-query": "^5.85.6", @@ -197,6 +206,7 @@ "prism-themes": "^1.9.0", "prismjs": "^1.29.0", "react": "^18.2.0", + "react-cmdk": "^1.3.9", "react-confetti-explosion": "^2.1.2", "react-day-picker": "^8.10.1", "react-dom": "^18.2.0", @@ -214,7 +224,8 @@ "tailwindcss": "^4.0.13", "tailwindcss-animate": "^1.0.7", "vaul": "^1.1.2", - "zod": "^3.25.23", + "zod": "^4", + "zustand": "^5.0.8", }, "devDependencies": { "@eslint/js": "^9.21.0", @@ -246,8 +257,6 @@ "@ai-sdk/ui-utils": ["@ai-sdk/ui-utils@1.2.11", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w=="], - "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], - "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.32.1", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" } }, "sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg=="], "@autumn/server": ["@autumn/server@workspace:server"], @@ -262,75 +271,79 @@ "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@babel/compat-data": ["@babel/compat-data@7.28.0", "", {}, "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw=="], + "@babel/compat-data": ["@babel/compat-data@7.28.4", "", {}, "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw=="], - "@babel/core": ["@babel/core@7.28.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ=="], + "@babel/core": ["@babel/core@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA=="], "@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.3", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], - "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], - "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.27.1", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA=="], - - "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - "@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], + "@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], - "@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], - - "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.11", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw=="], - - "@babel/plugin-syntax-private-property-in-object": ["@babel/plugin-syntax-private-property-in-object@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="], + "@babel/parser": ["@babel/parser@7.28.4", "", { "dependencies": { "@babel/types": "^7.28.4" }, "bin": "./bin/babel-parser.js" }, "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg=="], "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], - "@babel/runtime": ["@babel/runtime@7.28.3", "", {}, "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA=="], + "@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - "@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], + "@babel/traverse": ["@babel/traverse@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/types": "^7.28.4", "debug": "^4.3.1" } }, "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ=="], - "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], - "@better-auth/stripe": ["@better-auth/stripe@1.3.7", "", { "dependencies": { "better-auth": "^1.3.7" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-hmcWJu9RB1IOf+Mb8izQyLOAkRFKes8O0j/VoIFwLR0l2zWTknXKzkLUjadFPeKXHtV3i2n2++prjuVev6F6zw=="], + "@better-auth/core": ["@better-auth/core@1.3.27", "", { "dependencies": { "better-call": "1.0.19", "zod": "^4.1.5" } }, "sha512-3Sfdax6MQyronY+znx7bOsfQHI6m1SThvJWb0RDscFEAhfqLy95k1sl+/PgGyg0cwc2cUXoEiAOSqYdFYrg3vA=="], - "@better-auth/utils": ["@better-auth/utils@0.2.6", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-3y/vaL5Ox33dBwgJ6ub3OPkVqr6B5xL2kgxNHG8eHZuryLyG/4JSPGqjbdRSgjuy9kALUZYDFl+ORIAxlWMSuA=="], + "@better-auth/stripe": ["@better-auth/stripe@1.3.27", "", { "dependencies": { "defu": "^6.1.4", "zod": "^4.1.5" }, "peerDependencies": { "@better-auth/core": "1.3.27", "better-auth": "1.3.27", "stripe": "^18" } }, "sha512-YXmWMvX07lCDHheRB65jl80sSHTClFeJqN2vU6v5tI+0R4tzYBeWxYjvkS6cks1JJ8IjPUKTew0gy2Px3AlOCA=="], + + "@better-auth/utils": ["@better-auth/utils@0.3.0", "", {}, "sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw=="], "@better-fetch/fetch": ["@better-fetch/fetch@1.1.18", "", {}, "sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA=="], + "@biomejs/biome": ["@biomejs/biome@2.2.6", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.6", "@biomejs/cli-darwin-x64": "2.2.6", "@biomejs/cli-linux-arm64": "2.2.6", "@biomejs/cli-linux-arm64-musl": "2.2.6", "@biomejs/cli-linux-x64": "2.2.6", "@biomejs/cli-linux-x64-musl": "2.2.6", "@biomejs/cli-win32-arm64": "2.2.6", "@biomejs/cli-win32-x64": "2.2.6" }, "bin": { "biome": "bin/biome" } }, "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-UZPmn3M45CjTYulgcrFJFZv7YmK3pTxTJDrFYlNElT2FNnkkX4fsxjExTSMeWKQYoZjvekpH5cvrYZZlWu3yfA=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-HOUIquhHVgh/jvxyClpwlpl/oeMqntlteL89YqjuFDiZ091P0vhHccwz+8muu3nTyHWM5FQslt+4Jdcd67+xWQ=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-BpGtuMJGN+o8pQjvYsUKZ+4JEErxdSmcRD/JG3mXoWc6zrcA7OkuyGFN1mDggO0Q1n7qXxo/PcupHk8gzijt5g=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-TjCenQq3N6g1C+5UT3jE1bIiJb5MWQvulpUngTIpFsL4StVAUXucWD0SL9MCW89Tm6awWfeXBbZBAhJwjyFbRQ=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1HaM/dpI/1Z68zp8ZdT6EiBq+/O/z97a2AiHMl+VAdv5/ELckFt9EvRb8hDHpk8hUMoz03gXkC7VPXOVtU7faA=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1ZcBux8zVM3JhWN2ZCPaYf0+ogxXG316uaoXJdgoPZcdK/rmRcRY7PqHdAos2ExzvjIdvhQp72UcveI98hgOog=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-h3A88G8PGM1ryTeZyLlSdfC/gz3e95EJw9BZmA6Po412DRqwqPBa2Y9U+4ZSGUAXCsnSQE00jLV8Pyrh0d+jQw=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-yx0CqeOhPjYQ5ZXgPfu8QYkgBhVJyvWe36as7jRuPrKPO5ylVDfwVtPQ+K/mooNTADW0IhxOZm3aPu16dP8yNQ=="], + "@browserbasehq/sdk": ["@browserbasehq/sdk@2.6.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" } }, "sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA=="], - "@clerk/backend": ["@clerk/backend@2.9.1", "", { "dependencies": { "@clerk/shared": "^3.21.0", "@clerk/types": "^4.78.0", "cookie": "1.0.2", "standardwebhooks": "^1.0.0", "tslib": "2.8.1" } }, "sha512-ZRvy4cHpCrOORtyB3xixifek5/Tsc+X5pkC4vVBrZyqntcRsqhO58eSwb4O4rba6gE9UpVhTYnP1+DVLLiyTJw=="], + "@clerk/backend": ["@clerk/backend@2.18.0", "", { "dependencies": { "@clerk/shared": "^3.27.4", "@clerk/types": "^4.93.0", "cookie": "1.0.2", "standardwebhooks": "^1.0.0", "tslib": "2.8.1" } }, "sha512-Vt7yP0FbNDptWGAsNYrCK572k+0m/jFDwXaHor4164rekwUJXunQVo8DX8vqCOZn9LsKUZbs4odmG9uoRVePIQ=="], - "@clerk/express": ["@clerk/express@1.7.21", "", { "dependencies": { "@clerk/backend": "^2.9.1", "@clerk/shared": "^3.21.0", "@clerk/types": "^4.78.0", "tslib": "2.8.1" }, "peerDependencies": { "express": "^4.17.0 || ^5.0.0" } }, "sha512-ALtBBhaYU+gfRoJp25hC3OntbNNgcrvLSyIYVShSCQ8gmyFjrJe/u6wb2PJalKtiE0SJUZPCAPCr8QpWSXEIsg=="], + "@clerk/express": ["@clerk/express@1.7.38", "", { "dependencies": { "@clerk/backend": "^2.18.0", "@clerk/shared": "^3.27.4", "@clerk/types": "^4.93.0", "tslib": "2.8.1" }, "peerDependencies": { "express": "^4.17.0 || ^5.0.0" } }, "sha512-+5SAeggm0847Ylvh6W/TGCqy/+ddhpzkYBdNNoPgjK13PuKkDodg7t5Wl8VR+Egs62y2Y9YEoTEQ6NE3MBd/sw=="], - "@clerk/shared": ["@clerk/shared@3.21.0", "", { "dependencies": { "@clerk/types": "^4.78.0", "dequal": "2.0.3", "glob-to-regexp": "0.4.1", "js-cookie": "3.0.5", "std-env": "^3.9.0", "swr": "2.3.4" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-BlIjPLsw2ral0V2sDDTNxoSK3SLLT6tfKiTJG2I3vQILnrGPEwkiEaMY1+bJtOze7EHdpP2KSsTzzjFTP1UDOg=="], + "@clerk/shared": ["@clerk/shared@3.27.4", "", { "dependencies": { "@clerk/types": "^4.93.0", "dequal": "2.0.3", "glob-to-regexp": "0.4.1", "js-cookie": "3.0.5", "std-env": "^3.9.0", "swr": "2.3.4" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-K+glWUasxr9CeMHfOcpU+wiRhGQfQm1i7TQcM6tZuKmUD+DltryuF7sPjR+pj2ABUGSXt3Chlv2Y1i+8zaLLRw=="], - "@clerk/types": ["@clerk/types@4.78.0", "", { "dependencies": { "csstype": "3.1.3" } }, "sha512-wj52aLAH8RrZmHSNTNJIvxwyCuBMNRP2THOshFwpt0Vg62GQi6NtMLRqNH3Pc5y+zrg42SzLiO31PTNZh3ddpQ=="], + "@clerk/types": ["@clerk/types@4.93.0", "", { "dependencies": { "csstype": "3.1.3" } }, "sha512-xrYAAF0OHCvZm5kPjCexff44ImhIC85LG7Z8OU3WEWvsGyeSnEjZuMTp5jZnns6i+hLQbxn5/cgINzC+V7VSpw=="], "@clickhouse/client": ["@clickhouse/client@1.12.1", "", { "dependencies": { "@clickhouse/client-common": "1.12.1" } }, "sha512-7ORY85rphRazqHzImNXMrh4vsaPrpetFoTWpZYueCO2bbO6PXYDXp/GQ4DgxnGIqbWB/Di1Ai+Xuwq2o7DJ36A=="], @@ -346,7 +359,7 @@ "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], - "@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], "@emotion/is-prop-valid": ["@emotion/is-prop-valid@0.7.3", "", { "dependencies": { "@emotion/memoize": "0.7.1" } }, "sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA=="], @@ -356,95 +369,97 @@ "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.9", "", { "os": "aix", "cpu": "ppc64" }, "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.10", "", { "os": "aix", "cpu": "ppc64" }, "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.9", "", { "os": "android", "cpu": "arm" }, "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.10", "", { "os": "android", "cpu": "arm" }, "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.9", "", { "os": "android", "cpu": "arm64" }, "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.10", "", { "os": "android", "cpu": "arm64" }, "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.9", "", { "os": "android", "cpu": "x64" }, "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.10", "", { "os": "android", "cpu": "x64" }, "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.9", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.10", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.9", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.9", "", { "os": "linux", "cpu": "arm" }, "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.10", "", { "os": "linux", "cpu": "arm" }, "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.9", "", { "os": "linux", "cpu": "ia32" }, "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.10", "", { "os": "linux", "cpu": "ia32" }, "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.9", "", { "os": "linux", "cpu": "ppc64" }, "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.10", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.9", "", { "os": "linux", "cpu": "s390x" }, "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.10", "", { "os": "linux", "cpu": "s390x" }, "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.9", "", { "os": "linux", "cpu": "x64" }, "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.10", "", { "os": "linux", "cpu": "x64" }, "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.9", "", { "os": "none", "cpu": "x64" }, "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.10", "", { "os": "none", "cpu": "x64" }, "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.9", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.10", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.9", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.10", "", { "os": "openbsd", "cpu": "x64" }, "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.9", "", { "os": "sunos", "cpu": "x64" }, "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.10", "", { "os": "sunos", "cpu": "x64" }, "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.9", "", { "os": "win32", "cpu": "ia32" }, "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.9", "", { "os": "win32", "cpu": "x64" }, "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.10", "", { "os": "win32", "cpu": "x64" }, "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g=="], "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], "@eslint/config-array": ["@eslint/config-array@0.21.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ=="], - "@eslint/config-helpers": ["@eslint/config-helpers@0.3.1", "", {}, "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA=="], + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.0", "", { "dependencies": { "@eslint/core": "^0.16.0" } }, "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog=="], - "@eslint/core": ["@eslint/core@0.15.2", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg=="], + "@eslint/core": ["@eslint/core@0.16.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q=="], "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], - "@eslint/js": ["@eslint/js@9.33.0", "", {}, "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A=="], + "@eslint/js": ["@eslint/js@9.37.0", "", {}, "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg=="], "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.5", "", { "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" } }, "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w=="], + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.0", "", { "dependencies": { "@eslint/core": "^0.16.0", "levn": "^0.4.1" } }, "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A=="], "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], - "@floating-ui/dom": ["@floating-ui/dom@1.7.3", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], - "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.5", "", { "dependencies": { "@floating-ui/dom": "^1.7.3" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q=="], + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], "@fortawesome/fontawesome-common-types": ["@fortawesome/fontawesome-common-types@6.7.2", "", {}, "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg=="], - "@fortawesome/fontawesome-svg-core": ["@fortawesome/fontawesome-svg-core@7.0.0", "", { "dependencies": { "@fortawesome/fontawesome-common-types": "7.0.0" } }, "sha512-obBEF+zd98r/KtKVW6A+8UGWeaOoyMpl6Q9P3FzHsOnsg742aXsl8v+H/zp09qSSu/a/Hxe9LNKzbBaQq1CEbA=="], + "@fortawesome/fontawesome-svg-core": ["@fortawesome/fontawesome-svg-core@7.1.0", "", { "dependencies": { "@fortawesome/fontawesome-common-types": "7.1.0" } }, "sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA=="], "@fortawesome/free-brands-svg-icons": ["@fortawesome/free-brands-svg-icons@6.7.2", "", { "dependencies": { "@fortawesome/fontawesome-common-types": "6.7.2" } }, "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q=="], - "@fortawesome/react-fontawesome": ["@fortawesome/react-fontawesome@0.2.3", "", { "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "@fortawesome/fontawesome-svg-core": "~1 || ~6 || ~7", "react": "^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-HlJco8RDY8NrzFVjy23b/7mNS4g9NegcrBG3n7jinwpc2x/AmSVk53IhWniLYM4szYLxRAFTAGwGn0EIlclDeQ=="], + "@fortawesome/react-fontawesome": ["@fortawesome/react-fontawesome@0.2.6", "", { "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "@fortawesome/fontawesome-svg-core": "~1 || ~6 || ~7", "react": "^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mtBFIi1UsYQo7rYonYFkjgYKGoL8T+fEH6NGUpvuqtY3ytMsAoDaPo5rk25KuMtKDipY4bGYM/CkmCHA1N3FUg=="], - "@grpc/grpc-js": ["@grpc/grpc-js@1.13.4", "", { "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg=="], + "@grpc/grpc-js": ["@grpc/grpc-js@1.14.0", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg=="], - "@grpc/proto-loader": ["@grpc/proto-loader@0.7.15", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ=="], + "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], + + "@headlessui/react": ["@headlessui/react@1.7.19", "", { "dependencies": { "@tanstack/react-virtual": "^3.0.0-beta.60", "client-only": "^0.0.1" }, "peerDependencies": { "react": "^16 || ^17 || ^18", "react-dom": "^16 || ^17 || ^18" } }, "sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw=="], "@heroicons/react": ["@heroicons/react@2.2.0", "", { "peerDependencies": { "react": ">= 16 || ^19.0.0-rc" } }, "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ=="], @@ -452,11 +467,11 @@ "@hono/node-server": ["@hono/node-server@1.19.5", "", { "peerDependencies": { "hono": "^4" } }, "sha512-iBuhh+uaaggeAuf+TftcjZyWh2GEgZcVGXkNtskLVoWaXhnJtC5HLHrU8W1KHDoucqO1MswwglmkWLFyiDn4WQ=="], - "@hono/zod-validator": ["@hono/zod-validator@0.7.3", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-uYGdgVib3RlGD698WR5dVM0zB3UuPY5vHKXffGUbUh7r4xY+mFIhF3/v4AcQVLrU5CQdBso8BJr4wuVoCrjTuQ=="], + "@hono/zod-validator": ["@hono/zod-validator@0.7.4", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-biKGn3BRJVaftZlIPMyK+HCe/UHAjJ6sH0UyXe3+v0OcgVr9xfImDROTJFLtn9e3XEEAHGZIM9U6evu85abm8Q=="], "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], - "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], + "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], @@ -470,81 +485,85 @@ "@hyperdx/node-opentelemetry": ["@hyperdx/node-opentelemetry@0.8.2", "", { "dependencies": { "@hyperdx/instrumentation-exception": "^0.1.0", "@hyperdx/instrumentation-sentry-node": "^0.1.0", "@opentelemetry/api": "^1.8.0", "@opentelemetry/api-logs": "^0.57.2", "@opentelemetry/auto-instrumentations-node": "^0.56.1", "@opentelemetry/core": "^1.30.1", "@opentelemetry/exporter-logs-otlp-http": "^0.57.2", "@opentelemetry/exporter-metrics-otlp-proto": "^0.57.2", "@opentelemetry/exporter-trace-otlp-proto": "^0.57.2", "@opentelemetry/instrumentation": "^0.57.2", "@opentelemetry/instrumentation-http": "^0.57.2", "@opentelemetry/instrumentation-runtime-node": "^0.12.2", "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-logs": "^0.57.2", "@opentelemetry/sdk-metrics": "^1.30.1", "@opentelemetry/sdk-node": "^0.57.2", "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.30.0", "cli-spinners": "^2.9.2", "json-stringify-safe": "^5.0.1", "lodash.isobject": "^3.0.2", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "node-fetch": "^2.7.0", "open": "^8.4.2", "ora": "^5.4.1", "pino-abstract-transport": "^1.2.0", "semver": "^7.6.2", "shimmer": "^1.2.1", "tslib": "^2.5.3", "winston-transport": "^4.7.0" }, "bin": { "opentelemetry-instrument": "build/bin/opentelemetry-instrument.js" } }, "sha512-ryL8nqgyqKcYQ6KRTHiwPOI540inxo0yPHoy+tIDkJrqpOG+K0GyFu99CGg38dx3ZgT8dPlxHYzhnFLHHEEpsw=="], - "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.0" }, "os": "darwin", "cpu": "arm64" }, "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg=="], + "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], - "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.0" }, "os": "darwin", "cpu": "x64" }, "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA=="], + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.3" }, "os": "darwin", "cpu": "arm64" }, "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA=="], - "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ=="], + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.3" }, "os": "darwin", "cpu": "x64" }, "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg=="], - "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw=="], - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw=="], + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA=="], - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.3", "", { "os": "linux", "cpu": "arm" }, "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA=="], - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ=="], - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg=="], - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w=="], - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg=="], - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw=="], - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.0" }, "os": "linux", "cpu": "arm" }, "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g=="], - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.0" }, "os": "linux", "cpu": "arm64" }, "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.3" }, "os": "linux", "cpu": "arm" }, "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA=="], - "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.0" }, "os": "linux", "cpu": "ppc64" }, "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.3" }, "os": "linux", "cpu": "arm64" }, "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ=="], - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.0" }, "os": "linux", "cpu": "s390x" }, "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.3" }, "os": "linux", "cpu": "ppc64" }, "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ=="], - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.0" }, "os": "linux", "cpu": "x64" }, "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.3" }, "os": "linux", "cpu": "s390x" }, "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw=="], - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" }, "os": "linux", "cpu": "arm64" }, "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.3" }, "os": "linux", "cpu": "x64" }, "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A=="], - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.0" }, "os": "linux", "cpu": "x64" }, "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" }, "os": "linux", "cpu": "arm64" }, "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA=="], - "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.3", "", { "dependencies": { "@emnapi/runtime": "^1.4.4" }, "cpu": "none" }, "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.3" }, "os": "linux", "cpu": "x64" }, "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg=="], - "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ=="], + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.4", "", { "dependencies": { "@emnapi/runtime": "^1.5.0" }, "cpu": "none" }, "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA=="], - "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw=="], + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA=="], - "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.3", "", { "os": "win32", "cpu": "x64" }, "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g=="], + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw=="], - "@inquirer/checkbox": ["@inquirer/checkbox@4.2.1", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/figures": "^1.0.13", "@inquirer/type": "^3.0.8", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-bevKGO6kX1eM/N+pdh9leS5L7TBF4ICrzi9a+cbWkrxeAeIcwlo/7OfWGCDERdRCI2/Q6tjltX4bt07ALHDwFw=="], + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.4", "", { "os": "win32", "cpu": "x64" }, "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig=="], - "@inquirer/confirm": ["@inquirer/confirm@5.1.15", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/type": "^3.0.8" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-SwHMGa8Z47LawQN0rog0sT+6JpiL0B7eW9p1Bb7iCeKDGTI5Ez25TSc2l8kw52VV7hA4sX/C78CGkMrKXfuspA=="], + "@inquirer/ansi": ["@inquirer/ansi@1.0.1", "", {}, "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw=="], - "@inquirer/core": ["@inquirer/core@10.1.15", "", { "dependencies": { "@inquirer/figures": "^1.0.13", "@inquirer/type": "^3.0.8", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA=="], + "@inquirer/checkbox": ["@inquirer/checkbox@4.3.0", "", { "dependencies": { "@inquirer/ansi": "^1.0.1", "@inquirer/core": "^10.3.0", "@inquirer/figures": "^1.0.14", "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw=="], - "@inquirer/editor": ["@inquirer/editor@4.2.17", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/external-editor": "^1.0.1", "@inquirer/type": "^3.0.8" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-r6bQLsyPSzbWrZZ9ufoWL+CztkSatnJ6uSxqd6N+o41EZC51sQeWOzI6s5jLb+xxTWxl7PlUppqm8/sow241gg=="], + "@inquirer/confirm": ["@inquirer/confirm@5.1.19", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/type": "^3.0.9" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ=="], - "@inquirer/expand": ["@inquirer/expand@4.0.17", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw=="], + "@inquirer/core": ["@inquirer/core@10.3.0", "", { "dependencies": { "@inquirer/ansi": "^1.0.1", "@inquirer/figures": "^1.0.14", "@inquirer/type": "^3.0.9", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA=="], - "@inquirer/external-editor": ["@inquirer/external-editor@1.0.1", "", { "dependencies": { "chardet": "^2.1.0", "iconv-lite": "^0.6.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q=="], + "@inquirer/editor": ["@inquirer/editor@4.2.21", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/external-editor": "^1.0.2", "@inquirer/type": "^3.0.9" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ=="], - "@inquirer/figures": ["@inquirer/figures@1.0.13", "", {}, "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw=="], + "@inquirer/expand": ["@inquirer/expand@4.0.21", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA=="], - "@inquirer/input": ["@inquirer/input@4.2.1", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/type": "^3.0.8" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow=="], + "@inquirer/external-editor": ["@inquirer/external-editor@1.0.2", "", { "dependencies": { "chardet": "^2.1.0", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ=="], - "@inquirer/number": ["@inquirer/number@3.0.17", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/type": "^3.0.8" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg=="], + "@inquirer/figures": ["@inquirer/figures@1.0.14", "", {}, "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ=="], - "@inquirer/password": ["@inquirer/password@4.0.17", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/type": "^3.0.8", "ansi-escapes": "^4.3.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA=="], + "@inquirer/input": ["@inquirer/input@4.2.5", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/type": "^3.0.9" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA=="], - "@inquirer/prompts": ["@inquirer/prompts@7.8.3", "", { "dependencies": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.15", "@inquirer/editor": "^4.2.17", "@inquirer/expand": "^4.0.17", "@inquirer/input": "^4.2.1", "@inquirer/number": "^3.0.17", "@inquirer/password": "^4.0.17", "@inquirer/rawlist": "^4.1.5", "@inquirer/search": "^3.1.0", "@inquirer/select": "^4.3.1" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-iHYp+JCaCRktM/ESZdpHI51yqsDgXu+dMs4semzETftOaF8u5hwlqnbIsuIR/LrWZl8Pm1/gzteK9I7MAq5HTA=="], + "@inquirer/number": ["@inquirer/number@3.0.21", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/type": "^3.0.9" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw=="], - "@inquirer/rawlist": ["@inquirer/rawlist@4.1.5", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA=="], + "@inquirer/password": ["@inquirer/password@4.0.21", "", { "dependencies": { "@inquirer/ansi": "^1.0.1", "@inquirer/core": "^10.3.0", "@inquirer/type": "^3.0.9" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA=="], - "@inquirer/search": ["@inquirer/search@3.1.0", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/figures": "^1.0.13", "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q=="], + "@inquirer/prompts": ["@inquirer/prompts@7.9.0", "", { "dependencies": { "@inquirer/checkbox": "^4.3.0", "@inquirer/confirm": "^5.1.19", "@inquirer/editor": "^4.2.21", "@inquirer/expand": "^4.0.21", "@inquirer/input": "^4.2.5", "@inquirer/number": "^3.0.21", "@inquirer/password": "^4.0.21", "@inquirer/rawlist": "^4.1.9", "@inquirer/search": "^3.2.0", "@inquirer/select": "^4.4.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A=="], - "@inquirer/select": ["@inquirer/select@4.3.1", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/figures": "^1.0.13", "@inquirer/type": "^3.0.8", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA=="], + "@inquirer/rawlist": ["@inquirer/rawlist@4.1.9", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg=="], - "@inquirer/type": ["@inquirer/type@3.0.8", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw=="], + "@inquirer/search": ["@inquirer/search@3.2.0", "", { "dependencies": { "@inquirer/core": "^10.3.0", "@inquirer/figures": "^1.0.14", "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ=="], - "@ioredis/commands": ["@ioredis/commands@1.3.0", "", {}, "sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ=="], + "@inquirer/select": ["@inquirer/select@4.4.0", "", { "dependencies": { "@inquirer/ansi": "^1.0.1", "@inquirer/core": "^10.3.0", "@inquirer/figures": "^1.0.14", "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA=="], + + "@inquirer/type": ["@inquirer/type@3.0.9", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w=="], + + "@ioredis/commands": ["@ioredis/commands@1.4.0", "", {}, "sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ=="], "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], @@ -560,6 +579,8 @@ "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -568,13 +589,13 @@ "@levischuck/tiny-cbor": ["@levischuck/tiny-cbor@0.2.11", "", {}, "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow=="], - "@logtail/core": ["@logtail/core@0.5.4", "", { "dependencies": { "@logtail/tools": "^0.5.4", "@logtail/types": "^0.5.3", "serialize-error": "8.1.0" } }, "sha512-UlbxvUg5MDroqk6gEhtfKuuBShrvD/VaXl3T3jGU1U6I19Y1OwfB7e681LvH7RbsCAnOJFziM/7rMQib/CJTdg=="], + "@logtail/core": ["@logtail/core@0.5.6", "", { "dependencies": { "@logtail/tools": "^0.5.6", "@logtail/types": "^0.5.6", "serialize-error": "8.1.0" } }, "sha512-wbExeqFgH8mfEJ0N1X1KmBZVmh1oGyQLtHo329O9TvDqyL3tmyQnXbtEHwB0whfCKrkzHPZvWAamcv/Y8uPOZw=="], - "@logtail/node": ["@logtail/node@0.5.5", "", { "dependencies": { "@logtail/core": "^0.5.4", "@logtail/types": "^0.5.3", "@msgpack/msgpack": "^2.5.1", "@types/stack-trace": "^0.0.33", "minimatch": "^9.0.5", "stack-trace": "0.0.10" } }, "sha512-hSZDjl2wFRxe/+pxSlYNSpm0V3a2ZsiWqBifvtCBHTriwrNkd0LjQtedRlrjoBBumVxIMGdDOCPayAIbcux5YQ=="], + "@logtail/node": ["@logtail/node@0.5.6", "", { "dependencies": { "@logtail/core": "^0.5.6", "@logtail/types": "^0.5.6", "@msgpack/msgpack": "^2.5.1", "@types/stack-trace": "^0.0.33", "minimatch": "^9.0.5", "stack-trace": "0.0.10" } }, "sha512-j+Q/LXVrZa6p+7qfNtiT5ANqmrusrSpBXU5Cxe6Wm+tB48NLaNdOiFz1EgqgTW50WzwlTHYl7ZhfPGsYgmyMOA=="], - "@logtail/tools": ["@logtail/tools@0.5.4", "", { "dependencies": { "@logtail/types": "^0.5.3" } }, "sha512-S0PtfWOVVgvb36q8mLksMw910mO2TahDaqIYnUM/ZEYX+AwqKRGov4zt/X33zHRzCFVpSKoZFv7bFs8TBie/pQ=="], + "@logtail/tools": ["@logtail/tools@0.5.6", "", { "dependencies": { "@logtail/types": "^0.5.6" } }, "sha512-l6VIzOUGZs6eLIWjZD88hNyE61xjRN0xypvFvY7CGl9nH+MlBSoFobA8XPTB+JpU1Zn3UhovOJrRM2SAoVyq4Q=="], - "@logtail/types": ["@logtail/types@0.5.3", "", {}, "sha512-5uKf1xQ7wRqSW0lYIwDpXdXcFHxPKH5EM22MoEjwTpd8suymOYuEdx9qCCHCYey4uOhPq7x6OkZf86bTO83JsA=="], + "@logtail/types": ["@logtail/types@0.5.6", "", {}, "sha512-a7tkl2rBE24SoV1dG3Jme6sfSRtQjSonlVym0PvoBHFbretqm0FB1SQuba27zOC9qH0kcYtyJGkoFi4vpJE/tQ=="], "@msgpack/msgpack": ["@msgpack/msgpack@2.8.0", "", {}, "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ=="], @@ -590,27 +611,27 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], - "@next/env": ["@next/env@15.4.6", "", {}, "sha512-yHDKVTcHrZy/8TWhj0B23ylKv5ypocuCwey9ZqPyv4rPdUdRzpGCkSi03t04KBPyU96kxVtUqx6O3nE1kpxASQ=="], + "@next/env": ["@next/env@15.5.5", "", {}, "sha512-2Zhvss36s/yL+YSxD5ZL5dz5pI6ki1OLxYlh6O77VJ68sBnlUrl5YqhBgCy7FkdMsp9RBeGFwpuDCdpJOqdKeQ=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.4.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-667R0RTP4DwxzmrqTs4Lr5dcEda9OxuZsVFsjVtxVMVhzSpo6nLclXejJVfQo2/g7/Z9qF3ETDmN3h65mTjpTQ=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lYExGHuFIHeOxf40mRLWoA84iY2sLELB23BV5FIDHhdJkN1LpRTPc1MDOawgTo5ifbM5dvAwnGuHyNm60G1+jw=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.4.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-KMSFoistFkaiQYVQQnaU9MPWtp/3m0kn2Xed1Ces5ll+ag1+rlac20sxG+MqhH2qYWX1O2GFOATQXEyxKiIscg=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-cacs/WQqa96IhqUm+7CY+z/0j9sW6X80KE07v3IAJuv+z0UNvJtKSlT/T1w1SpaQRa9l0wCYYZlRZUhUOvEVmg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.4.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-PnOx1YdO0W7m/HWFeYd2A6JtBO8O8Eb9h6nfJia2Dw1sRHoHpNf6lN1U4GKFRzRDBi9Nq2GrHk9PF3Vmwf7XVw=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-tLd90SvkRFik6LSfuYjcJEmwqcNEnVYVOyKTacSazya/SLlSwy/VYKsDE4GIzOBd+h3gW+FXqShc2XBavccHCg=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.4.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-XBbuQddtY1p5FGPc2naMO0kqs4YYtLYK/8aPausI5lyOjr4J77KTG9mtlU4P3NwkLI1+OjsPzKVvSJdMs3cFaw=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ekV76G2R/l3nkvylkfy9jBSYHeB4QcJ7LdDseT6INnn1p51bmDS1eGoSoq+RxfQ7B1wt+Qa0pIl5aqcx0GLpbw=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.4.6", "", { "os": "linux", "cpu": "x64" }, "sha512-+WTeK7Qdw82ez3U9JgD+igBAP75gqZ1vbK6R8PlEEuY0OIe5FuYXA4aTjL811kWPf7hNeslD4hHK2WoM9W0IgA=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.5", "", { "os": "linux", "cpu": "x64" }, "sha512-tI+sBu+3FmWtqlqD4xKJcj3KJtqbniLombKTE7/UWyyoHmOyAo3aZ7QcEHIOgInXOG1nt0rwh0KGmNbvSB0Djg=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.4.6", "", { "os": "linux", "cpu": "x64" }, "sha512-XP824mCbgQsK20jlXKrUpZoh/iO3vUWhMpxCz8oYeagoiZ4V0TQiKy0ASji1KK6IAe3DYGfj5RfKP6+L2020OQ=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.5", "", { "os": "linux", "cpu": "x64" }, "sha512-kDRh+epN/ulroNJLr+toDjN+/JClY5L+OAWjOrrKCI0qcKvTw9GBx7CU/rdA2bgi4WpZN3l0rf/3+b8rduEwrQ=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.4.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-FxrsenhUz0LbgRkNWx6FRRJIPe/MI1JRA4W4EPd5leXO00AZ6YU8v5vfx4MDXTvN77lM/EqsE3+6d2CIeF5NYg=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-GDgdNPFFqiKjTrmfw01sMMRWhVN5wOCmFzPloxa7ksDfX6TZt62tAK986f0ZYqWpvDFqeBCLAzmgTURvtQBdgw=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.4.6", "", { "os": "win32", "cpu": "x64" }, "sha512-T4ufqnZ4u88ZheczkBTtOF+eKaM14V8kbjud/XrAakoM5DKQWjW09vD6B9fsdsWS2T7D5EY31hRHdta7QKWOng=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.5", "", { "os": "win32", "cpu": "x64" }, "sha512-5kE3oRJxc7M8RmcTANP8RGoJkaYlwIiDD92gSwCjJY0+j8w8Sl1lvxgQ3bxfHY2KkHFai9tpy/Qx1saWV8eaJQ=="], - "@noble/ciphers": ["@noble/ciphers@0.6.0", "", {}, "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ=="], + "@noble/ciphers": ["@noble/ciphers@2.0.1", "", {}, "sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g=="], - "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -624,7 +645,7 @@ "@opentelemetry/auto-instrumentations-node": ["@opentelemetry/auto-instrumentations-node@0.60.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.202.0", "@opentelemetry/instrumentation-amqplib": "^0.49.0", "@opentelemetry/instrumentation-aws-lambda": "^0.53.0", "@opentelemetry/instrumentation-aws-sdk": "^0.54.0", "@opentelemetry/instrumentation-bunyan": "^0.48.0", "@opentelemetry/instrumentation-cassandra-driver": "^0.48.0", "@opentelemetry/instrumentation-connect": "^0.46.0", "@opentelemetry/instrumentation-cucumber": "^0.17.0", "@opentelemetry/instrumentation-dataloader": "^0.19.0", "@opentelemetry/instrumentation-dns": "^0.46.0", "@opentelemetry/instrumentation-express": "^0.51.0", "@opentelemetry/instrumentation-fastify": "^0.47.0", "@opentelemetry/instrumentation-fs": "^0.22.0", "@opentelemetry/instrumentation-generic-pool": "^0.46.0", "@opentelemetry/instrumentation-graphql": "^0.50.0", "@opentelemetry/instrumentation-grpc": "^0.202.0", "@opentelemetry/instrumentation-hapi": "^0.49.0", "@opentelemetry/instrumentation-http": "^0.202.0", "@opentelemetry/instrumentation-ioredis": "^0.50.0", "@opentelemetry/instrumentation-kafkajs": "^0.11.0", "@opentelemetry/instrumentation-knex": "^0.47.0", "@opentelemetry/instrumentation-koa": "^0.50.1", "@opentelemetry/instrumentation-lru-memoizer": "^0.47.0", "@opentelemetry/instrumentation-memcached": "^0.46.0", "@opentelemetry/instrumentation-mongodb": "^0.55.1", "@opentelemetry/instrumentation-mongoose": "^0.49.0", "@opentelemetry/instrumentation-mysql": "^0.48.0", "@opentelemetry/instrumentation-mysql2": "^0.48.0", "@opentelemetry/instrumentation-nestjs-core": "^0.48.0", "@opentelemetry/instrumentation-net": "^0.46.1", "@opentelemetry/instrumentation-oracledb": "^0.28.0", "@opentelemetry/instrumentation-pg": "^0.54.0", "@opentelemetry/instrumentation-pino": "^0.49.0", "@opentelemetry/instrumentation-redis": "^0.49.1", "@opentelemetry/instrumentation-redis-4": "^0.49.0", "@opentelemetry/instrumentation-restify": "^0.48.1", "@opentelemetry/instrumentation-router": "^0.47.0", "@opentelemetry/instrumentation-runtime-node": "^0.16.0", "@opentelemetry/instrumentation-socket.io": "^0.49.0", "@opentelemetry/instrumentation-tedious": "^0.21.0", "@opentelemetry/instrumentation-undici": "^0.13.1", "@opentelemetry/instrumentation-winston": "^0.47.0", "@opentelemetry/resource-detector-alibaba-cloud": "^0.31.2", "@opentelemetry/resource-detector-aws": "^2.2.0", "@opentelemetry/resource-detector-azure": "^0.9.0", "@opentelemetry/resource-detector-container": "^0.7.2", "@opentelemetry/resource-detector-gcp": "^0.36.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-node": "^0.202.0" }, "peerDependencies": { "@opentelemetry/api": "^1.4.1", "@opentelemetry/core": "^2.0.0" } }, "sha512-oMBVXiun0qWhj693Y24Ie+75q45YXHRFeH9vX/XBWKRNJIM/02ufjmNvmOdoHY0EPxU9rBmWCW82Uidf54iSPA=="], - "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.0.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw=="], + "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.1.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg=="], "@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], @@ -740,54 +761,72 @@ "@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/sdk-logs": "0.202.0", "@opentelemetry/sdk-metrics": "2.0.1", "@opentelemetry/sdk-trace-base": "2.0.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5XO77QFzs9WkexvJQL9ksxL8oVFb/dfi9NWQSq7Sv0Efr9x3N+nb1iklP1TeVgxqJ7m1xWiC/Uv3wupiQGevMw=="], - "@opentelemetry/propagation-utils": ["@opentelemetry/propagation-utils@0.31.3", "", { "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-ZI6LKjyo+QYYZY5SO8vfoCQ9A69r1/g+pyjvtu5RSK38npINN1evEmwqbqhbg2CdcIK3a4PN6pDAJz/yC5/gAA=="], + "@opentelemetry/propagation-utils": ["@opentelemetry/propagation-utils@0.31.9", "", { "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-/RADewvKqSeJ1pZFMjwtHZeBjUhUox7MQa+eoGldIK64PKc9Lyl6DqVMoEwIlbnN30Af7GDkjdQWQPp2DMlNTw=="], "@opentelemetry/propagator-b3": ["@opentelemetry/propagator-b3@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-Hc09CaQ8Tf5AGLmf449H726uRoBNGPBL4bjr7AnnUpzWMvhdn61F78z9qb6IqB737TffBsokGAK1XykFEZ1igw=="], "@opentelemetry/propagator-jaeger": ["@opentelemetry/propagator-jaeger@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-7PMdPBmGVH2eQNb/AtSJizQNgeNTfh6jQFqys6lfhd6P4r+m/nTh3gKPPpaCXVdRQ+z93vfKk+4UGty390283w=="], - "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.38.0", "", {}, "sha512-4Wc0AWURII2cfXVVoZ6vDqK+s5n4K5IssdrlVrvGsx6OEOKdghKtJZqXAHWFiZv4nTDLH2/2fldjIHY8clMOjQ=="], + "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.38.2", "", {}, "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA=="], - "@opentelemetry/resource-detector-alibaba-cloud": ["@opentelemetry/resource-detector-alibaba-cloud@0.31.3", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-I556LHcLVsBXEgnbPgQISP/JezDt5OfpgOaJNR1iVJl202r+K145OSSOxnH5YOc/KvrydBD0FOE03F7x0xnVTw=="], + "@opentelemetry/resource-detector-alibaba-cloud": ["@opentelemetry/resource-detector-alibaba-cloud@0.31.9", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-V+HbpICyzmJoQHYpiN0xRlj7QqeR9pPo+JZiZztV77L2MdlUCa/Cq7h0gdFNIKc0P9u9rYYYW21oaqdhhC5LZg=="], - "@opentelemetry/resource-detector-aws": ["@opentelemetry/resource-detector-aws@2.3.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-PkD/lyXG3B3REq1Y6imBLckljkJYXavtqGYSryAeJYvGOf5Ds3doR+BCGjmKeF6ObAtI5MtpBeUStTDtGtBsWA=="], + "@opentelemetry/resource-detector-aws": ["@opentelemetry/resource-detector-aws@2.6.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-atZ9/HNXh9ZJuMZUH2TPl89imFZBaoiU0Mksa70ysVhYRzhk3hfJyiu+eETjZ7NhGjBPrd3sfVYEq/St/7+o3g=="], "@opentelemetry/resource-detector-azure": ["@opentelemetry/resource-detector-azure@0.9.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-5wJwAAW2vhbqIhgaRisU1y0F5mUco59F/dKgmnnnT6YNbxjrbdUZYxKF5Wl7deJoACVdL5wi/3N97GCXPEwwCQ=="], - "@opentelemetry/resource-detector-container": ["@opentelemetry/resource-detector-container@0.7.3", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-SK+xUFw6DKYbQniaGmIFsFxAZsr8RpRSRWxKi5/ZJAoqqPnjcyGI/SeUx8zzPk4XLO084zyM4pRHgir0hRTaSQ=="], + "@opentelemetry/resource-detector-container": ["@opentelemetry/resource-detector-container@0.7.9", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-BiS14kCylLzh/mayN/sjnOdhnpfgiekaEsIzaL29MErfQR0mFCZjAE2uu8jMjShva9bSDFs65ouuAFft+vBthg=="], "@opentelemetry/resource-detector-gcp": ["@opentelemetry/resource-detector-gcp@0.36.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.27.0", "gcp-metadata": "^6.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-mWnEcg4tA+IDPrkETWo42psEsDN20dzYZSm4ZH8m8uiQALnNksVmf5C3An0GUEj5zrrxMasjSuv4zEH1gI40XQ=="], - "@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + "@opentelemetry/resources": ["@opentelemetry/resources@2.1.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw=="], "@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg=="], - "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], + "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.1.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/resources": "2.1.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-J9QX459mzqHLL9Y6FZ4wQPRZG4TOpMCyPOh6mkr/humxE1W2S3Bvf4i75yiMW9uyed2Kf5rxmLhTm/UK8vNkAw=="], "@opentelemetry/sdk-node": ["@opentelemetry/sdk-node@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/exporter-logs-otlp-grpc": "0.202.0", "@opentelemetry/exporter-logs-otlp-http": "0.202.0", "@opentelemetry/exporter-logs-otlp-proto": "0.202.0", "@opentelemetry/exporter-metrics-otlp-grpc": "0.202.0", "@opentelemetry/exporter-metrics-otlp-http": "0.202.0", "@opentelemetry/exporter-metrics-otlp-proto": "0.202.0", "@opentelemetry/exporter-prometheus": "0.202.0", "@opentelemetry/exporter-trace-otlp-grpc": "0.202.0", "@opentelemetry/exporter-trace-otlp-http": "0.202.0", "@opentelemetry/exporter-trace-otlp-proto": "0.202.0", "@opentelemetry/exporter-zipkin": "2.0.1", "@opentelemetry/instrumentation": "0.202.0", "@opentelemetry/propagator-b3": "2.0.1", "@opentelemetry/propagator-jaeger": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/sdk-logs": "0.202.0", "@opentelemetry/sdk-metrics": "2.0.1", "@opentelemetry/sdk-trace-base": "2.0.1", "@opentelemetry/sdk-trace-node": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-SF9vXWVd9I5CZ69mW3GfwfLI2SHgyvEqntcg0en5y8kRp5+2PPoa3Mkgj0WzFLrbSgTw4PsXn7c7H6eSdrtV0w=="], - "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.1.0", "", { "dependencies": { "@opentelemetry/core": "2.1.0", "@opentelemetry/resources": "2.1.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ=="], - "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.0.1", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.0.1", "@opentelemetry/core": "2.0.1", "@opentelemetry/sdk-trace-base": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA=="], + "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.1.0", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.1.0", "@opentelemetry/core": "2.1.0", "@opentelemetry/sdk-trace-base": "2.1.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SvVlBFc/jI96u/mmlKm86n9BbTCbQ35nsPoOohqJX6DXH92K0kTe73zGY5r8xoI1QkjR9PizszVJLzMC966y9Q=="], - "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.36.0", "", {}, "sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ=="], + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA=="], + "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.2", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ=="], "@paralleldrive/cuid2": ["@paralleldrive/cuid2@2.2.2", "", { "dependencies": { "@noble/hashes": "^1.1.5" } }, "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA=="], - "@peculiar/asn1-android": ["@peculiar/asn1-android@2.4.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.4.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-YFueREq97CLslZZBI8dKzis7jMfEHSLxM+nr0Zdx1POiXFLjqqwoY5s0F1UimdBiEw/iKlHey2m56MRDv7Jtyg=="], + "@peculiar/asn1-android": ["@peculiar/asn1-android@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A=="], - "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.4.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.4.0", "@peculiar/asn1-x509": "^2.4.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ=="], + "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "@peculiar/asn1-x509-attr": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-p0SjJ3TuuleIvjPM4aYfvYw8Fk1Hn/zAVyPJZTtZ2eE9/MIer6/18ROxX6N/e6edVSfvuZBqhxAj3YgsmSjQ/A=="], - "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.4.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.4.0", "@peculiar/asn1-x509": "^2.4.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img=="], + "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-ioigvA6WSYN9h/YssMmmoIwgl3RvZlAYx4A/9jD2qaqXZwGcNlAxaw54eSx2QG1Yu7YyBC5Rku3nNoHrQ16YsQ=="], - "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.4.0", "", { "dependencies": { "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ=="], + "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg=="], - "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.4.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.4.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw=="], + "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.5.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.5.0", "@peculiar/asn1-pkcs8": "^2.5.0", "@peculiar/asn1-rsa": "^2.5.0", "@peculiar/asn1-schema": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-Vj0d0wxJZA+Ztqfb7W+/iu8Uasw6hhKtCdLKXLG/P3kEPIQpqGI4P4YXlROfl7gOCqFIbgsj1HzFIFwQ5s20ug=="], + + "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-L7599HTI2SLlitlpEP8oAPaJgYssByI4eCwQq2C9eC90otFpm8MRn66PpbKviweAlhinWQ3ZjDD2KIVtx7PaVw=="], + + "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.5.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.5.0", "@peculiar/asn1-pfx": "^2.5.0", "@peculiar/asn1-pkcs8": "^2.5.0", "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "@peculiar/asn1-x509-attr": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-UgqSMBLNLR5TzEZ5ZzxR45Nk6VJrammxd60WMSkofyNzd3DQLSNycGWSK5Xg3UTYbXcDFyG8pA/7/y/ztVCa6A=="], + + "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q=="], + + "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.5.0", "", { "dependencies": { "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ=="], + + "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ=="], + + "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.5.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-9f0hPOxiJDoG/bfNLAFven+Bd4gwz/VzrCIIWc1025LEI4BXO0U5fOCTNDPbbp2ll+UzqKsZ3g61mpBp74gk9A=="], + + "@peculiar/x509": ["@peculiar/x509@1.14.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.5.0", "@peculiar/asn1-csr": "^2.5.0", "@peculiar/asn1-ecc": "^2.5.0", "@peculiar/asn1-pkcs9": "^2.5.0", "@peculiar/asn1-rsa": "^2.5.0", "@peculiar/asn1-schema": "^2.5.0", "@peculiar/asn1-x509": "^2.5.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg=="], + + "@phosphor-icons/react": ["@phosphor-icons/react@2.1.10", "", { "peerDependencies": { "react": ">= 16.8", "react-dom": ">= 16.8" } }, "sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + "@posthog/core": ["@posthog/core@1.3.0", "", {}, "sha512-hxLL8kZNHH098geedcxCz8y6xojkNYbmJEW+1vFXsmPcExyCXIUUJ/34X6xa9GcprKxd0Wsx3vfJQLQX4iVPhw=="], + "@prisma/instrumentation": ["@prisma/instrumentation@6.11.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA=="], "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], @@ -810,7 +849,7 @@ "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], - "@puppeteer/browsers": ["@puppeteer/browsers@2.10.6", "", { "dependencies": { "debug": "^4.4.1", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.2", "tar-fs": "^3.1.0", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-pHUn6ZRt39bP3698HFQlu2ZHCkS/lPcpv7fVQcGBSzNNygw171UXAKrCUhy+TEMw4lEttOKDgNpb04hwUAJeiQ=="], + "@puppeteer/browsers": ["@puppeteer/browsers@2.10.12", "", { "dependencies": { "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.3", "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-mP9iLFZwH+FapKJLeA7/fLqOlSUwYpMwjR1P5J23qd4e7qGJwecJccJqHYrjw33jmIZYV4dtiTHPD/J+1e7cEw=="], "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], @@ -858,6 +897,8 @@ "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@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" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + "@radix-ui/react-radio-group": ["@radix-ui/react-radio-group@1.3.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@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" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@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" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.10", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@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" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A=="], @@ -936,49 +977,53 @@ "@react-email/text": ["@react-email/text@0.1.5", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg=="], - "@reduxjs/toolkit": ["@reduxjs/toolkit@2.8.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^10.0.3", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A=="], + "@reduxjs/toolkit": ["@reduxjs/toolkit@2.9.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^10.0.3", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog=="], "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.46.2", "", { "os": "android", "cpu": "arm" }, "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.52.4", "", { "os": "android", "cpu": "arm" }, "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.46.2", "", { "os": "android", "cpu": "arm64" }, "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.52.4", "", { "os": "android", "cpu": "arm64" }, "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.46.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.52.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.46.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.52.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.46.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.52.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.46.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.52.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.46.2", "", { "os": "linux", "cpu": "arm" }, "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.52.4", "", { "os": "linux", "cpu": "arm" }, "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.46.2", "", { "os": "linux", "cpu": "arm" }, "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.52.4", "", { "os": "linux", "cpu": "arm" }, "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.46.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.52.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.46.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.52.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.46.2", "", { "os": "linux", "cpu": "none" }, "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA=="], + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.52.4", "", { "os": "linux", "cpu": "none" }, "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.46.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw=="], + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.52.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.46.2", "", { "os": "linux", "cpu": "none" }, "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.52.4", "", { "os": "linux", "cpu": "none" }, "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.46.2", "", { "os": "linux", "cpu": "none" }, "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.52.4", "", { "os": "linux", "cpu": "none" }, "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.46.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.52.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.46.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.52.4", "", { "os": "linux", "cpu": "x64" }, "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.46.2", "", { "os": "linux", "cpu": "x64" }, "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.52.4", "", { "os": "linux", "cpu": "x64" }, "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.46.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g=="], + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.52.4", "", { "os": "none", "cpu": "arm64" }, "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.46.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.52.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.46.2", "", { "os": "win32", "cpu": "x64" }, "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.52.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.52.4", "", { "os": "win32", "cpu": "x64" }, "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.52.4", "", { "os": "win32", "cpu": "x64" }, "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w=="], "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="], @@ -994,78 +1039,88 @@ "@sentry/utils": ["@sentry/utils@8.55.0", "", { "dependencies": { "@sentry/core": "8.55.0" } }, "sha512-cYcl39+xcOivBpN9d8ZKbALl+DxZKo/8H0nueJZ0PO4JA+MJGhSm6oHakXxLPaiMoNLTX7yor8ndnQIuFg+vmQ=="], - "@simplewebauthn/browser": ["@simplewebauthn/browser@13.1.2", "", {}, "sha512-aZnW0KawAM83fSBUgglP5WofbrLbLyr7CoPqYr66Eppm7zO86YX6rrCjRB3hQKPrL7ATvY4FVXlykZ6w6FwYYw=="], + "@simplewebauthn/browser": ["@simplewebauthn/browser@13.2.2", "", {}, "sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA=="], - "@simplewebauthn/server": ["@simplewebauthn/server@13.1.2", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.3.10", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-rsa": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.3.8" } }, "sha512-VwoDfvLXSCaRiD+xCIuyslU0HLxVggeE5BL06+GbsP2l1fGf5op8e0c3ZtKoi+vSg1q4ikjtAghC23ze2Q3H9g=="], + "@simplewebauthn/server": ["@simplewebauthn/server@13.2.2", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.3.10", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-rsa": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.3.8", "@peculiar/x509": "^1.13.0" } }, "sha512-HcWLW28yTMGXpwE9VLx9J+N2KEUaELadLrkPEEI9tpI5la70xNEVEsu/C+m3u7uoq4FulLqZQhgBCzR9IZhFpA=="], "@socket.io/component-emitter": ["@socket.io/component-emitter@3.1.2", "", {}, "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="], + "@squircle/core": ["@squircle/core@1.0.6", "", { "peerDependencies": { "@squircle/paint-polyfill": "^1.0.3" } }, "sha512-jvAIehtarEHBl6W80LNiZ9KWVKdJw6jGj/avwwbCoGVs9t+AUA5YVmUyAtEasFtoocHwxbbRsdnTeKxQ+061aQ=="], + + "@squircle/paint-polyfill": ["@squircle/paint-polyfill@1.0.6", "", {}, "sha512-w3FotA1v53MG+R6eGM37wv1aVoW3jwymwGteGCGXEM10Gq7zYeCus5dTgcyW6fhc9piRqsFLyU8MIl+EbtM9RA=="], + + "@squircle/tailwindcss": ["@squircle/tailwindcss@1.0.6", "", {}, "sha512-tmOWdpX7lzBAJzuvajn4NVBtC7mVORmzf/jKREYMw8iJ806Xq4FCUkrtbxkd9blzOx7TG2JwLF3avh5It/Z6TQ=="], + "@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="], "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@supabase/auth-js": ["@supabase/auth-js@2.71.1", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-mMIQHBRc+SKpZFRB2qtupuzulaUhFYupNyxqDj5Jp/LyPvcWvjaJzZzObv6URtL/O6lPxkanASnotGtNpS3H2Q=="], + "@supabase/auth-js": ["@supabase/auth-js@2.75.0", "", { "dependencies": { "@supabase/node-fetch": "2.6.15" } }, "sha512-J8TkeqCOMCV4KwGKVoxmEBuDdHRwoInML2vJilthOo7awVCro2SM+tOcpljORwuBQ1vHUtV62Leit+5wlxrNtw=="], - "@supabase/functions-js": ["@supabase/functions-js@2.4.5", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-v5GSqb9zbosquTo6gBwIiq7W9eQ7rE5QazsK/ezNiQXdCbY+bH8D9qEaBIkhVvX4ZRW5rP03gEfw5yw9tiq4EQ=="], + "@supabase/functions-js": ["@supabase/functions-js@2.75.0", "", { "dependencies": { "@supabase/node-fetch": "2.6.15" } }, "sha512-18yk07Moj/xtQ28zkqswxDavXC3vbOwt1hDuYM3/7xPnwwpKnsmPyZ7bQ5th4uqiJzQ135t74La9tuaxBR6e7w=="], "@supabase/node-fetch": ["@supabase/node-fetch@2.6.15", "", { "dependencies": { "whatwg-url": "^5.0.0" } }, "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ=="], - "@supabase/postgrest-js": ["@supabase/postgrest-js@1.19.4", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw=="], + "@supabase/postgrest-js": ["@supabase/postgrest-js@2.75.0", "", { "dependencies": { "@supabase/node-fetch": "2.6.15" } }, "sha512-YfBz4W/z7eYCFyuvHhfjOTTzRrQIvsMG2bVwJAKEVVUqGdzqfvyidXssLBG0Fqlql1zJFgtsPpK1n4meHrI7tg=="], - "@supabase/realtime-js": ["@supabase/realtime-js@2.15.1", "", { "dependencies": { "@supabase/node-fetch": "^2.6.13", "@types/phoenix": "^1.6.6", "@types/ws": "^8.18.1", "ws": "^8.18.2" } }, "sha512-edRFa2IrQw50kNntvUyS38hsL7t2d/psah6om6aNTLLcWem0R6bOUq7sk7DsGeSlNfuwEwWn57FdYSva6VddYw=="], + "@supabase/realtime-js": ["@supabase/realtime-js@2.75.0", "", { "dependencies": { "@supabase/node-fetch": "2.6.15", "@types/phoenix": "^1.6.6", "@types/ws": "^8.18.1", "ws": "^8.18.2" } }, "sha512-B4Xxsf2NHd5cEnM6MGswOSPSsZKljkYXpvzKKmNxoUmNQOfB7D8HOa6NwHcUBSlxcjV+vIrYKcYXtavGJqeGrw=="], "@supabase/ssr": ["@supabase/ssr@0.5.2", "", { "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.7.0" }, "peerDependencies": { "@supabase/supabase-js": "^2.43.4" } }, "sha512-n3plRhr2Bs8Xun1o4S3k1CDv17iH5QY9YcoEvXX3bxV1/5XSasA0mNXYycFmADIdtdE6BG9MRjP5CGIs8qxC8A=="], - "@supabase/storage-js": ["@supabase/storage-js@2.11.0", "", { "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "sha512-Y+kx/wDgd4oasAgoAq0bsbQojwQ+ejIif8uczZ9qufRHWFLMU5cODT+ApHsSrDufqUcVKt+eyxtOXSkeh2v9ww=="], + "@supabase/storage-js": ["@supabase/storage-js@2.75.0", "", { "dependencies": { "@supabase/node-fetch": "2.6.15" } }, "sha512-wpJMYdfFDckDiHQaTpK+Ib14N/O2o0AAWWhguKvmmMurB6Unx17GGmYp5rrrqCTf8S1qq4IfIxTXxS4hzrUySg=="], - "@supabase/supabase-js": ["@supabase/supabase-js@2.55.0", "", { "dependencies": { "@supabase/auth-js": "2.71.1", "@supabase/functions-js": "2.4.5", "@supabase/node-fetch": "2.6.15", "@supabase/postgrest-js": "1.19.4", "@supabase/realtime-js": "2.15.1", "@supabase/storage-js": "^2.10.4" } }, "sha512-Y1uV4nEMjQV1x83DGn7+Z9LOisVVRlY1geSARrUHbXWgbyKLZ6/08dvc0Us1r6AJ4tcKpwpCZWG9yDQYo1JgHg=="], + "@supabase/supabase-js": ["@supabase/supabase-js@2.75.0", "", { "dependencies": { "@supabase/auth-js": "2.75.0", "@supabase/functions-js": "2.75.0", "@supabase/node-fetch": "2.6.15", "@supabase/postgrest-js": "2.75.0", "@supabase/realtime-js": "2.75.0", "@supabase/storage-js": "2.75.0" } }, "sha512-8UN/vATSgS2JFuJlMVr51L3eUDz+j1m7Ww63wlvHLKULzCDaVWYzvacCjBTLW/lX/vedI2LBI4Vg+01G9ufsJQ=="], "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], - "@tailwindcss/node": ["@tailwindcss/node@4.1.12", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.5.1", "lightningcss": "1.30.1", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.12" } }, "sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ=="], + "@tailwindcss/node": ["@tailwindcss/node@4.1.14", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.0", "lightningcss": "1.30.1", "magic-string": "^0.30.19", "source-map-js": "^1.2.1", "tailwindcss": "4.1.14" } }, "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.12", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.12", "@tailwindcss/oxide-darwin-arm64": "4.1.12", "@tailwindcss/oxide-darwin-x64": "4.1.12", "@tailwindcss/oxide-freebsd-x64": "4.1.12", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.12", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.12", "@tailwindcss/oxide-linux-arm64-musl": "4.1.12", "@tailwindcss/oxide-linux-x64-gnu": "4.1.12", "@tailwindcss/oxide-linux-x64-musl": "4.1.12", "@tailwindcss/oxide-wasm32-wasi": "4.1.12", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.12", "@tailwindcss/oxide-win32-x64-msvc": "4.1.12" } }, "sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.14", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.5.1" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.14", "@tailwindcss/oxide-darwin-arm64": "4.1.14", "@tailwindcss/oxide-darwin-x64": "4.1.14", "@tailwindcss/oxide-freebsd-x64": "4.1.14", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.14", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.14", "@tailwindcss/oxide-linux-arm64-musl": "4.1.14", "@tailwindcss/oxide-linux-x64-gnu": "4.1.14", "@tailwindcss/oxide-linux-x64-musl": "4.1.14", "@tailwindcss/oxide-wasm32-wasi": "4.1.14", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.14", "@tailwindcss/oxide-win32-x64-msvc": "4.1.14" } }, "sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.12", "", { "os": "android", "cpu": "arm64" }, "sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.14", "", { "os": "android", "cpu": "arm64" }, "sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.14", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.14", "", { "os": "darwin", "cpu": "x64" }, "sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.14", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12", "", { "os": "linux", "cpu": "arm" }, "sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14", "", { "os": "linux", "cpu": "arm" }, "sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.12", "", { "os": "linux", "cpu": "x64" }, "sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.14", "", { "os": "linux", "cpu": "x64" }, "sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.12", "", { "os": "linux", "cpu": "x64" }, "sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.14", "", { "os": "linux", "cpu": "x64" }, "sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.12", "", { "dependencies": { "@emnapi/core": "^1.4.5", "@emnapi/runtime": "^1.4.5", "@emnapi/wasi-threads": "^1.0.4", "@napi-rs/wasm-runtime": "^0.2.12", "@tybys/wasm-util": "^0.10.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.14", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.0.5", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.14", "", { "os": "win32", "cpu": "arm64" }, "sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.12", "", { "os": "win32", "cpu": "x64" }, "sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.14", "", { "os": "win32", "cpu": "x64" }, "sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA=="], - "@tailwindcss/vite": ["@tailwindcss/vite@4.1.12", "", { "dependencies": { "@tailwindcss/node": "4.1.12", "@tailwindcss/oxide": "4.1.12", "tailwindcss": "4.1.12" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ=="], + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.14", "", { "dependencies": { "@tailwindcss/node": "4.1.14", "@tailwindcss/oxide": "4.1.14", "tailwindcss": "4.1.14" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA=="], - "@tanstack/query-core": ["@tanstack/query-core@5.85.6", "", {}, "sha512-hCj0TktzdCv2bCepIdfwqVwUVWb+GSHm1Jnn8w+40lfhQ3m7lCO7ADRUJy+2unxQ/nzjh2ipC6ye69NDW3l73g=="], + "@tanstack/query-core": ["@tanstack/query-core@5.90.3", "", {}, "sha512-HtPOnCwmx4dd35PfXU8jjkhwYrsHfuqgC8RCJIwWglmhIUIlzPP0ZcEkDAc+UtAWCiLm7T8rxeEfHZlz3hYMCA=="], - "@tanstack/query-devtools": ["@tanstack/query-devtools@5.84.0", "", {}, "sha512-fbF3n+z1rqhvd9EoGp5knHkv3p5B2Zml1yNRjh7sNXklngYI5RVIWUrUjZ1RIcEoscarUb0+bOvIs5x9dwzOXQ=="], + "@tanstack/query-devtools": ["@tanstack/query-devtools@5.90.1", "", {}, "sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ=="], - "@tanstack/react-query": ["@tanstack/react-query@5.85.6", "", { "dependencies": { "@tanstack/query-core": "5.85.6" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-VUAag4ERjh+qlmg0wNivQIVCZUrYndqYu3/wPCVZd4r0E+1IqotbeyGTc+ICroL/PqbpSaGZg02zSWYfcvxbdA=="], + "@tanstack/react-query": ["@tanstack/react-query@5.90.3", "", { "dependencies": { "@tanstack/query-core": "5.90.3" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-i/LRL6DtuhG6bjGzavIMIVuKKPWx2AnEBIsBfuMm3YoHne0a20nWmsatOCBcVSaT0/8/5YFjNkebHAPLVUSi0Q=="], - "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.85.6", "", { "dependencies": { "@tanstack/query-devtools": "5.84.0" }, "peerDependencies": { "@tanstack/react-query": "^5.85.6", "react": "^18 || ^19" } }, "sha512-A6rE39FypFV7eonefk4fxC/vuV/7YJMAcQT94CFAvCpiw65QZX8MOuUpdLBeG1cXajy4Pj8T8sEWHigccntJqg=="], + "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.90.2", "", { "dependencies": { "@tanstack/query-devtools": "5.90.1" }, "peerDependencies": { "@tanstack/react-query": "^5.90.2", "react": "^18 || ^19" } }, "sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ=="], "@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="], + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.12", "", { "dependencies": { "@tanstack/virtual-core": "3.13.12" }, "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" } }, "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA=="], + "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="], + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.12", "", {}, "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA=="], + "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], @@ -1104,7 +1159,7 @@ "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="], - "@types/d3-array": ["@types/d3-array@3.2.1", "", {}, "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="], + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], @@ -1130,12 +1185,14 @@ "@types/express": ["@types/express@5.0.3", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "*" } }, "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw=="], - "@types/express-serve-static-core": ["@types/express-serve-static-core@5.0.7", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ=="], + "@types/express-serve-static-core": ["@types/express-serve-static-core@5.1.0", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA=="], "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], "@types/history": ["@types/history@4.7.11", "", {}, "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA=="], + "@types/html-minifier-terser": ["@types/html-minifier-terser@6.1.0", "", {}, "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg=="], + "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], @@ -1158,7 +1215,7 @@ "@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="], - "@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="], + "@types/node": ["@types/node@24.7.2", "", { "dependencies": { "undici-types": "~7.14.0" } }, "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA=="], "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], @@ -1178,7 +1235,7 @@ "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - "@types/react": ["@types/react@18.3.23", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w=="], + "@types/react": ["@types/react@18.3.26", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA=="], "@types/react-dom": ["@types/react-dom@18.3.7", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ=="], @@ -1190,9 +1247,9 @@ "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="], - "@types/send": ["@types/send@0.17.5", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w=="], + "@types/send": ["@types/send@1.2.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ=="], - "@types/serve-static": ["@types/serve-static@1.15.8", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg=="], + "@types/serve-static": ["@types/serve-static@1.15.9", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA=="], "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="], @@ -1212,45 +1269,45 @@ "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.39.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.39.1", "@typescript-eslint/type-utils": "8.39.1", "@typescript-eslint/utils": "8.39.1", "@typescript-eslint/visitor-keys": "8.39.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.39.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.46.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/type-utils": "8.46.1", "@typescript-eslint/utils": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.46.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.39.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.39.1", "@typescript-eslint/types": "8.39.1", "@typescript-eslint/typescript-estree": "8.39.1", "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/types": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.39.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.39.1", "@typescript-eslint/types": "^8.39.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.46.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.46.1", "@typescript-eslint/types": "^8.46.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.39.1", "", { "dependencies": { "@typescript-eslint/types": "8.39.1", "@typescript-eslint/visitor-keys": "8.39.1" } }, "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.46.1", "", { "dependencies": { "@typescript-eslint/types": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1" } }, "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.39.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.46.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.39.1", "", { "dependencies": { "@typescript-eslint/types": "8.39.1", "@typescript-eslint/typescript-estree": "8.39.1", "@typescript-eslint/utils": "8.39.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.46.1", "", { "dependencies": { "@typescript-eslint/types": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1", "@typescript-eslint/utils": "8.46.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.39.1", "", {}, "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.46.1", "", {}, "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.39.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.39.1", "@typescript-eslint/tsconfig-utils": "8.39.1", "@typescript-eslint/types": "8.39.1", "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.46.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.46.1", "@typescript-eslint/tsconfig-utils": "8.46.1", "@typescript-eslint/types": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.39.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.39.1", "@typescript-eslint/types": "8.39.1", "@typescript-eslint/typescript-estree": "8.39.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg=="], + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.46.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/types": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.39.1", "", { "dependencies": { "@typescript-eslint/types": "8.39.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.46.1", "", { "dependencies": { "@typescript-eslint/types": "8.46.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA=="], - "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20250816.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20250816.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20250816.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20250816.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20250816.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20250816.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20250816.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20250816.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-du/e72VqzVXFQqbKuEc7W+W9pWvIgKg0SwydHxzvzQ6TiccBAP/Ar7FUBEuYkFGQ2rbo7pYLj/zkoUCy08QW5w=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20251014.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20251014.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20251014.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20251014.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20251014.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20251014.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20251014.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20251014.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-IqmX5CYCBqXbfL+HKlcQAMaDlfJ0Z8OhUxvADFV2TENnzSYI4CuhvKxwOB2wFSLXufVsgtAlf3Fjwn24KmMyPQ=="], - "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20250816.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JM+b5qXA1M9G/NFmytUatwEFQSKz1JQDZBsHCLxHbWaGazbg+yJPTzsxKfSz+DW72hyGTldiQqeIdJKwg3G5uQ=="], + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20251014.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-7rQoLlerWnwnvrM56hP4rdEbo4xDE4zr7cch+EzgENq/tbXYereGq1fmnR83UNglb1Eyy53OvJZ3O2csYBa2vg=="], - "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20250816.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-jwhb6osHxniK+gv23uSjalfTN2XoMiF7X8eIslIRKQ6ICqxf5k8XtOJY0v2lf/t3HxIQQdG962kDVwiGaN3K6w=="], + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20251014.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-SF29o9NFRGDM23Jz0nVO4/yS78GQ81rtOemmCVNXuJotoY4bP3npGDyEmfkZQHZgDOXogs2OWy3t7NUJ235ANQ=="], - "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20250816.1", "", { "os": "linux", "cpu": "arm" }, "sha512-syEtVN8E5oOlTOm7CrE3vgoVveBPRKvBbkfShqzwlmq1mw51MWunwO3yDNB3tk9GC1w1VoISoYpe8xm/hUKqIQ=="], + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20251014.1", "", { "os": "linux", "cpu": "arm" }, "sha512-o5cu7h+BBAp6V4qxYY5RWuaYouN3j+MGFLrrUtvvNj4XKM+kbq5qwsgVRsmJZ1LfUvHmzyQs86vt9djAWedzjQ=="], - "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20250816.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-e9YXa8QJ2kxBE/eIIci0n906crKxw+C9exAoWysjEsShIsXghIyP3BedMMVRhp2ZigjAPD6pa2ibE1R637C60g=="], + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20251014.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-+YWbW/JF4uggEUBr+vflqI5i7bL4Z3XInCOyUO1qQEY7VmfDCsPEzIwGi37O1mixfxw9Qj8LQsptCkU+fqKwGw=="], - "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20250816.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C1pGpcbR2KwAacOQ9e0pAEZeOIZOZ7+GGxQjFQBYxnFdZfT/AvrCP8rKbZhWUx0ghntskl4BejqhGGC3kTc8Cg=="], + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20251014.1", "", { "os": "linux", "cpu": "x64" }, "sha512-3LC4tgcgi6zWJWBUpBNXOGSY3yISJrQezSP/T+v+mQRApkdoIpTSHIyQAhgaagcs3MOQRaqiIPaLOVrdHXdU6A=="], - "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20250816.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-tHiD2c4/GQQeSl5kbnNMcjFx0JaC3blbKA9oPMH11hrio/eRnHVrvmatLe5Mo4KOuCS5EHgNUhUvhI43TD0lfw=="], + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20251014.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-P0D4UEXwzFZh3pHexe2Ky1tW/HjY/HxTBTIajz2ViDCNPw7uDSEsXSB4H9TTiFJw8gVdTUFbsoAQp1MteTeORA=="], - "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20250816.1", "", { "os": "win32", "cpu": "x64" }, "sha512-4Gm8x1fjnPU441faBu9Mgf9xUWC/DTetulu1bXNcdcrmSkRCFNiIQFtM/IBz47ghDaec4+XiHlrYxkzcaN/avw=="], + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20251014.1", "", { "os": "win32", "cpu": "x64" }, "sha512-fi53g2ihH7tkQLlz8hZGAb2V+3aNZpcxrZ530CQ4xcWwAqssEj0EaZJX0VLEtIQBar1ttGVK9Pz/wJU9sYyVzg=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@upstash/redis": ["@upstash/redis@1.35.3", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-hSjv66NOuahW3MisRGlSgoszU2uONAY2l5Qo3Sae8OT3/Tng9K+2/cBRuyPBX8egwEGcNNCF9+r0V6grNnhL+w=="], + "@upstash/redis": ["@upstash/redis@1.35.6", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-aSEIGJgJ7XUfTYvhQcQbq835re7e/BXjs8Janq6Pvr6LlmTZnyqwT97RziZLO/8AVUL037RLXqqiQC6kCt+5pA=="], "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], @@ -1268,19 +1325,19 @@ "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], - "ag-charts-community": ["ag-charts-community@12.1.1", "", { "dependencies": { "ag-charts-core": "12.1.1", "ag-charts-locale": "12.1.1", "ag-charts-types": "12.1.1" } }, "sha512-5RfYXwqUr4yR1KIQAPvCsF9uaNRV6Ghs6Bj9tMn5bHL0xf1EOncEpkzXZjIXpM4yGxYk8UJKRTI3mByPjYRe8A=="], + "ag-charts-community": ["ag-charts-community@12.2.0", "", { "dependencies": { "ag-charts-core": "12.2.0", "ag-charts-locale": "12.2.0", "ag-charts-types": "12.2.0" } }, "sha512-j5IYDtePqOde5LdnmpcKGSkgqhWRCke4W3uJvIFRFDQrFmI+hrnIRFgoea6+QBmtsKcho2vv5N8FqHOwN/udOw=="], - "ag-charts-core": ["ag-charts-core@12.1.1", "", { "dependencies": { "ag-charts-types": "12.1.1" } }, "sha512-Kp/fXAtNmHWWo4MTHfYN1O4O5F3wWF5ZhLcjbfrdBcx3rBdbQGw46K/FcclK8Wyer3tmITBG9EZQFO/CDeu4vA=="], + "ag-charts-core": ["ag-charts-core@12.2.0", "", { "dependencies": { "ag-charts-types": "12.2.0" } }, "sha512-3hTpW9MGJCyvonfHHOrIeN3VPW7Crses9Os2W/TFJzRqFD0O4Zf0lzIYTQFfPCQRhCLM8Ch211XvoCkX/Goo5g=="], - "ag-charts-locale": ["ag-charts-locale@12.1.1", "", {}, "sha512-kpmtZvC12idQcNPnM3BIALmFUXvbb2TtCZtTuXqWdmtT7ykgnQCWWFczLOcM4EsgfnaudATI952JLAeQ/C2wwQ=="], + "ag-charts-locale": ["ag-charts-locale@12.2.0", "", {}, "sha512-xwMTzoNi/SAV6EwApRuBXOc3K+Thi/ijsKIkIhaGPmc3VPkCVCWW/TcAontiZ3dXUgxsL3jXBNyarH7f+XzWkQ=="], - "ag-charts-react": ["ag-charts-react@12.1.1", "", { "dependencies": { "ag-charts-community": "12.1.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-FaFFXdICK1CVfIzCkIZN3L44ME9H6ddDAFWGcHGviA2PtfSz6WiT8fgYLIFvn7l6Qx9IcWMfqFpJ3OTf+DV8tw=="], + "ag-charts-react": ["ag-charts-react@12.2.0", "", { "dependencies": { "ag-charts-community": "12.2.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-uc6XE2tLbQ5LZugCdQyyrw5+I2EUDQMqOwMS3j0NzRJAXfj0DrZEg9zTkgwDrn24t28al7rdeWtVespXP+EmpA=="], - "ag-charts-types": ["ag-charts-types@12.1.1", "", {}, "sha512-VbAOfp1E7+Z/TBufJOIjUYdx70kQRDg49WoluiVKVSB0r0el/uvxARp9xjzx4ByBq9+Xq/V23tJVsRj1MS2A/g=="], + "ag-charts-types": ["ag-charts-types@12.2.0", "", {}, "sha512-d2qQrQirt9wP36YW5HPuOvXsiajyiFnr1CTsoCbs02bavPDz7Lk2jHp64+waM4YKgXb3GN7gafbBI9Qgk33BmQ=="], - "ag-grid-community": ["ag-grid-community@34.1.1", "", { "dependencies": { "ag-charts-types": "12.1.1" } }, "sha512-ODVvGoMTkyGvMT8b5lzvum5r93bG6CKdJdNrk6u/aYS7oqZ5rUEXJJHC8n8Zq+o76KhFiXMBQrU39xuhz8i+Tg=="], + "ag-grid-community": ["ag-grid-community@34.2.0", "", { "dependencies": { "ag-charts-types": "12.2.0" } }, "sha512-peS7THEMYwpIrwLQHmkRxw/TlOnddD/F5A88RqlBxf8j+WqVYRWMOOhU5TqymGcha7z2oZ8IoL9ROl3gvtdEjg=="], - "ag-grid-react": ["ag-grid-react@34.1.1", "", { "dependencies": { "ag-grid-community": "34.1.1", "prop-types": "^15.8.1" }, "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" } }, "sha512-ZffTltCJe5+yzC57LVTMFpjZiYUzFiX8+G4NNfM1MfiLV6cMl5kCEE6w3Afc0nSt8b1JCAZOiX6K0+VXqjIfYQ=="], + "ag-grid-react": ["ag-grid-react@34.2.0", "", { "dependencies": { "ag-grid-community": "34.2.0", "prop-types": "^15.8.1" }, "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" } }, "sha512-dLKFw6hz75S0HLuZvtcwjm+gyiI4gXVzHEu7lWNafWAX0mb8DhogEOP5wbzAlsN6iCfi7bK/cgZImZFjenlqwg=="], "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -1290,9 +1347,7 @@ "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], - - "ansi-regex": ["ansi-regex@6.2.0", "", {}, "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -1324,35 +1379,39 @@ "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], - "autumn-js": ["autumn-js@0.1.13", "", { "dependencies": { "rou3": "^0.6.1", "swr": "^2.3.3", "zod": "^4.0.0" }, "peerDependencies": { "better-auth": "^1.2.12", "better-call": "^1.0.12" }, "optionalPeers": ["better-auth", "better-call"] }, "sha512-SX9wGAwcFX47bLxPLiKtD5P2l5hR3wgK7w6yB5OVVSJ9Qauva24MNQLwObTgNdvT63QjPfK3mIZNV5E5RwjQuA=="], + "autumn-js": ["autumn-js@0.1.40", "", { "dependencies": { "query-string": "^9.2.2", "rou3": "^0.6.1", "swr": "^2.3.3", "zod": "^4.0.0" }, "peerDependencies": { "better-auth": "^1.3.17", "better-call": "^1.0.12", "convex": "^1.25.4" }, "optionalPeers": ["better-auth", "better-call"] }, "sha512-nAmyFJLOQqKosb8MHv09rB2pma8LyOHWsuYtrjXND+2LM51vToco1mweLIYIs/aX33iLAVUxfpXEEt8P3UYoxw=="], - "axios": ["axios@1.11.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA=="], + "axios": ["axios@1.12.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw=="], - "b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], + "b4a": ["b4a@1.7.3", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q=="], "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "bare-events": ["bare-events@2.6.1", "", {}, "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g=="], + "bare-events": ["bare-events@2.8.0", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA=="], - "bare-fs": ["bare-fs@4.2.0", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-oRfrw7gwwBVAWx9S5zPMo2iiOjxyiZE12DmblmMQREgcogbNO0AFaZ+QBxxkEXiPspcpvO/Qtqn8LabUx4uYXg=="], + "bare-fs": ["bare-fs@4.4.10", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-arqVF+xX/rJHwrONZaSPhlzleT2gXwVs9rsAe1p1mIVwWZI2A76/raio+KwwxfWMO8oV9Wo90EaUkS2QwVmy4w=="], - "bare-os": ["bare-os@3.6.1", "", {}, "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g=="], + "bare-os": ["bare-os@3.6.2", "", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="], "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], "bare-stream": ["bare-stream@2.7.0", "", { "dependencies": { "streamx": "^2.21.0" }, "peerDependencies": { "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-buffer", "bare-events"] }, "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A=="], + "bare-url": ["bare-url@2.3.0", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-c+RCqMSZbkz97Mw1LWR0gcOqwK82oyYKfLoHJ8k13ybi1+I80ffdDzUy0TdAburdrR/kI0/VuN8YgEnJqX+Nyw=="], + "base-convert-int-array": ["base-convert-int-array@1.0.1", "", {}, "sha512-NWqzaoXx8L/SS32R+WmKqnQkVXVYl2PwNJ68QV3RAlRRL1uV+yxJT66abXI1cAvqCXQTyXr7/9NN4Af90/zDVw=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.16", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw=="], + "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], - "better-auth": ["better-auth@1.3.7", "", { "dependencies": { "@better-auth/utils": "0.2.6", "@better-fetch/fetch": "^1.1.18", "@noble/ciphers": "^0.6.0", "@noble/hashes": "^1.8.0", "@simplewebauthn/browser": "^13.1.2", "@simplewebauthn/server": "^13.1.2", "better-call": "^1.0.13", "defu": "^6.1.4", "jose": "^5.10.0", "kysely": "^0.28.5", "nanostores": "^0.11.4" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-/1fEyx2SGgJQM5ujozDCh9eJksnVkNU/J7Fk/tG5Y390l8nKbrPvqiFlCjlMM+scR+UABJbQzA6An7HT50LHyQ=="], + "better-auth": ["better-auth@1.3.27", "", { "dependencies": { "@better-auth/core": "1.3.27", "@better-auth/utils": "0.3.0", "@better-fetch/fetch": "1.1.18", "@noble/ciphers": "^2.0.0", "@noble/hashes": "^2.0.0", "@simplewebauthn/browser": "^13.1.2", "@simplewebauthn/server": "^13.1.2", "better-call": "1.0.19", "defu": "^6.1.4", "jose": "^6.1.0", "kysely": "^0.28.5", "nanostores": "^1.0.1", "zod": "^4.1.5" } }, "sha512-SwiGAJ7yU6dBhNg0NdV1h5M8T5sa7/AszZVc4vBfMDrLLmvUfbt9JoJ0uRUJUEdKRAAxTyl9yA+F3+GhtAD80w=="], - "better-call": ["better-call@1.0.13", "", { "dependencies": { "@better-fetch/fetch": "^1.1.4", "rou3": "^0.5.1", "set-cookie-parser": "^2.7.1", "uncrypto": "^0.1.3" } }, "sha512-auqdP9lnNOli9tKpZIiv0nEIwmmyaD/RotM3Mucql+Ef88etoZi/t7Ph5LjlmZt/hiSahhNTt6YVnx6++rziXA=="], + "better-call": ["better-call@1.0.19", "", { "dependencies": { "@better-auth/utils": "^0.3.0", "@better-fetch/fetch": "^1.1.4", "rou3": "^0.5.1", "set-cookie-parser": "^2.7.1", "uncrypto": "^0.1.3" } }, "sha512-sI3GcA1SCVa3H+CDHl8W8qzhlrckwXOTKhqq3OOPXjgn5aTOMIqGY34zLY/pHA6tRRMjTUC3lz5Mi7EbDA24Kw=="], "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], @@ -1362,13 +1421,15 @@ "body-parser": ["body-parser@1.20.3", "", { "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], "browser-stdout": ["browser-stdout@1.3.1", "", {}, "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="], - "browserslist": ["browserslist@4.25.2", "", { "dependencies": { "caniuse-lite": "^1.0.30001733", "electron-to-chromium": "^1.5.199", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA=="], + "browserslist": ["browserslist@4.26.3", "", { "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w=="], "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], @@ -1376,9 +1437,9 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "bullmq": ["bullmq@5.58.0", "", { "dependencies": { "cron-parser": "^4.9.0", "ioredis": "^5.4.1", "msgpackr": "^1.11.2", "node-abort-controller": "^3.1.1", "semver": "^7.5.4", "tslib": "^2.0.0", "uuid": "^9.0.0" } }, "sha512-WIjvoSQ9jprId2gAZaPMQu3jaAkRCN8Wjj/pR39knwjULB7asB6XoSTqvnSbOsfyHMKln8el0MRvRJVY9VdmFA=="], + "bullmq": ["bullmq@5.61.0", "", { "dependencies": { "cron-parser": "^4.9.0", "ioredis": "^5.4.1", "msgpackr": "^1.11.2", "node-abort-controller": "^3.1.1", "semver": "^7.5.4", "tslib": "^2.0.0", "uuid": "^11.1.0" } }, "sha512-khaTjc1JnzaYFl4FrUtsSsqugAW/urRrcZ9Q0ZE+REAw8W+gkHFqxbGlutOu6q7j7n91wibVaaNlOUMdiEvoSQ=="], - "bun-types": ["bun-types@1.2.20", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-pxTnQYOrKvdOwyiyd/7sMt9yFOenN004Y6O4lCcCUoKVej48FS5cvTw9geRaEcB9TsDZaJKAxPTVvi8tFsVuXA=="], + "bun-types": ["bun-types@1.3.0", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-u8X0thhx+yJ0KmkxuEo9HAtdfgCBaM/aI9K90VQcQioAmkVp3SG3FkwWGibUFz3WdXAdcsqOcbU40lK7tbHdkQ=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -1388,17 +1449,19 @@ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + "camel-case": ["camel-case@4.1.2", "", { "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="], + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001735", "", {}, "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w=="], + "caniuse-lite": ["caniuse-lite@1.0.30001750", "", {}, "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], - "chai": ["chai@5.2.1", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A=="], + "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], "chai-http": ["chai-http@5.1.2", "", { "dependencies": { "@types/superagent": "^8.1.7", "charset": "^1.0.1", "cookiejar": "^2.1.4", "is-ip": "^5.0.1", "methods": "^1.1.2", "qs": "^6.12.1", "superagent": "^10.0.0" } }, "sha512-UFup7mUGkkjmi9bGA7F6vfp3lzGQZjtL//CEd+a4C+vlynSv756XHDUK8PoYk/UpTBBXqSghjQaJOUMUxJXNaA=="], - "chalk": ["chalk@5.6.0", "", {}, "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ=="], + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], @@ -1414,12 +1477,14 @@ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], - "chromium-bidi": ["chromium-bidi@7.3.1", "", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-i+BMGluhZZc4Jic9L1aHJBTfaopxmCqQxGklyMcqFx4fvF3nI4BJ3bCe1ad474nvYRIo/ZN/VrdA4eOaRZua4Q=="], + "chromium-bidi": ["chromium-bidi@9.1.0", "", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-rlUzQ4WzIAWdIbY/viPShhZU2n21CxDUgazXVbw4Hu1MwaeUSEksSeM6DqPgpRjCLXRk702AVRxJxoOz0dw4OA=="], "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], + "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], @@ -1442,14 +1507,10 @@ "cmdk": ["cmdk@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg=="], - "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], @@ -1462,7 +1523,7 @@ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "concurrently": ["concurrently@9.2.0", "", { "dependencies": { "chalk": "^4.1.2", "lodash": "^4.17.21", "rxjs": "^7.8.1", "shell-quote": "^1.8.1", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", "yargs": "^17.7.2" }, "bin": { "concurrently": "dist/bin/concurrently.js", "conc": "dist/bin/concurrently.js" } }, "sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ=="], + "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="], "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], @@ -1472,13 +1533,15 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "convex": ["convex@1.27.5", "", { "dependencies": { "esbuild": "0.25.4", "prettier": "^3.0.0" }, "peerDependencies": { "@auth0/auth0-react": "^2.0.1", "@clerk/clerk-react": "^4.12.8 || ^5.0.0", "react": "^18.0.0 || ^19.0.0-0 || ^19.0.0" }, "optionalPeers": ["@auth0/auth0-react", "@clerk/clerk-react", "react"], "bin": { "convex": "bin/main.js" } }, "sha512-6YU/AVPnoNdAaJABKBI9c5IqRSKsow/c4yo/ntaOWtd8Dff2P2zaImA/ougICfPgTuTvjKRbgkxk6lJhODzb4g=="], + "cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], "cookie-signature": ["cookie-signature@1.0.6", "", {}, "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="], "cookiejar": ["cookiejar@2.1.4", "", {}, "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="], - "core-js": ["core-js@3.45.0", "", {}, "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA=="], + "core-js": ["core-js@3.46.0", "", {}, "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA=="], "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], @@ -1494,8 +1557,12 @@ "css-jss": ["css-jss@10.10.0", "", { "dependencies": { "@babel/runtime": "^7.3.1", "jss": "^10.10.0", "jss-preset-default": "^10.10.0" } }, "sha512-YyMIS/LsSKEGXEaVJdjonWe18p4vXLo8CMA4FrW/kcaEyqdIGKCFXao31gbJddXEdIxSXFFURWrenBJPlKTgAA=="], + "css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], + "css-vendor": ["css-vendor@2.0.8", "", { "dependencies": { "@babel/runtime": "^7.8.3", "is-in-browser": "^1.0.2" } }, "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ=="], + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], "csv-parse": ["csv-parse@5.6.0", "", {}, "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q=="], @@ -1534,7 +1601,7 @@ "debounce": ["debounce@2.2.0", "", {}, "sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw=="], - "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decamelize": ["decamelize@4.0.0", "", {}, "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="], @@ -1542,6 +1609,8 @@ "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], + "decode-uri-component": ["decode-uri-component@0.4.1", "", {}, "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ=="], + "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], @@ -1568,13 +1637,13 @@ "detect-content-type": ["detect-content-type@1.2.0", "", {}, "sha512-YCBxuqJLY9rMxV44Ict2kNgjYFN3v1dnsn6sJvd6sUwwU1TWP3D+K2dr/S9AF/fio2/RsAKYdRiEOtNoRbmiag=="], - "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "devtools-protocol": ["devtools-protocol@0.0.1475386", "", {}, "sha512-RQ809ykTfJ+dgj9bftdeL2vRVxASAuGU+I9LEx9Ij5TXU5HrgAQVmzi72VA+mkzscE12uzlRv5/tWWv9R9J1SA=="], + "devtools-protocol": ["devtools-protocol@0.0.1508733", "", {}, "sha512-QJ1R5gtck6nDcdM+nlsaJXcelPEI7ZxSMw1ujHpO1c4+9l+Nue5qlebi9xO1Z2MGr92bFOQTW7/rrheh5hHxDg=="], "dezalgo": ["dezalgo@1.0.4", "", { "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig=="], @@ -1584,6 +1653,8 @@ "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + "dom-converter": ["dom-converter@0.2.0", "", { "dependencies": { "utila": "~0.4" } }, "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="], + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], @@ -1592,9 +1663,11 @@ "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "drizzle-kit": ["drizzle-kit@0.31.4", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA=="], + "drizzle-kit": ["drizzle-kit@0.31.5", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg=="], "drizzle-orm": ["drizzle-orm@0.43.1", "", { "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.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-dUcDaZtE/zN4RV/xqGrVSMpnEczxd5cIaoDeor7Zst9wOe/HzC/7eAaulywWGYXdDEc9oBPMjayVEDg0ziTLJA=="], @@ -1606,7 +1679,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "electron-to-chromium": ["electron-to-chromium@1.5.203", "", {}, "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g=="], + "electron-to-chromium": ["electron-to-chromium@1.5.235", "", {}, "sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ=="], "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1630,11 +1703,9 @@ "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - "es-toolkit": ["es-toolkit@1.39.10", "", {}, "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w=="], + "es-toolkit": ["es-toolkit@1.40.0", "", {}, "sha512-8o6w0KFmU0CiIl0/Q/BCEOabF2IJaELM1T2PWj6e8KqzHv1gdx+7JtFnDwOx1kJH/isJ5NwlDG1nCr1HrRF94Q=="], - "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], - - "esbuild": ["esbuild@0.25.9", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.9", "@esbuild/android-arm": "0.25.9", "@esbuild/android-arm64": "0.25.9", "@esbuild/android-x64": "0.25.9", "@esbuild/darwin-arm64": "0.25.9", "@esbuild/darwin-x64": "0.25.9", "@esbuild/freebsd-arm64": "0.25.9", "@esbuild/freebsd-x64": "0.25.9", "@esbuild/linux-arm": "0.25.9", "@esbuild/linux-arm64": "0.25.9", "@esbuild/linux-ia32": "0.25.9", "@esbuild/linux-loong64": "0.25.9", "@esbuild/linux-mips64el": "0.25.9", "@esbuild/linux-ppc64": "0.25.9", "@esbuild/linux-riscv64": "0.25.9", "@esbuild/linux-s390x": "0.25.9", "@esbuild/linux-x64": "0.25.9", "@esbuild/netbsd-arm64": "0.25.9", "@esbuild/netbsd-x64": "0.25.9", "@esbuild/openbsd-arm64": "0.25.9", "@esbuild/openbsd-x64": "0.25.9", "@esbuild/openharmony-arm64": "0.25.9", "@esbuild/sunos-x64": "0.25.9", "@esbuild/win32-arm64": "0.25.9", "@esbuild/win32-ia32": "0.25.9", "@esbuild/win32-x64": "0.25.9" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g=="], + "esbuild": ["esbuild@0.25.10", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.10", "@esbuild/android-arm": "0.25.10", "@esbuild/android-arm64": "0.25.10", "@esbuild/android-x64": "0.25.10", "@esbuild/darwin-arm64": "0.25.10", "@esbuild/darwin-x64": "0.25.10", "@esbuild/freebsd-arm64": "0.25.10", "@esbuild/freebsd-x64": "0.25.10", "@esbuild/linux-arm": "0.25.10", "@esbuild/linux-arm64": "0.25.10", "@esbuild/linux-ia32": "0.25.10", "@esbuild/linux-loong64": "0.25.10", "@esbuild/linux-mips64el": "0.25.10", "@esbuild/linux-ppc64": "0.25.10", "@esbuild/linux-riscv64": "0.25.10", "@esbuild/linux-s390x": "0.25.10", "@esbuild/linux-x64": "0.25.10", "@esbuild/netbsd-arm64": "0.25.10", "@esbuild/netbsd-x64": "0.25.10", "@esbuild/openbsd-arm64": "0.25.10", "@esbuild/openbsd-x64": "0.25.10", "@esbuild/openharmony-arm64": "0.25.10", "@esbuild/sunos-x64": "0.25.10", "@esbuild/win32-arm64": "0.25.10", "@esbuild/win32-ia32": "0.25.10", "@esbuild/win32-x64": "0.25.10" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ=="], "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], @@ -1646,11 +1717,11 @@ "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], - "eslint": ["eslint@9.33.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.33.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA=="], + "eslint": ["eslint@9.37.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.4.0", "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.37.0", "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig=="], "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], - "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.20", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA=="], + "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.23", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-G4j+rv0NmbIR45kni5xJOrYvCtyD3/7LjpVH8MPPcudXDcNu8gv+4ATTDXTtbRR8rTCM5HxECvCSsRmxKnWDsA=="], "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], @@ -1676,6 +1747,8 @@ "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="], + "express": ["express@4.21.2", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.19.0", "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA=="], "express-rate-limit": ["express-rate-limit@7.5.1", "", { "peerDependencies": { "express": ">= 4.11" } }, "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw=="], @@ -1696,8 +1769,6 @@ "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], - "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], "fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="], @@ -1722,6 +1793,8 @@ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "filter-obj": ["filter-obj@5.1.0", "", {}, "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng=="], + "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], @@ -1748,7 +1821,7 @@ "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], - "framer-motion": ["framer-motion@12.23.12", "", { "dependencies": { "motion-dom": "^12.23.12", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg=="], + "framer-motion": ["framer-motion@12.23.24", "", { "dependencies": { "motion-dom": "^12.23.23", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w=="], "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], @@ -1766,7 +1839,7 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "get-east-asian-width": ["get-east-asian-width@1.3.0", "", {}, "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ=="], + "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], @@ -1776,7 +1849,7 @@ "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], - "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], + "get-tsconfig": ["get-tsconfig@4.12.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw=="], "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="], @@ -1790,7 +1863,7 @@ "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "goober": ["goober@2.1.16", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g=="], + "goober": ["goober@2.1.18", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw=="], "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], @@ -1818,12 +1891,16 @@ "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], - "hono": ["hono@4.9.9", "", {}, "sha512-Hxw4wT6zjJGZJdkJzAx9PyBdf7ZpxaTSA0NfxqjLghwMrLBX8p33hJBzoETRakF3UJu6OdNQBZAlNSkGqKFukw=="], + "hono": ["hono@4.9.12", "", {}, "sha512-SrTC0YxqPwnN7yKa8gg/giLyQ2pILCKoideIHbYbFQlWZjYt68D2A4Ae1hehO/aDQ6RmTcpqOV/O2yBtMzx/VQ=="], + + "html-minifier-terser": ["html-minifier-terser@6.1.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw=="], "html-to-text": ["html-to-text@9.0.5", "", { "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", "dom-serializer": "^2.0.0", "htmlparser2": "^8.0.2", "selderee": "^0.11.0" } }, "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg=="], "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + "html-webpack-plugin": ["html-webpack-plugin@5.6.4", "", { "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw=="], + "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], @@ -1842,21 +1919,17 @@ "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "iframe-resizer": ["iframe-resizer@4.4.5", "", {}, "sha512-U8bCywf/Gh07O69RXo6dXAzTtODQrxaHGHRI7Nt4ipXsuq6EMxVsOP/jjaP43YtXz/ibESS0uSVDN3sOGCzSmw=="], - - "iframe-resizer-react": ["iframe-resizer-react@1.1.1", "", { "dependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "iframe-resizer": "^4.4.4", "warning": "^4.0.3" }, "peerDependencies": { "prop-types": "^15.7.2", "react": "^16.13.1 || ^18.0.0", "react-dom": "^16.13.1 || ^18.0.0" } }, "sha512-s0EUUekv58FGbuWBanSCVsEKmmyBdWmdwQ8qx8g04jlNlCR7pNuDz7fw7zo5T5sdssl6yRMDl97NBdwD1gfDyQ=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], - "immer": ["immer@10.1.1", "", {}, "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw=="], + "immer": ["immer@10.1.3", "", {}, "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw=="], "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "import-in-the-middle": ["import-in-the-middle@1.14.2", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw=="], + "import-in-the-middle": ["import-in-the-middle@1.15.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA=="], - "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], @@ -1864,11 +1937,11 @@ "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], - "inquirer": ["inquirer@12.9.3", "", { "dependencies": { "@inquirer/core": "^10.1.15", "@inquirer/prompts": "^7.8.3", "@inquirer/type": "^3.0.8", "ansi-escapes": "^4.3.2", "mute-stream": "^2.0.0", "run-async": "^4.0.5", "rxjs": "^7.8.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Hpw2JWdrYY8xJSmhU05Idd5FPshQ1CZErH00WO+FK6fKxkBeqj+E+yFXSlERZLKtzWeQYFCMfl8U2TK9SvVbtQ=="], + "inquirer": ["inquirer@12.10.0", "", { "dependencies": { "@inquirer/ansi": "^1.0.1", "@inquirer/core": "^10.3.0", "@inquirer/prompts": "^7.9.0", "@inquirer/type": "^3.0.9", "mute-stream": "^2.0.0", "run-async": "^4.0.5", "rxjs": "^7.8.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-K/epfEnDBZj2Q3NMDcgXWZye3nhSPeoJnOh8lcKWrldw54UEZfS4EmAMsAsmVbl7qKi+vjAsy39Sz4fbgRMewg=="], "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], - "ioredis": ["ioredis@5.7.0", "", { "dependencies": { "@ioredis/commands": "^1.3.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g=="], + "ioredis": ["ioredis@5.8.1", "", { "dependencies": { "@ioredis/commands": "1.4.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-Qho8TgIamqEPdgiMadJwzRMW3TudIg6vpg4YONokGDudy4eqRIJtDbVX72pfLBcWxvbn3qm/40TyGUObdW4tLQ=="], "ip-address": ["ip-address@10.0.1", "", {}, "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA=="], @@ -1876,8 +1949,6 @@ "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], @@ -1898,6 +1969,8 @@ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], "is-regexp": ["is-regexp@3.1.0", "", {}, "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA=="], @@ -1912,9 +1985,9 @@ "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], - "jiti": ["jiti@2.5.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "jose": ["jose@6.1.0", "", {}, "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA=="], "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], @@ -1974,7 +2047,7 @@ "ksuid": ["ksuid@3.0.0", "", { "dependencies": { "base-convert-int-array": "^1.0.1" } }, "sha512-81CkBGn/06ZVAjGvFZi6fVG8VcPeMH0JpJ4V1Z9VwrMMaGIeAjY4jrVdrIcxhL9I2ZUU6t5uiyswcmkk+KZegA=="], - "kysely": ["kysely@0.28.5", "", {}, "sha512-rlB0I/c6FBDWPcQoDtkxi9zIvpmnV5xoIalfCMSMCa7nuA6VGA3F54TW9mEgX4DVf10sXAWCF5fDbamI/5ZpKA=="], + "kysely": ["kysely@0.28.8", "", {}, "sha512-QUOgl5ZrS9IRuhq5FvOKFSsD/3+IA6MLE81/bOOTRA/YQpKDza2sFdN5g6JCB9BOpqMJDGefLCQ9F12hRS13TA=="], "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], @@ -2032,7 +2105,9 @@ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "loupe": ["loupe@3.2.0", "", {}, "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw=="], + "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + + "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -2040,7 +2115,7 @@ "luxon": ["luxon@3.5.0", "", {}, "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ=="], - "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + "magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="], "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], @@ -2090,19 +2165,17 @@ "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], + "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], - - "mocha": ["mocha@11.7.1", "", { "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", "debug": "^4.3.5", "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", "ms": "^2.1.3", "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" }, "bin": { "mocha": "bin/mocha.js", "_mocha": "bin/_mocha" } }, "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A=="], + "mocha": ["mocha@11.7.4", "", { "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", "debug": "^4.3.5", "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", "ms": "^2.1.3", "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" }, "bin": { "mocha": "bin/mocha.js", "_mocha": "bin/_mocha" } }, "sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w=="], "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="], - "motion": ["motion@12.23.12", "", { "dependencies": { "framer-motion": "^12.23.12", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng=="], + "motion": ["motion@12.23.24", "", { "dependencies": { "framer-motion": "^12.23.24", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw=="], - "motion-dom": ["motion-dom@12.23.12", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw=="], + "motion-dom": ["motion-dom@12.23.23", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA=="], "motion-utils": ["motion-utils@12.23.6", "", {}, "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ=="], @@ -2116,9 +2189,9 @@ "mylas": ["mylas@2.1.13", "", {}, "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg=="], - "nanoid": ["nanoid@5.1.5", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="], + "nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], - "nanostores": ["nanostores@0.11.4", "", {}, "sha512-k1oiVNN4hDK8NcNERSZLQiMfRzEGtfnvZvdBvey3SQbgn8Dcrk0h1I6vpxApjb10PFUflZrgJ2WEZyJQ+5v7YQ=="], + "nanostores": ["nanostores@1.0.1", "", {}, "sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw=="], "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], @@ -2126,10 +2199,12 @@ "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], - "next": ["next@15.4.6", "", { "dependencies": { "@next/env": "15.4.6", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.4.6", "@next/swc-darwin-x64": "15.4.6", "@next/swc-linux-arm64-gnu": "15.4.6", "@next/swc-linux-arm64-musl": "15.4.6", "@next/swc-linux-x64-gnu": "15.4.6", "@next/swc-linux-x64-musl": "15.4.6", "@next/swc-win32-arm64-msvc": "15.4.6", "@next/swc-win32-x64-msvc": "15.4.6", "sharp": "^0.34.3" }, "peerDependencies": { "@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" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-us++E/Q80/8+UekzB3SAGs71AlLDsadpFMXVNM/uQ0BMwsh9m3mr0UNQIfjKed8vpWXsASe+Qifrnu1oLIcKEQ=="], + "next": ["next@15.5.5", "", { "dependencies": { "@next/env": "15.5.5", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.5", "@next/swc-darwin-x64": "15.5.5", "@next/swc-linux-arm64-gnu": "15.5.5", "@next/swc-linux-arm64-musl": "15.5.5", "@next/swc-linux-x64-gnu": "15.5.5", "@next/swc-linux-x64-musl": "15.5.5", "@next/swc-win32-arm64-msvc": "15.5.5", "@next/swc-win32-x64-msvc": "15.5.5", "sharp": "^0.34.3" }, "peerDependencies": { "@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" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-OQVdBPtpBfq7HxFN0kOVb7rXXOSIkt5lTzDJDGRBcOyVvNRIWFauMqi1gIHd1pszq1542vMOGY0HP4CaiALfkA=="], "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], + "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], + "node-abort-controller": ["node-abort-controller@3.1.1", "", {}, "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="], "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], @@ -2138,13 +2213,15 @@ "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], - "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + "node-releases": ["node-releases@2.0.23", "", {}, "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg=="], "nodemon": ["nodemon@3.1.10", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^7.5.3", "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - "nuqs": ["nuqs@2.4.3", "", { "dependencies": { "mitt": "^3.0.1" }, "peerDependencies": { "@remix-run/react": ">=2", "next": ">=14.2.0", "react": ">=18.2.0 || ^19.0.0-0", "react-router": "^6 || ^7", "react-router-dom": "^6 || ^7" }, "optionalPeers": ["@remix-run/react", "next", "react-router", "react-router-dom"] }, "sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q=="], + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "nuqs": ["nuqs@2.7.1", "", { "dependencies": { "@standard-schema/spec": "1.0.0" }, "peerDependencies": { "@remix-run/react": ">=2", "@tanstack/react-router": "^1", "next": ">=14.2.0", "react": ">=18.2.0 || ^19.0.0-0", "react-router": "^6 || ^7", "react-router-dom": "^6 || ^7" }, "optionalPeers": ["@remix-run/react", "@tanstack/react-router", "next", "react-router", "react-router-dom"] }, "sha512-3WDgrOZWat0QyOheyljTlXK4TGFh1JKSLvXMgusMDcTyMJXe1xL8+q3zuQ6ke1vyeGnpJwztlZl2aDkMW2eIUg=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -2176,12 +2253,16 @@ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], "parseley": ["parseley@0.12.1", "", { "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" } }, "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw=="], "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -2220,11 +2301,11 @@ "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "pino": ["pino@9.9.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-zxsRIQG9HzG+jEljmvmZupOMDUQ0Jpj0yAgE28jQvvrdYTlEaiGwelJpdndMl/MBuRr70heIj83QyqJUWaU8mQ=="], + "pino": ["pino@9.13.1", "", { "dependencies": { "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "slow-redact": "^0.3.0", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-Szuj+ViDTjKPQYiKumGmEn3frdl+ZPSdosHyt9SnUevFosOkMY2b7ipxlEctNKPmMD/VibeBI+ZcZCJK+4DPuw=="], "pino-abstract-transport": ["pino-abstract-transport@1.2.0", "", { "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q=="], - "pino-pretty": ["pino-pretty@13.1.1", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.2", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", "strip-json-comments": "^5.0.2" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA=="], + "pino-pretty": ["pino-pretty@13.1.2", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.2", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", "strip-json-comments": "^5.0.2" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-3cN0tCakkT4f3zo9RXDIhy6GTvtYD6bK4CRBLN9j3E/ePqN1tugAXD5rGVfoChW6s0hiek+eyYlLNqc/BG7vBQ=="], "pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], @@ -2242,16 +2323,18 @@ "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - "posthog-js": ["posthog-js@1.260.1", "", { "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.4" }, "peerDependencies": { "@rrweb/types": "2.0.0-alpha.17", "rrweb-snapshot": "2.0.0-alpha.17" }, "optionalPeers": ["@rrweb/types", "rrweb-snapshot"] }, "sha512-DD8ZSRpdScacMqtqUIvMFme8lmOWkOvExG8VvjONE7Cm3xpRH5xXpfrwMJE4bayTGWKMx4ij6SfphK6dm/o2ug=="], + "posthog-js": ["posthog-js@1.275.3", "", { "dependencies": { "@posthog/core": "1.3.0", "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.4" }, "peerDependencies": { "@rrweb/types": "2.0.0-alpha.17", "rrweb-snapshot": "2.0.0-alpha.17" }, "optionalPeers": ["@rrweb/types", "rrweb-snapshot"] }, "sha512-LitwVprl0Q8p0fN4O4ThvlOuO6r+TBzLfkGbSyI5tR/YhlWzX3yFf4KKHPXJgxge99sxKa0fuVKNzcspYsDzcg=="], "posthog-node": ["posthog-node@4.18.0", "", { "dependencies": { "axios": "^1.8.2" } }, "sha512-XROs1h+DNatgKh/AlIlCtDxWzwrKdYDb2mOs58n4yN8BkGN9ewqeQwG5ApS4/IzwCb7HPttUkOVulkYatd2PIw=="], - "preact": ["preact@10.27.0", "", {}, "sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw=="], + "preact": ["preact@10.27.2", "", {}, "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], + "pretty-error": ["pretty-error@4.0.0", "", { "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw=="], + "prism-themes": ["prism-themes@1.9.0", "", {}, "sha512-tX2AYsehKDw1EORwBps+WhBFKc2kxfoFpQAjxBndbZKr4fRmMkv47XN0BghC/K1qwodB1otbe4oF23vUTFDokw=="], "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], @@ -2280,7 +2363,7 @@ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "puppeteer-core": ["puppeteer-core@24.16.2", "", { "dependencies": { "@puppeteer/browsers": "2.10.6", "chromium-bidi": "7.3.1", "debug": "^4.4.1", "devtools-protocol": "0.0.1475386", "typed-query-selector": "^2.12.0", "ws": "^8.18.3" } }, "sha512-areKSSQzpoHa5nCk3uD/o504yjrW5ws0N6jZfdFZ3a4H+Q7NBgvuDydjN5P87jN4Rj+eIpLcK3ELOThTtYuuxg=="], + "puppeteer-core": ["puppeteer-core@24.24.1", "", { "dependencies": { "@puppeteer/browsers": "2.10.12", "chromium-bidi": "9.1.0", "debug": "^4.4.3", "devtools-protocol": "0.0.1508733", "typed-query-selector": "^2.12.0", "webdriver-bidi-protocol": "0.3.7", "ws": "^8.18.3" } }, "sha512-4R9/hCjmyUBbQqjrCa+y4Pzgl3LneLfqB+Whh2JujA5Wzg+prnO60GxDPjAJmM+uirYxDx/8jIm0hGu8yDTyiA=="], "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], @@ -2288,7 +2371,7 @@ "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], - "querystringify": ["querystringify@2.2.0", "", {}, "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="], + "query-string": ["query-string@9.3.1", "", { "dependencies": { "decode-uri-component": "^0.4.1", "filter-obj": "^5.1.0", "split-on-first": "^3.0.0" } }, "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw=="], "queue-lit": ["queue-lit@1.5.2", "", {}, "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw=="], @@ -2304,6 +2387,8 @@ "react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], + "react-cmdk": ["react-cmdk@1.3.9", "", { "dependencies": { "@headlessui/react": "^1.6.4", "@heroicons/react": "^2.0.13", "html-webpack-plugin": "^5.5.0" }, "peerDependencies": { "react": "^16.x || ^17.x || ^18.x", "react-dom": "^16.x || ^17.x || ^18.x" } }, "sha512-MSVmAQZ9iqY7hO3r++XP6yWSHzGfMDGMvY3qlDT8k5RiWoRFwO1CGPlsWzhvcUbPilErzsMKK7uB4McEcX4B6g=="], + "react-confetti-explosion": ["react-confetti-explosion@2.1.2", "", { "dependencies": { "lodash": "^4.17.21", "react-jss": "^10.9.2" }, "peerDependencies": { "react": "^18.x", "react-dom": "^18.x" } }, "sha512-4UzDFBajAGXmF9TSJoRMO2QOBCIXc66idTxH8l7Mkul48HLGtk+tMzK9HYDYsy7Zmw5sEGchi2fbn4AJUuLrZw=="], "react-day-picker": ["react-day-picker@8.10.1", "", { "peerDependencies": { "date-fns": "^2.28.0 || ^3.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA=="], @@ -2334,9 +2419,9 @@ "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - "react-router": ["react-router@7.8.1", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-5cy/M8DHcG51/KUIka1nfZ2QeylS4PJRs6TT8I4PF5axVsI5JUxp0hC0NZ/AEEj8Vw7xsEoD7L/6FY+zoYaOGA=="], + "react-router": ["react-router@7.9.4", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA=="], - "react-router-dom": ["react-router-dom@7.8.1", "", { "dependencies": { "react-router": "7.8.1" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-NkgBCF3sVgCiAWIlSt89GR2PLaksMpoo3HDCorpRfnCEfdtRPLiuTf+CNXvqZMI5SJLZCLpVCvcZrTdtGW64xQ=="], + "react-router-dom": ["react-router-dom@7.9.4", "", { "dependencies": { "react-router": "7.9.4" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-f30P6bIkmYvnHHa5Gcu65deIXoA2+r3Eb6PJIAddvsT9aGlchMatJ51GgpU470aSqRRbFX22T70yQNUGuW3DfA=="], "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], @@ -2348,7 +2433,7 @@ "recaseai": ["recaseai@0.0.37", "", { "dependencies": { "@anthropic-ai/sdk": "^0.32.1", "@supabase/supabase-js": "^2.47.2", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/node": "^22.10.1", "async-listen": "^3.0.1", "axios": "^1.7.9", "commander": "^12.1.0", "cors": "^2.8.5", "dotenv": "^16.4.7", "express": "^4.21.2", "figures": "^6.1.0", "inquirer": "^12.1.0", "ksuid": "^3.0.0", "nanoid": "^5.0.9", "openai": "^4.76.0", "ora": "^8.1.1", "picocolors": "^1.1.1", "pino": "^9.5.0", "tsx": "^4.19.2", "typescript": "^5.7.2" }, "bin": { "recase": "dist/cli.js" } }, "sha512-cKVMWTGBnGtm8K+uD2vfMXOzxdHj1U3++vvTePpOoZABI/SY/jjDpW997vM5xeDnzz7Vk/qqVkLQUQ/ZMDXpsQ=="], - "recharts": ["recharts@3.1.2", "", { "dependencies": { "@reduxjs/toolkit": "1.x.x || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g=="], + "recharts": ["recharts@3.2.1", "", { "dependencies": { "@reduxjs/toolkit": "1.x.x || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-0JKwHRiFZdmLq/6nmilxEZl3pqb4T+aKkOkOi/ZISRZwfBhVMgInxzlYU9D4KnCH3KINScLy68m/OvMXoYGZUw=="], "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], @@ -2358,12 +2443,16 @@ "redux-thunk": ["redux-thunk@3.1.0", "", { "peerDependencies": { "redux": "^5.0.0" } }, "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw=="], + "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], + + "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], + + "renderkid": ["renderkid@3.0.0", "", { "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" } }, "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "require-in-the-middle": ["require-in-the-middle@7.5.2", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ=="], - "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], - "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], "resend": ["resend@4.8.0", "", { "dependencies": { "@react-email/render": "1.1.2" } }, "sha512-R8eBOFQDO6dzRTDmaMEdpqrkmgSjPpVXt4nGfWsZdYOet0kqra0xgbvTES6HmCriZEXbmGk3e0DiGIaLFTFSHA=="], @@ -2378,7 +2467,7 @@ "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rollup": ["rollup@4.46.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.46.2", "@rollup/rollup-android-arm64": "4.46.2", "@rollup/rollup-darwin-arm64": "4.46.2", "@rollup/rollup-darwin-x64": "4.46.2", "@rollup/rollup-freebsd-arm64": "4.46.2", "@rollup/rollup-freebsd-x64": "4.46.2", "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", "@rollup/rollup-linux-arm-musleabihf": "4.46.2", "@rollup/rollup-linux-arm64-gnu": "4.46.2", "@rollup/rollup-linux-arm64-musl": "4.46.2", "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", "@rollup/rollup-linux-ppc64-gnu": "4.46.2", "@rollup/rollup-linux-riscv64-gnu": "4.46.2", "@rollup/rollup-linux-riscv64-musl": "4.46.2", "@rollup/rollup-linux-s390x-gnu": "4.46.2", "@rollup/rollup-linux-x64-gnu": "4.46.2", "@rollup/rollup-linux-x64-musl": "4.46.2", "@rollup/rollup-win32-arm64-msvc": "4.46.2", "@rollup/rollup-win32-ia32-msvc": "4.46.2", "@rollup/rollup-win32-x64-msvc": "4.46.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg=="], + "rollup": ["rollup@4.52.4", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.4", "@rollup/rollup-android-arm64": "4.52.4", "@rollup/rollup-darwin-arm64": "4.52.4", "@rollup/rollup-darwin-x64": "4.52.4", "@rollup/rollup-freebsd-arm64": "4.52.4", "@rollup/rollup-freebsd-x64": "4.52.4", "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", "@rollup/rollup-linux-arm-musleabihf": "4.52.4", "@rollup/rollup-linux-arm64-gnu": "4.52.4", "@rollup/rollup-linux-arm64-musl": "4.52.4", "@rollup/rollup-linux-loong64-gnu": "4.52.4", "@rollup/rollup-linux-ppc64-gnu": "4.52.4", "@rollup/rollup-linux-riscv64-gnu": "4.52.4", "@rollup/rollup-linux-riscv64-musl": "4.52.4", "@rollup/rollup-linux-s390x-gnu": "4.52.4", "@rollup/rollup-linux-x64-gnu": "4.52.4", "@rollup/rollup-linux-x64-musl": "4.52.4", "@rollup/rollup-openharmony-arm64": "4.52.4", "@rollup/rollup-win32-arm64-msvc": "4.52.4", "@rollup/rollup-win32-ia32-msvc": "4.52.4", "@rollup/rollup-win32-x64-gnu": "4.52.4", "@rollup/rollup-win32-x64-msvc": "4.52.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ=="], "rou3": ["rou3@0.6.3", "", {}, "sha512-1HSG1ENTj7Kkm5muMnXuzzfdDOf7CFnbSYFA+H3Fp/rB9lOCxCPgy1jlZxTKyFoC5jJay8Mmc+VbPLYRjzYLrA=="], @@ -2396,11 +2485,11 @@ "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], - "secure-json-parse": ["secure-json-parse@4.0.0", "", {}, "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA=="], + "secure-json-parse": ["secure-json-parse@4.1.0", "", {}, "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA=="], "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], - "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], @@ -2416,7 +2505,7 @@ "shallow-equal": ["shallow-equal@1.2.1", "", {}, "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="], - "sharp": ["sharp@0.34.3", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.4", "semver": "^7.7.2" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.3", "@img/sharp-darwin-x64": "0.34.3", "@img/sharp-libvips-darwin-arm64": "1.2.0", "@img/sharp-libvips-darwin-x64": "1.2.0", "@img/sharp-libvips-linux-arm": "1.2.0", "@img/sharp-libvips-linux-arm64": "1.2.0", "@img/sharp-libvips-linux-ppc64": "1.2.0", "@img/sharp-libvips-linux-s390x": "1.2.0", "@img/sharp-libvips-linux-x64": "1.2.0", "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", "@img/sharp-libvips-linuxmusl-x64": "1.2.0", "@img/sharp-linux-arm": "0.34.3", "@img/sharp-linux-arm64": "0.34.3", "@img/sharp-linux-ppc64": "0.34.3", "@img/sharp-linux-s390x": "0.34.3", "@img/sharp-linux-x64": "0.34.3", "@img/sharp-linuxmusl-arm64": "0.34.3", "@img/sharp-linuxmusl-x64": "0.34.3", "@img/sharp-wasm32": "0.34.3", "@img/sharp-win32-arm64": "0.34.3", "@img/sharp-win32-ia32": "0.34.3", "@img/sharp-win32-x64": "0.34.3" } }, "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg=="], + "sharp": ["sharp@0.34.4", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.0", "semver": "^7.7.2" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.4", "@img/sharp-darwin-x64": "0.34.4", "@img/sharp-libvips-darwin-arm64": "1.2.3", "@img/sharp-libvips-darwin-x64": "1.2.3", "@img/sharp-libvips-linux-arm": "1.2.3", "@img/sharp-libvips-linux-arm64": "1.2.3", "@img/sharp-libvips-linux-ppc64": "1.2.3", "@img/sharp-libvips-linux-s390x": "1.2.3", "@img/sharp-libvips-linux-x64": "1.2.3", "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", "@img/sharp-libvips-linuxmusl-x64": "1.2.3", "@img/sharp-linux-arm": "0.34.4", "@img/sharp-linux-arm64": "0.34.4", "@img/sharp-linux-ppc64": "0.34.4", "@img/sharp-linux-s390x": "0.34.4", "@img/sharp-linux-x64": "0.34.4", "@img/sharp-linuxmusl-arm64": "0.34.4", "@img/sharp-linuxmusl-x64": "0.34.4", "@img/sharp-wasm32": "0.34.4", "@img/sharp-win32-arm64": "0.34.4", "@img/sharp-win32-ia32": "0.34.4", "@img/sharp-win32-x64": "0.34.4" } }, "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -2436,12 +2525,12 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], - "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + "slow-redact": ["slow-redact@0.3.2", "", {}, "sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw=="], + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], "socket.io": ["socket.io@4.8.1", "", { "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg=="], @@ -2466,6 +2555,8 @@ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + "split-on-first": ["split-on-first@3.0.0", "", {}, "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA=="], + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], "stack-trace": ["stack-trace@0.0.10", "", {}, "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="], @@ -2476,11 +2567,11 @@ "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], + "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], - "streamx": ["streamx@2.22.1", "", { "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA=="], + "streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="], "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -2490,7 +2581,7 @@ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2498,7 +2589,7 @@ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "stripe": ["stripe@18.4.0", "", { "dependencies": { "qs": "^6.11.0" }, "peerDependencies": { "@types/node": ">=12.x.x" }, "optionalPeers": ["@types/node"] }, "sha512-LKFeDnDYo4U/YzNgx2Lc9PT9XgKN0JNF1iQwZxgkS4lOw5NunWCnzyH5RhTlD3clIZnf54h7nyMWkS8VXPmtTQ=="], + "stripe": ["stripe@18.5.0", "", { "dependencies": { "qs": "^6.11.0" }, "peerDependencies": { "@types/node": ">=12.x.x" }, "optionalPeers": ["@types/node"] }, "sha512-Hp+wFiEQtCB0LlNgcFh5uVyKznpDjzyUZ+CNVEf+I3fhlYvh7rZruIg+jOwzJRCpy0ZTPMjlzm7J2/M2N6d+DA=="], "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], @@ -2510,9 +2601,9 @@ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "svix": ["svix@1.73.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "@types/node": "^22.7.5", "es6-promise": "^4.2.8", "fast-sha256": "^1.3.0", "url-parse": "^1.5.10", "uuid": "^10.0.0" } }, "sha512-EqaQcuJezFxJBWvtjfRhhDtVYcrYdzLiVqc2Naw3aGwd3FrCzqLUwLHEWo8LE2MoPEUGm/2xSt8b9W7NLQr25w=="], + "svix": ["svix@1.77.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0", "uuid": "^10.0.0" } }, "sha512-rqyvcFHMq1eGIjYwZEEsW5MkeLH4FRr23TuSsLLhH+/wilK4sjdJSYmALTke3kyMqab7lqWTc9jyKFw6o0/oKg=="], - "svix-react": ["svix-react@1.13.5", "", { "dependencies": { "iframe-resizer-react": "^1.1.0" }, "peerDependencies": { "react": ">=16", "react-dom": ">=16", "svix": ">=1.26.0" } }, "sha512-2UnpYFvr5yCZuvpaYA4F1A/zv8NGyXHas8xBeR6ozJ1MOLKvdf0anqNE3ZTyUr+ngr7Sd3tcQgiJt1vpFU35xQ=="], + "svix-react": ["svix-react@1.13.7", "", { "peerDependencies": { "react": ">=16", "react-dom": ">=16", "svix": ">=1.26.0" } }, "sha512-BtrGdn6CbHzK31Smf8J0qzqkzE62Tfm+vcxvH2Lc79khcIZ++S7PgP8B986THDzK0kVwtGGstvUlYDtgCjkcLg=="], "swr": ["swr@2.3.6", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw=="], @@ -2522,18 +2613,20 @@ "tailwind-scrollbar-hide": ["tailwind-scrollbar-hide@4.0.0", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || >= 4.0.0 || >= 4.0.0-beta.8 || >= 4.0.0-alpha.20" } }, "sha512-gobtvVcThB2Dxhy0EeYSS1RKQJ5baDFkamkhwBvzvevwX6L4XQfpZ3me9s25Ss1ecFVT5jPYJ50n+7xTBJG9WQ=="], - "tailwindcss": ["tailwindcss@4.1.12", "", {}, "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA=="], + "tailwindcss": ["tailwindcss@4.1.14", "", {}, "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA=="], "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], - "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="], + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], - "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], + "tar": ["tar@7.5.1", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g=="], - "tar-fs": ["tar-fs@3.1.0", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w=="], + "tar-fs": ["tar-fs@3.1.1", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg=="], "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + "terser": ["terser@5.44.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w=="], + "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], "theming": ["theming@3.3.0", "", { "dependencies": { "hoist-non-react-statics": "^3.3.0", "prop-types": "^15.5.8", "react-display-name": "^0.2.4", "tiny-warning": "^1.0.2" }, "peerDependencies": { "react": ">=16.3" } }, "sha512-u6l4qTJRDaWZsqa8JugaNt7Xd8PPl9+gonZaIe28vAhqgHMIG/DOyFPqiKN/gQLQYj05tHv+YQdNILL4zoiAVA=="], @@ -2548,7 +2641,7 @@ "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], - "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], @@ -2574,25 +2667,27 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tsx": ["tsx@4.20.4", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg=="], + "tsx": ["tsx@4.20.6", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg=="], + + "tsyringe": ["tsyringe@4.10.0", "", { "dependencies": { "tslib": "^1.9.3" } }, "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw=="], "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], "typed-query-selector": ["typed-query-selector@2.12.0", "", {}, "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="], - "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "typescript-eslint": ["typescript-eslint@8.39.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.39.1", "@typescript-eslint/parser": "8.39.1", "@typescript-eslint/typescript-estree": "8.39.1", "@typescript-eslint/utils": "8.39.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg=="], + "typescript-eslint": ["typescript-eslint@8.46.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.46.1", "@typescript-eslint/parser": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1", "@typescript-eslint/utils": "8.46.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA=="], "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], - "undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="], + "undici-types": ["undici-types@7.14.0", "", {}, "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA=="], "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], @@ -2610,19 +2705,19 @@ "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "url-parse": ["url-parse@1.5.10", "", { "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ=="], - "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "utila": ["utila@0.4.0", "", {}, "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA=="], + "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], @@ -2636,13 +2731,11 @@ "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], - "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], + "vite": ["vite@6.3.7", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-mQYaKepA0NGMBsz8Xktt3tJUG5ELE2iT7IJ+ssXI6nxVdE2sFc/d/6w/JByqMLvWg8hNKHpPgzjgOkrhpKFnrA=="], "vscode-oniguruma": ["vscode-oniguruma@2.0.1", "", {}, "sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ=="], - "vscode-textmate": ["vscode-textmate@9.2.0", "", {}, "sha512-rkvG4SraZQaPSN/5XjwKswdU0OP9MF28QjrYzUBbhb8QyG3ljB1Ky996m++jiI7KdiAP2CkBiQZd9pqEDTClqA=="], - - "warning": ["warning@4.0.3", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w=="], + "vscode-textmate": ["vscode-textmate@9.2.1", "", {}, "sha512-eXiUi2yYFv9bdvgrYtJynA7UemCEkpVNE50S9iBBA08LYG5t9+/TB+8IRS/YoYOubCez2OkSyZ1Q12eQMwzbrw=="], "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], @@ -2650,6 +2743,8 @@ "web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="], + "webdriver-bidi-protocol": ["webdriver-bidi-protocol@0.3.7", "", {}, "sha512-wIx5Gu/LLTeexxilpk8WxU2cpGAKlfbWRO5h+my6EMD1k5PYqM1qQO1MHUFf4f3KRnhBvpbZU7VkizAgeSEf7g=="], + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], @@ -2660,7 +2755,7 @@ "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "workerpool": ["workerpool@9.3.3", "", {}, "sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw=="], + "workerpool": ["workerpool@9.3.4", "", {}, "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg=="], "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], @@ -2690,47 +2785,49 @@ "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="], + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], - "yoctocolors-cjs": ["yoctocolors-cjs@2.1.2", "", {}, "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA=="], + "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "zod-openapi": ["zod-openapi@5.4.1", "", { "peerDependencies": { "zod": "^3.25.74 || ^4.0.0" } }, "sha512-deZCmezGJhi2urw7l8LWYCJEUaAb/Azo14c0wncCM7L7u7hz+1d4v3r4Uav7x4+zVkJj/ZYlCu6lwT0QQttW6g=="], + "zod-openapi": ["zod-openapi@5.4.3", "", { "peerDependencies": { "zod": "^3.25.74 || ^4.0.0" } }, "sha512-6kJ/gJdvHZtuxjYHoMtkl2PixCwRuZ/s79dVkEr7arHvZGXfx7Cvh53X3HfJ5h9FzGelXOXlnyjwfX0sKEPByw=="], "zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], + "zustand": ["zustand@5.0.8", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], "@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], "@ai-sdk/provider-utils/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.30", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q=="], + "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], - "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.123", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg=="], + "@autumn/server/@types/node": ["@types/node@22.18.10", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg=="], - "@autumn/server/@types/node": ["@types/node@22.17.2", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w=="], - - "@autumn/vite/@types/node": ["@types/node@22.17.2", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w=="], + "@autumn/vite/@types/node": ["@types/node@22.18.10", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg=="], "@autumn/vite/date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], "@autumn/vite/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], - "@axiomhq/js/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "@autumn/vite/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.30", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q=="], + "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@better-auth/core/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], - "@browserbasehq/sdk/@types/node": ["@types/node@18.19.123", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg=="], + "@better-auth/stripe/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], + + "@browserbasehq/sdk/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "@clerk/backend/cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], @@ -2746,9 +2843,7 @@ "@eslint/eslintrc/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "@fortawesome/fontawesome-svg-core/@fortawesome/fontawesome-common-types": ["@fortawesome/fontawesome-common-types@7.0.0", "", {}, "sha512-PGMrIYXLGA5K8RWy8zwBkd4vFi4z7ubxtet6Yn13Plf6krRTwPbdlCwlcfmoX0R7B4Z643QvrtHmdQ5fNtfFCg=="], - - "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], + "@fortawesome/fontawesome-svg-core/@fortawesome/fontawesome-common-types": ["@fortawesome/fontawesome-common-types@7.1.0", "", {}, "sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA=="], "@hyperdx/instrumentation-exception/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.51.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.51.1", "@types/shimmer": "^1.0.2", "import-in-the-middle": "1.7.4", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w=="], @@ -2770,17 +2865,19 @@ "@hyperdx/node-opentelemetry/ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], - "@inquirer/external-editor/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "@inquirer/external-editor/iconv-lite": ["iconv-lite@0.7.0", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.30", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q=="], + "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.30", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q=="], + "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@opentelemetry/auto-instrumentations-node/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@jridgewell/source-map/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@opentelemetry/auto-instrumentations-node/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/auto-instrumentations-node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2802,12 +2899,24 @@ "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ=="], + "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], + "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/exporter-metrics-otlp-http": ["@opentelemetry/exporter-metrics-otlp-http@0.57.2", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-exporter-base": "0.57.2", "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ttb9+4iKw04IMubjm3t0EZsYRNWr3kg44uUuzfo9CaccYlOh8cDooe4QObDUkvx9d5qQUrbEckhrWKfJnKhemA=="], "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.2", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag=="], @@ -2820,21 +2929,41 @@ "@opentelemetry/exporter-prometheus/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-prometheus/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-prometheus/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], + "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-trace-otlp-grpc/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + "@opentelemetry/exporter-zipkin/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], - "@opentelemetry/instrumentation-amqplib/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-zipkin/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + + "@opentelemetry/exporter-zipkin/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + + "@opentelemetry/instrumentation-amqplib/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], "@opentelemetry/instrumentation-aws-lambda/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-aws-sdk/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-aws-sdk/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-aws-sdk/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2844,7 +2973,7 @@ "@opentelemetry/instrumentation-cassandra-driver/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-connect/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-connect/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2854,15 +2983,15 @@ "@opentelemetry/instrumentation-dns/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-express/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-express/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-fastify/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-fastify/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-fastify/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-fs/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-fs/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2872,7 +3001,7 @@ "@opentelemetry/instrumentation-grpc/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-hapi/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-hapi/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2884,7 +3013,7 @@ "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-koa/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-koa/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2894,7 +3023,7 @@ "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-mongoose/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-mongoose/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2908,7 +3037,7 @@ "@opentelemetry/instrumentation-oracledb/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-pg/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-pg/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2916,7 +3045,7 @@ "@opentelemetry/instrumentation-pino/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw=="], - "@opentelemetry/instrumentation-pino/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-pino/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-pino/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2928,7 +3057,7 @@ "@opentelemetry/instrumentation-redis-4/@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.37.0", "", {}, "sha512-tJwgE6jt32bLs/9J6jhQRKU2EZnsD8qaO13aoFyXwF6s4LhpT7YFHf3Z03MqdILk6BA2BFUhoyh7k9fj9i032A=="], - "@opentelemetry/instrumentation-restify/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-restify/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-restify/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2938,7 +3067,7 @@ "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], - "@opentelemetry/instrumentation-undici/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/instrumentation-undici/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/instrumentation-undici/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], @@ -2954,27 +3083,33 @@ "@opentelemetry/otlp-transformer/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + "@opentelemetry/otlp-transformer/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ=="], + "@opentelemetry/otlp-transformer/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], + + "@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], + "@opentelemetry/propagator-b3/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], "@opentelemetry/propagator-jaeger/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], - "@opentelemetry/resource-detector-alibaba-cloud/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/resource-detector-alibaba-cloud/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], - "@opentelemetry/resource-detector-aws/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/resource-detector-aws/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], - "@opentelemetry/resource-detector-azure/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/resource-detector-azure/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], - "@opentelemetry/resource-detector-container/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/resource-detector-container/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], - "@opentelemetry/resource-detector-gcp/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/resource-detector-gcp/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], - "@opentelemetry/resources/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/resources/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "@opentelemetry/sdk-metrics/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/sdk-metrics/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], "@opentelemetry/sdk-node/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw=="], @@ -2986,13 +3121,23 @@ "@opentelemetry/sdk-node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA=="], + "@opentelemetry/sdk-node/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + "@opentelemetry/sdk-node/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.202.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ=="], - "@opentelemetry/sdk-trace-base/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/sdk-node/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], - "@opentelemetry/sdk-trace-node/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], - "@opentelemetry/sql-common/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.0.1", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.0.1", "@opentelemetry/core": "2.0.1", "@opentelemetry/sdk-trace-base": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA=="], + + "@opentelemetry/sdk-trace-base/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], + + "@opentelemetry/sdk-trace-node/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], + + "@opentelemetry/sql-common/@opentelemetry/core": ["@opentelemetry/core@2.1.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ=="], + + "@paralleldrive/cuid2/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], "@sentry/node/@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="], @@ -3046,19 +3191,19 @@ "@sentry/utils/@sentry/core": ["@sentry/core@8.55.0", "", {}, "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" }, "bundled": true }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" }, "bundled": true }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], - "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@types/bun/bun-types": ["bun-types@1.3.0", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-u8X0thhx+yJ0KmkxuEo9HAtdfgCBaM/aI9K90VQcQioAmkVp3SG3FkwWGibUFz3WdXAdcsqOcbU40lK7tbHdkQ=="], + "@types/serve-static/@types/send": ["@types/send@0.17.5", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], @@ -3066,7 +3211,9 @@ "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "autumn-js/zod": ["zod@4.0.17", "", {}, "sha512-1PHjlYRevNxxdy2JZ8JcNAw7rX8V9P1AKkP+x/xZfxB0K5FYfuV+Ug6P/6NVSR2jHQ+FzDDoDHS04nYUsOIyLQ=="], + "autumn-js/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], + + "better-auth/zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], "better-call/rou3": ["rou3@0.5.1", "", {}, "sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ=="], @@ -3078,16 +3225,20 @@ "body-parser/qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], - "chai-http/qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], - "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "cloudflare/@types/node": ["@types/node@18.19.123", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg=="], + "cloudflare/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "concurrently/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "convex/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + + "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + + "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + "engine.io/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "engine.io/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], @@ -3110,6 +3261,10 @@ "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + + "html-minifier-terser/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + "log-symbols/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -3122,7 +3277,7 @@ "nodemon/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - "openai/@types/node": ["@types/node@18.19.123", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg=="], + "openai/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "ora/is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], @@ -3150,18 +3305,20 @@ "react-router/cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], - "recaseai/@types/node": ["@types/node@22.17.2", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w=="], + "recaseai/@types/node": ["@types/node@22.18.10", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg=="], "recaseai/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "renderkid/htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="], + + "renderkid/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], "send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - "serialize-error/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], - "socket.io/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], "socket.io-adapter/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], @@ -3176,20 +3333,18 @@ "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "stripe/qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], - - "superagent/qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], - - "svix/@types/node": ["@types/node@22.17.2", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w=="], - "svix/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "ts-node/diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], "tsc-alias/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], "tsc-alias/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], + "tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + "type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], "winston-transport/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], @@ -3388,12 +3543,16 @@ "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "@opentelemetry/auto-instrumentations-node/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw=="], + "@opentelemetry/auto-instrumentations-node/@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], + "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/sdk-logs/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.202.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw=="], + "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], + "@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], "@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog=="], @@ -3478,6 +3637,8 @@ "@opentelemetry/sdk-logs/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-node/@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.0.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw=="], + "@sentry/node/@opentelemetry/instrumentation-ioredis/@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.36.2", "", {}, "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g=="], "@sentry/node/@opentelemetry/instrumentation-mysql/@types/mysql": ["@types/mysql@2.15.26", "", { "dependencies": { "@types/node": "*" } }, "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ=="], @@ -3504,6 +3665,58 @@ "concurrently/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "convex/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "convex/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "convex/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "convex/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "convex/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "convex/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "convex/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "convex/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "convex/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "convex/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "convex/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "convex/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "convex/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "convex/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "convex/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "convex/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "convex/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "convex/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "convex/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "convex/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "convex/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "convex/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "convex/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "convex/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "convex/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + + "css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + "eslint/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "eslint/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], @@ -3530,7 +3743,7 @@ "ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], - "ora/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + "ora/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "react-email/glob/jackspeak": ["jackspeak@4.1.1", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="], @@ -3542,14 +3755,20 @@ "recaseai/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + "renderkid/htmlparser2/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + + "renderkid/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + + "renderkid/htmlparser2/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + + "renderkid/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "svix/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - "tsc-alias/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "tsc-alias/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -3628,9 +3847,13 @@ "@opentelemetry/exporter-metrics-otlp-proto/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "nodemon/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "react-email/glob/path-scurry/lru-cache": ["lru-cache@11.1.0", "", {}, "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="], + "react-email/glob/path-scurry/lru-cache": ["lru-cache@11.2.2", "", {}, "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg=="], + + "renderkid/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "tsc-alias/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], diff --git a/example/.gitignore b/example/.gitignore deleted file mode 100644 index b00fc3832..000000000 --- a/example/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/versions - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* -# Remove .env.local from gitignore -!.env.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/example/README.md b/example/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/example/components.json b/example/components.json deleted file mode 100644 index 5bcedb314..000000000 --- a/example/components.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": true, - "tsx": true, - "tailwind": { - "config": "", - "css": "src/app/globals.css", - "baseColor": "neutral", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - }, - "iconLibrary": "lucide" -} diff --git a/example/eslint.config.mjs b/example/eslint.config.mjs deleted file mode 100644 index 33fcef556..000000000 --- a/example/eslint.config.mjs +++ /dev/null @@ -1,21 +0,0 @@ -import { dirname } from "path"; -import { fileURLToPath } from "url"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const compat = new FlatCompat({ - baseDirectory: __dirname, -}); - -const eslintConfig = [ - ...compat.extends("next/core-web-vitals", "next/typescript"), - { - rules: { - "@typescript-eslint/no-explicit-any": "off", - }, - }, -]; - -export default eslintConfig; diff --git a/example/next.config.ts b/example/next.config.ts deleted file mode 100644 index 7921f35d7..000000000 --- a/example/next.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { NextConfig } from "next"; - -const nextConfig: NextConfig = { - /* config options here */ -}; - -export default nextConfig; diff --git a/example/package-lock.json b/example/package-lock.json deleted file mode 100644 index 4d9023737..000000000 --- a/example/package-lock.json +++ /dev/null @@ -1,7021 +0,0 @@ -{ - "name": "nextjs-autumn-template", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nextjs-autumn-template", - "version": "0.1.0", - "dependencies": { - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-separator": "^1.1.2", - "@radix-ui/react-slot": "^1.1.2", - "@radix-ui/react-tooltip": "^1.1.8", - "autumn-js": "^0.0.7", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.483.0", - "next": "15.2.3", - "next-themes": "^0.4.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sonner": "^2.0.1", - "tailwind-merge": "^3.0.2", - "tw-animate-css": "^1.2.4" - }, - "devDependencies": { - "@eslint/eslintrc": "^3", - "@tailwindcss/postcss": "^4", - "@types/node": "^20", - "@types/react": "^18.3.18", - "@types/react-dom": "^18.3.5", - "eslint": "^9", - "eslint-config-next": "15.2.3", - "tailwindcss": "^4", - "typescript": "^5" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@better-auth/utils": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@better-auth/utils/-/utils-0.2.4.tgz", - "integrity": "sha512-ayiX87Xd5sCHEplAdeMgwkA0FgnXsEZBgDn890XHHwSWNqqRZDYOq3uj2Ei2leTv1I2KbG5HHn60Ah1i2JWZjQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "typescript": "^5.8.2", - "uncrypto": "^0.1.3" - } - }, - "node_modules/@better-fetch/fetch": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.1.18.tgz", - "integrity": "sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==", - "peer": true - }, - "node_modules/@clerk/backend": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-1.29.2.tgz", - "integrity": "sha512-mBvGyHjNj/t2X2y0Dn1V1EgsffhgNH1TJhB98k40dHxVxvosY9QdgCDMtru/Q1uZ7EXNOzYqzcB5FzAKCxFRZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@clerk/shared": "^3.7.3", - "@clerk/types": "^4.55.0", - "cookie": "1.0.2", - "snakecase-keys": "8.0.1", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=18.17.0" - }, - "peerDependencies": { - "svix": "^1.62.0" - }, - "peerDependenciesMeta": { - "svix": { - "optional": true - } - } - }, - "node_modules/@clerk/clerk-react": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-5.29.0.tgz", - "integrity": "sha512-S8wenyl5R/8YmUT1tElQZdmHe/MASM9JDJRKqhy0kVYXdKzjhuwTBgT+m3hXl3zdq/Gwi3hgv7pRnQWpQisutQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@clerk/shared": "^3.7.3", - "@clerk/types": "^4.55.0", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=18.17.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" - } - }, - "node_modules/@clerk/nextjs": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@clerk/nextjs/-/nextjs-6.17.0.tgz", - "integrity": "sha512-ik+UU/cKZgC5pafJJ9oct0BUHvytUqof+r1RjFb71xU1TM7EOeL5XYafVxh+hlgwsE4jmrw+FVYe4DXDcyPeTQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@clerk/backend": "^1.29.2", - "@clerk/clerk-react": "^5.29.0", - "@clerk/shared": "^3.7.3", - "@clerk/types": "^4.55.0", - "server-only": "0.0.1", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=18.17.0" - }, - "peerDependencies": { - "next": "^13.5.7 || ^14.2.25 || ^15.2.3", - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" - } - }, - "node_modules/@clerk/shared": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-3.7.3.tgz", - "integrity": "sha512-IMpz1bgZZzlxNLyFliE0GrA3NT1Wgidl2CBORkE2S/YUSCH4ge8EPg5tfQq9Ja6d17TfarkzEafrm1b/BHxSWg==", - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@clerk/types": "^4.55.0", - "dequal": "2.0.3", - "glob-to-regexp": "0.4.1", - "js-cookie": "3.0.5", - "std-env": "^3.8.1", - "swr": "^2.3.3" - }, - "engines": { - "node": ">=18.17.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@clerk/types": { - "version": "4.55.0", - "resolved": "https://registry.npmjs.org/@clerk/types/-/types-4.55.0.tgz", - "integrity": "sha512-MJc/zo9vJOq1mY37RbRjrZ883AKe9gitlYFyVB3R+ChKm0uBl2Mm8R2gkYy1GGKYvqBm27GJooWHxdcM1Yv1eQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "3.1.3" - }, - "engines": { - "node": ">=18.17.0" - } - }, - "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", - "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", - "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.12.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", - "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.9" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", - "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.9" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", - "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", - "license": "MIT" - }, - "node_modules/@hexagon/base64": { - "version": "1.1.28", - "resolved": "https://registry.npmjs.org/@hexagon/base64/-/base64-1.1.28.tgz", - "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==", - "license": "MIT", - "peer": true - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@levischuck/tiny-cbor": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@levischuck/tiny-cbor/-/tiny-cbor-0.2.11.tgz", - "integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==", - "license": "MIT", - "peer": true - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz", - "integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.3.1", - "@emnapi/runtime": "^1.3.1", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/@next/env": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz", - "integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.3.tgz", - "integrity": "sha512-eNSOIMJtjs+dp4Ms1tB1PPPJUQHP3uZK+OQ7iFY9qXpGO6ojT6imCL+KcUOqE/GXGidWbBZJzYdgAdPHqeCEPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "3.3.1" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.3.tgz", - "integrity": "sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.3.tgz", - "integrity": "sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.3.tgz", - "integrity": "sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.3.tgz", - "integrity": "sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.3.tgz", - "integrity": "sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.3.tgz", - "integrity": "sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.3.tgz", - "integrity": "sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.3.tgz", - "integrity": "sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@noble/ciphers": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.6.0.tgz", - "integrity": "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@peculiar/asn1-android": { - "version": "2.3.16", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-android/-/asn1-android-2.3.16.tgz", - "integrity": "sha512-a1viIv3bIahXNssrOIkXZIlI2ePpZaNmR30d4aBL99mu2rO+mT9D6zBsp7H6eROWGtmwv0Ionp5olJurIo09dw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.15", - "asn1js": "^3.0.5", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-ecc": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.3.15.tgz", - "integrity": "sha512-/HtR91dvgog7z/WhCVdxZJ/jitJuIu8iTqiyWVgRE9Ac5imt2sT/E4obqIVGKQw7PIy+X6i8lVBoT6wC73XUgA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "asn1js": "^3.0.5", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-rsa": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.3.15.tgz", - "integrity": "sha512-p6hsanvPhexRtYSOHihLvUUgrJ8y0FtOM97N5UEpC+VifFYyZa0iZ5cXjTkZoDwxJ/TTJ1IJo3HVTB2JJTpXvg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "asn1js": "^3.0.5", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz", - "integrity": "sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==", - "license": "MIT", - "peer": true, - "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.3.15.tgz", - "integrity": "sha512-0dK5xqTqSLaxv1FHXIcd4Q/BZNuopg+u1l23hT9rOmQ1g4dNtw0g/RnEi+TboB0gOwGtrWn269v27cMgchFIIg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.15", - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", - "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz", - "integrity": "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.0.2" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", - "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz", - "integrity": "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.2", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz", - "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", - "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz", - "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz", - "integrity": "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-rect": "1.1.0", - "@radix-ui/react-use-size": "1.1.0", - "@radix-ui/rect": "1.1.0" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz", - "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", - "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", - "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.1.2" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.2.tgz", - "integrity": "sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.0.2" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz", - "integrity": "sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.2", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.2" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", - "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", - "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz", - "integrity": "sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.0.2" - }, - "peerDependencies": { - "@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": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", - "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@simplewebauthn/browser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-13.1.0.tgz", - "integrity": "sha512-WuHZ/PYvyPJ9nxSzgHtOEjogBhwJfC8xzYkPC+rR/+8chl/ft4ngjiK8kSU5HtRJfczupyOh33b25TjYbvwAcg==", - "license": "MIT", - "peer": true - }, - "node_modules/@simplewebauthn/server": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@simplewebauthn/server/-/server-13.1.1.tgz", - "integrity": "sha512-1hsLpRHfSuMB9ee2aAdh0Htza/X3f4djhYISrggqGe3xopNjOcePiSDkDDoPzDYaaMCrbqGP1H2TYU7bgL9PmA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@hexagon/base64": "^1.1.27", - "@levischuck/tiny-cbor": "^0.2.2", - "@peculiar/asn1-android": "^2.3.10", - "@peculiar/asn1-ecc": "^2.3.8", - "@peculiar/asn1-rsa": "^2.3.8", - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/asn1-x509": "^2.3.8" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.14.tgz", - "integrity": "sha512-Ux9NbFkKWYE4rfUFz6M5JFLs/GEYP6ysxT8uSyPn6aTbh2K3xDE1zz++eVK4Vwx799fzMF8CID9sdHn4j/Ab8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "tailwindcss": "4.0.14" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.14.tgz", - "integrity": "sha512-M8VCNyO/NBi5vJ2cRcI9u8w7Si+i76a7o1vveoGtbbjpEYJZYiyc7f2VGps/DqawO56l3tImIbq2OT/533jcrA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.14", - "@tailwindcss/oxide-darwin-arm64": "4.0.14", - "@tailwindcss/oxide-darwin-x64": "4.0.14", - "@tailwindcss/oxide-freebsd-x64": "4.0.14", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.14", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.14", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.14", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.14", - "@tailwindcss/oxide-linux-x64-musl": "4.0.14", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.14", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.14" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.14.tgz", - "integrity": "sha512-VBFKC2rFyfJ5J8lRwjy6ub3rgpY186kAcYgiUr8ArR8BAZzMruyeKJ6mlsD22Zp5ZLcPW/FXMasJiJBx0WsdQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.14.tgz", - "integrity": "sha512-U3XOwLrefGr2YQZ9DXasDSNWGPZBCh8F62+AExBEDMLDfvLLgI/HDzY8Oq8p/JtqkAY38sWPOaNnRwEGKU5Zmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.14.tgz", - "integrity": "sha512-V5AjFuc3ndWGnOi1d379UsODb0TzAS2DYIP/lwEbfvafUaD2aNZIcbwJtYu2DQqO2+s/XBvDVA+w4yUyaewRwg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.14.tgz", - "integrity": "sha512-tXvtxbaZfcPfqBwW3f53lTcyH6EDT+1eT7yabwcfcxTs+8yTPqxsDUhrqe9MrnEzpNkd+R/QAjJapfd4tjWdLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.14.tgz", - "integrity": "sha512-cSeLNWWqIWeSTmBntQvyY2/2gcLX8rkPFfDDTQVF8qbRcRMVPLxBvFVJyfSAYRNch6ZyVH2GI6dtgALOBDpdNA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.14.tgz", - "integrity": "sha512-bwDWLBalXFMDItcSXzFk6y7QKvj6oFlaY9vM+agTlwFL1n1OhDHYLZkSjaYsh6KCeG0VB0r7H8PUJVOM1LRZyg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.14.tgz", - "integrity": "sha512-gVkJdnR/L6iIcGYXx64HGJRmlme2FGr/aZH0W6u4A3RgPMAb+6ELRLi+UBiH83RXBm9vwCfkIC/q8T51h8vUJQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.14.tgz", - "integrity": "sha512-EE+EQ+c6tTpzsg+LGO1uuusjXxYx0Q00JE5ubcIGfsogSKth8n8i2BcS2wYTQe4jXGs+BQs35l78BIPzgwLddw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.14.tgz", - "integrity": "sha512-KCCOzo+L6XPT0oUp2Jwh233ETRQ/F6cwUnMnR0FvMUCbkDAzHbcyOgpfuAtRa5HD0WbTbH4pVD+S0pn1EhNfbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.14.tgz", - "integrity": "sha512-AHObFiFL9lNYcm3tZSPqa/cHGpM5wOrNmM2uOMoKppp+0Hom5uuyRh0QkOp7jftsHZdrZUpmoz0Mp6vhh2XtUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.14.tgz", - "integrity": "sha512-rNXXMDJfCJLw/ZaFTOLOHoGULxyXfh2iXTGiChFiYTSgKBKQHIGEpV0yn5N25WGzJJ+VBnRjHzlmDqRV+d//oQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.14.tgz", - "integrity": "sha512-+uIR6KtKhla1XeIanF27KtrfYy+PX+R679v5LxbkmEZlhQe3g8rk+wKj7Xgt++rWGRuFLGMXY80Ek8JNn+kN/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.0.14", - "@tailwindcss/oxide": "4.0.14", - "lightningcss": "1.29.2", - "postcss": "^8.4.41", - "tailwindcss": "4.0.14" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.17.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.24.tgz", - "integrity": "sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.19", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.19.tgz", - "integrity": "sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", - "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.27.0.tgz", - "integrity": "sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/type-utils": "8.27.0", - "@typescript-eslint/utils": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.27.0.tgz", - "integrity": "sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.27.0.tgz", - "integrity": "sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.27.0.tgz", - "integrity": "sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/utils": "8.27.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.27.0.tgz", - "integrity": "sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.27.0.tgz", - "integrity": "sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.27.0.tgz", - "integrity": "sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.27.0.tgz", - "integrity": "sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.27.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@unrs/rspack-resolver-binding-darwin-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz", - "integrity": "sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-darwin-x64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz", - "integrity": "sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-freebsd-x64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz", - "integrity": "sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-linux-arm-gnueabihf": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz", - "integrity": "sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-linux-arm64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz", - "integrity": "sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-linux-arm64-musl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz", - "integrity": "sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-linux-x64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz", - "integrity": "sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-linux-x64-musl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz", - "integrity": "sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-wasm32-wasi": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz", - "integrity": "sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.7" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/rspack-resolver-binding-win32-arm64-msvc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz", - "integrity": "sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/rspack-resolver-binding-win32-x64-msvc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz", - "integrity": "sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", - "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/autumn-js": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/autumn-js/-/autumn-js-0.0.7.tgz", - "integrity": "sha512-sk+i5aMzB1xPi3N/4PD00k1cS9FlR/0xkZ2mqOyksCD23CcaczmRir45o6zzhNFQ2Q1K1icUwRyljwlW3RHWTQ==", - "license": "MIT", - "peerDependencies": { - "@clerk/nextjs": "^6.16.0", - "better-auth": "^1.2.7", - "react": "^18.2.0", - "react-dom": "^18.2.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/better-auth": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.2.7.tgz", - "integrity": "sha512-2hCB263GSrgetsMUZw8vv9O1e4S4AlYJW3P4e8bX9u3Q3idv4u9BzDFCblpTLuL4YjYovghMCN0vurAsctXOAQ==", - "peer": true, - "dependencies": { - "@better-auth/utils": "0.2.4", - "@better-fetch/fetch": "^1.1.18", - "@noble/ciphers": "^0.6.0", - "@noble/hashes": "^1.6.1", - "@simplewebauthn/browser": "^13.0.0", - "@simplewebauthn/server": "^13.0.0", - "better-call": "^1.0.8", - "defu": "^6.1.4", - "jose": "^5.9.6", - "kysely": "^0.27.6", - "nanostores": "^0.11.3", - "zod": "^3.24.1" - } - }, - "node_modules/better-call": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.0.8.tgz", - "integrity": "sha512-/PV8JLqDRUN7JyBPbklVsS/8E4SO3pnf8hbpa8B7xrBrr+BBYpeOAxoqtnsyk/pRs35vNB4MZx8cn9dBuNlLDA==", - "peer": true, - "dependencies": { - "@better-fetch/fetch": "^1.1.4", - "rou3": "^0.5.1", - "set-cookie-parser": "^2.7.1", - "uncrypto": "^0.1.3" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001706", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz", - "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "license": "MIT", - "peer": true - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "peer": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", - "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/config-helpers": "^0.1.0", - "@eslint/core": "^0.12.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.22.0", - "@eslint/plugin-kit": "^0.2.7", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-next": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.3.tgz", - "integrity": "sha512-VDQwbajhNMFmrhLWVyUXCqsGPN+zz5G8Ys/QwFubfsxTIrkqdx3N3x3QPW+pERz8bzGPP0IgEm8cNbZcd8PFRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "15.2.3", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz", - "integrity": "sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^1.3.0", - "rspack-resolver": "^1.1.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.12" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", - "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kysely": { - "version": "0.27.6", - "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.27.6.tgz", - "integrity": "sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", - "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.29.2", - "lightningcss-darwin-x64": "1.29.2", - "lightningcss-freebsd-x64": "1.29.2", - "lightningcss-linux-arm-gnueabihf": "1.29.2", - "lightningcss-linux-arm64-gnu": "1.29.2", - "lightningcss-linux-arm64-musl": "1.29.2", - "lightningcss-linux-x64-gnu": "1.29.2", - "lightningcss-linux-x64-musl": "1.29.2", - "lightningcss-win32-arm64-msvc": "1.29.2", - "lightningcss-win32-x64-msvc": "1.29.2" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", - "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", - "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", - "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", - "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", - "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", - "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", - "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", - "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", - "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", - "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lucide-react": { - "version": "0.483.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.483.0.tgz", - "integrity": "sha512-WldsY17Qb/T3VZdMnVQ9C3DDIP7h1ViDTHVdVGnLZcvHNg30zH/MTQ04RTORjexoGmpsXroiQXZ4QyR0kBy0FA==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanostores": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.11.4.tgz", - "integrity": "sha512-k1oiVNN4hDK8NcNERSZLQiMfRzEGtfnvZvdBvey3SQbgn8Dcrk0h1I6vpxApjb10PFUflZrgJ2WEZyJQ+5v7YQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.2.3.tgz", - "integrity": "sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==", - "license": "MIT", - "dependencies": { - "@next/env": "15.2.3", - "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.2.3", - "@next/swc-darwin-x64": "15.2.3", - "@next/swc-linux-arm64-gnu": "15.2.3", - "@next/swc-linux-arm64-musl": "15.2.3", - "@next/swc-linux-x64-gnu": "15.2.3", - "@next/swc-linux-x64-musl": "15.2.3", - "@next/swc-win32-arm64-msvc": "15.2.3", - "@next/swc-win32-x64-msvc": "15.2.3", - "sharp": "^0.33.5" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "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": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-themes": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "peer": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.8.1" - } - }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-remove-scroll": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", - "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rou3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.5.1.tgz", - "integrity": "sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==", - "license": "MIT", - "peer": true - }, - "node_modules/rspack-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rspack-resolver/-/rspack-resolver-1.2.2.tgz", - "integrity": "sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/JounQin" - }, - "optionalDependencies": { - "@unrs/rspack-resolver-binding-darwin-arm64": "1.2.2", - "@unrs/rspack-resolver-binding-darwin-x64": "1.2.2", - "@unrs/rspack-resolver-binding-freebsd-x64": "1.2.2", - "@unrs/rspack-resolver-binding-linux-arm-gnueabihf": "1.2.2", - "@unrs/rspack-resolver-binding-linux-arm64-gnu": "1.2.2", - "@unrs/rspack-resolver-binding-linux-arm64-musl": "1.2.2", - "@unrs/rspack-resolver-binding-linux-x64-gnu": "1.2.2", - "@unrs/rspack-resolver-binding-linux-x64-musl": "1.2.2", - "@unrs/rspack-resolver-binding-wasm32-wasi": "1.2.2", - "@unrs/rspack-resolver-binding-win32-arm64-msvc": "1.2.2", - "@unrs/rspack-resolver-binding-win32-x64-msvc": "1.2.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", - "license": "MIT", - "peer": true - }, - "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", - "license": "MIT", - "peer": true - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "peer": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/snakecase-keys": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-8.0.1.tgz", - "integrity": "sha512-Sj51kE1zC7zh6TDlNNz0/Jn1n5HiHdoQErxO8jLtnyrkJW/M5PrI7x05uDgY3BO7OUQYKCvmeMurW6BPUdwEOw==", - "license": "MIT", - "peer": true, - "dependencies": { - "map-obj": "^4.1.0", - "snake-case": "^3.0.4", - "type-fest": "^4.15.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/sonner": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.1.tgz", - "integrity": "sha512-FRBphaehZ5tLdLcQ8g2WOIRE+Y7BCfWi5Zyd8bCvBjiW8TxxAyoWZIxS661Yz6TGPqFQ4VLzOF89WEYhfynSFQ==", - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "license": "MIT", - "peer": true - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swr": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", - "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", - "license": "MIT", - "peer": true, - "dependencies": { - "dequal": "^2.0.3", - "use-sync-external-store": "^1.4.0" - }, - "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/tailwind-merge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz", - "integrity": "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.14.tgz", - "integrity": "sha512-92YT2dpt671tFiHH/e1ok9D987N9fHD5VWoly1CdPD/Cd1HMglvZwP3nx2yTj2lbXDAHt8QssZkxTLCCTNL+xw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tw-animate-css": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.2.4.tgz", - "integrity": "sha512-yt+HkJB41NAvOffe4NweJU6fLqAlVx/mBX6XmHRp15kq0JxTtOKaIw8pVSWM1Z+n2nXtyi7cW6C9f0WG/F/QAQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Wombosvideo" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz", - "integrity": "sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==", - "license": "(MIT OR CC0-1.0)", - "peer": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "license": "MIT", - "peer": true - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/example/package.json b/example/package.json deleted file mode 100644 index 2441e917a..000000000 --- a/example/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "nextjs-autumn-template", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-separator": "^1.1.2", - "@radix-ui/react-slot": "^1.1.2", - "@radix-ui/react-tooltip": "^1.1.8", - "autumn-js": "^0.0.7", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.483.0", - "next": "15.2.3", - "next-themes": "^0.4.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sonner": "^2.0.1", - "tailwind-merge": "^3.0.2", - "tw-animate-css": "^1.2.4" - }, - "devDependencies": { - "@eslint/eslintrc": "^3", - "@tailwindcss/postcss": "^4", - "@types/node": "^20", - "@types/react": "^18.3.18", - "@types/react-dom": "^18.3.5", - "eslint": "^9", - "eslint-config-next": "15.2.3", - "tailwindcss": "^4", - "typescript": "^5" - } -} diff --git a/example/postcss.config.mjs b/example/postcss.config.mjs deleted file mode 100644 index f50127cda..000000000 --- a/example/postcss.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -const config = { - plugins: ["@tailwindcss/postcss"], -}; - -export default config; diff --git a/example/public/file.svg b/example/public/file.svg deleted file mode 100644 index 004145cdd..000000000 --- a/example/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/example/public/globe.svg b/example/public/globe.svg deleted file mode 100644 index 567f17b0d..000000000 --- a/example/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/example/public/next.svg b/example/public/next.svg deleted file mode 100644 index 5174b28c5..000000000 --- a/example/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/example/public/vercel.svg b/example/public/vercel.svg deleted file mode 100644 index 770539603..000000000 --- a/example/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/example/public/window.svg b/example/public/window.svg deleted file mode 100644 index b2b2a44f6..000000000 --- a/example/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/example/src/app/demo.tsx b/example/src/app/demo.tsx deleted file mode 100644 index 6f514565e..000000000 --- a/example/src/app/demo.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import Application from "@/components/application"; -import CustomerDetailsExample from "@/components/billing"; -import Intro from "@/components/introduction"; - -export default function Home() { - return ( -
- - -
- - -
-
- ); -} diff --git a/example/src/app/favicon.ico b/example/src/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/example/src/app/globals.css b/example/src/app/globals.css deleted file mode 100644 index d09c334ab..000000000 --- a/example/src/app/globals.css +++ /dev/null @@ -1,143 +0,0 @@ -@import "tailwindcss"; -@import "tw-animate-css"; - -button { - padding: 5px 10px; - background-color: #8838ff; - color: white; - cursor: pointer; - border-radius: 5px; - font-weight: 500; -} - -button:hover { - background-color: #413652; -} - -@custom-variant dark (&:is(.dark *)); - -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); - - /* Custom font sizes */ - --text-xs: 12px; /* Changed from default 11px to 12px */ - --text-sm: 13px; - --text-md: 15px; - --text-lg: 17px; - --text-xl: 20px; - - --color-sidebar-ring: var(--sidebar-ring); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar: var(--sidebar); - --color-chart-5: var(--chart-5); - --color-chart-4: var(--chart-4); - --color-chart-3: var(--chart-3); - --color-chart-2: var(--chart-2); - --color-chart-1: var(--chart-1); - --color-ring: var(--ring); - --color-input: var(--input); - --color-border: var(--border); - --color-destructive: var(--destructive); - --color-accent-foreground: var(--accent-foreground); - --color-accent: var(--accent); - --color-muted-foreground: var(--muted-foreground); - --color-muted: var(--muted); - --color-secondary-foreground: var(--secondary-foreground); - --color-secondary: var(--secondary); - --color-primary-foreground: var(--primary-foreground); - --color-primary: var(--primary); - --color-popover-foreground: var(--popover-foreground); - --color-popover: var(--popover); - --color-card-foreground: var(--card-foreground); - --color-card: var(--card); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); -} - -:root { - --radius: 0.625rem; - --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.205 0 0); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); - --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); - --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); -} - -.dark { - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.205 0 0); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.922 0 0); - --primary-foreground: oklch(0.205 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.269 0 0); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.556 0 0); -} - -@layer base { - * { - @apply border-border outline-ring/50; - } - body { - @apply bg-background text-foreground; - } -} diff --git a/example/src/app/layout.tsx b/example/src/app/layout.tsx deleted file mode 100644 index 8f8d94933..000000000 --- a/example/src/app/layout.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; -import { Toaster } from "@/components/ui/sonner"; -import { AutumnProvider } from "autumn-js/next"; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); - -export const metadata: Metadata = { - title: "Next.js Autumn App", - description: "Starter Next.js app with Autumn", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - - - {children} - - - - ); -} diff --git a/example/src/app/page.tsx b/example/src/app/page.tsx deleted file mode 100644 index d203027a6..000000000 --- a/example/src/app/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -"use client"; - -import { useAutumn } from "autumn-js/next"; - -export default function Home() { - const { customer, attach } = useAutumn(); - return ( -
-
{customer?.name}
- -
- ); -} diff --git a/example/src/app/referrals/functions.tsx b/example/src/app/referrals/functions.tsx deleted file mode 100644 index 8431102f8..000000000 --- a/example/src/app/referrals/functions.tsx +++ /dev/null @@ -1,28 +0,0 @@ -"use server"; - -import { Autumn } from "@/sdk/autumn"; - -export const getReferralCode = async (customerId: string) => { - const autumn = new Autumn(); - const referralCode = await autumn.referrals.createCode({ - customerId, - referralId: "referral", - }); - return referralCode; -}; - -export const redeemReferralCode = async ({ - customerId, - referralCode, -}: { - customerId: string; - referralCode: string; -}) => { - const autumn = new Autumn(); - const redemption = await autumn.referrals.redeem({ - customerId, - code: referralCode, - }); - - return redemption; -}; diff --git a/example/src/app/referrals/page.tsx b/example/src/app/referrals/page.tsx deleted file mode 100644 index 23d6a9485..000000000 --- a/example/src/app/referrals/page.tsx +++ /dev/null @@ -1,169 +0,0 @@ -"use client"; - -import { useEffect, useState } from "react"; -import { getReferralCode, redeemReferralCode } from "./functions"; -import { toast } from "sonner"; -import { attachProduct, getCustomer } from "../autumn-functions"; -import { Input } from "@/components/ui/input"; - -const useReferralCode = (referrerId: string) => { - const [referralCode, setReferralCode] = useState(null); - const [loading, setLoading] = useState(false); - - useEffect(() => { - const fetchReferralCode = async () => { - setLoading(true); - try { - const { code } = await getReferralCode(referrerId); - setReferralCode(code); - } catch (error) { - toast.error(`Error fetching referral code: ${error}`); - } - setLoading(false); - }; - fetchReferralCode(); - }, []); - - return { referralCode, isLoading: loading }; -}; - -const useCustomer = (customerId: string) => { - const [customer, setCustomer] = useState(null); - const [isLoading, setIsLoading] = useState(false); - - const fetchCustomer = async () => { - setIsLoading(true); - const customerData = await getCustomer(customerId); - setCustomer(customerData); - setIsLoading(false); - }; - - const refresh = async () => { - const customerData = await getCustomer(customerId); - setCustomer(customerData); - }; - - useEffect(() => { - fetchCustomer(); - }, []); - - return { ...customer, isLoading, refresh }; -}; - -export default function ReferralsPage() { - const { referralCode, isLoading } = useReferralCode("ayush"); - const { entitlements } = useCustomer("ayush"); - - const referrerId = "ayush"; - const referee1Id = "john"; - const [referral1Code, setReferral1Code] = useState(""); - - return ( -
-
-

- Referral Program -

- -
- {/* Referrer Section */} -
-
-
- - USER ID: - - - {referrerId} - -
-

- Your Referral Code -

-
-

- {isLoading - ? "Loading..." - : referralCode || "No code available"} -

-
- {entitlements && ( -
-

- Your Features -

- {entitlements.map((entitlement: any, index: number) => ( -
- - {entitlement.feature_id} - - - {entitlement.balance} - -
- ))} -
- )} -
-
- - {/* Referee Section */} -
-
-
- - USER ID: - - - {referee1Id} - -
-

Redeem Code

-
-

- Enter referral code to get started -

- setReferral1Code(e.target.value)} - placeholder="Enter code" - className="font-mono text-base" - /> - -
-
-
-
-
-
- ); -} diff --git a/example/src/components/application.tsx b/example/src/components/application.tsx deleted file mode 100644 index 3ee5b4edf..000000000 --- a/example/src/components/application.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { useAutumn } from "autumn-js/next"; -import { MessageSquare } from "lucide-react"; -import { toast } from "sonner"; - -export default function Application() { - const { entitled, sendEvent, refetch } = useAutumn(); - - const sendMessageClicked = async (featureId: string) => { - const { allowed } = await entitled({ - featureId, - }); - - if (!allowed) { - toast.error(`You're out of ${featureId}!`); - return; - } - - await sendEvent({ - featureId, - }); - - await refetch(); - - toast.success(`${featureId} used!`); - }; - - return ( -
-
-
-
-

Feature Access Example

-

- Test how our feature access and event sending works -

-
-
- -
-
-
- -
-
-
How it works:
-
    -
  1. First calls /entitled to check message allowance
  2. -
  3. If allowed, calls /events to record the message
  4. -
  5. Updates remaining message count
  6. -
-
-
- -
- -
-
- ); -} diff --git a/example/src/components/billing.tsx b/example/src/components/billing.tsx deleted file mode 100644 index e016d4a4f..000000000 --- a/example/src/components/billing.tsx +++ /dev/null @@ -1,103 +0,0 @@ -"use client"; - -import { CreditCard } from "lucide-react"; -import { toast } from "sonner"; -import { useAutumn } from "autumn-js/next"; -export default function CustomerDetailsExample() { - const { customer, attach, openBillingPortal } = useAutumn(); - const productId = "pro-example"; - - const getEntitlement = (featureId: string) => { - return customer?.features.find( - (entitlement: any) => entitlement.feature_id === featureId, - ); - }; - - const upgradeClicked = async () => { - try { - await attach({ - productId, - }); - } catch (error: any) { - toast.error(`${error.message}`); - } - }; - - const manageBillingClicked = async () => { - try { - await openBillingPortal(); - } catch (error: any) { - toast.error(`${error.message}`); - } - }; - - const messageCredits = getEntitlement("chat-messages"); - - const hasPro = - customer?.products?.length && customer?.products[0].id === productId; - - return ( -
-
-
-
-

Customer Details

-

- Current subscription and feature access -

-
-
- -
-
-
- -
-
-
- Customer ID - - {customer?.id} - -
- -
- Chat Messages Remaining - - {messageCredits?.unlimited - ? "Unlimited" - : messageCredits?.balance || 0} - -
- -
- Current Plan - - {hasPro ? ( - - Pro - - ) : ( - - Free - - )} - -
-
-
-
- {!hasPro && ( - - )} -
- -
-
-
- ); -} diff --git a/example/src/components/introduction.tsx b/example/src/components/introduction.tsx deleted file mode 100644 index 9b5f5e801..000000000 --- a/example/src/components/introduction.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import Link from "next/link"; - -export default function Intro() { - return ( -
- {/* Header Section */} -
-

- Welcome to the Next.js Autumn template -

-

- Get started with Autumn by setting up your account and exploring the - core features. -

-
- - {/* Setup Requirements */} -
-

Before you get started

-
    -
  • -
    - - Create your Autumn secret key{" "} - - here - {" "} - and add it to the .env.local file - -
  • -
  • -
    - - Connect your Stripe account{" "} - - here - - -
  • -
-
-
- ); -} diff --git a/example/src/components/ui/input.tsx b/example/src/components/ui/input.tsx deleted file mode 100644 index 433a51c55..000000000 --- a/example/src/components/ui/input.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from "react"; - -import { cn } from "@/lib/utils"; - -function Input({ className, type, ...props }: React.ComponentProps<"input">) { - return ( - - ); -} - -export { Input }; diff --git a/example/src/components/ui/sonner.tsx b/example/src/components/ui/sonner.tsx deleted file mode 100644 index e79c99b58..000000000 --- a/example/src/components/ui/sonner.tsx +++ /dev/null @@ -1,25 +0,0 @@ -"use client"; - -import { useTheme } from "next-themes"; -import { Toaster as Sonner, ToasterProps } from "sonner"; - -const Toaster = ({ ...props }: ToasterProps) => { - const { theme = "system" } = useTheme(); - - return ( - - ); -}; - -export { Toaster }; diff --git a/example/src/hooks/use-mobile.ts b/example/src/hooks/use-mobile.ts deleted file mode 100644 index 0a892310f..000000000 --- a/example/src/hooks/use-mobile.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from "react"; - -const MOBILE_BREAKPOINT = 768; - -export function useIsMobile() { - const [isMobile, setIsMobile] = React.useState( - undefined, - ); - - React.useEffect(() => { - const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`); - const onChange = () => { - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); - }; - mql.addEventListener("change", onChange); - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); - return () => mql.removeEventListener("change", onChange); - }, []); - - return !!isMobile; -} diff --git a/example/src/lib/utils.ts b/example/src/lib/utils.ts deleted file mode 100644 index 3200be284..000000000 --- a/example/src/lib/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { clsx, type ClassValue } from "clsx"; -import { twMerge } from "tailwind-merge"; - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); -} diff --git a/example/tsconfig.json b/example/tsconfig.json deleted file mode 100644 index f6aed0338..000000000 --- a/example/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "noImplicitAny": false, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/opencode.json b/opencode.json new file mode 100644 index 000000000..86ba625de --- /dev/null +++ b/opencode.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://opencode.ai/config.json", + "instructions": ["CLAUDE.md"] +} diff --git a/package.json b/package.json index 4c657876e..ba6a5e5fb 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "tailwind-scrollbar-hide": "^4.0.0" }, "devDependencies": { + "@biomejs/biome": "^2.2.4", "@types/node": "^24.0.3", "concurrently": "^9.1.2", "dotenv": "^16.5.0", diff --git a/server/example.ts b/server/example.ts index 9b0cf6396..1f4ddbb12 100644 --- a/server/example.ts +++ b/server/example.ts @@ -386,4 +386,4 @@ const customerFeature = { expires_at: 1720531200, } ] -} \ No newline at end of file +} diff --git a/server/package.json b/server/package.json index da87af2de..c721526e1 100644 --- a/server/package.json +++ b/server/package.json @@ -82,6 +82,7 @@ "lodash-es": "^4.17.21", "loops": "^5.0.1", "mime-detect": "^1.3.0", + "nanoid": "^5.1.6", "openai": "^4.85.2", "pg": "^8.13.1", "pino": "^9.6.0", diff --git a/server/src/external/stripe/createStripePrice/createStripeInArrear.ts b/server/src/external/stripe/createStripePrice/createStripeInArrear.ts index 7af4c0e33..c3caae123 100644 --- a/server/src/external/stripe/createStripePrice/createStripeInArrear.ts +++ b/server/src/external/stripe/createStripePrice/createStripeInArrear.ts @@ -193,7 +193,7 @@ export const createStripeInArrearPrice = async ({ await PriceService.update({ db, - id: price.id!, + id: price.id, update: { config }, }); } @@ -255,7 +255,7 @@ export const createStripeInArrearPrice = async ({ } else { productData = { product_data: { - name: `${product.name} - ${feature!.name}`, + name: `${product.name} - ${feature.name}`, }, }; } @@ -263,13 +263,13 @@ export const createStripeInArrearPrice = async ({ const stripePrice = await stripeCli.prices.create({ ...productData, ...priceAmountData, - currency: org.default_currency!, + currency: org.default_currency || "usd", recurring: { - ...(billingIntervalToStripe({ - interval: price.config!.interval, - intervalCount: price.config!.interval_count, - }) as any), - meter: meter!.id, + ...billingIntervalToStripe({ + interval: price.config.interval, + intervalCount: price.config.interval_count, + }), + meter: meter.id, usage_type: "metered", }, nickname: `Autumn Price (${relatedEnt.feature.name})`, @@ -277,10 +277,11 @@ export const createStripeInArrearPrice = async ({ config.stripe_price_id = stripePrice.id; config.stripe_product_id = stripePrice.product as string; - config.stripe_meter_id = meter!.id; + config.stripe_meter_id = meter.id; + await PriceService.update({ db, - id: price.id!, + id: price.id, update: { config }, }); }; diff --git a/server/src/external/stripe/stripeOnboardingUtils.ts b/server/src/external/stripe/stripeOnboardingUtils.ts index 59a628f4f..97cbb7ffe 100644 --- a/server/src/external/stripe/stripeOnboardingUtils.ts +++ b/server/src/external/stripe/stripeOnboardingUtils.ts @@ -1,6 +1,6 @@ -import RecaseError from "@/utils/errorUtils.js"; -import { AppEnv, ErrCode } from "@autumn/shared"; +import { type AppEnv, ErrCode } from "@autumn/shared"; import Stripe from "stripe"; +import RecaseError from "@/utils/errorUtils.js"; export const checkKeyValid = async (apiKey: string) => { const stripe = new Stripe(apiKey); @@ -21,7 +21,7 @@ export const createWebhookEndpoint = async ( const stripe = new Stripe(apiKey); const webhookBaseUrl = - process.env.SERVER_URL || process.env.STRIPE_WEBHOOK_URL; + process.env.STRIPE_WEBHOOK_URL || process.env.SERVER_URL; if (!webhookBaseUrl) { throw new RecaseError({ diff --git a/server/src/external/stripe/stripePriceUtils.ts b/server/src/external/stripe/stripePriceUtils.ts index e52a8ff46..5516cfd9b 100644 --- a/server/src/external/stripe/stripePriceUtils.ts +++ b/server/src/external/stripe/stripePriceUtils.ts @@ -26,7 +26,7 @@ export const billingIntervalToStripe = ({ }: { interval: BillingInterval; intervalCount?: number | null; -}) => { +}): Stripe.PriceCreateParams.Recurring => { const finalCount = intervalCount ?? 1; switch (interval) { case BillingInterval.Week: @@ -55,7 +55,7 @@ export const billingIntervalToStripe = ({ interval_count: finalCount, }; default: - break; + throw new Error(`billingIntervalToStripe: invalid interval ${interval}`); } }; diff --git a/server/src/external/stripe/webhookHandlers/handleInvoicePaid.ts b/server/src/external/stripe/webhookHandlers/handleInvoicePaid.ts index d092e2023..35298f9c7 100644 --- a/server/src/external/stripe/webhookHandlers/handleInvoicePaid.ts +++ b/server/src/external/stripe/webhookHandlers/handleInvoicePaid.ts @@ -238,7 +238,7 @@ export const handleInvoicePaid = async ({ cusProducts.map((cp) => `${cp.product.name} - ${cp.product.id}`), ); - if (cusProducts.length == 0) { + if (cusProducts.length === 0) { cusProducts = activeCusProducts; } } catch (error) { diff --git a/server/src/honoMiddlewares/betterAuthMiddleware.ts b/server/src/honoMiddlewares/betterAuthMiddleware.ts index 9938926ba..ea75142cb 100644 --- a/server/src/honoMiddlewares/betterAuthMiddleware.ts +++ b/server/src/honoMiddlewares/betterAuthMiddleware.ts @@ -57,8 +57,10 @@ export const betterAuthMiddleware = async (c: Context, next: Next) => { } // Step 4: Fetch org and features from database - ctx.env = c.req.header("app_env") as AppEnv; - + const appEnvHeader = c.req.header("app_env") as AppEnv; + if (appEnvHeader) { + ctx.env = appEnvHeader; + } const data = await OrgService.getWithFeatures({ db: ctx.db, orgId: orgId, diff --git a/server/src/index.ts b/server/src/index.ts index 327a69f73..e21f7dd41 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -59,10 +59,9 @@ const init = async () => { "http://localhost:5174", "https://app.useautumn.com", "https://staging.useautumn.com", - "https://*.useautumn.com", + "https://api.staging.useautumn.com", "https://localhost:8080", "https://www.alphalog.ai", - "https://*.alphalog.ai", process.env.CLIENT_URL || "", ]; @@ -75,9 +74,36 @@ const init = async () => { } } + // Wildcard patterns for subdomains + const wildcardPatterns = [ + /^https:\/\/.*\.useautumn\.com$/, + /^https:\/\/.*\.alphalog\.ai$/, + ]; + app.use( cors({ - origin: allowedOrigins, + origin: (origin, callback) => { + // Allow requests with no origin (like mobile apps or curl) + if (!origin) { + callback(null, true); + return; + } + + // Check explicit allowed origins + if (allowedOrigins.includes(origin)) { + callback(null, true); + return; + } + + // Check wildcard patterns + if (wildcardPatterns.some((pattern) => pattern.test(origin))) { + callback(null, true); + return; + } + + // Origin not allowed + callback(new Error("Not allowed by CORS")); + }, credentials: true, allowedHeaders: [ "app_env", diff --git a/server/src/initHono.ts b/server/src/initHono.ts index 049718be4..7653b1c20 100644 --- a/server/src/initHono.ts +++ b/server/src/initHono.ts @@ -22,6 +22,7 @@ const ALLOWED_ORIGINS = [ "http://localhost:5174", "https://app.useautumn.com", "https://staging.useautumn.com", + "https://api.staging.useautumn.com", "https://localhost:8080", ]; @@ -65,19 +66,19 @@ export const createHonoApp = () => { return auth.handler(c.req.raw); }); - // Step 1: Base middleware - sets up ctx (db, logger, etc.) - app.use("*", baseMiddleware); + // Step 1: Base middleware - sets up ctx (db, logger, etc.) - only for v1 routes + app.use("/v1/*", baseMiddleware); - // Step 2: Tracing middleware - handles OpenTelemetry spans - app.use("*", traceMiddleware); + // Step 2: Tracing middleware - handles OpenTelemetry spans - only for v1 routes + app.use("/v1/*", traceMiddleware); - // Step 4: Auth middleware - verifies secret key and populates auth context + // Step 3: Auth middleware - verifies secret key and populates auth context app.use("/v1/*", secretKeyMiddleware); - // Step 5: Org config middleware - allows config overrides via header + // Step 4: Org config middleware - allows config overrides via header app.use("/v1/*", orgConfigMiddleware); - // Step 3: API Version middleware - validates x-api-version header + // Step 5: API Version middleware - validates x-api-version header app.use("/v1/*", apiVersionMiddleware); // Step 6: Refresh cache middleware - clears customer cache after successful mutations diff --git a/server/src/internal/customers/attach/handleAttachPreview/getUpdateEntsPreview.ts b/server/src/internal/customers/attach/handleAttachPreview/getUpdateEntsPreview.ts deleted file mode 100644 index 6ff274065..000000000 --- a/server/src/internal/customers/attach/handleAttachPreview/getUpdateEntsPreview.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { productsAreSame } from "@/internal/products/productUtils/compareProductUtils.js"; -import { - attachParamsToProduct, - attachParamToCusProducts, -} from "../attachUtils/convertAttachParams.js"; -import { cusProductToProduct } from "@autumn/shared"; - -export const getUpdateEntsPreview = async ({ - req, - attachParams, - now, -}: { - req: any; - attachParams: any; - now: number; -}) => { - const { curMainProduct } = attachParamToCusProducts({ attachParams }); - const curProduct = cusProductToProduct({ cusProduct: curMainProduct! }); - const newProduct = attachParamsToProduct({ attachParams }); - const features = attachParams.features; - - const res = productsAreSame({ - newProductV1: newProduct, - curProductV1: curProduct, - features, - }); - - return { - new_items: res.newItems, - }; -}; diff --git a/server/src/internal/customers/cusProducts/cusEnts/CusEntitlementService.ts b/server/src/internal/customers/cusProducts/cusEnts/CusEntitlementService.ts index eadf7967e..7e902ce00 100644 --- a/server/src/internal/customers/cusProducts/cusEnts/CusEntitlementService.ts +++ b/server/src/internal/customers/cusProducts/cusEnts/CusEntitlementService.ts @@ -1,28 +1,24 @@ -import { DrizzleCli } from "@/db/initDrizzle.js"; -import RecaseError from "@/utils/errorUtils.js"; import { - AppEnv, - CusProduct, + type AppEnv, + type CusProduct, CusProductStatus, - Customer, - CustomerEntitlement, - customerPrices, + type Customer, + type CustomerEntitlement, + customerEntitlements, + customerProducts, customers, - entitlements, ErrCode, + entitlements, + type FullCusEntWithProduct, + type FullCustomerEntitlement, features, - FullCusEntWithProduct, - FullCustomerEntitlement, - prices, - Replaceable, - ResetCusEnt, - Rollover, + type ResetCusEnt, } from "@autumn/shared"; -import { customerEntitlements } from "@autumn/shared"; +import { and, eq, lt, sql } from "drizzle-orm"; import { StatusCodes } from "http-status-codes"; -import { eq, lt, and, sql } from "drizzle-orm"; -import { customerProducts } from "@autumn/shared"; import { buildConflictUpdateColumns } from "@/db/dbUtils.js"; +import type { DrizzleCli } from "@/db/initDrizzle.js"; +import RecaseError from "@/utils/errorUtils.js"; export class CusEntService { static async upsert({ @@ -32,7 +28,7 @@ export class CusEntService { db: DrizzleCli; data: CustomerEntitlement[]; }) { - if (Array.isArray(data) && data.length == 0) return; + if (Array.isArray(data) && data.length === 0) return; const updateColumns = buildConflictUpdateColumns(customerEntitlements, [ "id", diff --git a/server/src/internal/features/featureUtils.ts b/server/src/internal/features/featureUtils.ts index a5507e44e..5a647d961 100644 --- a/server/src/internal/features/featureUtils.ts +++ b/server/src/internal/features/featureUtils.ts @@ -1,6 +1,5 @@ import { ApiFeatureType, - type AppEnv, type CreditSystemConfig, cusProductsToCusPrices, ErrCode, @@ -16,8 +15,6 @@ import type { DrizzleCli } from "@/db/initDrizzle.js"; import { generateFeatureDisplay } from "@/external/llm/llmUtils.js"; import RecaseError from "@/utils/errorUtils.js"; import { ACTIVE_STATUSES } from "../customers/cusProducts/CusProductService.js"; -import { ProductService } from "../products/ProductService.js"; -import { getCreditSystemsFromFeature } from "./creditSystemUtils.js"; import { FeatureService } from "./FeatureService.js"; export const validateFeatureId = (featureId: string) => { @@ -114,47 +111,6 @@ export const validateCreditSystem = (config: CreditSystemConfig) => { return newConfig; }; -export const getObjectsUsingFeature = async ({ - db, - orgId, - env, - allFeatures, - feature, -}: { - db: DrizzleCli; - orgId: string; - env: AppEnv; - allFeatures: Feature[]; - feature: Feature; -}) => { - const products = await ProductService.listFull({ - db, - orgId, - env, - }); - - const allPrices = products.flatMap((p) => p.prices); - const allEnts = products.flatMap((p) => p.entitlements); - const creditSystems = getCreditSystemsFromFeature({ - featureId: feature.id, - features: allFeatures, - }); - - const entitlements = allEnts.filter( - (entitlement) => entitlement.internal_feature_id === feature.internal_id, - ); - const linkedEntitlements = allEnts.filter( - (entitlement) => entitlement.entity_feature_id === feature.id, - ); - - const prices = allPrices.filter( - (price) => - (price.config as any).internal_feature_id === feature.internal_id, - ); - - return { entitlements, prices, creditSystems, linkedEntitlements }; -}; - export const runSaveFeatureDisplayTask = async ({ db, feature, diff --git a/server/src/internal/features/handlers/handleUpdateFeature.ts b/server/src/internal/features/handlers/handleUpdateFeature.ts index da5532c95..9df22ce3b 100644 --- a/server/src/internal/features/handlers/handleUpdateFeature.ts +++ b/server/src/internal/features/handlers/handleUpdateFeature.ts @@ -15,7 +15,6 @@ import type { DrizzleCli } from "@/db/initDrizzle.js"; import { CusEntService } from "@/internal/customers/cusProducts/cusEnts/CusEntitlementService.js"; import { FeatureService } from "@/internal/features/FeatureService.js"; import { - getObjectsUsingFeature, validateCreditSystem, validateMeteredConfig, } from "@/internal/features/featureUtils.js"; @@ -27,6 +26,8 @@ import RecaseError from "@/utils/errorUtils.js"; import { keyToTitle } from "@/utils/genUtils.js"; import { routeHandler } from "@/utils/routerUtils.js"; import { toApiFeature } from "../utils/mapFeatureUtils.js"; +import { getObjectsUsingFeature } from "./handleUpdateFeature/getObjectsUsingFeature.js"; +import { handleFeatureTypeChanged } from "./handleUpdateFeature/handleFeatureTypeChanged.js"; const handleFeatureIdChanged = async ({ db, @@ -230,7 +231,7 @@ const handleFeatureUsageTypeChanged = async ({ config: { ...priceConfig, should_prorate: - newUsageType == FeatureUsageType.Continuous ? false : true, // if continuous, don't prorate -> get usage_in_arrear type... + newUsageType === FeatureUsageType.Continuous ? false : true, // if continuous, don't prorate -> get usage_in_arrear type... stripe_price_id: null, }, }, @@ -312,30 +313,27 @@ export const handleUpdateFeature = async ( const isChangingName = feature.name !== data.name; if (isChangingType || isChangingId || isChangingUsageType) { - const { entitlements, prices, creditSystems, linkedEntitlements } = - await getObjectsUsingFeature({ - db, - orgId: req.orgId, - env: req.env, - allFeatures: features, - feature, - }); + const objectsUsingFeature = await getObjectsUsingFeature({ + db, + orgId: req.orgId, + env: req.env, + allFeatures: features, + feature, + }); // 1. Can't change type if any objects are linked to it - if ( - isChangingType && - (linkedEntitlements.length > 0 || - prices.length > 0 || - creditSystems.length > 0 || - entitlements.length > 0) - ) { - throw new RecaseError({ - message: `Cannot change type of feature ${featureId} because it is used in an entitlement or credit system`, - code: ErrCode.InvalidFeature, - statusCode: 400, + if (isChangingType) { + await handleFeatureTypeChanged({ + ctx: req, + objectsUsingFeature, + feature, + newType: data.type, }); } + const { linkedEntitlements, entitlements, prices, creditSystems } = + objectsUsingFeature; + if (isChangingId) { await handleFeatureIdChanged({ db, diff --git a/server/src/internal/features/handlers/handleUpdateFeature/getObjectsUsingFeature.ts b/server/src/internal/features/handlers/handleUpdateFeature/getObjectsUsingFeature.ts new file mode 100644 index 000000000..7b16c9108 --- /dev/null +++ b/server/src/internal/features/handlers/handleUpdateFeature/getObjectsUsingFeature.ts @@ -0,0 +1,66 @@ +import type { + AppEnv, + CustomerEntitlement, + EntitlementWithFeature, + Feature, + Price, +} from "@autumn/shared"; +import type { DrizzleCli } from "@/db/initDrizzle.js"; +import { CusEntService } from "@/internal/customers/cusProducts/cusEnts/CusEntitlementService.js"; +import { ProductService } from "@/internal/products/ProductService.js"; +import { getCreditSystemsFromFeature } from "../../creditSystemUtils.js"; + +export type ObjectsUsingFeature = { + entitlements: EntitlementWithFeature[]; + prices: Price[]; + creditSystems: Feature[]; + linkedEntitlements: EntitlementWithFeature[]; + cusEnts: CustomerEntitlement[]; +}; + +export const getObjectsUsingFeature = async ({ + db, + orgId, + env, + allFeatures, + feature, +}: { + db: DrizzleCli; + orgId: string; + env: AppEnv; + allFeatures: Feature[]; + feature: Feature; +}): Promise => { + const [products, cusEnts] = await Promise.all([ + ProductService.listFull({ + db, + orgId, + env, + }), + CusEntService.getByFeature({ + db, + internalFeatureId: feature.internal_id!, + }), + ]); + + const allPrices = products.flatMap((p) => p.prices); + const allEnts = products.flatMap((p) => p.entitlements); + const creditSystems = getCreditSystemsFromFeature({ + featureId: feature.id, + features: allFeatures, + }); + + const entitlements = allEnts.filter( + (entitlement) => entitlement.internal_feature_id === feature.internal_id, + ); + const linkedEntitlements = allEnts.filter( + (entitlement) => entitlement.entity_feature_id === feature.id, + ); + + const prices = allPrices.filter( + (price) => + (price.config as any).internal_feature_id === feature.internal_id, + ); + + return { entitlements, prices, creditSystems, linkedEntitlements, cusEnts }; +}; diff --git a/server/src/internal/features/handlers/handleUpdateFeature/handleFeatureTypeChanged.ts b/server/src/internal/features/handlers/handleUpdateFeature/handleFeatureTypeChanged.ts new file mode 100644 index 000000000..3fd51d53c --- /dev/null +++ b/server/src/internal/features/handlers/handleUpdateFeature/handleFeatureTypeChanged.ts @@ -0,0 +1,116 @@ +import { + AllowanceType, + EntInterval, + ErrCode, + type Feature, + FeatureType, + RecaseError, +} from "@autumn/shared"; +import { db } from "@/db/initDrizzle.js"; +import { EntitlementService } from "@/internal/products/entitlements/EntitlementService.js"; +import type { ExtendedRequest } from "@/utils/models/Request.js"; +import type { ObjectsUsingFeature } from "./getObjectsUsingFeature.js"; + +export const handleFeatureTypeChanged = async ({ + objectsUsingFeature, + feature, + newType, +}: { + ctx: ExtendedRequest; + objectsUsingFeature: ObjectsUsingFeature; + feature: Feature; + newType: FeatureType; +}) => { + const { linkedEntitlements, entitlements, prices, creditSystems, cusEnts } = + objectsUsingFeature; + + if (cusEnts.length > 0) { + throw new RecaseError({ + message: `Cannot change type of feature ${feature.id} because it has been attached to a customer before`, + code: ErrCode.InvalidFeature, + statusCode: 400, + }); + } + + // 1. Check linked entitlements + if (linkedEntitlements.length > 0) { + throw new RecaseError({ + message: `Cannot change type of feature ${feature.id} because it is used in an entity feature by ${linkedEntitlements[0].feature.name}`, + code: ErrCode.InvalidFeature, + statusCode: 400, + }); + } + + if (prices.length > 0) { + throw new RecaseError({ + message: `Cannot change type of feature ${feature.id} because it has a usage price set`, + code: ErrCode.InvalidFeature, + statusCode: 400, + }); + } + + if (creditSystems.length > 0) { + throw new RecaseError({ + message: `Cannot change type of feature ${feature.id} because it is used in a credit system`, + code: ErrCode.InvalidFeature, + statusCode: 400, + }); + } + + if (entitlements.length > 0) { + // 1. Check if either type is credit_system + if ( + feature.type === FeatureType.CreditSystem || + newType === FeatureType.CreditSystem + ) { + throw new RecaseError({ + message: `Cannot change type from ${feature.type} to ${newType} because the feature is used in a product`, + code: ErrCode.InvalidFeature, + statusCode: 400, + }); + } + + // 2. Handle boolean -> metered conversion + if ( + feature.type === FeatureType.Boolean && + newType === FeatureType.Metered + ) { + await Promise.all( + entitlements.map((entitlement) => + EntitlementService.update({ + db, + id: entitlement.id, + updates: { + allowance_type: AllowanceType.Unlimited, + allowance: null, + interval: EntInterval.Lifetime, + carry_from_previous: false, + }, + }), + ), + ); + } + + // 2b. Handle metered -> boolean conversion + if ( + feature.type === FeatureType.Metered && + newType === FeatureType.Boolean + ) { + await Promise.all( + entitlements.map((entitlement) => + EntitlementService.update({ + db, + id: entitlement.id, + updates: { + allowance_type: null, + allowance: null, + interval: null, + entity_feature_id: null, + carry_from_previous: false, + }, + }), + ), + ); + } + } +}; diff --git a/server/src/internal/features/internalFeatureRouter.ts b/server/src/internal/features/internalFeatureRouter.ts index f8967abef..902e7e22c 100644 --- a/server/src/internal/features/internalFeatureRouter.ts +++ b/server/src/internal/features/internalFeatureRouter.ts @@ -25,7 +25,7 @@ internalFeatureRouter.get("", async (req: any, res: any) => { db: req.db, orgId: req.orgId, env: req.env, - archived: showArchived === "true" ? true : false, + archived: showArchived === "true", }); res.status(200).json({ features }); } else { diff --git a/server/src/internal/invoices/invoiceFormatUtils.ts b/server/src/internal/invoices/invoiceFormatUtils.ts index 236aec227..e306b83b7 100644 --- a/server/src/internal/invoices/invoiceFormatUtils.ts +++ b/server/src/internal/invoices/invoiceFormatUtils.ts @@ -1,29 +1,27 @@ import { BillingInterval, BillingType, - EntitlementWithFeature, - Feature, - FixedPriceConfig, - FullCusProduct, - FullCustomerPrice, - FullProduct, + billingToItemInterval, + cusProductToEnts, + type EntitlementWithFeature, + type Feature, + type FixedPriceConfig, + type FullCusProduct, + type FullProduct, getFeatureName, getFeatureNameWithCapital, - Organization, - Price, - ProductItemInterval, - UsagePriceConfig, + type Organization, + type Price, + type ProductItemInterval, + type UsagePriceConfig, } from "@autumn/shared"; +import { formatAmount } from "@/utils/formatUtils.js"; +import { getFeatureQuantity } from "../customers/cusProducts/cusProductUtils.js"; import { getBillingType, getPriceEntitlement, } from "../products/prices/priceUtils.js"; -import { cusProductToEnts } from "@autumn/shared"; - -import { getFeatureQuantity } from "../customers/cusProducts/cusProductUtils.js"; -import { formatAmount } from "@/utils/formatUtils.js"; import { getIntervalString } from "../products/productUtils/productResponseUtils/getProductItemDisplay.js"; -import { billingToItemInterval } from "../products/product-items/itemIntervalUtils.js"; const getSingularAndPlural = (feature: Feature) => { const singular = getFeatureName({ @@ -53,8 +51,8 @@ export const formatPrepaidPrice = ({ const config = price.config as UsagePriceConfig; const billingUnits = config.billing_units || 1; - if (billingUnits == 1) { - if (quantity == 1) + if (billingUnits === 1) { + if (quantity === 1) return `${quantity} ${singular}`; // eg. 1 credit else return `${quantity} ${plural}`; // eg. 4 credits } else { @@ -75,52 +73,20 @@ export const formatFixedPrice = ({ const amount = formatAmount({ org, amount: config.amount }); const intervalStr = getIntervalString({ - interval: billingToItemInterval(config.interval) as ProductItemInterval, + interval: billingToItemInterval({ + billingInterval: config.interval, + }) as ProductItemInterval, intervalCount: config.interval_count || 1, prefix: "", }); - if (config.interval == BillingInterval.OneOff) { + if (config.interval === BillingInterval.OneOff) { return `${amount}`; } else { return `${amount} / ${intervalStr}`; } }; -// export const formatUsageInArrear = ({ -// price, -// cusProduct, -// logger, -// }: { -// price: Price; -// feature: Feature; -// cusProduct: FullCusProduct; -// logger: any; -// }) => { -// // const cusPrice = cusProduct.customer_prices.find( -// // (cp) => cp.price.id == price.id, -// // ); - -// // const { usage, overage, roundedUsage } = getCusPriceUsage({ -// // cusPrice: cusPrice!, -// // cusProduct, -// // logger, -// // }); - -// // const cusEnt = getRelatedCusEnt({ -// // cusPrice: cusPrice!, -// // cusEnts: cusProduct.customer_entitlements, -// // })!; - -// const { singular, plural } = getSingularAndPlural(cusEnt.entitlement.feature); - -// if (usage == 1) { -// return `${usage} x ${singular}`; -// } else { -// return `${usage} x ${plural}`; -// } -// }; - export const formatInArrearProrated = ({ price, ents, @@ -134,7 +100,7 @@ export const formatInArrearProrated = ({ const { singular, plural } = getSingularAndPlural(ent.feature); - if (quantity == 1) { + if (quantity === 1) { return `${quantity} x ${singular}`; } else { return `${quantity} x ${plural}`; @@ -154,12 +120,12 @@ export const priceToInvoiceDescription = ({ quantity?: number; logger: any; }) => { - let billingType = getBillingType(price.config); - let productName = cusProduct.product.name; + const billingType = getBillingType(price.config); + const productName = cusProduct.product.name; const ents = cusProductToEnts({ cusProduct }); let description = ""; - if (billingType == BillingType.UsageInAdvance) { + if (billingType === BillingType.UsageInAdvance) { const ent = getPriceEntitlement(price, ents); const quantity = getFeatureQuantity({ cusProduct, @@ -170,8 +136,8 @@ export const priceToInvoiceDescription = ({ } if ( - billingType == BillingType.FixedCycle || - billingType == BillingType.OneOff + billingType === BillingType.FixedCycle || + billingType === BillingType.OneOff ) { description = formatFixedPrice({ org: org!, @@ -180,7 +146,7 @@ export const priceToInvoiceDescription = ({ }); } - if (billingType == BillingType.InArrearProrated) { + if (billingType === BillingType.InArrearProrated) { description = formatInArrearProrated({ price, ents, quantity }); } @@ -210,22 +176,22 @@ export const newPriceToInvoiceDescription = ({ let description = ""; if ( - billingType == BillingType.FixedCycle || - billingType == BillingType.OneOff + billingType === BillingType.FixedCycle || + billingType === BillingType.OneOff ) { description = formatFixedPrice({ org, price }); } - if (billingType == BillingType.InArrearProrated) { + if (billingType === BillingType.InArrearProrated) { description = formatInArrearProrated({ price, ents, quantity }); } - if (billingType == BillingType.UsageInArrear) { + if (billingType === BillingType.UsageInArrear) { const ent = getPriceEntitlement(price, ents); description = getFeatureNameWithCapital({ feature: ent.feature }); } - if (billingType == BillingType.UsageInAdvance) { + if (billingType === BillingType.UsageInAdvance) { description = formatPrepaidPrice({ price, ents, quantity: quantity! }); } diff --git a/server/src/internal/mainRouter.ts b/server/src/internal/mainRouter.ts index 324eb4692..be95ddffc 100644 --- a/server/src/internal/mainRouter.ts +++ b/server/src/internal/mainRouter.ts @@ -116,7 +116,7 @@ mainRouter.use( "Content-Type": "application/json", origin: req.get("origin"), "x-client-type": "dashboard", - app_env: req.env, + app_env: req.env || req.headers.app_env, }, }); return client as any; diff --git a/server/src/internal/products/entitlements/EntitlementService.ts b/server/src/internal/products/entitlements/EntitlementService.ts index 5b73617bc..ed7160334 100644 --- a/server/src/internal/products/entitlements/EntitlementService.ts +++ b/server/src/internal/products/entitlements/EntitlementService.ts @@ -1,12 +1,12 @@ -import { DrizzleCli } from "@/db/initDrizzle.js"; import { - Entitlement, + type Entitlement, + type EntitlementWithFeature, entitlements, features, - EntitlementWithFeature, } from "@autumn/shared"; -import { eq, and, inArray } from "drizzle-orm"; +import { and, eq, inArray } from "drizzle-orm"; import { buildConflictUpdateColumns } from "@/db/dbUtils.js"; +import type { DrizzleCli } from "@/db/initDrizzle.js"; export class EntitlementService { static async getByOrg({ @@ -21,14 +21,14 @@ export class EntitlementService { excludeCustom?: boolean; }) { // 1. get features for org - let featuresQuery = db + const featuresQuery = db .select({ internal_id: features.internal_id, }) .from(features) .where(and(eq(features.org_id, orgId), eq(features.env, env))); - let ents = await db.query.entitlements.findMany({ + const ents = await db.query.entitlements.findMany({ where: (entitlements, { inArray }) => and( inArray(entitlements.internal_feature_id, featuresQuery), @@ -64,7 +64,7 @@ export class EntitlementService { db: DrizzleCli; data: Entitlement[] | Entitlement; }) { - if (Array.isArray(data) && data.length == 0) { + if (Array.isArray(data) && data.length === 0) { return; } @@ -78,7 +78,7 @@ export class EntitlementService { db: DrizzleCli; data: Entitlement[] | Entitlement; }) { - if (Array.isArray(data) && data.length == 0) return; + if (Array.isArray(data) && data.length === 0) return; const updateColumns = buildConflictUpdateColumns(entitlements, ["id"]); await db @@ -108,4 +108,31 @@ export class EntitlementService { static async deleteInIds({ db, ids }: { db: DrizzleCli; ids: string[] }) { await db.delete(entitlements).where(inArray(entitlements.id, ids)); } + + static async hasEntityFeatureId({ + db, + orgId, + env, + }: { + db: DrizzleCli; + orgId: string; + env: string; + }) { + const featuresQuery = db + .select({ + internal_id: features.internal_id, + }) + .from(features) + .where(and(eq(features.org_id, orgId), eq(features.env, env))); + + const entitlement = await db.query.entitlements.findFirst({ + where: (entitlements, { inArray, isNotNull }) => + and( + inArray(entitlements.internal_feature_id, featuresQuery), + isNotNull(entitlements.entity_feature_id), + ), + }); + + return !!entitlement; + } } diff --git a/server/src/internal/products/handlers/handleGetProductDeleteInfo.ts b/server/src/internal/products/handlers/handleGetProductDeleteInfo.ts index f6dee1ca9..b17076d20 100644 --- a/server/src/internal/products/handlers/handleGetProductDeleteInfo.ts +++ b/server/src/internal/products/handlers/handleGetProductDeleteInfo.ts @@ -42,8 +42,6 @@ export const handleGetProductDeleteInfo = async (req: any, res: any) => }), ]); - // 2. Get cus products - res.status(200).send({ numVersion: product.version, hasCusProducts: allVersions, diff --git a/server/src/internal/products/handlers/handleUpdateProduct/handleUpdateProduct.ts b/server/src/internal/products/handlers/handleUpdateProduct/handleUpdateProduct.ts index 327a19e3c..35b541ac2 100644 --- a/server/src/internal/products/handlers/handleUpdateProduct/handleUpdateProduct.ts +++ b/server/src/internal/products/handlers/handleUpdateProduct/handleUpdateProduct.ts @@ -77,6 +77,7 @@ export const handleUpdateProductV2 = createRoute({ const newProductV2: ProductV2 = { ...curProductV2, ...body, + group: body.group || curProductV2.group || "", items: body.items || [], free_trial: newFreeTrial || curProductV2.free_trial || undefined, }; @@ -149,7 +150,7 @@ export const handleUpdateProductV2 = createRoute({ // New full product const newFullProduct = await ProductService.getFull({ db, - idOrInternalId: fullProduct.id, + idOrInternalId: body.id || fullProduct.id, orgId: org.id, env, }); @@ -191,17 +192,17 @@ export const handleUpdateProductV2 = createRoute({ jobName: JobName.RewardMigration, payload: { oldPrices: fullProduct.prices, - productId: fullProduct.id, + productId: body.id || fullProduct.id, orgId: org.id, env, }, }); - return c.json( - getProductResponse({ - product: newFullProduct, - features, - }), - ); + const productResponse = await getProductResponse({ + product: newFullProduct, + features, + }); + + return c.json(productResponse); }, }); diff --git a/server/src/internal/products/handlers/handleUpdateProduct/updateProductDetails.ts b/server/src/internal/products/handlers/handleUpdateProduct/updateProductDetails.ts index ec18b84ec..f9beea3be 100644 --- a/server/src/internal/products/handlers/handleUpdateProduct/updateProductDetails.ts +++ b/server/src/internal/products/handlers/handleUpdateProduct/updateProductDetails.ts @@ -205,9 +205,7 @@ export const handleUpdateProductDetails = async ({ } } - if (productDetailsSame(curProduct, newProduct)) { - return; - } + if (productDetailsSame(curProduct, newProduct)) return; if (notNullish(newProduct.id) && newProduct.id !== curProduct.id) { if (customersOnAllVersions.length > 0) { @@ -225,6 +223,7 @@ export const handleUpdateProductDetails = async ({ } // 2. Update product + await ProductService.updateByInternalId({ db, internalId: curProduct.internal_id, diff --git a/server/src/internal/products/internalProductRouter.ts b/server/src/internal/products/internalProductRouter.ts index 0955a5e09..4746509ac 100644 --- a/server/src/internal/products/internalProductRouter.ts +++ b/server/src/internal/products/internalProductRouter.ts @@ -12,6 +12,7 @@ import { OrgService } from "../orgs/OrgService.js"; import { createOrgResponse } from "../orgs/orgUtils.js"; import { RewardProgramService } from "../rewards/RewardProgramService.js"; import { RewardService } from "../rewards/RewardService.js"; +import { EntitlementService } from "./entitlements/EntitlementService.js"; import { handleGetProductDeleteInfo } from "./handlers/handleGetProductDeleteInfo.js"; import { ProductService } from "./ProductService.js"; import { isFeaturePriceItem } from "./product-items/productItemUtils/getItemType.js"; @@ -126,13 +127,21 @@ productRouter.get("/:productId/data2", async (req: any, res) => { const { version } = req.query; const { db, orgId, env } = req; + console.log("[/data2] Request params:", { + productId, + version, + orgId, + env, + featuresLength: req.features?.length, + }); + const [product, latestProduct] = await Promise.all([ ProductService.getFull({ db, idOrInternalId: productId, orgId, env, - version: version ? parseInt(version) : undefined, + version: version ? parseInt(version, 10) : undefined, }), ProductService.getFull({ db, @@ -146,16 +155,32 @@ productRouter.get("/:productId/data2", async (req: any, res) => { throw new ProductNotFoundError({ productId, version }); } + console.log( + "[/data2] Product found:", + product.id, + "Features available:", + req.features?.length || 0, + ); + const productV2 = mapToProductV2({ product: product, - features: req.features, + features: req.features || [], }); - res - .status(200) - .json({ product: productV2, numVersions: latestProduct.version }); - } catch (error) { + res.status(200).json({ + product: { + ...productV2, + archived: latestProduct.archived, + }, + numVersions: latestProduct.version, + }); + } catch (error: any) { console.error("Failed to get product", error); + console.error("Error details:", { + message: error?.message, + stack: error?.stack, + name: error?.name, + }); res.status(500).send(error); } }); @@ -180,6 +205,7 @@ productRouter.get("/:productId/count", async (req: any, res) => { } // Get counts from postgres + const counts = await CusProdReadService.getCounts({ db, internalProductId: product.internal_id, @@ -498,3 +524,24 @@ productRouter.get("/rewards", async (req: any, res: any) => { }); } }); + +productRouter.get("/has_entity_feature_id", async (req: any, res: any) => { + try { + const { db, orgId, env } = req; + + const hasEntityFeatureId = await EntitlementService.hasEntityFeatureId({ + db, + orgId, + env, + }); + + res.status(200).send({ hasEntityFeatureId }); + } catch (error) { + handleFrontendReqError({ + error, + req, + res, + action: "Check has entity feature id", + }); + } +}); diff --git a/server/src/internal/products/product-items/compareItemUtils.ts b/server/src/internal/products/product-items/compareItemUtils.ts deleted file mode 100644 index 1eb89331e..000000000 --- a/server/src/internal/products/product-items/compareItemUtils.ts +++ /dev/null @@ -1,267 +0,0 @@ -import { - Feature, - FeatureItem, - FeatureItemSchema, - FeaturePriceItem, - FeaturePriceItemSchema, - FeatureUsageType, - PriceItem, - PriceItemSchema, - ProductItem, -} from "@autumn/shared"; -import { - isFeatureItem, - isFeaturePriceItem, - isPriceItem, -} from "./productItemUtils/getItemType.js"; -import RecaseError from "@/utils/errorUtils.js"; -import { itemToFeature } from "./productItemUtils/convertItem.js"; - -export const findSimilarItem = ({ - item, - items, -}: { - item: ProductItem; - items: ProductItem[]; -}) => { - // 1. If feature item - if (isFeatureItem(item) || isFeaturePriceItem(item)) { - return items.find((i) => i.feature_id === item.feature_id); - } - - // 2. If price item - if (isPriceItem(item)) { - return items.find((i) => { - return ( - isPriceItem(i) && - i.price == item.price && - i.interval == item.interval && - (i.interval_count || 1) == (item.interval_count || 1) - ); - }); - } - - return null; -}; - -const tiersAreSame = (tiers1: any, tiers2: any) => { - if (!tiers1 && !tiers2) { - return true; - } - - if (!tiers1 || !tiers2) { - return false; - } - - if (tiers1.length !== tiers2.length) { - return false; - } - - return tiers1.every( - (tier: any, index: number) => - tier.amount === tiers2[index].amount && tier.to === tiers2[index].to, - ); -}; - -export const featureItemsAreSame = ({ - item1, - item2, -}: { - item1: FeatureItem; - item2: FeatureItem; -}) => { - // Compare config objects (including rollover) - const configsAreSame = - JSON.stringify(item1.config) === JSON.stringify(item2.config); - - const same = - item1.feature_id === item2.feature_id && - item1.included_usage == item2.included_usage && - item1.interval == item2.interval && - (item1.interval_count || 1) == (item2.interval_count || 1) && - item1.entity_feature_id == item2.entity_feature_id && - item1.reset_usage_when_enabled == item2.reset_usage_when_enabled && - configsAreSame; - - return same; -}; - -export const priceItemsAreSame = ({ - item1, - item2, -}: { - item1: PriceItem; - item2: PriceItem; -}) => { - const same = - item1.price === item2.price && - item1.interval == item2.interval && - (item1.interval_count || 1) == (item2.interval_count || 1); - - if (!same) { - console.log(`Price items different: ${item1.price}`); - } - - return same; -}; - -export const featurePriceItemsAreSame = ({ - item1, - item2, -}: { - item1: FeaturePriceItem; - item2: FeaturePriceItem; -}) => { - const entsSame = { - included_usage: { - condition: item1.included_usage == item2.included_usage, - message: `Included usage different: ${item1.included_usage} != ${item2.included_usage}`, - }, - usage_limit: { - condition: item1.usage_limit == item2.usage_limit, - message: `Usage limit different: ${item1.usage_limit} !== ${item2.usage_limit}`, - }, - reset_usage_when_enabled: { - condition: - item1.reset_usage_when_enabled == item2.reset_usage_when_enabled, - message: `Reset usage when enabled different: ${item1.reset_usage_when_enabled} !== ${item2.reset_usage_when_enabled}`, - }, - config: { - condition: JSON.stringify(item1.config) === JSON.stringify(item2.config), - message: `Config different: ${JSON.stringify(item1.config)} !== ${JSON.stringify(item2.config)}`, - }, - }; - - const pricesSame = { - feature_id: { - condition: item1.feature_id === item2.feature_id, - message: `Feature ID different: ${item1.feature_id} != ${item2.feature_id}`, - }, - interval: { - condition: item1.interval == item2.interval, - message: `Interval different: ${item1.interval} != ${item2.interval}`, - }, - interval_count: { - condition: (item1.interval_count || 1) == (item2.interval_count || 1), - message: `Interval count different: ${item1.interval_count} != ${item2.interval_count}`, - }, - usage_model: { - condition: item1.usage_model === item2.usage_model, - message: `Usage model different: ${item1.usage_model} != ${item2.usage_model}`, - }, - price: { - condition: item1.price == item2.price, - message: `Price different: ${item1.price} != ${item2.price}`, - }, - tiers: { - condition: tiersAreSame(item1.tiers, item2.tiers), - message: `Tiers different`, - }, - billing_units: { - condition: item1.billing_units == item2.billing_units, - message: `Billing units different: ${item1.billing_units} !== ${item2.billing_units}`, - }, - reset_usage_when_enabled: { - condition: - item1.reset_usage_when_enabled == item2.reset_usage_when_enabled, - message: `Reset usage when enabled different: ${item1.reset_usage_when_enabled} !== ${item2.reset_usage_when_enabled}`, - }, - }; - - const same = - Object.values(pricesSame).every((d) => d.condition) && - Object.values(entsSame).every((d) => d.condition); - - const pricesChanged = Object.values(pricesSame).some((d) => !d.condition); - - if (!same) { - console.log( - "Feature price items different:", - Object.values(entsSame) - .filter((d) => !d.condition) - .map((d) => d.message), - Object.values(pricesSame) - .filter((d) => !d.condition) - .map((d) => d.message), - ); - } - - return { - same, - pricesChanged, - }; -}; - -export const itemsAreSame = ({ - item1, - item2, - features, -}: { - item1: ProductItem; - item2: ProductItem; - features?: Feature[]; -}) => { - // 1. If feature item - let same = false; - let pricesChanged = false; - - if (isFeatureItem(item1)) { - if (!isFeatureItem(item2)) { - return { - same: false, - pricesChanged: true, - }; - } - - same = featureItemsAreSame({ - item1: FeatureItemSchema.parse(item1), - item2: item2 as FeatureItem, - }); - - pricesChanged = false; - } - - if (isFeaturePriceItem(item1)) { - if (!isFeaturePriceItem(item2)) { - return { - same: false, - pricesChanged: true, - }; - } - - const { same: same_, pricesChanged: pricesChanged_ } = - featurePriceItemsAreSame({ - item1: FeaturePriceItemSchema.parse(item1), - item2: FeaturePriceItemSchema.parse(item2), - }); - - same = same_; - - let feature = itemToFeature({ - item: item1, - features: features || [], - }); - - if (feature?.config?.usage_type === FeatureUsageType.Continuous) { - pricesChanged = true; - } else { - pricesChanged = pricesChanged_; - } - } - - // 2. If price item - if (isPriceItem(item1)) { - same = priceItemsAreSame({ - item1: PriceItemSchema.parse(item1), - item2: PriceItemSchema.parse(item2), - }); - if (!same) { - pricesChanged = true; - } - } - - return { - same, - pricesChanged: !same && pricesChanged, - }; -}; diff --git a/server/src/internal/products/product-items/itemIntervalUtils.ts b/server/src/internal/products/product-items/itemIntervalUtils.ts deleted file mode 100644 index 2f3d4e3c0..000000000 --- a/server/src/internal/products/product-items/itemIntervalUtils.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { nullish } from "@/utils/genUtils.js"; -import { - BillingInterval, - EntInterval, - ProductItem, - ProductItemFeatureType, - ProductItemInterval, -} from "@autumn/shared"; - -export const billingToItemInterval = (billingInterval: BillingInterval) => { - if (billingInterval == BillingInterval.OneOff) { - return null; - } - - return billingInterval as unknown as ProductItemInterval; -}; - -export const entToItemInterval = (entInterval?: EntInterval) => { - if (nullish(entInterval)) { - return null; - } - - if (entInterval == EntInterval.Lifetime) { - return null; - } - - return entInterval as unknown as ProductItemInterval; -}; - -export const itemToBillingInterval = (item: ProductItem) => { - if (nullish(item.interval)) { - return BillingInterval.OneOff; - } - - return item.interval; -}; - -export const itemToEntInterval = (item: ProductItem) => { - if (nullish(item.interval)) { - return EntInterval.Lifetime; - } - - if (item.feature_type == ProductItemFeatureType.ContinuousUse) { - return EntInterval.Lifetime; - } - - return item.interval; -}; diff --git a/server/src/internal/products/product-items/productItemUtils.ts b/server/src/internal/products/product-items/productItemUtils.ts index 2169b98ee..66fd8f402 100644 --- a/server/src/internal/products/product-items/productItemUtils.ts +++ b/server/src/internal/products/product-items/productItemUtils.ts @@ -1,24 +1,15 @@ -import { notNullish, nullish } from "@/utils/genUtils.js"; -import { - EntInterval, - ProductItemInterval, - BillingInterval, - ProductItem, - ProductItemType, - UsageModel, - Infinite, - ProductItemFeatureType, - Feature, - FeatureType, -} from "@autumn/shared"; -import { isFeatureItem } from "./productItemUtils/getItemType.js"; import { + type BillingInterval, billingToItemInterval, + EntInterval, entToItemInterval, -} from "./itemIntervalUtils.js"; + type ProductItem, + type ProductItemFeatureType, + type UsageModel, +} from "@autumn/shared"; import { calculateProrationAmount, - Proration, + type Proration, } from "@/internal/invoices/prorationUtils.js"; export const itemToPriceOrTiers = ({ @@ -89,10 +80,10 @@ export const constructFeatureItem = ({ entitlement_id?: string; entity_feature_id?: string; }) => { - let item: ProductItem = { + const item: ProductItem = { feature_id, included_usage: included_usage as number, - interval: entToItemInterval(interval), + interval: entToItemInterval({ entInterval: interval }), entitlement_id, entity_feature_id, }; @@ -109,7 +100,7 @@ export const constructPriceItem = ({ interval: BillingInterval | null; intervalCount?: number; }) => { - let item: ProductItem = { + const item: ProductItem = { price: price, interval: interval as any, interval_count: intervalCount || 1, @@ -140,14 +131,14 @@ export const constructFeaturePriceItem = ({ reset_usage_when_enabled?: boolean; entity_feature_id?: string; }) => { - let item: ProductItem & { + const item: ProductItem & { included_usage: number; } = { feature_id, feature_type, included_usage: included_usage as number, price, - interval: billingToItemInterval(interval), + interval: billingToItemInterval({ billingInterval: interval }), usage_model, billing_units, reset_usage_when_enabled, diff --git a/server/src/internal/products/product-items/productItemUtils/itemToPriceAndEnt.ts b/server/src/internal/products/product-items/productItemUtils/itemToPriceAndEnt.ts index c8363b2d6..8ca283ae6 100644 --- a/server/src/internal/products/product-items/productItemUtils/itemToPriceAndEnt.ts +++ b/server/src/internal/products/product-items/productItemUtils/itemToPriceAndEnt.ts @@ -20,16 +20,16 @@ import { UsageModel, type UsagePriceConfig, } from "@autumn/shared"; +import { + itemToBillingInterval, + itemToEntInterval, +} from "@shared/utils/productV2Utils/productItemUtils/itemIntervalUtils.js"; import { pricesAreSame } from "@/internal/products/prices/priceInitUtils.js"; import { getBillingType } from "@/internal/products/prices/priceUtils.js"; import RecaseError from "@/utils/errorUtils.js"; import { generateId, notNullish, nullish } from "@/utils/genUtils.js"; import { entsAreSame } from "../../entitlements/entitlementUtils.js"; import { shouldProrate } from "../../prices/priceUtils/prorationConfigUtils.js"; -import { - itemToBillingInterval, - itemToEntInterval, -} from "../itemIntervalUtils.js"; import { itemCanBeProrated } from "./classifyItem.js"; import { isFeatureItem, @@ -72,8 +72,8 @@ export const toPrice = ({ }) => { const config: FixedPriceConfig = { type: PriceType.Fixed, - amount: notNullish(item.price) ? item.price! : item.tiers![0].amount!, - interval: itemToBillingInterval(item) as BillingInterval, + amount: notNullish(item.price) ? item.price : item.tiers![0].amount, + interval: itemToBillingInterval({ item }) as BillingInterval, interval_count: item.interval_count || 1, stripe_product_id: null, feature_id: null, @@ -139,7 +139,7 @@ export const toFeature = ({ ? AllowanceType.Unlimited : AllowanceType.Fixed, - interval: isBoolean ? null : (itemToEntInterval(item) as EntInterval), + interval: isBoolean ? null : (itemToEntInterval({ item }) as EntInterval), interval_count: item.interval_count || 1, carry_from_previous: !resetUsage, @@ -197,7 +197,7 @@ export const toFeatureAndPrice = ({ allowance: (item.included_usage as number) || 0, allowance_type: AllowanceType.Fixed, - interval: itemToEntInterval(item) as EntInterval, + interval: itemToEntInterval({ item }) as EntInterval, interval_count: item.interval_count || 1, carry_from_previous: !resetUsage, @@ -217,18 +217,18 @@ export const toFeatureAndPrice = ({ }; } - const entInterval = itemToEntInterval(item); + const entInterval = itemToEntInterval({ item }); const config: UsagePriceConfig = { type: PriceType.Usage, bill_when: - item.usage_model == UsageModel.Prepaid + item.usage_model === UsageModel.Prepaid ? BillWhen.StartOfPeriod : BillWhen.EndOfPeriod, billing_units: item.billing_units || 1, - should_prorate: entInterval == EntInterval.Lifetime, + should_prorate: entInterval === EntInterval.Lifetime, internal_feature_id: internalFeatureId, feature_id: item.feature_id!, @@ -240,7 +240,7 @@ export const toFeatureAndPrice = ({ }, ] : (item.tiers as any), - interval: itemToBillingInterval(item) as BillingInterval, + interval: itemToBillingInterval({ item }) as BillingInterval, interval_count: item.interval_count || 1, }; diff --git a/server/src/internal/products/product-items/validateProductItems.ts b/server/src/internal/products/product-items/validateProductItems.ts index 31b1da242..6c0de6fd8 100644 --- a/server/src/internal/products/product-items/validateProductItems.ts +++ b/server/src/internal/products/product-items/validateProductItems.ts @@ -9,13 +9,15 @@ import { type ProductItem, ProductItemInterval, ProductItemSchema, + type RolloverConfig, + RolloverDuration, UsageModel, } from "@autumn/shared"; +import { itemToEntInterval } from "@shared/utils/productV2Utils/productItemUtils/itemIntervalUtils.js"; import { StatusCodes } from "http-status-codes"; import RecaseError from "@/utils/errorUtils.js"; import { notNullish, nullish } from "@/utils/genUtils.js"; import { createFeaturesFromItems } from "./createFeaturesFromItems.js"; -import { itemToEntInterval } from "./itemIntervalUtils.js"; import { isBooleanFeatureItem, isFeatureItem, @@ -31,6 +33,7 @@ const validateProductItem = ({ features: Feature[]; }) => { item = ProductItemSchema.parse(item); + const feature = features.find((f) => f.id === item.feature_id); if (nullish(item.feature_id) && nullish(item.price) && nullish(item.tiers)) { throw new RecaseError({ @@ -50,7 +53,7 @@ const validateProductItem = ({ } // 2. If amount is set, it must be greater than 0 - if (notNullish(item.price) && item.price! <= 0) { + if (notNullish(item.price) && item.price <= 0) { throw new RecaseError({ message: `Price must be greater than 0`, code: ErrCode.InvalidProductItem, @@ -69,18 +72,6 @@ const validateProductItem = ({ statusCode: StatusCodes.BAD_REQUEST, }); } - - // if (item.tiers) { - // item.tiers.forEach((tier) => { - // if (tier.amount.toString().split(".")[1]?.length > 2) { - // throw new RecaseError({ - // message: `One off prices can have at most 2 decimal places`, - // code: ErrCode.InvalidInputs, - // statusCode: StatusCodes.BAD_REQUEST, - // }); - // } - // }); - // } } // 4. If it's a feature item, it should have included usage as number or inf @@ -91,7 +82,7 @@ const validateProductItem = ({ notNullish(item.included_usage) ) { throw new RecaseError({ - message: `Included usage must be a number or '${Infinite}'`, + message: `Included usage for feature ${item.feature_id} must be a number or '${Infinite}'`, code: ErrCode.InvalidInputs, statusCode: StatusCodes.BAD_REQUEST, }); @@ -111,6 +102,16 @@ const validateProductItem = ({ } } + if (isFeatureItem(item)) { + if (item.included_usage === 0 && feature?.type !== FeatureType.Boolean) { + throw new RecaseError({ + message: `Included usage for feature ${item.feature_id} must be greater than 0`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + } + // 5. If it's a price, can't have day, minute or hour interval if (isFeaturePriceItem(item) || isPriceItem(item)) { if ( @@ -126,6 +127,52 @@ const validateProductItem = ({ } } + if ((isPriceItem(item) || isFeaturePriceItem(item)) && item.price === 0) { + throw new RecaseError({ + message: `Price must be 0 or greater`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + + if (isFeaturePriceItem(item) && nullish(item.usage_model)) { + throw new RecaseError({ + message: `Usage model is required for priced features. Please select one for the feature ${item.feature_id}`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + + if (isFeaturePriceItem(item) && item.tiers) { + if ( + item.tiers.some((x) => { + return x.amount <= 0; + }) + ) { + throw new RecaseError({ + message: `Price must be a number and greater than 0 for feature ${item.feature_id}`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + + if (item.included_usage === Infinite) { + throw new RecaseError({ + message: `Included usage can't be '${Infinite}' for tiered prices`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + + if (item.billing_units && item.billing_units <= 0) { + throw new RecaseError({ + message: `Billing units must be greater than 0`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + } + if ( item.usage_model === UsageModel.Prepaid && item.config?.on_increase === OnIncrease.BillImmediately @@ -137,13 +184,60 @@ const validateProductItem = ({ }); } - // Rollover - // if (item.config?.rollover) { - // let rollover = item.config.rollover; + // Rollover validation + if (item.config?.rollover) { + const rollover = item.config.rollover as RolloverConfig; - // if (rollover.duration == RolloverDuration.Month) { - // } - // } + // Ensure rollover is only allowed for items with intervals and included usage + if ( + item.interval === null || + nullish(item.included_usage) || + item.included_usage === 0 + ) { + throw new RecaseError({ + message: + "Rollover is only allowed for items with intervals and included usage", + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + + // Validate rollover max amount + if (rollover.max !== null && typeof rollover.max === "number") { + if (rollover.max < 0) { + throw new RecaseError({ + message: "Rollover maximum amount must be positive", + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + } + + // Validate rollover length for monthly durations + if (rollover.duration === RolloverDuration.Month) { + if (typeof rollover.length !== "number" || rollover.length < 0) { + throw new RecaseError({ + message: + "Rollover length must be a positive number for monthly durations", + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + } + + // Set length to 0 for forever duration + if (rollover.duration === RolloverDuration.Forever) { + rollover.length = 0; + } + + if (notNullish(item.usage_limit) && item.usage_limit <= 0) { + throw new RecaseError({ + message: `Usage limit must be greater than 0`, + code: ErrCode.InvalidInputs, + statusCode: StatusCodes.BAD_REQUEST, + }); + } + } }; export const validateProductItems = ({ @@ -185,7 +279,7 @@ export const validateProductItems = ({ for (let index = 0; index < newItems.length; index++) { const item = newItems[index]; - const entInterval = itemToEntInterval(item); + const entInterval = itemToEntInterval({ item }); const intervalCount = item.interval_count || 1; if (isFeaturePriceItem(item) && entInterval === EntInterval.Lifetime) { @@ -225,7 +319,7 @@ export const validateProductItems = ({ return ( i.feature_id === item.feature_id && index2 !== index && - itemToEntInterval(i) === entInterval && + itemToEntInterval({ item: i }) === entInterval && (i.interval_count || 1) === intervalCount && i.entity_feature_id === item.entity_feature_id ); diff --git a/server/src/internal/products/productUtils/compareProductUtils.ts b/server/src/internal/products/productUtils/compareProductUtils.ts index f72d85b2c..27e773b78 100644 --- a/server/src/internal/products/productUtils/compareProductUtils.ts +++ b/server/src/internal/products/productUtils/compareProductUtils.ts @@ -7,12 +7,12 @@ import { type ProductItem, type ProductV2, } from "@autumn/shared"; -import RecaseError from "@/utils/errorUtils.js"; -import { freeTrialsAreSame } from "../free-trials/freeTrialUtils.js"; import { findSimilarItem, itemsAreSame, -} from "../product-items/compareItemUtils.js"; +} from "@shared/utils/productV2Utils/compareProductUtils.ts/compareItemUtils.js"; +import RecaseError from "@/utils/errorUtils.js"; +import { freeTrialsAreSame } from "../free-trials/freeTrialUtils.js"; import { isFeaturePriceItem, isPriceItem, diff --git a/server/src/utils/auth.ts b/server/src/utils/auth.ts index 1fdd25b64..185a10cd4 100644 --- a/server/src/utils/auth.ts +++ b/server/src/utils/auth.ts @@ -83,7 +83,8 @@ export const auth = betterAuth({ socialProviders: { google: { clientId: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, + clientSecret: process.env.GOOGLE_CLIENT_SECRET, + redirectURI: `${process.env.SERVER_URL}/api/auth/callback/google`, }, }, plugins: [ diff --git a/shared/CLAUDE.md b/shared/CLAUDE.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/shared/api/customers/cusProducts/changes/V0_2_CusProductChange.ts b/shared/api/customers/cusProducts/changes/V0_2_CusProductChange.ts index eea5ea245..a5819589f 100644 --- a/shared/api/customers/cusProducts/changes/V0_2_CusProductChange.ts +++ b/shared/api/customers/cusProducts/changes/V0_2_CusProductChange.ts @@ -8,7 +8,7 @@ import { TierInfinite } from "@models/productV2Models/productItemModels/productI import { isFeatureItem, isPriceItem, -} from "@utils/productDisplayUtils/getItemType.js"; +} from "@utils/productV2Utils/productItemUtils/getItemType.js"; import { notNullish } from "@utils/utils.js"; import { z } from "zod/v4"; import type { CusProductLegacyData } from "../cusProductLegacyData.js"; diff --git a/shared/api/errors/classes/featureErrClasses.ts b/shared/api/errors/classes/featureErrClasses.ts new file mode 100644 index 000000000..08df3d37e --- /dev/null +++ b/shared/api/errors/classes/featureErrClasses.ts @@ -0,0 +1,29 @@ +import { RecaseError } from "../base/RecaseError.js"; +import { FeatureErrorCode } from "../codes/featureErrCodes.js"; + +/** + * Product not found error + */ +export class FeatureAlreadyExistsError extends RecaseError { + constructor(opts: { productId: string; version?: string }) { + super({ + message: `Product ${opts.productId} ${opts.version ? ` (version ${opts.version})` : ""} not found`, + code: FeatureErrorCode.FeatureAlreadyExists, + statusCode: 404, + }); + this.name = "ProductNotFoundError"; + } +} + +/** + * Feature not found error + */ +export class FeatureNotFoundError extends RecaseError { + constructor(opts: { featureId: string }) { + super({ + message: `Feature ${opts.featureId} not found`, + code: FeatureErrorCode.FeatureNotFound, + statusCode: 404, + }); + } +} diff --git a/shared/api/errors/codes/featureErrCodes.ts b/shared/api/errors/codes/featureErrCodes.ts new file mode 100644 index 000000000..ee05af38e --- /dev/null +++ b/shared/api/errors/codes/featureErrCodes.ts @@ -0,0 +1,7 @@ +export const FeatureErrorCode = { + FeatureNotFound: "feature_not_found", + FeatureAlreadyExists: "feature_already_exists", +} as const; + +export type FeatureErrorCode = + (typeof FeatureErrorCode)[keyof typeof FeatureErrorCode]; diff --git a/shared/api/features/apiFeature.ts b/shared/api/features/apiFeature.ts index c630efdd9..9050c1f34 100644 --- a/shared/api/features/apiFeature.ts +++ b/shared/api/features/apiFeature.ts @@ -2,6 +2,7 @@ import { z } from "zod/v4"; export enum ApiFeatureType { Static = "static", // legacy (will deprecate) + Boolean = "boolean", SingleUsage = "single_use", ContinuousUse = "continuous_use", diff --git a/shared/api/features/updateFeatureParams.ts b/shared/api/features/updateFeatureParams.ts index f50325b61..a683e7c3c 100644 --- a/shared/api/features/updateFeatureParams.ts +++ b/shared/api/features/updateFeatureParams.ts @@ -1,6 +1,29 @@ -import { ApiFeatureSchema } from "@api/features/apiFeature.js"; -import type { z } from "zod/v4"; +import { z } from "zod/v4"; +import { ApiFeatureType } from "./apiFeature.js"; -export const UpdateFeatureParamsSchema = ApiFeatureSchema.partial(); +export const UpdateFeatureParamsSchema = z.object({ + id: z.string().optional(), + name: z.string().nullish(), + type: z.enum(ApiFeatureType).optional(), + archived: z.boolean().optional(), + + credit_schema: z + .array( + z.object({ + metered_feature_id: z.string(), + credit_cost: z.number(), + }), + ) + .nullish(), + + display: z + .object({ + singular: z.string(), + plural: z.string(), + }) + .optional(), + + event_names: z.array(z.string()).optional(), +}); export type UpdateFeatureParams = z.infer; diff --git a/shared/api/models.ts b/shared/api/models.ts index c80709041..d5a04ec7e 100644 --- a/shared/api/models.ts +++ b/shared/api/models.ts @@ -30,7 +30,8 @@ export * from "./customers/previousVersions/apiCustomerV2.js"; export * from "./entities/apiEntity.js"; // NOTE: entitiesOpenApi.js is NOT exported here - it's only imported by openapi.ts for spec generation export * from "./entities/entityOpModels.js"; - +export * from "./errors/classes/featureErrClasses.js"; +export * from "./errors/codes/featureErrCodes.js"; // Features export * from "./features/apiFeature.js"; export * from "./features/featureOpModels.js"; diff --git a/shared/api/products/productOpModels.ts b/shared/api/products/productOpModels.ts index f56d9c69c..2e3c4d91e 100644 --- a/shared/api/products/productOpModels.ts +++ b/shared/api/products/productOpModels.ts @@ -35,7 +35,7 @@ export const UpdateProductV2ParamsSchema = z.object({ is_add_on: z.boolean().optional(), is_default: z.boolean().optional(), version: z.number().optional(), - group: z.string().optional(), + group: z.string().nullish(), archived: z.boolean().optional(), items: z.array(CreateProductItemParamsSchema).optional(), diff --git a/shared/index.ts b/shared/index.ts index 0d6412b6c..61724e443 100644 --- a/shared/index.ts +++ b/shared/index.ts @@ -122,6 +122,8 @@ export * from "./models/productV2Models/productItemModels/productItemEnums.js"; export * from "./models/productV2Models/productItemModels/productItemModels.js"; // 6. Product V2 Models export * from "./models/productV2Models/productV2Models.js"; +// 7. Product V3 Models +export * from "./models/productV3Models/productV3Response.js"; export * from "./models/rewardModels/referralModels/referralCodeTable.js"; export * from "./models/rewardModels/referralModels/referralModels.js"; export * from "./models/rewardModels/referralModels/rewardRedemptionTable.js"; @@ -140,8 +142,12 @@ export * from "./models/subModels/subTable.js"; export * from "./utils/displayUtils.js"; export * from "./utils/index.js"; export * from "./utils/intervalUtils.js"; -export * from "./utils/productDisplayUtils/getProductItemRes.js"; export * from "./utils/productDisplayUtils/sortProductItems.js"; +export * from "./utils/productDisplayUtils.js"; export * from "./utils/productUtils/priceToInvoiceAmount.js"; export * from "./utils/productUtils.js"; +export * from "./utils/productV2Utils/compareProductUtils.ts/compareProductUtils.js"; +export * from "./utils/productV2Utils/productItemUtils/getProductItemRes.js"; +export * from "./utils/productV2Utils/productItemUtils/itemIntervalUtils.js"; +export * from "./utils/productV3Utils/mapToProductV3.js"; export * from "./utils/rewardUtils/rewardMigrationUtils.js"; diff --git a/shared/models/featureModels/featureModels.ts b/shared/models/featureModels/featureModels.ts index 54068f727..fb89cba7d 100644 --- a/shared/models/featureModels/featureModels.ts +++ b/shared/models/featureModels/featureModels.ts @@ -8,9 +8,11 @@ export const FeatureSchema = z.object({ created_at: z.number(), env: z.nativeEnum(AppEnv), - id: z.string().nonempty(), - name: z.string().nonempty(), - type: z.nativeEnum(FeatureType), + id: z.string().nonempty("Features must have an ID"), + name: z.string().nonempty("Features must have a name"), + type: z.nativeEnum(FeatureType, { + message: "Features must have a type", + }), config: z.any(), display: z .object({ diff --git a/shared/models/productModels/freeTrialModels/freeTrialModels.ts b/shared/models/productModels/freeTrialModels/freeTrialModels.ts index 4bdadcdfd..d05c57854 100644 --- a/shared/models/productModels/freeTrialModels/freeTrialModels.ts +++ b/shared/models/productModels/freeTrialModels/freeTrialModels.ts @@ -17,7 +17,10 @@ export const CreateFreeTrialSchema = z.object({ length: z .string() .or(z.number()) - .transform((val) => Number(val)), + .transform((val) => Number(val)) + .refine((val) => val > 0, { + message: "Free trial length must be greater than 0", + }), unique_fingerprint: z.boolean().default(false), duration: z.nativeEnum(FreeTrialDuration).default(FreeTrialDuration.Day), card_required: z.boolean().default(true), diff --git a/shared/models/productModels/priceModels/priceConfig/fixedPriceConfig.ts b/shared/models/productModels/priceModels/priceConfig/fixedPriceConfig.ts index df6a04bfa..af84bad67 100644 --- a/shared/models/productModels/priceModels/priceConfig/fixedPriceConfig.ts +++ b/shared/models/productModels/priceModels/priceConfig/fixedPriceConfig.ts @@ -1,5 +1,6 @@ import { z } from "zod/v4"; import { BillingInterval } from "../priceEnums.js"; +import { UsageTierSchema } from "./usagePriceConfig.js"; export const FixedPriceConfigSchema = z.object({ type: z.string(), @@ -9,6 +10,7 @@ export const FixedPriceConfigSchema = z.object({ // Usage price fields billing_units: z.number().nullish(), + usage_tiers: z.array(UsageTierSchema).nullish(), stripe_price_id: z.string().nullish(), stripe_empty_price_id: z.string().nullish(), stripe_product_id: z.null().or(z.undefined()), diff --git a/shared/models/productModels/productModels.ts b/shared/models/productModels/productModels.ts index 6e8c110ae..71e78cd0c 100644 --- a/shared/models/productModels/productModels.ts +++ b/shared/models/productModels/productModels.ts @@ -7,7 +7,7 @@ import { PriceSchema } from "./priceModels/priceModels.js"; export const ProductSchema = z.object({ id: z.string(), - name: z.string(), + name: z.string().min(1, "Product name cannot be empty"), is_add_on: z.boolean(), is_default: z.boolean(), version: z.number(), @@ -30,7 +30,10 @@ export const ProductSchema = z.object({ export const CreateProductSchema = z.object({ id: z.string(), - name: z.string().default(""), + name: z + .string() + .min(1, "Product name cannot be empty") + .default("Untitled Product"), is_add_on: z.boolean().default(false), is_default: z.boolean().default(false), version: z.number().optional().default(1), @@ -39,10 +42,10 @@ export const CreateProductSchema = z.object({ export const UpdateProductSchema = z.object({ id: z.string().nullish(), - name: z.string().optional(), + name: z.string().min(1, "Product name cannot be empty").optional(), is_add_on: z.boolean().optional(), is_default: z.boolean().optional(), - group: z.string().optional(), + group: z.string().nullish(), archived: z.boolean().optional(), }); diff --git a/shared/models/productV2Models/productItemModels/featurePriceItem.ts b/shared/models/productV2Models/productItemModels/featurePriceItem.ts index 4b203dca9..4c3dafae2 100644 --- a/shared/models/productV2Models/productItemModels/featurePriceItem.ts +++ b/shared/models/productV2Models/productItemModels/featurePriceItem.ts @@ -16,6 +16,7 @@ export const FeaturePriceItemSchema = ProductItemSchema.pick({ reset_usage_when_enabled: true, usage_limit: true, config: true, + entity_feature_id: true, }).extend({ feature_id: z.string().nonempty(), included_usage: z.number().nonnegative().nullish(), diff --git a/shared/models/productV2Models/productItemModels/productItemModels.ts b/shared/models/productV2Models/productItemModels/productItemModels.ts index 5a5c136bd..38c76a944 100644 --- a/shared/models/productV2Models/productItemModels/productItemModels.ts +++ b/shared/models/productV2Models/productItemModels/productItemModels.ts @@ -71,7 +71,12 @@ export const ProductItemSchema = z.object({ feature_id: z.string().nullish(), feature_type: z.nativeEnum(ProductItemFeatureType).nullish(), included_usage: z.union([z.number(), z.literal(Infinite)]).nullish(), - interval: z.nativeEnum(ProductItemInterval).nullish(), + interval: z.preprocess((val) => { + if (val === "") { + throw new Error("Interval cannot be empty."); + } + return val; + }, z.enum(ProductItemInterval).nullish()), interval_count: z.number().nullish(), entity_feature_id: z.string().nullish(), diff --git a/shared/models/productV2Models/productV2Models.ts b/shared/models/productV2Models/productV2Models.ts index d2f6ae29c..b9bdfda2e 100644 --- a/shared/models/productV2Models/productV2Models.ts +++ b/shared/models/productV2Models/productV2Models.ts @@ -1,4 +1,5 @@ import { z } from "zod/v4"; +import { AppEnv } from "../genModels/genEnums.js"; import { FreeTrialSchema } from "../productModels/freeTrialModels/freeTrialModels.js"; import { ProductItemSchema } from "./productItemModels/productItemModels.js"; @@ -11,6 +12,7 @@ export const ProductV2Schema = z.object({ is_default: z.boolean(), version: z.number().default(1), group: z.string(), + env: z.nativeEnum(AppEnv), free_trial: FreeTrialSchema.nullish(), items: z.array(ProductItemSchema), diff --git a/shared/models/productV3Models/productV3Response.ts b/shared/models/productV3Models/productV3Response.ts new file mode 100644 index 000000000..90b714094 --- /dev/null +++ b/shared/models/productV3Models/productV3Response.ts @@ -0,0 +1,34 @@ +import { z } from "zod/v4"; +import { ApiProductPropertiesSchema } from "../../api/products/apiProduct.js"; +import { AttachScenario } from "../checkModels/checkPreviewModels.js"; +import { AppEnv } from "../genModels/genEnums.js"; +import { ProductItemInterval } from "../productV2Models/productItemModels/productItemModels.js"; + +export const PlanResponseSchema = z.object({ + id: z.string(), + name: z.string().nullable(), + description: z.string().nullable(), + group: z.string().nullable(), + env: z.nativeEnum(AppEnv), + is_add_on: z.boolean(), + is_default: z.boolean(), + archived: z.boolean().optional(), + version: z.number(), + created_at: z.number(), + + price: z + .object({ + amount: z.number(), + interval: z.nativeEnum(ProductItemInterval).nullable(), + }) + .nullable(), + + // features: + + // items: z.array(ProductItemResponseSchema), + // free_trial: FreeTrialResponseSchema.nullable(), + // base_variant_id: z.string().nullable(), + + scenario: z.nativeEnum(AttachScenario).optional(), + properties: ApiProductPropertiesSchema.optional(), +}); diff --git a/shared/package.json b/shared/package.json index fb78f7306..840a86285 100644 --- a/shared/package.json +++ b/shared/package.json @@ -29,6 +29,8 @@ "drizzle-kit": "^0.31.1", "drizzle-orm": "^0.43.1", "drizzle-zod": "^0.8.2", + "stripe": "^18.4.0", + "yaml": "^2.8.1", "zod-openapi": "^5.4.1" }, "peerDependencies": { diff --git a/shared/utils/displayUtils.ts b/shared/utils/displayUtils.ts index bf27a4dbf..64e66ec3a 100644 --- a/shared/utils/displayUtils.ts +++ b/shared/utils/displayUtils.ts @@ -1,6 +1,6 @@ -import { Feature } from "../models/featureModels/featureModels.js"; -import { Organization } from "../models/orgModels/orgTable.js"; import { format } from "date-fns"; +import type { Feature } from "../models/featureModels/featureModels.js"; +import type { Organization } from "../models/orgModels/orgTable.js"; import { notNullish, nullish } from "./utils.js"; export const getFeatureName = ({ feature, @@ -20,7 +20,7 @@ export const getFeatureName = ({ let featureName = feature.name || ""; if (feature.display) { - let finalPlural; + let finalPlural: boolean | undefined; // Case 1: If units and nullish plural if (notNullish(units) && nullish(plural)) { finalPlural = units !== 1; @@ -93,7 +93,7 @@ export const usageToFeatureName = ({ }) => { const { singular, plural } = getSingularAndPlural({ feature }); - if (usage == 1) { + if (usage === 1) { return singular; } @@ -124,7 +124,7 @@ export const getFeatureInvoiceDescription = ({ if (isPrepaid && billingUnits && billingUnits > 1) { result = `${usageStr} x ${billingUnits} ${plural}`; // eg. 4 x 100 credits } else { - if (usage == 1) { + if (usage === 1) { result = `${usageStr} ${singular}`; // eg. 1 credit } else { result = `${usageStr} ${plural}`; // eg. 4 credits @@ -148,17 +148,20 @@ export const formatAmount = ({ amount, maxFractionDigits = 2, minFractionDigits = 0, + amountFormatOptions, }: { org?: Organization; currency?: string | null; amount: number; maxFractionDigits?: number; minFractionDigits?: number; + amountFormatOptions?: Intl.NumberFormatOptions; }) => { return new Intl.NumberFormat(undefined, { style: "currency", currency: currency || org?.default_currency || "USD", minimumFractionDigits: minFractionDigits || 0, maximumFractionDigits: maxFractionDigits || 2, + ...amountFormatOptions, }).format(amount); }; diff --git a/shared/utils/featureUtils.ts b/shared/utils/featureUtils.ts index 2078f1eae..35d02758b 100644 --- a/shared/utils/featureUtils.ts +++ b/shared/utils/featureUtils.ts @@ -2,6 +2,11 @@ import { ApiFeatureSchema } from "@api/features/apiFeature.js"; import type { CreditSchemaItem } from "../models/featureModels/featureConfig/creditConfig.js"; import { FeatureType } from "../models/featureModels/featureEnums.js"; import type { Feature } from "../models/featureModels/featureModels.js"; +// import { +// constructBooleanFeature, +// constructCreditSystem, +// constructMeteredFeature, +// } from "./featureUtils/constructFeatureUtils.js"; export const toApiFeature = ({ feature }: { feature: Feature }) => { // return FeatureResponseSchema.parse(feature); diff --git a/shared/utils/featureUtils/apiFeatureToDbFeature.ts b/shared/utils/featureUtils/apiFeatureToDbFeature.ts new file mode 100644 index 000000000..ce22864f9 --- /dev/null +++ b/shared/utils/featureUtils/apiFeatureToDbFeature.ts @@ -0,0 +1,106 @@ +import { type ApiFeature, ApiFeatureType } from "@api/features/apiFeature.js"; +import type { UpdateFeatureParams } from "@api/features/updateFeatureParams.js"; +import { + FeatureType, + type FeatureUsageType, +} from "@models/featureModels/featureEnums.js"; +import type { Feature } from "@models/featureModels/featureModels.js"; +import { AppEnv } from "@models/genModels/genEnums.js"; + +export const apiFeatureToDbFeature = ({ + apiFeature, + originalFeature, +}: { + apiFeature: ApiFeature | UpdateFeatureParams; + originalFeature?: Feature; +}) => { + // Replace body... + let featureType = apiFeature.type as unknown as FeatureType; + let usageType: FeatureUsageType | undefined; + if ( + apiFeature.type === ApiFeatureType.SingleUsage || + apiFeature.type === ApiFeatureType.ContinuousUse + ) { + featureType = FeatureType.Metered; + usageType = apiFeature.type as unknown as FeatureUsageType; + } + + const newConfig = + featureType === FeatureType.Boolean + ? undefined + : originalFeature?.config || {}; + + if (usageType) { + newConfig.usage_type = usageType; + } + + if (apiFeature.credit_schema) { + newConfig.schema = apiFeature.credit_schema.map((credit) => ({ + metered_feature_id: credit.metered_feature_id, + credit_amount: credit.credit_cost, + })); + } + + return { + internal_id: originalFeature?.internal_id ?? "", + org_id: originalFeature?.org_id ?? "", + created_at: originalFeature?.created_at ?? Date.now(), + env: originalFeature?.env ?? AppEnv.Sandbox, + + id: apiFeature.id ?? originalFeature?.id ?? "", + name: apiFeature.name ?? originalFeature?.name ?? "", + type: featureType, + config: newConfig, + archived: apiFeature.archived ?? originalFeature?.archived ?? false, + event_names: [], + } satisfies Feature; +}; + +// export const fromApiFeature = ({ +// apiFeature, +// orgId, +// env, +// }: { +// apiFeature: ApiFeature; +// orgId: string; +// env: AppEnv; +// }) => { +// const isMetered = +// apiFeature.type === ApiFeatureType.SingleUsage || +// apiFeature.type === ApiFeatureType.ContinuousUse; + +// const featureType: FeatureType = isMetered +// ? FeatureType.Metered +// : (apiFeature.type as unknown as FeatureType); + +// if (isMetered) { +// return constructMeteredFeature({ +// featureId: apiFeature.id, +// name: apiFeature.name || "", +// usageType: apiFeature.type as unknown as FeatureUsageType, +// orgId, +// env, +// }); +// } + +// if (featureType === FeatureType.CreditSystem) { +// if (!apiFeature.credit_schema || apiFeature.credit_schema.length === 0) { +// throw new Error("Credit system schema is required"); +// } + +// return constructCreditSystem({ +// featureId: apiFeature.id, +// name: apiFeature.name || "", +// orgId, +// env, +// schema: apiFeature.credit_schema!, +// }); +// } + +// return constructBooleanFeature({ +// featureId: apiFeature.id, +// name: apiFeature.name || "", +// orgId, +// env, +// }); +// }; diff --git a/shared/utils/featureUtils/constructFeatureUtils.ts b/shared/utils/featureUtils/constructFeatureUtils.ts new file mode 100644 index 000000000..249cc51f9 --- /dev/null +++ b/shared/utils/featureUtils/constructFeatureUtils.ts @@ -0,0 +1,152 @@ +// import { +// AggregateType, +// type AppEnv, +// type Feature, +// FeatureType, +// FeatureUsageType, +// generateId, +// keyToTitle, +// } from "@autumn/shared"; + +// export const constructFeature = ({ +// id, +// name, +// orgId, +// type, +// env, +// config, +// display, +// }: { +// id: string; +// name: string; +// orgId: string; +// type: FeatureType; +// env: AppEnv; +// config: any; +// display: any; +// }) => { +// const newFeature: Feature = { +// internal_id: generateId("fe"), +// id, +// name, +// org_id: orgId, +// env, +// created_at: Date.now(), +// type, +// config, +// display, +// archived: false, +// }; + +// return newFeature; +// }; + +// export const constructBooleanFeature = ({ +// featureId, +// orgId, +// env, +// name, +// }: { +// featureId: string; +// orgId: string; +// env: AppEnv; +// name?: string; +// }) => { +// const newFeature: Feature = { +// internal_id: generateId("fe"), +// org_id: orgId, +// env, +// created_at: Date.now(), + +// id: featureId, +// name: name || keyToTitle(featureId), +// type: FeatureType.Boolean, +// config: null, +// archived: false, +// }; + +// return newFeature; +// }; + +// export const constructMeteredFeature = ({ +// featureId, +// name, +// orgId, +// env, +// usageType, +// }: { +// featureId: string; +// name?: string; +// orgId: string; +// env: AppEnv; +// usageType: FeatureUsageType; +// }) => { +// const newFeature: Feature = { +// internal_id: generateId("fe"), +// org_id: orgId, +// env, +// created_at: Date.now(), + +// id: featureId, +// name: name || keyToTitle(featureId), +// type: FeatureType.Metered, +// config: { +// filters: [ +// { +// property: "event_name", +// operator: "eq", +// value: [], +// }, +// ], +// aggregate: { +// type: AggregateType.Sum, +// property: "value", +// }, +// usage_type: usageType, +// }, +// archived: false, +// }; + +// return newFeature; +// }; + +// export const constructCreditSystem = ({ +// featureId, +// name, +// orgId, +// env, +// schema, +// }: { +// featureId: string; +// name?: string; +// orgId: string; +// env: AppEnv; +// schema: { +// metered_feature_id: string; +// credit_cost: number; +// }[]; +// }) => { +// const config = { +// schema: schema.map((item) => ({ +// feature_amount: 1, +// metered_feature_id: item.metered_feature_id, +// credit_amount: item.credit_cost, +// })), +// usage_type: FeatureUsageType.Single, +// }; + +// const newFeature: Feature = { +// internal_id: generateId("fe"), +// org_id: orgId, +// env, +// created_at: Date.now(), + +// id: featureId, +// name: name || keyToTitle(featureId), +// type: FeatureType.CreditSystem, +// config, +// archived: false, +// }; + +// return newFeature; +// }; diff --git a/shared/utils/featureUtils/convertFeatureUtils.ts b/shared/utils/featureUtils/convertFeatureUtils.ts new file mode 100644 index 000000000..bea3c1ecd --- /dev/null +++ b/shared/utils/featureUtils/convertFeatureUtils.ts @@ -0,0 +1,27 @@ +import { + FeatureType, + FeatureUsageType, +} from "@models/featureModels/featureEnums.js"; +import type { Feature } from "@models/featureModels/featureModels.js"; +import { ProductItemFeatureType } from "@models/productV2Models/productItemModels/productItemModels.js"; + +export const featureToItemFeatureType = ({ feature }: { feature: Feature }) => { + let featureType: ProductItemFeatureType; + if (feature.type === FeatureType.Boolean) { + featureType = ProductItemFeatureType.Static; + } else if (feature.type === FeatureType.CreditSystem) { + featureType = ProductItemFeatureType.SingleUse; + } else if (feature.type === FeatureType.Metered) { + const usageType = feature.config?.usage_type; + if (usageType === FeatureUsageType.Continuous) { + featureType = ProductItemFeatureType.ContinuousUse; + } else { + featureType = ProductItemFeatureType.SingleUse; + } + } else { + // Fallback + featureType = ProductItemFeatureType.SingleUse; + } + + return featureType; +}; diff --git a/shared/utils/index.ts b/shared/utils/index.ts index 79962f1eb..331446e96 100644 --- a/shared/utils/index.ts +++ b/shared/utils/index.ts @@ -14,6 +14,8 @@ export * from "./cusProductUtils/cusProductConstants.js"; export * from "./cusProductUtils/cusProductUtils.js"; export * from "./cusProductUtils/formatCusProductUtils.js"; export * from "./cusProductUtils/productIdToCusProduct.js"; +export * from "./featureUtils/apiFeatureToDbFeature.js"; +export * from "./featureUtils/convertFeatureUtils.js"; // Feature utils export * from "./featureUtils.js"; // Product utils @@ -21,6 +23,8 @@ export * from "./productUtils/convertUtils.js"; export * from "./productUtils/priceUtils/convertAmountUtils.js"; export * from "./productUtils/priceUtils.js"; export * from "./productV2Utils/mapToProductV2.js"; +export * from "./productV2Utils/productItemUtils/classifyItemUtils.js"; +export * from "./productV2Utils/productItemUtils/getItemType.js"; // Item utils export * from "./productV2Utils/productItemUtils/mapToItem.js"; export * from "./productV2Utils/productItemUtils/productItemUtils.js"; diff --git a/shared/utils/intervalUtils.ts b/shared/utils/intervalUtils.ts index 9a3450b23..5a3583d6d 100644 --- a/shared/utils/intervalUtils.ts +++ b/shared/utils/intervalUtils.ts @@ -30,9 +30,9 @@ export const intervalsDifferent = ({ intervalA: IntervalConfig; intervalB: IntervalConfig; }) => { - let valA = intervalToValue(intervalA.interval, intervalA.intervalCount); - let valB = intervalToValue(intervalB.interval, intervalB.intervalCount); - return valA != valB; + const valA = intervalToValue(intervalA.interval, intervalA.intervalCount); + const valB = intervalToValue(intervalB.interval, intervalB.intervalCount); + return valA !== valB; }; export const intervalsSame = ({ diff --git a/shared/utils/productDisplayUtils.ts b/shared/utils/productDisplayUtils.ts index 475f7fb23..1b2cca375 100644 --- a/shared/utils/productDisplayUtils.ts +++ b/shared/utils/productDisplayUtils.ts @@ -1,60 +1,65 @@ -import { Feature } from "../models/featureModels/featureModels.js"; +import { FeatureType } from "../models/featureModels/featureEnums.js"; +import type { Feature } from "../models/featureModels/featureModels.js"; import { Infinite } from "../models/productModels/productEnums.js"; -import { +import type { ProductItem, - ProductItemFeatureType, ProductItemInterval, } from "../models/productV2Models/productItemModels/productItemModels.js"; import { + formatAmount, getFeatureName, numberWithCommas, - formatAmount, } from "./displayUtils.js"; import { isFeatureItem, isFeaturePriceItem, isPriceItem, -} from "./productDisplayUtils/getItemType.js"; +} from "./productV2Utils/productItemUtils/getItemType.js"; import { notNullish, nullish } from "./utils.js"; export const formatTiers = ({ item, currency, + amountFormatOptions, }: { item: ProductItem; currency?: string | null; + amountFormatOptions?: Intl.NumberFormatOptions; }) => { - let tiers = item.tiers; + const tiers = item.tiers; if (tiers) { - if (tiers.length == 1) { + if (tiers.length === 1) { return formatAmount({ currency, amount: tiers[0].amount, + amountFormatOptions, }); } - let firstPrice = tiers[0].amount; - let lastPrice = tiers[tiers.length - 1].amount; + const firstPrice = tiers[0].amount; + const lastPrice = tiers[tiers.length - 1].amount; return `${formatAmount({ currency, amount: firstPrice, + amountFormatOptions, })} - ${formatAmount({ currency, amount: lastPrice, + amountFormatOptions, })}`; } }; export const getIntervalString = ({ interval, - intervalCount, + intervalCount = 1, }: { - interval: ProductItemInterval; + interval: ProductItemInterval | null | undefined; intervalCount?: number | null; }) => { if (!interval) return ""; - if (intervalCount == 1) { + if (intervalCount === 1) { return `per ${interval}`; } return `per ${intervalCount} ${interval}s`; @@ -63,38 +68,38 @@ export const getIntervalString = ({ export const getFeatureItemDisplay = ({ item, feature, + fullDisplay = false, }: { item: ProductItem; feature?: Feature; + fullDisplay?: boolean; }) => { - if (!feature) { - throw new Error(`Feature ${item.feature_id} not found`); - } - // 1. If feature - if (item.feature_type == ProductItemFeatureType.Static) { - return { - primary_text: getFeatureName({ - feature, - plural: false, - capitalize: true, - }), - }; + if (!feature) throw new Error(`Feature ${item.feature_id} not found`); + + if (feature.type === FeatureType.Boolean) { + return { primary_text: feature.name }; } - let featureName = getFeatureName({ + const featureName = getFeatureName({ feature, units: item.included_usage, }); - let includedUsageTxt = - item.included_usage == Infinite + const includedUsageTxt = + item.included_usage === Infinite ? "Unlimited " - : nullish(item.included_usage) || item.included_usage == 0 - ? "" - : `${numberWithCommas(item.included_usage!)} `; + : nullish(item.included_usage) || item.included_usage === 0 + ? "0 " + : `${numberWithCommas(item.included_usage)} `; + + const intervalStr = getIntervalString({ + interval: item.interval, + intervalCount: item.interval_count, + }); return { primary_text: `${includedUsageTxt}${featureName}`, + secondary_text: fullDisplay && intervalStr ? intervalStr : undefined, }; }; @@ -105,17 +110,17 @@ export const getPriceItemDisplay = ({ item: ProductItem; currency?: string | null; }) => { - let primaryText = formatAmount({ + const primaryText = formatAmount({ currency, amount: item.price as number, }); const intervalStr = getIntervalString({ - interval: item.interval!, + interval: item.interval, intervalCount: item.interval_count, }); - let secondaryText = intervalStr || undefined; + const secondaryText = intervalStr || undefined; return { primary_text: primaryText, @@ -128,36 +133,37 @@ export const getFeaturePriceItemDisplay = ({ item, currency, isMainPrice = false, - minifyIncluded = false, + // minifyIncluded = false, + amountFormatOptions, + fullDisplay = false, }: { feature?: Feature; item: ProductItem; currency?: string | null; isMainPrice?: boolean; - minifyIncluded?: boolean; + // minifyIncluded?: boolean; + amountFormatOptions?: Intl.NumberFormatOptions; + fullDisplay?: boolean; }) => { if (!feature) { throw new Error(`Feature ${item.feature_id} not found`); } // 1. Get included usage - let includedFeatureName = getFeatureName({ + const includedFeatureName = getFeatureName({ feature, units: item.included_usage, }); - let includedUsage = item.included_usage as number | null; + const includedUsage = item.included_usage as number | null; let includedUsageStr = ""; - if (notNullish(includedUsage) && includedUsage! > 0) { - if (minifyIncluded) { - includedUsageStr = `${numberWithCommas(includedUsage!)} included`; - } else { - includedUsageStr = `${numberWithCommas(includedUsage!)} ${includedFeatureName}`; - } + if (notNullish(includedUsage) && includedUsage > 0) { + includedUsageStr = `${numberWithCommas(includedUsage)} ${includedFeatureName}`; } - let priceStr = formatTiers({ item, currency }); - let billingFeatureName = getFeatureName({ + const priceStr = formatTiers({ item, currency, amountFormatOptions }); + + const billingFeatureName = getFeatureName({ feature, units: item.billing_units, }); @@ -170,12 +176,13 @@ export const getFeaturePriceItemDisplay = ({ } // let intervalStr = isMainPrice && item.interval ? ` per ${item.interval}` : ""; - let intervalStr = isMainPrice - ? getIntervalString({ - interval: item.interval!, - intervalCount: item.interval_count, - }) - : ""; + const intervalStr = + isMainPrice || fullDisplay + ? getIntervalString({ + interval: item.interval, + intervalCount: item.interval_count, + }) + : ""; if (includedUsageStr) { return { @@ -184,7 +191,7 @@ export const getFeaturePriceItemDisplay = ({ }; } - if (isMainPrice) { + if (isMainPrice || fullDisplay) { return { primary_text: priceStr, secondary_text: `per ${priceStr2} ${intervalStr}`, @@ -192,7 +199,7 @@ export const getFeaturePriceItemDisplay = ({ } return { - primary_text: priceStr + ` per ${priceStr2} ${intervalStr}`, + primary_text: `${priceStr} per ${priceStr2} ${intervalStr}`, secondary_text: "", }; }; @@ -201,15 +208,20 @@ export const getProductItemDisplay = ({ item, features, currency = "usd", + fullDisplay = false, + amountFormatOptions, }: { item: ProductItem; features: Feature[]; currency?: string | null; + fullDisplay?: boolean; + amountFormatOptions?: Intl.NumberFormatOptions; }) => { if (isFeatureItem(item)) { return getFeatureItemDisplay({ item, feature: features.find((f) => f.id === item.feature_id), + fullDisplay, }); } @@ -225,6 +237,8 @@ export const getProductItemDisplay = ({ item, feature: features.find((f) => f.id === item.feature_id), currency, + fullDisplay, + amountFormatOptions, }); } diff --git a/shared/utils/productDisplayUtils/sortProductItems.ts b/shared/utils/productDisplayUtils/sortProductItems.ts index ece0cd198..5de5addb7 100644 --- a/shared/utils/productDisplayUtils/sortProductItems.ts +++ b/shared/utils/productDisplayUtils/sortProductItems.ts @@ -1,11 +1,14 @@ -import { Feature } from "../../models/featureModels/featureModels.js"; -import { ProductItem } from "../../models/productV2Models/productItemModels/productItemModels.js"; -import { isFeaturePriceItem, isPriceItem } from "./getItemType.js"; +import type { Feature } from "../../models/featureModels/featureModels.js"; +import type { ProductItem } from "../../models/productV2Models/productItemModels/productItemModels.js"; +import { + isFeaturePriceItem, + isPriceItem, +} from "../productV2Utils/productItemUtils/getItemType.js"; export const sortProductItems = (items: ProductItem[], features: Feature[]) => { items.sort((a, b) => { - let aIsPriceItem = isPriceItem(a); - let bIsPriceItem = isPriceItem(b); + const aIsPriceItem = isPriceItem(a); + const bIsPriceItem = isPriceItem(b); if (aIsPriceItem && bIsPriceItem) { return 0; @@ -20,8 +23,8 @@ export const sortProductItems = (items: ProductItem[], features: Feature[]) => { } // 2. Put feature price next - let aIsFeatureItem = isFeaturePriceItem(a); - let bIsFeatureItem = isFeaturePriceItem(b); + const aIsFeatureItem = isFeaturePriceItem(a); + const bIsFeatureItem = isFeaturePriceItem(b); if (aIsFeatureItem && !bIsFeatureItem) { return -1; @@ -32,9 +35,9 @@ export const sortProductItems = (items: ProductItem[], features: Feature[]) => { } // 3. Put feature price items in alphabetical order - let feature = features.find((f) => f.id == a.feature_id); - let aFeatureName = feature?.name; - let bFeatureName = features.find((f) => f.id == b.feature_id)?.name; + const feature = features.find((f) => f.id === a.feature_id); + const aFeatureName = feature?.name; + const bFeatureName = features.find((f) => f.id === b.feature_id)?.name; if (!aFeatureName || !bFeatureName) { return 0; diff --git a/shared/utils/productUtils.ts b/shared/utils/productUtils.ts index 8c286594a..183e8ad67 100644 --- a/shared/utils/productUtils.ts +++ b/shared/utils/productUtils.ts @@ -3,7 +3,7 @@ import type { ProductItem, ProductV2 } from "../index.js"; import { isFeaturePriceItem, isPriceItem, -} from "./productDisplayUtils/getItemType.js"; +} from "./productV2Utils/productItemUtils/getItemType.js"; import { nullish } from "./utils.js"; export const isFreeProductV2 = ({ items }: { items: ProductItem[] }) => { diff --git a/shared/utils/productUtils/freeTrialUtils.ts b/shared/utils/productUtils/freeTrialUtils.ts new file mode 100644 index 000000000..53aade237 --- /dev/null +++ b/shared/utils/productUtils/freeTrialUtils.ts @@ -0,0 +1,47 @@ +import type { + CreateFreeTrial, + FreeTrial, +} from "../../models/productModels/freeTrialModels/freeTrialModels.js"; + +export const freeTrialsAreSame = ({ + ft1, + ft2, +}: { + ft1?: FreeTrial | CreateFreeTrial | null; + ft2?: FreeTrial | CreateFreeTrial | null; +}) => { + if (!ft1 && !ft2) return true; + if (!ft1 || !ft2) return false; + + const diffs = { + length: { + condition: ft1.length !== ft2.length, + message: `Length different: ${ft1.length} !== ${ft2.length}`, + }, + unique_fingerprint: { + condition: ft1.unique_fingerprint !== ft2.unique_fingerprint, + message: `Unique fingerprint different: ${ft1.unique_fingerprint} !== ${ft2.unique_fingerprint}`, + }, + duration: { + condition: ft1.duration !== ft2.duration, + message: `Duration different: ${ft1.duration} !== ${ft2.duration}`, + }, + card_required: { + condition: ft1.card_required !== ft2.card_required, + message: `Card required different: ${ft1.card_required} !== ${ft2.card_required}`, + }, + }; + + const freeTrialsAreDiff = Object.values(diffs).some((d) => d.condition); + + if (freeTrialsAreDiff) { + console.log("Free trials different"); + console.log( + "Differences:", + Object.values(diffs) + .filter((d) => d.condition) + .map((d) => d.message), + ); + } + return !freeTrialsAreDiff; +}; diff --git a/shared/utils/productUtils/priceToInvoiceAmount.ts b/shared/utils/productUtils/priceToInvoiceAmount.ts index a10213beb..1b6256757 100644 --- a/shared/utils/productUtils/priceToInvoiceAmount.ts +++ b/shared/utils/productUtils/priceToInvoiceAmount.ts @@ -1,20 +1,20 @@ -import { FixedPriceConfig } from "../../models/productModels/priceModels/priceConfig/fixedPriceConfig.js"; -import { UsagePriceConfig } from "../../models/productModels/priceModels/priceConfig/usagePriceConfig.js"; +import { Decimal } from "decimal.js"; +import type { FixedPriceConfig } from "../../models/productModels/priceModels/priceConfig/fixedPriceConfig.js"; +import type { UsagePriceConfig } from "../../models/productModels/priceModels/priceConfig/usagePriceConfig.js"; import { BillingType } from "../../models/productModels/priceModels/priceEnums.js"; -import { Price } from "../../models/productModels/priceModels/priceModels.js"; +import type { Price } from "../../models/productModels/priceModels/priceModels.js"; import { Infinite } from "../../models/productModels/productEnums.js"; import { - ProductItem, + type ProductItem, UsageModel, } from "../../models/productV2Models/productItemModels/productItemModels.js"; -import { isPriceItem } from "../productDisplayUtils/getItemType.js"; +import { isPriceItem } from "../productV2Utils/productItemUtils/getItemType.js"; import { calculateProrationAmount, - Proration, -} from "../productDisplayUtils/getProductItemRes.js"; + type Proration, +} from "../productV2Utils/productItemUtils/getProductItemRes.js"; import { nullish } from "../utils.js"; import { getBillingType, isFixedPrice } from "./priceUtils.js"; -import { Decimal } from "decimal.js"; export const getAmountForQuantity = ({ price, @@ -25,7 +25,7 @@ export const getAmountForQuantity = ({ }) => { const config = price.config as UsagePriceConfig; - let billingUnits = config.billing_units || 1; + const billingUnits = config.billing_units || 1; const roundedQuantity = new Decimal(quantity) .div(billingUnits) @@ -42,19 +42,19 @@ export const getAmountForQuantity = ({ // console.log("Usage tiers:", config.usage_tiers); for (let i = 0; i < config.usage_tiers.length; i++) { - let tier = config.usage_tiers[i]; + const tier = config.usage_tiers[i]; let usageWithinTier = new Decimal(0); - if (tier.to == Infinite || tier.to == -1) { + if (tier.to === Infinite || tier.to === -1) { usageWithinTier = remainingUsage; } else { - let tierUsage = new Decimal(tier.to).minus(lastTierTo); + const tierUsage = new Decimal(tier.to).minus(lastTierTo); usageWithinTier = Decimal.min(remainingUsage, tierUsage); lastTierTo = tier.to; } - let amountPerUnit = new Decimal(tier.amount).div(billingUnits); - let amountWithinTier = amountPerUnit.mul(usageWithinTier); + const amountPerUnit = new Decimal(tier.amount).div(billingUnits); + const amountWithinTier = amountPerUnit.mul(usageWithinTier); amount = amount.plus(amountWithinTier); remainingUsage = remainingUsage.minus(usageWithinTier); @@ -86,7 +86,7 @@ export const itemToInvoiceAmount = ({ ); } - let price = { + const price = { config: { usage_tiers: item.tiers || [ { @@ -98,7 +98,7 @@ export const itemToInvoiceAmount = ({ }, } as unknown as Price; - if (item.usage_model == UsageModel.Prepaid) { + if (item.usage_model === UsageModel.Prepaid) { amount = getAmountForQuantity({ price, quantity: quantity! }); } else { amount = getAmountForQuantity({ price, quantity: overage! }); @@ -131,7 +131,7 @@ export const priceToInvoiceAmount = ({ amount = (price.config as FixedPriceConfig).amount; } else { const config = price.config as UsagePriceConfig; - let billingType = getBillingType(config); + const billingType = getBillingType(config); if (!nullish(quantity) && !nullish(overage)) { throw new Error( @@ -139,7 +139,7 @@ export const priceToInvoiceAmount = ({ ); } - if (billingType == BillingType.UsageInAdvance) { + if (billingType === BillingType.UsageInAdvance) { amount = getAmountForQuantity({ price, quantity: quantity! }); } else { amount = getAmountForQuantity({ price, quantity: overage! }); diff --git a/shared/utils/productV2Utils/compareProductUtils.ts/compareItemUtils.ts b/shared/utils/productV2Utils/compareProductUtils.ts/compareItemUtils.ts new file mode 100644 index 000000000..6518d3fa2 --- /dev/null +++ b/shared/utils/productV2Utils/compareProductUtils.ts/compareItemUtils.ts @@ -0,0 +1,390 @@ +/** biome-ignore-all lint/suspicious/noDoubleEquals: need to compare null / undefined for different fields */ + +import { FeatureUsageType } from "../../../models/featureModels/featureEnums.js"; +import type { Feature } from "../../../models/featureModels/featureModels.js"; +import type { UsageTier } from "../../../models/productModels/priceModels/priceConfig/usagePriceConfig.js"; +import type { FeatureItem } from "../../../models/productV2Models/productItemModels/featureItem.js"; +import type { FeaturePriceItem } from "../../../models/productV2Models/productItemModels/featurePriceItem.js"; +import type { PriceItem } from "../../../models/productV2Models/productItemModels/priceItem.js"; +import type { + ProductItem, + ProductItemConfig, + RolloverConfig, +} from "../../../models/productV2Models/productItemModels/productItemModels.js"; +import { entIntervalsSame, intervalsSame } from "../../intervalUtils.js"; +import { itemToFeature } from "../productItemUtils/convertItemUtils.js"; +import { + isFeatureItem, + isFeaturePriceItem, + isPriceItem, +} from "../productItemUtils/getItemType.js"; +import { + itemToBillingInterval, + itemToEntInterval, +} from "../productItemUtils/itemIntervalUtils.js"; + +export const findSimilarItem = ({ + item, + items, +}: { + item: ProductItem; + items: ProductItem[]; +}) => { + if (isFeatureItem(item)) { + return items.find( + (i) => + i.feature_id === item.feature_id && + entIntervalsSame({ + intervalA: { + interval: itemToEntInterval({ item: i }), + intervalCount: i.interval_count, + }, + intervalB: { + interval: itemToEntInterval({ item }), + intervalCount: item.interval_count, + }, + }), + ); + } + + if (isFeaturePriceItem(item)) { + return items.find( + (i) => + i.feature_id === item.feature_id && + intervalsSame({ + intervalA: { + interval: itemToBillingInterval({ item: i }), + intervalCount: i.interval_count, + }, + intervalB: { + interval: itemToBillingInterval({ item }), + intervalCount: item.interval_count, + }, + }) && + item.usage_model == i.usage_model, + ); + } + + // 2. If price item + if (isPriceItem(item)) { + return items.find((i) => { + return ( + isPriceItem(i) && + i.price == item.price && + i.interval == item.interval && + (i.interval_count || 1) == (item.interval_count || 1) + ); + }); + } + + return null; +}; + +const tiersAreSame = ( + tiers1: UsageTier[] | null, + tiers2: UsageTier[] | null, +) => { + if (!tiers1 && !tiers2) { + return true; + } + + if (!tiers1 || !tiers2) { + return false; + } + + if (tiers1.length !== tiers2.length) { + return false; + } + + return tiers1.every( + (tier: UsageTier, index: number) => + tier.amount === tiers2[index].amount && tier.to === tiers2[index].to, + ); +}; + +export const featureItemsAreSame = ({ + item1, + item2, +}: { + item1: FeatureItem; + item2: FeatureItem; +}) => { + const checks = { + feature_id: { + condition: item1.feature_id === item2.feature_id, + message: `Feature ID different: ${item1.feature_id} != ${item2.feature_id}`, + }, + included_usage: { + condition: item1.included_usage == item2.included_usage, + message: `Included usage different: ${item1.included_usage} != ${item2.included_usage}`, + }, + interval: { + condition: item1.interval == item2.interval, + message: `Interval different: ${item1.interval} != ${item2.interval}`, + }, + interval_count: { + condition: (item1.interval_count || 1) == (item2.interval_count || 1), + message: `Interval count different: ${item1.interval_count} != ${item2.interval_count}`, + }, + entity_feature_id: { + condition: item1.entity_feature_id == item2.entity_feature_id, + message: `Entity feature ID different: ${item1.entity_feature_id} != ${item2.entity_feature_id}`, + }, + reset_usage_when_enabled: { + condition: + item1.reset_usage_when_enabled == item2.reset_usage_when_enabled, + message: `Reset usage when enabled different: ${item1.reset_usage_when_enabled} !== ${item2.reset_usage_when_enabled}`, + }, + config: { + condition: JSON.stringify(item1.config) === JSON.stringify(item2.config), + message: `Config different: ${JSON.stringify(item1.config)} !== ${JSON.stringify(item2.config)}`, + }, + }; + + const same = Object.values(checks).every((d) => d.condition); + + if (!same) { + console.log( + "Feature items different:", + Object.values(checks) + .filter((d) => !d.condition) + .map((d) => d.message), + ); + } + + return same; +}; + +export const priceItemsAreSame = ({ + item1, + item2, +}: { + item1: PriceItem; + item2: PriceItem; +}) => { + const same = + item1.price === item2.price && + item1.interval == item2.interval && + (item1.interval_count || 1) == (item2.interval_count || 1); + + if (!same) { + console.log(`Price items different: ${item1.price}`); + } + + return same; +}; + +const prorationConfigsAreSame = ({ + config1, + config2, +}: { + config1?: ProductItemConfig; + config2?: ProductItemConfig; +}) => { + return ( + config1?.on_increase === config2?.on_increase && + config1?.on_decrease === config2?.on_decrease + ); +}; + +const rolloversAreSame = ({ + rollover1, + rollover2, +}: { + rollover1?: RolloverConfig; + rollover2?: RolloverConfig; +}) => { + if (rollover1 && !rollover2) { + return false; + } + if (!rollover1 && rollover2) { + return false; + } + return ( + rollover1?.max === rollover2?.max && + rollover1?.duration === rollover2?.duration && + rollover1?.length === rollover2?.length + ); +}; + +export const featurePriceItemsAreSame = ({ + item1, + item2, +}: { + item1: FeaturePriceItem; + item2: FeaturePriceItem; +}) => { + // console.log("Item 1 config:", item1.config); + // console.log("Item 2 config:", item2.config); + const entsSame = { + included_usage: { + condition: item1.included_usage == item2.included_usage, + message: `Included usage different: ${item1.included_usage} != ${item2.included_usage}`, + }, + usage_limit: { + condition: item1.usage_limit == item2.usage_limit, + message: `Usage limit different: ${item1.usage_limit} !== ${item2.usage_limit}`, + }, + reset_usage_when_enabled: { + condition: + item1.reset_usage_when_enabled == item2.reset_usage_when_enabled, + message: `Reset usage when enabled different: ${item1.reset_usage_when_enabled} !== ${item2.reset_usage_when_enabled}`, + }, + proration_config: { + condition: prorationConfigsAreSame({ + config1: item1.config || undefined, + config2: item2.config || undefined, + }), + message: `Proration config different: ${JSON.stringify(item1.config)} !== ${JSON.stringify(item2.config)}`, + }, + rollover_config: { + condition: rolloversAreSame({ + rollover1: item1.config?.rollover || undefined, + rollover2: item2.config?.rollover || undefined, + }), + message: `Rollover config different: ${JSON.stringify(item1.config?.rollover)} !== ${JSON.stringify(item2.config?.rollover)}`, + }, + entity_feature_id: { + condition: item1.entity_feature_id == item2.entity_feature_id, + message: `Entity feature ID different: ${item1.entity_feature_id} != ${item2.entity_feature_id}`, + }, + + // config: { + // condition: JSON.stringify(item1.config) === JSON.stringify(item2.config), + // message: `Config different: ${JSON.stringify(item1.config)} !== ${JSON.stringify(item2.config)}`, + // }, + }; + + const pricesSame = { + feature_id: { + condition: item1.feature_id === item2.feature_id, + message: `Feature ID different: ${item1.feature_id} != ${item2.feature_id}`, + }, + interval: { + condition: item1.interval == item2.interval, + message: `Interval different: ${item1.interval} != ${item2.interval}`, + }, + interval_count: { + condition: (item1.interval_count || 1) == (item2.interval_count || 1), + message: `Interval count different: ${item1.interval_count} != ${item2.interval_count}`, + }, + usage_model: { + condition: item1.usage_model === item2.usage_model, + message: `Usage model different: ${item1.usage_model} != ${item2.usage_model}`, + }, + price: { + condition: item1.price == item2.price, + message: `Price different: ${item1.price} != ${item2.price}`, + }, + tiers: { + condition: tiersAreSame(item1.tiers || null, item2.tiers || null), + message: `Tiers different`, + }, + billing_units: { + condition: item1.billing_units == item2.billing_units, + message: `Billing units different: ${item1.billing_units} !== ${item2.billing_units}`, + }, + reset_usage_when_enabled: { + condition: + item1.reset_usage_when_enabled == item2.reset_usage_when_enabled, + message: `Reset usage when enabled different: ${item1.reset_usage_when_enabled} !== ${item2.reset_usage_when_enabled}`, + }, + }; + + const same = + Object.values(pricesSame).every((d) => d.condition) && + Object.values(entsSame).every((d) => d.condition); + + const pricesChanged = Object.values(pricesSame).some((d) => !d.condition); + + if (!same) { + console.log( + "Feature price items different:", + Object.values(entsSame) + .filter((d) => !d.condition) + .map((d) => d.message), + Object.values(pricesSame) + .filter((d) => !d.condition) + .map((d) => d.message), + ); + } + + return { + same, + pricesChanged, + }; +}; + +export const itemsAreSame = ({ + item1, + item2, + features, +}: { + item1: ProductItem; + item2: ProductItem; + features?: Feature[]; +}) => { + // 1. If feature item + let same = false; + let pricesChanged = false; + + if (isFeatureItem(item1)) { + if (!isFeatureItem(item2)) { + return { + same: false, + pricesChanged: true, + }; + } + + same = featureItemsAreSame({ + item1: item1 as FeatureItem, + item2: item2 as FeatureItem, + }); + + pricesChanged = false; + } + + if (isFeaturePriceItem(item1)) { + if (!isFeaturePriceItem(item2)) { + return { + same: false, + pricesChanged: true, + }; + } + + const { same: same_, pricesChanged: pricesChanged_ } = + featurePriceItemsAreSame({ + item1: item1 as FeaturePriceItem, + item2: item2 as FeaturePriceItem, + }); + + same = same_; + + const feature = itemToFeature({ + item: item1, + features: features || [], + }); + + if (feature?.config?.usage_type === FeatureUsageType.Continuous) { + pricesChanged = true; + } else { + pricesChanged = pricesChanged_; + } + } + + // 2. If price item + if (isPriceItem(item1)) { + same = priceItemsAreSame({ + item1: item1 as PriceItem, + item2: item2 as PriceItem, + }); + if (!same) { + pricesChanged = true; + } + } + + return { + same, + pricesChanged: !same && pricesChanged, + }; +}; diff --git a/shared/utils/productV2Utils/compareProductUtils.ts/compareProductUtils.ts b/shared/utils/productV2Utils/compareProductUtils.ts/compareProductUtils.ts new file mode 100644 index 000000000..c513bfe46 --- /dev/null +++ b/shared/utils/productV2Utils/compareProductUtils.ts/compareProductUtils.ts @@ -0,0 +1,253 @@ +/** biome-ignore-all lint/suspicious/noDoubleEquals: comparison functions require double equals */ +import type { Feature } from "../../../models/featureModels/featureModels.js"; +import type { FullProduct } from "../../../models/productModels/productModels.js"; +import { + OnDecrease, + OnIncrease, +} from "../../../models/productV2Models/productItemModels/productItemEnums.js"; +import type { ProductItem } from "../../../models/productV2Models/productItemModels/productItemModels.js"; +import type { ProductV2 } from "../../../models/productV2Models/productV2Models.js"; +import { freeTrialsAreSame } from "../../productUtils/freeTrialUtils.js"; +import { mapToProductItems } from "../mapToProductV2.js"; +import { + isFeaturePriceItem, + isPriceItem, +} from "../productItemUtils/getItemType.js"; +import { itemToPriceOrTiers } from "../productItemUtils/getProductItemRes.js"; +import { getResetUsage } from "../productItemUtils/productItemUtils.js"; +import { findSimilarItem, itemsAreSame } from "./compareItemUtils.js"; + +const sanitizeItems = ({ + items, + features, +}: { + items: ProductItem[]; + features: Feature[]; +}) => { + return items.map((item) => { + const priceData = itemToPriceOrTiers({ item }); + const newItem = { + ...item, + reset_usage_when_enabled: getResetUsage({ + item, + feature: features.find((f) => f.id === item.feature_id), + }), + ...priceData, + }; + + if (!newItem.config) { + newItem.config = { + on_increase: OnIncrease.ProrateImmediately, + on_decrease: OnDecrease.ProrateImmediately, + }; + } + + return newItem; + }); +}; + +export const compareDetails = ({ + newProductV2, + curProductV2, +}: { + newProductV2?: ProductV2; + curProductV2?: ProductV2; +}) => { + const checks = { + is_add_on: { + condition: newProductV2?.is_add_on === curProductV2?.is_add_on, + message: `Is add-on different: ${newProductV2?.is_add_on} !== ${curProductV2?.is_add_on}`, + }, + is_default: { + condition: newProductV2?.is_default === curProductV2?.is_default, + message: `Is default different: ${newProductV2?.is_default} !== ${curProductV2?.is_default}`, + }, + archived: { + condition: newProductV2?.archived === curProductV2?.archived, + message: `Archived different: ${newProductV2?.archived} !== ${curProductV2?.archived}`, + }, + group: { + condition: newProductV2?.group == curProductV2?.group, + message: `Group different: ${newProductV2?.group} !== ${curProductV2?.group}`, + }, + name: { + condition: newProductV2?.name == curProductV2?.name, + message: `Name different: ${newProductV2?.name} !== ${curProductV2?.name}`, + }, + id: { + condition: newProductV2?.id === curProductV2?.id, + message: `ID different: ${newProductV2?.id} !== ${curProductV2?.id}`, + }, + }; + + const detailsSame = Object.values(checks).every((d) => d.condition); + + if (!detailsSame) { + console.log( + "Product details different:", + Object.values(checks) + .filter((d) => !d.condition) + .map((d) => d.message), + ); + } + + return detailsSame; +}; + +export const prodOptionsAreSame = ({ + curProduct, + newProduct, +}: { + curProduct: ProductV2 | FullProduct; + newProduct: ProductV2 | FullProduct; +}) => { + return ( + curProduct.is_default === newProduct.is_default && + curProduct.is_add_on === newProduct.is_add_on + ); +}; + +export const productsAreSame = ({ + newProductV1, + newProductV2, + curProductV1, + curProductV2, + features, +}: { + newProductV1?: FullProduct; + newProductV2?: ProductV2; + curProductV1?: FullProduct; + curProductV2?: ProductV2; + features: Feature[]; +}) => { + if (!newProductV1 && !newProductV2) { + throw new Error("productsAreSame error: product1 not provided"); + } + + if (!curProductV1 && !curProductV2) { + throw new Error("productsAreSame error: product2 not provided"); + } + + let items1 = + newProductV2?.items || + mapToProductItems({ + prices: newProductV1?.prices || [], + entitlements: newProductV1?.entitlements || [], + features, + }); + + let items2 = + curProductV2?.items || + mapToProductItems({ + prices: curProductV1?.prices || [], + entitlements: curProductV1?.entitlements || [], + features, + }); + + items1 = sanitizeItems({ items: items1, features }); + items2 = sanitizeItems({ items: items2, features }); + + let itemsSame = true; + let pricesChanged = false; + let detailsSame = true; + const newItems: ProductItem[] = []; + const removedItems: ProductItem[] = []; + + detailsSame = compareDetails({ + newProductV2, + curProductV2, + }); + + if (items1.length !== items2.length) { + itemsSame = false; + } + + if (items1.length !== items2.length) itemsSame = false; + + // console.log(`items1: `, items1); + // console.log(`items2: `, items2); + + for (const item of items1) { + // console.log(`base item: `, formatItem({ item, features })); + const similarItem = findSimilarItem({ + item, + items: items2, + }); + + if (!similarItem) { + if (isFeaturePriceItem(item) || isPriceItem(item)) { + pricesChanged = true; + } + + itemsSame = false; + newItems.push(item); + + continue; + } + // console.log(`similar item: `, formatItem({ item: similarItem, features })); + + const { same, pricesChanged: pricesChanged_ } = itemsAreSame({ + item1: item, + item2: similarItem, + features, + }); + + if (!same) { + itemsSame = false; + newItems.push(item); + } + + if (pricesChanged_) { + pricesChanged = true; + } + } + + for (const item of items2) { + const similarItem = findSimilarItem({ + item, + items: items1, + }); + + if (!similarItem) { + itemsSame = false; + + if (isFeaturePriceItem(item) || isPriceItem(item)) { + pricesChanged = true; + } + + removedItems.push(item); + } + } + + // Compare free trial + const freeTrial1 = curProductV1?.free_trial || curProductV2?.free_trial; + const freeTrial2 = newProductV1?.free_trial || newProductV2?.free_trial; + + const freeTrialsSame = freeTrialsAreSame({ + ft1: freeTrial1, + ft2: freeTrial2, + }); + + const optionsSame = prodOptionsAreSame({ + // biome-ignore lint/style/noNonNullAssertion: either one is provided + curProduct: curProductV2 || curProductV1!, + // biome-ignore lint/style/noNonNullAssertion: either one is provided + newProduct: newProductV2 || newProductV1!, + }); + + // console.log(`items same: `, itemsSame); + // console.log(`details same: `, detailsSame); + // console.log(`free trials same: `, freeTrialsSame); + // console.log(`options same: `, optionsSame); + + // Compare name + return { + itemsSame, + freeTrialsSame, + onlyEntsChanged: !pricesChanged, + newItems, + removedItems, + detailsSame, + optionsSame, + }; +}; diff --git a/shared/utils/productV2Utils/mapToProductV2.ts b/shared/utils/productV2Utils/mapToProductV2.ts index 97a28cd9c..90ebfa45e 100644 --- a/shared/utils/productV2Utils/mapToProductV2.ts +++ b/shared/utils/productV2Utils/mapToProductV2.ts @@ -1,11 +1,49 @@ -import { Feature } from "../../models/featureModels/featureModels.js"; -import { FullProduct } from "../../models/productModels/productModels.js"; -import { ProductItem } from "../../models/productV2Models/productItemModels/productItemModels.js"; -import { ProductV2 } from "../../models/productV2Models/productV2Models.js"; +import type { Feature } from "../../models/featureModels/featureModels.js"; +import type { EntitlementWithFeature } from "../../models/productModels/entModels/entModels.js"; +import type { Price } from "../../models/productModels/priceModels/priceModels.js"; +import type { FullProduct } from "../../models/productModels/productModels.js"; +import type { ProductItem } from "../../models/productV2Models/productItemModels/productItemModels.js"; +import type { ProductV2 } from "../../models/productV2Models/productV2Models.js"; import { entToPrice, priceToEnt } from "../productUtils/convertUtils.js"; import { toProductItem } from "./productItemUtils/mapToItem.js"; import { getItemFeatureType } from "./productItemUtils/productItemUtils.js"; +export const mapToProductItems = ({ + prices, + entitlements, + features, +}: { + prices: Price[]; + entitlements: EntitlementWithFeature[]; + features: Feature[]; +}): ProductItem[] => { + const items: ProductItem[] = []; + + for (const ent of entitlements) { + // const relatedPrice = getEntRelatedPrice(ent, prices, allowFeatureMatch); + const relatedPrice = entToPrice({ ent, prices }); + const item = toProductItem({ ent, price: relatedPrice }); + items.push(item); + } + + for (const price of prices) { + const relatedEnt = priceToEnt({ price, entitlements }); + + if (!relatedEnt) { + items.push(toProductItem({ price })); + } + } + + for (const item of items) { + const feature = features.find((f) => f.id === item.feature_id); + if (feature) { + item.feature_type = getItemFeatureType({ item, features }); + } + } + + return items; +}; + export const mapToProductV2 = ({ product, features, @@ -13,15 +51,18 @@ export const mapToProductV2 = ({ product: FullProduct; features?: Feature[]; }): ProductV2 => { - let items: ProductItem[] = []; + const items: ProductItem[] = []; for (const ent of product.entitlements) { - let relatedPrice = entToPrice({ ent, prices: product.prices }); + const relatedPrice = entToPrice({ ent, prices: product.prices }); items.push(toProductItem({ ent, price: relatedPrice })); } for (const price of product.prices) { - let relatedEnt = priceToEnt({ price, entitlements: product.entitlements }); + const relatedEnt = priceToEnt({ + price, + entitlements: product.entitlements, + }); if (!relatedEnt) { items.push(toProductItem({ price })); @@ -36,7 +77,7 @@ export const mapToProductV2 = ({ item.feature_type = getItemFeatureType({ item, features }); } - let productV2: ProductV2 = { + const productV2: ProductV2 = { internal_id: product.internal_id, id: product.id, @@ -47,6 +88,7 @@ export const mapToProductV2 = ({ group: product.group, free_trial: product.free_trial, created_at: product.created_at, + env: product.env, items: items, stripe_id: product.processor?.id || null, diff --git a/shared/utils/productV2Utils/productItemUtils/classifyItemUtils.ts b/shared/utils/productV2Utils/productItemUtils/classifyItemUtils.ts new file mode 100644 index 000000000..81d909fb1 --- /dev/null +++ b/shared/utils/productV2Utils/productItemUtils/classifyItemUtils.ts @@ -0,0 +1,18 @@ +import type { Feature } from "../../../models/featureModels/featureModels.js"; +import { + type ProductItem, + ProductItemFeatureType, +} from "../../../models/productV2Models/productItemModels/productItemModels.js"; + +export const isContUseItem = ({ + item, + features, +}: { + item: ProductItem; + features: Feature[]; +}) => { + const feature = features.find((f) => f.id === item.feature_id); + if (!feature) return false; + + return feature.config?.usage_type === ProductItemFeatureType.ContinuousUse; +}; diff --git a/shared/utils/productV2Utils/productItemUtils/convertItemUtils.ts b/shared/utils/productV2Utils/productItemUtils/convertItemUtils.ts new file mode 100644 index 000000000..9930a25a8 --- /dev/null +++ b/shared/utils/productV2Utils/productItemUtils/convertItemUtils.ts @@ -0,0 +1,39 @@ +import { FeatureType } from "../../../models/featureModels/featureEnums.js"; +import type { Feature } from "../../../models/featureModels/featureModels.js"; +import { + type ProductItem, + ProductItemFeatureType, +} from "../../../models/productV2Models/productItemModels/productItemModels.js"; + +export const itemToFeature = ({ + item, + features, +}: { + item: ProductItem; + features: Feature[]; +}) => { + const feature = features.find((f) => f.id === item.feature_id); + + return feature; +}; + +export const itemToUsageType = ({ + item, + features, +}: { + item: ProductItem; + features: Feature[]; +}) => { + const feature = itemToFeature({ item, features }); + if (!feature || !feature.config) return null; + + if (feature.type === FeatureType.Boolean) { + return ProductItemFeatureType.Static; + } + + if (feature.type === FeatureType.CreditSystem) { + return ProductItemFeatureType.SingleUse; + } + + return feature.config.usage_type as ProductItemFeatureType; +}; diff --git a/shared/utils/productDisplayUtils/getItemType.ts b/shared/utils/productV2Utils/productItemUtils/getItemType.ts similarity index 87% rename from shared/utils/productDisplayUtils/getItemType.ts rename to shared/utils/productV2Utils/productItemUtils/getItemType.ts index 5de8647a8..336aa301e 100644 --- a/shared/utils/productDisplayUtils/getItemType.ts +++ b/shared/utils/productV2Utils/productItemUtils/getItemType.ts @@ -1,8 +1,8 @@ import { type ProductItem, ProductItemType, -} from "../../models/productV2Models/productItemModels/productItemModels.js"; -import { notNullish, nullish } from "../utils.js"; +} from "../../../models/productV2Models/productItemModels/productItemModels.js"; +import { notNullish, nullish } from "../../utils.js"; export const isBooleanFeatureItem = (item: ProductItem) => { return ( diff --git a/shared/utils/productDisplayUtils/getProductItemRes.ts b/shared/utils/productV2Utils/productItemUtils/getProductItemRes.ts similarity index 86% rename from shared/utils/productDisplayUtils/getProductItemRes.ts rename to shared/utils/productV2Utils/productItemUtils/getProductItemRes.ts index 4d418287c..305138e37 100644 --- a/shared/utils/productDisplayUtils/getProductItemRes.ts +++ b/shared/utils/productV2Utils/productItemUtils/getProductItemRes.ts @@ -1,14 +1,15 @@ import { ApiProductItemSchema } from "@api/products/planFeature/previousVersions/apiProductItem.js"; import { Decimal } from "decimal.js"; -import type { FeatureOptions } from "../../models/cusProductModels/cusProductModels.js"; -import type { Feature } from "../../models/featureModels/featureModels.js"; +import type { FeatureOptions } from "@models/cusProductModels/cusProductModels.js"; +import type { Feature } from "@models/featureModels/featureModels.js"; import { + type PriceTier, type ProductItem, UsageModel, -} from "../../models/productV2Models/productItemModels/productItemModels.js"; -import { toApiFeature } from "../featureUtils.js"; -import { getProductItemDisplay } from "../productDisplayUtils.js"; -import { notNullish } from "../utils.js"; +} from "@models/productV2Models/productItemModels/productItemModels.js"; +import { toApiFeature } from "@utils/featureUtils.js"; +import { getProductItemDisplay } from "@utils/productDisplayUtils.js"; +import { notNullish } from "@utils/utils.js"; import { getItemType } from "./getItemType.js"; export const calculateProrationAmount = ({ @@ -67,7 +68,7 @@ export const itemToPriceOrTiers = ({ if (item.tiers.length > 1) { return { price: undefined, - tiers: item.tiers.map((tier) => ({ + tiers: item.tiers.map((tier: PriceTier) => ({ ...tier, amount: proration ? calculateProrationAmount({ diff --git a/shared/utils/productV2Utils/productItemUtils/itemIntervalUtils.ts b/shared/utils/productV2Utils/productItemUtils/itemIntervalUtils.ts new file mode 100644 index 000000000..690f1d85e --- /dev/null +++ b/shared/utils/productV2Utils/productItemUtils/itemIntervalUtils.ts @@ -0,0 +1,60 @@ +import { EntInterval } from "../../../models/productModels/entModels/entEnums.js"; +import { BillingInterval } from "../../../models/productModels/priceModels/priceEnums.js"; +import { + type ProductItem, + ProductItemFeatureType, + type ProductItemInterval, +} from "../../../models/productV2Models/productItemModels/productItemModels.js"; +import { nullish } from "../../utils.js"; +import { isFeatureItem } from "./getItemType.js"; + +export const billingToItemInterval = ({ + billingInterval, +}: { + billingInterval: BillingInterval; +}) => { + if (billingInterval === BillingInterval.OneOff) { + return null; + } + + return billingInterval as unknown as ProductItemInterval; +}; + +export const entToItemInterval = ({ + entInterval, +}: { + entInterval: EntInterval | null | undefined; +}) => { + if (!entInterval || entInterval === EntInterval.Lifetime) { + return null; + } + return entInterval as unknown as ProductItemInterval; +}; + +export const itemToBillingOrEntInterval = ({ item }: { item: ProductItem }) => { + if (isFeatureItem(item)) { + return itemToEntInterval({ item }); + } + + return itemToBillingInterval({ item }); +}; + +export const itemToBillingInterval = ({ item }: { item: ProductItem }) => { + if (nullish(item.interval)) { + return BillingInterval.OneOff as unknown as BillingInterval; + } + + return item.interval as unknown as BillingInterval; +}; + +export const itemToEntInterval = ({ item }: { item: ProductItem }) => { + if (nullish(item.interval)) { + return EntInterval.Lifetime; + } + + if (item.feature_type === ProductItemFeatureType.ContinuousUse) { + return EntInterval.Lifetime; + } + + return item.interval as unknown as EntInterval; +}; diff --git a/shared/utils/productV2Utils/productItemUtils/mapToItem.ts b/shared/utils/productV2Utils/productItemUtils/mapToItem.ts index c08c29206..eecc4afb7 100644 --- a/shared/utils/productV2Utils/productItemUtils/mapToItem.ts +++ b/shared/utils/productV2Utils/productItemUtils/mapToItem.ts @@ -12,6 +12,7 @@ import type { Price } from "../../../models/productModels/priceModels/priceModel import { Infinite } from "../../../models/productModels/productEnums.js"; import { type ProductItem, + type ProductItemConfig, ProductItemFeatureType, TierInfinite, UsageModel, @@ -20,7 +21,7 @@ import { nullish } from "../../utils.js"; import { billingToItemInterval, entToItemInterval, -} from "./productItemUtils.js"; +} from "./itemIntervalUtils.js"; export const toProductItem = ({ ent, @@ -30,13 +31,13 @@ export const toProductItem = ({ price?: Price; }) => { if (nullish(price)) return toFeatureItem({ ent: ent! }) as ProductItem; - if (nullish(ent)) return toPriceItem({ price: price! }) as ProductItem; + if (nullish(ent)) return toPriceItem({ price: price }) as ProductItem; - return toFeaturePriceItem({ ent: ent!, price: price! }) as ProductItem; + return toFeaturePriceItem({ ent: ent, price: price }) as ProductItem; }; export const toFeatureItem = ({ ent }: { ent: EntitlementWithFeature }) => { - if (ent.feature.type == FeatureType.Boolean) { + if (ent.feature.type === FeatureType.Boolean) { return { feature_id: ent.feature.id, entitlement_id: ent.id, @@ -49,8 +50,8 @@ export const toFeatureItem = ({ ent }: { ent: EntitlementWithFeature }) => { const item = { feature_id: ent.feature.id, included_usage: - ent.allowance_type == AllowanceType.Unlimited ? Infinite : ent.allowance, - interval: entToItemInterval(ent.interval!), + ent.allowance_type === AllowanceType.Unlimited ? Infinite : ent.allowance, + interval: entToItemInterval({ entInterval: ent.interval }), interval_count: ent.interval_count ?? 1, entity_feature_id: ent.entity_feature_id, @@ -78,12 +79,12 @@ export const toFeaturePriceItem = ({ const tiers = config.usage_tiers.map((tier) => { return { amount: tier.amount, - to: tier.to == -1 ? TierInfinite : tier.to, + to: tier.to === -1 ? TierInfinite : tier.to, }; }); // Build the item config from both price proration config and entitlement rollover - let itemConfig: any = {}; + let itemConfig: ProductItemConfig = {}; if (price.proration_config) { itemConfig = { ...price.proration_config }; } @@ -98,7 +99,7 @@ export const toFeaturePriceItem = ({ included_usage: ent.allowance, - interval: billingToItemInterval(config.interval!), + interval: billingToItemInterval({ billingInterval: config.interval }), interval_count: config.interval_count ?? 1, price: null, @@ -108,8 +109,8 @@ export const toFeaturePriceItem = ({ entity_feature_id: ent.entity_feature_id, reset_usage_when_enabled: !ent.carry_from_previous, usage_model: - config.bill_when == BillWhen.StartOfPeriod || - config.bill_when == BillWhen.InAdvance + config.bill_when === BillWhen.StartOfPeriod || + config.bill_when === BillWhen.InAdvance ? UsageModel.Prepaid : UsageModel.PayPerUse, @@ -131,7 +132,7 @@ export const toPriceItem = ({ price }: { price: Price }) => { return { feature_id: null, - interval: billingToItemInterval(config.interval!), + interval: billingToItemInterval({ billingInterval: config.interval }), interval_count: config.interval_count ?? 1, price: config.amount, diff --git a/shared/utils/productV2Utils/productItemUtils/productItemUtils.ts b/shared/utils/productV2Utils/productItemUtils/productItemUtils.ts index 054d23e47..9dff796ea 100644 --- a/shared/utils/productV2Utils/productItemUtils/productItemUtils.ts +++ b/shared/utils/productV2Utils/productItemUtils/productItemUtils.ts @@ -1,27 +1,19 @@ -import { FeatureType } from "../../../models/featureModels/featureEnums.js"; -import { Feature } from "../../../models/featureModels/featureModels.js"; -import { EntInterval } from "../../../models/productModels/entModels/entEnums.js"; -import { BillingInterval } from "../../../models/productModels/priceModels/priceEnums.js"; import { - ProductItem, + FeatureType, + FeatureUsageType, +} from "../../../models/featureModels/featureEnums.js"; +import type { Feature } from "../../../models/featureModels/featureModels.js"; +import { + type ProductItem, ProductItemFeatureType, - ProductItemInterval, } from "../../../models/productV2Models/productItemModels/productItemModels.js"; - -export const entToItemInterval = (entInterval: EntInterval) => { - if (entInterval == EntInterval.Lifetime) { - return null; - } - return entInterval as unknown as ProductItemInterval; -}; - -export const billingToItemInterval = (billingInterval: BillingInterval) => { - if (billingInterval == BillingInterval.OneOff) { - return null; - } - - return billingInterval as unknown as ProductItemInterval; -}; +import { getProductItemDisplay } from "../../productDisplayUtils.js"; +import { nullish } from "../../utils.js"; +import { + getItemType, + isFeatureItem, + isFeaturePriceItem, +} from "./getItemType.js"; export const getItemFeatureType = ({ item, @@ -30,12 +22,12 @@ export const getItemFeatureType = ({ item: ProductItem; features: Feature[]; }) => { - let feature = features.find((f) => f.id == item.feature_id); + const feature = features.find((f) => f.id === item.feature_id); if (feature) { - if (feature.type == FeatureType.Boolean) { + if (feature.type === FeatureType.Boolean) { return ProductItemFeatureType.Static; - } else if (feature.type == FeatureType.CreditSystem) { + } else if (feature.type === FeatureType.CreditSystem) { return ProductItemFeatureType.SingleUse; } else { return feature.config?.usage_type; @@ -44,3 +36,46 @@ export const getItemFeatureType = ({ return undefined; }; + +export const getResetUsage = ({ + item, + feature, +}: { + item: ProductItem; + feature?: Feature; +}) => { + if (!item.feature_id) { + return undefined; + } + if ( + nullish(item.reset_usage_when_enabled) && + (isFeatureItem(item) || isFeaturePriceItem(item)) && + feature + ) { + return feature?.config?.usage_type === FeatureUsageType.Single; + } + return item.reset_usage_when_enabled; +}; + +export const formatItem = ({ + item, + features, +}: { + item?: ProductItem; + features: Feature[]; +}) => { + if (!item || features.length === 0) return "N / A"; + const display = getProductItemDisplay({ + item, + features, + currency: "usd", + // fullDisplay: true, + amountFormatOptions: { + currencyDisplay: "narrowSymbol", + }, + }); + + const itemType = getItemType(item); + + return `(${itemType}) ${display.primary_text} ${display.secondary_text || ""}`; +}; diff --git a/shared/utils/productV3Utils/mapToProductV3.ts b/shared/utils/productV3Utils/mapToProductV3.ts new file mode 100644 index 000000000..e72724b5d --- /dev/null +++ b/shared/utils/productV3Utils/mapToProductV3.ts @@ -0,0 +1,26 @@ +import type { z } from "zod/v4"; +import type { ProductV2 } from "../../models/productV2Models/productV2Models.js"; +import type { PlanResponseSchema } from "../../models/productV3Models/productV3Response.js"; +import { productV2ToBasePrice } from "./productItemUtils/productV3ItemUtils.js"; + +export function mapToProductV3({ + product, +}: { + product: ProductV2; +}): z.infer { + const productV3 = { + id: product.id, + name: product.name, + group: product.group, + env: product.env, + is_add_on: product.is_add_on, + is_default: product.is_default, + version: product.version, + description: "", + created_at: product.created_at, + price: productV2ToBasePrice({ product }) || null, + }; + return productV3; +} + +export * from "./productItemUtils/productV3ItemUtils.js"; diff --git a/shared/utils/productV3Utils/productItemUtils/productV3ItemUtils.ts b/shared/utils/productV3Utils/productItemUtils/productV3ItemUtils.ts new file mode 100644 index 000000000..a8a559599 --- /dev/null +++ b/shared/utils/productV3Utils/productItemUtils/productV3ItemUtils.ts @@ -0,0 +1,49 @@ +import type { + ProductItem, + ProductItemInterval, +} from "../../../models/productV2Models/productItemModels/productItemModels.js"; +import type { ProductV2 } from "../../../models/productV2Models/productV2Models.js"; +import { + isFeatureItem, + isFeaturePriceItem, + isPriceItem, +} from "../../productV2Utils/productItemUtils/getItemType.js"; + +export function productV2ToBasePrice({ product }: { product: ProductV2 }): { + amount: number; + interval: ProductItemInterval; + intervalCount: number; + item: ProductItem; +} | null { + const item = product.items.find((x) => isPriceItem(x)); + + if (item) { + return { + amount: item.price ?? 0, + interval: (item.interval as unknown as ProductItemInterval) || null, + intervalCount: item.interval_count || 1, + item: item, + }; + } + + return null; +} + +export const productV2ToFeatureItems = ({ + items, + withBasePrice = false, +}: { + items: ProductItem[]; + withBasePrice?: boolean; +}) => { + const filteredItems = items.filter( + (item) => isFeatureItem(item) || isFeaturePriceItem(item), + ); + + const priceItem = items.find((item) => isPriceItem(item)); + if (withBasePrice && priceItem) { + return [...filteredItems, priceItem]; + } + + return filteredItems; +}; diff --git a/shared/utils/utils.ts b/shared/utils/utils.ts index 27b424136..1a97024b1 100644 --- a/shared/utils/utils.ts +++ b/shared/utils/utils.ts @@ -12,3 +12,17 @@ export const idRegex = /^[a-zA-Z0-9_-]+$/; export const sumValues = (vals: number[]) => { return vals.reduce((acc, curr) => acc + curr, 0); }; + +export const keyToTitle = (key: string) => { + return key + .replace(/[-_]/g, " ") + .replace(/\b\w/g, (char) => char.toUpperCase()); +}; + +// export const generateId = (prefix: string) => { +// if (!prefix) { +// return KSUID.randomSync().string; +// } else { +// return `${prefix}_${KSUID.randomSync().string}`; +// } +// }; diff --git a/temp_svg_analysis.svg b/temp_svg_analysis.svg new file mode 100644 index 000000000..306a19148 --- /dev/null +++ b/temp_svg_analysis.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vite/FORM_DESIGN_GUIDELINES.md b/vite/FORM_DESIGN_GUIDELINES.md new file mode 100644 index 000000000..95b2efaa1 --- /dev/null +++ b/vite/FORM_DESIGN_GUIDELINES.md @@ -0,0 +1,50 @@ +# Form Design Guidelines + +## CSS Class System + +Form elements use an atomic design system with three layers: + +### 1. Base (`input-base`) +Static styling: padding, font, border, background, placeholder color. + +### 2. Shadow (`input-shadow-default`) +Base shadow applied to the element. + +### 3. State (`input-state-*`) +Interactive behavior - handles hover/focus/open states with appropriate shadows and borders. + +- `input-state-focus` - For native inputs (`:focus`) +- `input-state-open` - For Radix components (`[data-state="open"]`) +- `input-state-focus-within` - For composite components (`:focus-within`) +- `input-state-*-tiny` - Smaller focus ring variants + +## Usage + +```tsx +// Standard Input + + +// Select (Radix component) + + +// InputGroup (composite) +
+ +
+``` + +## Customization + +Shadow values are CSS variables in `styles/form/effects.css`. Change once, updates everywhere: +- `--input-shadow-default` +- `--input-shadow-hover` +- `--input-shadow-focus` +- `--input-shadow-focus-tiny` + +## Non-form Elements + +Checkboxes, buttons, and other non-input controls use inline Tailwind classes. Don't force them into the input system. + +## Component Directory Structure + +Form components are organized by type in folders (e.g., `inputs/`, `sheets/`, `checkboxes/`, `radio-groups/`). Within each folder, create different variants like `Input.tsx`, `LongInput.tsx`, `AreaCheckbox.tsx` based on layout changes or additional elements alongside the base component. Use separate component files when there are structural differences; use Tailwind variant classes for simple style variations. diff --git a/vite/biome.json b/vite/biome.json index 57cb52103..50c0de90c 100644 --- a/vite/biome.json +++ b/vite/biome.json @@ -25,7 +25,11 @@ "noStaticOnlyClass": "off" }, "suspicious": { - "noArrayIndexKey": "off" + "noArrayIndexKey": "off", + "noUnknownAtRules": "off" + }, + "correctness": { + "useParseIntRadix": "off" } } }, diff --git a/vite/index.html b/vite/index.html index f80331f29..9d8389819 100644 --- a/vite/index.html +++ b/vite/index.html @@ -3,10 +3,10 @@ - + /> --> Autumn diff --git a/vite/package.json b/vite/package.json index f14460e9d..7715864ec 100644 --- a/vite/package.json +++ b/vite/package.json @@ -21,12 +21,14 @@ "@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@heroicons/react": "^2.2.0", + "@phosphor-icons/react": "^2.1.10", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-radio-group": "^1.3.8", "@radix-ui/react-scroll-area": "^1.2.3", "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-separator": "^1.1.2", @@ -34,6 +36,9 @@ "@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-tabs": "^1.1.3", "@radix-ui/react-tooltip": "^1.1.8", + "@squircle/core": "^1.0.6", + "@squircle/paint-polyfill": "^1.0.6", + "@squircle/tailwindcss": "^1.0.6", "@supabase/ssr": "^0.5.2", "@tailwindcss/vite": "^4.0.13", "@tanstack/react-query": "^5.85.6", @@ -63,6 +68,7 @@ "prism-themes": "^1.9.0", "prismjs": "^1.29.0", "react": "^18.2.0", + "react-cmdk": "^1.3.9", "react-confetti-explosion": "^2.1.2", "react-day-picker": "^8.10.1", "react-dom": "^18.2.0", @@ -80,7 +86,8 @@ "tailwindcss": "^4.0.13", "tailwindcss-animate": "^1.0.7", "vaul": "^1.1.2", - "zod": "^3.25.23" + "zod": "^4", + "zustand": "^5.0.8" }, "devDependencies": { "@eslint/js": "^9.21.0", diff --git a/vite/public/frameworks/react.png b/vite/public/frameworks/react.png index 8bde5d08ad1e030d306964bc1caa39127c1627bd..e0c7673144a30ff88685a1334c7aa46e1fb0db97 100644 GIT binary patch literal 194880 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

!1F$=yNjCwKP?=->i|pU9U=Kl2pop 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ℑgm&9Mx9*<5&&GU>z=R>e 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 IPv>v`7hm;OjsO4v literal 78488 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 Q0S5q&mDCaC56pxA2XM2K#Q*>R diff --git a/vite/src/App.tsx b/vite/src/App.tsx index 6c7e6768d..d5d01a619 100644 --- a/vite/src/App.tsx +++ b/vite/src/App.tsx @@ -1,6 +1,9 @@ import { AppEnv } from "@autumn/shared"; +import { init } from "@squircle/core"; +import * as React from "react"; import { BrowserRouter, Route, Routes } from "react-router"; import { MainLayout } from "./app/layout"; +import { OnboardingLayout } from "./app/OnboardingLayout"; import { AdminView } from "./views/admin/AdminView"; import { AcceptInvitation } from "./views/auth/AcceptInvitation"; import { PasswordSignIn } from "./views/auth/components/PasswordSignIn"; @@ -13,10 +16,16 @@ import CustomerProductView from "./views/customers/customer/product/CustomerProd import { DefaultView } from "./views/DefaultView"; import DevScreen from "./views/developer/DevView"; import OnboardingView2 from "./views/onboarding2/OnboardingView2"; +import OnboardingView3 from "./views/onboarding3/OnboardingView3"; import ProductsView from "./views/products/ProductsView"; -import ProductView from "./views/products/product/ProductView"; +import PlanEditorView from "./views/products/plan/PlanEditorView"; import { TerminalView } from "./views/TerminalView"; +export function SquircleProvider({ children }: { children: React.ReactNode }) { + React.useEffect(() => void init(), []); + return children; +} + export default function App() { return ( @@ -24,6 +33,12 @@ export default function App() { } /> } /> } /> + + {/* Onboarding routes without sidebar */} + }> + } /> + + }> } /> } /> @@ -39,10 +54,21 @@ export default function App() { path="/sandbox/products" element={} /> - } /> + + + + } + /> } + element={ + + + + } /> } /> diff --git a/vite/src/app/OnboardingLayout.tsx b/vite/src/app/OnboardingLayout.tsx new file mode 100644 index 000000000..3051b4e3c --- /dev/null +++ b/vite/src/app/OnboardingLayout.tsx @@ -0,0 +1,66 @@ +import { AutumnProvider } from "autumn-js/react"; +import { NuqsAdapter } from "nuqs/adapters/react-router/v7"; +import { useEffect } from "react"; +import { Outlet, useNavigate } from "react-router"; +import { CustomToaster } from "@/components/general/CustomToaster"; +import { useGlobalErrorHandler } from "@/hooks/common/useGlobalErrorHandler"; +import { useSession } from "@/lib/auth-client"; +import LoadingScreen from "@/views/general/LoadingScreen"; + +export function OnboardingLayout() { + const { data, isPending } = useSession(); + const { handleApiError } = useGlobalErrorHandler(); + const navigate = useNavigate(); + + // Global error handler for API errors + useEffect(() => { + const handleGlobalError = (event: ErrorEvent) => { + if (event.error?.response) { + handleApiError(event.error); + } + }; + + window.addEventListener("error", handleGlobalError); + return () => window.removeEventListener("error", handleGlobalError); + }, [handleApiError]); + + // 1. If not loaded, show loading screen + if (isPending) { + return ( + +
+ +
+
+ ); + } + + // 2. If no user, redirect to sign in + if (!data) { + navigate("/sign-in"); + return; + } + + return ( + + +
+ + +
+
+
+ ); +} diff --git a/vite/src/app/layout.tsx b/vite/src/app/layout.tsx index 14c1fe31e..4e02edfa5 100644 --- a/vite/src/app/layout.tsx +++ b/vite/src/app/layout.tsx @@ -1,30 +1,30 @@ +import { AppEnv } from "@autumn/shared"; +import { AutumnProvider } from "autumn-js/react"; +import { ArrowUpRightFromSquare } from "lucide-react"; +import { NuqsAdapter } from "nuqs/adapters/react-router/v7"; +import { usePostHog } from "posthog-js/react"; +import { useEffect } from "react"; +import { Outlet, useNavigate } from "react-router"; +import { ChatWidget } from "@/components/general/ChatWidget"; +import { CustomToaster } from "@/components/general/CustomToaster"; +import { Button } from "@/components/ui/button"; +import { useAutumnFlags } from "@/hooks/common/useAutumnFlags"; +import { useGlobalErrorHandler } from "@/hooks/common/useGlobalErrorHandler"; +import { useOrg } from "@/hooks/common/useOrg"; +import { useDevQuery } from "@/hooks/queries/useDevQuery"; +import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery"; +import { useProductsQuery } from "@/hooks/queries/useProductsQuery"; +import { useRewardsQuery } from "@/hooks/queries/useRewardsQuery"; +import { useSession } from "@/lib/auth-client"; import { cn } from "@/lib/utils"; import { useEnv } from "@/utils/envUtils"; import { navigateTo } from "@/utils/genUtils"; -import LoadingScreen from "@/views/general/LoadingScreen"; -import { MainSidebar } from "@/views/main-sidebar/MainSidebar"; -import { AppEnv } from "@autumn/shared"; -import { useEffect, useState } from "react"; -import { Outlet, useNavigate } from "react-router"; - -import { usePostHog } from "posthog-js/react"; -import { Button } from "@/components/ui/button"; -import { ArrowUpRightFromSquare } from "lucide-react"; -import { AutumnProvider } from "autumn-js/react"; -import { useSession } from "@/lib/auth-client"; -import { CustomToaster } from "@/components/general/CustomToaster"; -import { AppContext } from "./AppContext"; -import { NuqsAdapter } from "nuqs/adapters/react-router/v7"; -import { useGlobalErrorHandler } from "@/hooks/common/useGlobalErrorHandler"; -import { useProductsQuery } from "@/hooks/queries/useProductsQuery"; -import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery"; -import { useRewardsQuery } from "@/hooks/queries/useRewardsQuery"; +import CommandBar from "@/views/command-bar/CommandBar"; import { useCusSearchQuery } from "@/views/customers/hooks/useCusSearchQuery"; -import { useOrg } from "@/hooks/common/useOrg"; -import { useAutumnFlags } from "@/hooks/common/useAutumnFlags"; -import { useDevQuery } from "@/hooks/queries/useDevQuery"; +import LoadingScreen from "@/views/general/LoadingScreen"; import { InviteNotifications } from "@/views/general/notifications/InviteNotifications"; -import { ChatWidget } from "@/components/general/ChatWidget"; +import { MainSidebar } from "@/views/main-sidebar/MainSidebar"; +import { AppContext } from "./AppContext"; export function MainLayout() { const env = useEnv(); @@ -37,7 +37,7 @@ export function MainLayout() { // Global error handler for API errors useEffect(() => { const handleGlobalError = (event: ErrorEvent) => { - if (event.error && event.error.response) { + if (event.error?.response) { handleApiError(event.error); } }; @@ -62,19 +62,22 @@ export function MainLayout() { // 1. If not loaded, show loading screen if (isPending) { return ( - +
{env === AppEnv.Sandbox && ( -
-

+

+

You're in sandbox

+ + + When checking out in test mode -
+ use 4242 4242 4242 4242 as the card number, +
04/42 as the expiry date, and{" "} + any CVC. +
+ + + + ); +}; diff --git a/vite/src/components/autumn/PricingTableContainer.tsx b/vite/src/components/autumn/PricingTableContainer.tsx new file mode 100644 index 000000000..c7cc29009 --- /dev/null +++ b/vite/src/components/autumn/PricingTableContainer.tsx @@ -0,0 +1,28 @@ +import { usePricingTable } from "autumn-js/react"; +import PricingTablePreview from "./pricing-table-preview"; + +interface PricingTableContainerProps { + setConnectStripeOpen: (open: boolean) => void; +} + +export const PricingTableContainer = ({ + setConnectStripeOpen, +}: PricingTableContainerProps) => { + const { products, isLoading, refetch } = usePricingTable(); + + if (isLoading) { + return ( +
+
Loading pricing table...
+
+ ); + } + + return ( + + ); +}; diff --git a/vite/src/components/autumn/pricing-table-preview.tsx b/vite/src/components/autumn/pricing-table-preview.tsx new file mode 100644 index 000000000..a2c9f2c17 --- /dev/null +++ b/vite/src/components/autumn/pricing-table-preview.tsx @@ -0,0 +1,104 @@ +import type { Product } from "autumn-js"; +import { useCustomer } from "autumn-js/react"; + +import { useOrg } from "@/hooks/common/useOrg"; +import OnboardingCheckoutDialog from "@/views/onboarding3/OnboardingCheckoutDialog"; +import { PlanCardPreview } from "./PlanCardPreview"; + +interface PricingTableProps { + products?: Product[]; + setConnectStripeOpen: (open: boolean) => void; + onCheckoutComplete?: () => void; +} + +export default function PricingTablePreview({ + products, + setConnectStripeOpen, +}: PricingTableProps) { + const { org } = useOrg(); + const { checkout } = useCustomer({ + swrConfig: { + refreshInterval: 0, + }, + }); + + if (!products || products.length === 0) { + return null; + } + + const handleSubscribe = async (product: Product) => { + if (!org?.stripe_connected) { + setConnectStripeOpen(true); + return; + } + + if (product.id) { + try { + await checkout({ + productId: product.id, + dialog: OnboardingCheckoutDialog, + openInNewTab: true, + successUrl: `${window.location.origin}/sandbox/onboarding3`, + }); + } catch (error) { + console.error("Checkout error:", error); + } + } else if (product.display?.button_url) { + window.open(product.display?.button_url, "_blank"); + } + }; + + const getButtonText = (product: Product) => { + if (product.scenario === "active") { + return "Current product"; + } + if (product.scenario === "downgrade") { + return "Downgrade"; + } + if (product.scenario === "upgrade") { + return "Upgrade"; + } + if (product.scenario === "scheduled") { + return "Scheduled"; + } + return product.display?.button_text || "Subscribe"; + }; + + const isRecommended = (product: Product) => { + return !!product.display?.recommend_text; + }; + + // Dynamic grid classes based on product count + const getGridClasses = () => { + const productCount = products.length; + // Always one column on small screens (vertical flow), more columns only on larger screens + if (productCount === 1) { + return "flex flex-col gap-6 max-w-md mx-auto px-4"; // Always vertical + } else if (productCount === 2) { + return "flex flex-col gap-6 max-w-2xl mx-auto px-4 sm:grid sm:grid-cols-2 sm:flex-none"; // Vertical on mobile, 2 columns on sm+ + } else { + return "flex flex-col gap-6 max-w-7xl mx-auto px-4 sm:grid md:grid-cols-2 2xl:grid-cols-3 sm:flex-none"; // Vertical on mobile, 2 columns on sm+, 3 on lg+ + } + }; + + return ( +
+
+ {products.map((product, index) => ( + handleSubscribe(product)} + recommended={isRecommended(product)} + disabled={ + (product.scenario === "active" && + !product.properties?.updateable) || + product.scenario === "scheduled" + } + /> + ))} +
+
+ ); +} diff --git a/vite/src/components/compareDbFeature.ts b/vite/src/components/compareDbFeature.ts new file mode 100644 index 000000000..416637e8f --- /dev/null +++ b/vite/src/components/compareDbFeature.ts @@ -0,0 +1,116 @@ +import { + type CreateFeature, + type CreditSchemaItem, + type Feature, + FeatureType, +} from "@autumn/shared"; + +export const creditSchemasSame = ({ + schema1, + schema2, +}: { + schema1: CreditSchemaItem[]; + schema2: CreditSchemaItem[]; +}) => { + schema1.sort((a, b) => + a.metered_feature_id.localeCompare(b.metered_feature_id), + ); + schema2.sort((a, b) => + a.metered_feature_id.localeCompare(b.metered_feature_id), + ); + + return schema1.every( + (schema, index) => + schema.metered_feature_id === schema2[index].metered_feature_id && + schema.credit_amount === schema2[index].credit_amount, + ); +}; + +const eventNamesSame = ({ + eventNames1, + eventNames2, +}: { + eventNames1: string[]; + eventNames2: string[]; +}) => { + eventNames1.sort(); + eventNames2.sort(); + + return eventNames1.every( + (eventName, index) => eventName === eventNames2[index], + ); +}; + +export const compareDbFeature = ({ + curFeature, + newFeature, +}: { + curFeature?: Feature | CreateFeature; + newFeature?: Feature | CreateFeature; +}) => { + if (!curFeature && !newFeature) { + return true; + } + + if (!curFeature || !newFeature) { + return false; + } + + const diffs = { + id: { + condition: curFeature.id !== newFeature.id, + message: `ID different: ${curFeature.id} !== ${newFeature.id}`, + }, + name: { + condition: curFeature.name !== newFeature.name, + message: `Name different: ${curFeature.name} !== ${newFeature.name}`, + }, + type: { + condition: curFeature.type !== newFeature.type, + message: `Type different: ${curFeature.type} !== ${newFeature.type}`, + }, + + usage_type: { + condition: + curFeature.type === FeatureType.Metered && + newFeature.type === FeatureType.Metered && + curFeature.config?.usage_type !== newFeature.config?.usage_type, + message: `Usage type different: ${curFeature.config?.usage_type} !== ${newFeature.config?.usage_type}`, + }, + + credit_schema: { + condition: + curFeature.type === FeatureType.CreditSystem && + newFeature.type === FeatureType.CreditSystem && + !creditSchemasSame({ + schema1: curFeature.config?.schema || [], + schema2: newFeature.config?.schema || [], + }), + message: `Credit schema different: ${curFeature.config?.schema} !== ${newFeature.config?.schema}`, + }, + + event_names: { + condition: + curFeature.type === FeatureType.Metered && + newFeature.type === FeatureType.Metered && + !eventNamesSame({ + eventNames1: curFeature.event_names || [], + eventNames2: newFeature.event_names || [], + }), + message: `Event names different: ${curFeature.event_names} !== ${newFeature.event_names}`, + }, + }; + + const same = Object.values(diffs).every((d) => !d.condition); + + if (!same) { + console.log( + "feature differences:", + Object.values(diffs) + .filter((d) => d.condition) + .map((d) => d.message), + ); + } + + return same; +}; diff --git a/vite/src/components/general/CopyButton.tsx b/vite/src/components/general/CopyButton.tsx index a6979c20e..2016230b9 100644 --- a/vite/src/components/general/CopyButton.tsx +++ b/vite/src/components/general/CopyButton.tsx @@ -1,7 +1,8 @@ -import React, { useEffect, useState } from "react"; -import { Button, ButtonProps } from "../ui/button"; import { Check, Copy } from "lucide-react"; +import type React from "react"; +import { useEffect, useState } from "react"; import { cn } from "@/lib/utils"; +import { Button, type ButtonProps } from "../ui/button"; function CopyButton({ text, diff --git a/vite/src/components/general/CopyablePre.tsx b/vite/src/components/general/CopyablePre.tsx index 6d1593df7..c46e844f9 100644 --- a/vite/src/components/general/CopyablePre.tsx +++ b/vite/src/components/general/CopyablePre.tsx @@ -1,5 +1,5 @@ -import { Button } from "../ui/button"; -import { Copy } from "lucide-react"; +import React from "react"; +import { Check, Copy } from "lucide-react"; import CopyButton from "./CopyButton"; export function CopyablePre({ text }: { text: string }) { @@ -14,3 +14,54 @@ export function CopyablePre({ text }: { text: string }) {
); } + +// A compact, inline version for use in places like badges or small UI elements. +export function CopyableSpan({ + text, + className = "", + copySize = 20, + copyProps = {}, +}: { + text: string; + className?: string; + copySize?: number; + copyProps?: React.ComponentProps; +}) { + const [copied, setCopied] = React.useState(false); + + React.useEffect(() => { + if (copied) { + setTimeout(() => { + setCopied(false); + }, 1000); + } + }, [copied]); + + const handleClick = (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + navigator.clipboard.writeText(text); + setCopied(true); + }; + + return ( + + {text} +
+ {copied ? ( + + ) : ( + + )} +
+
+ ); +} diff --git a/vite/src/components/general/CustomToaster.tsx b/vite/src/components/general/CustomToaster.tsx index 2262a2605..bb81f0f14 100644 --- a/vite/src/components/general/CustomToaster.tsx +++ b/vite/src/components/general/CustomToaster.tsx @@ -1,22 +1,35 @@ +import { + CheckCircleIcon, + InfoIcon, + SealWarningIcon, + SpinnerIcon, +} from "@phosphor-icons/react"; import { Toaster as ToasterComponent } from "sonner"; +import { useOnboardingStore } from "@/views/onboarding3/store/useOnboardingStore"; export const CustomToaster = () => { + const isOnboarding = useOnboardingStore((state) => state.isOnboarding); + return ( + icons={{ + success: , + error: , + warning: , + info: , + loading: , + }} + > ); }; diff --git a/vite/src/components/general/buttons/ClickableIcon.tsx b/vite/src/components/general/buttons/ClickableIcon.tsx new file mode 100644 index 000000000..9ff0658cf --- /dev/null +++ b/vite/src/components/general/buttons/ClickableIcon.tsx @@ -0,0 +1,29 @@ +import { Slot } from "@radix-ui/react-slot"; +import type { ButtonHTMLAttributes } from "react"; +import { cn } from "@/lib/utils"; + +interface ClickableIconProps extends ButtonHTMLAttributes { + icon: React.ReactElement; + asChild?: boolean; +} + +export const ClickableIcon = ({ + icon, + onClick, + asChild, + ...props +}: ClickableIconProps) => { + const Comp = asChild ? Slot : "button"; + + return ( + + {icon} + + ); +}; diff --git a/vite/src/components/general/modal-components/InfoTooltip.tsx b/vite/src/components/general/modal-components/InfoTooltip.tsx index 0e476c210..4b91f97ba 100644 --- a/vite/src/components/general/modal-components/InfoTooltip.tsx +++ b/vite/src/components/general/modal-components/InfoTooltip.tsx @@ -1,10 +1,10 @@ +import type { TooltipContentProps } from "@radix-ui/react-tooltip"; +import { InfoIcon } from "lucide-react"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; -import { TooltipContentProps } from "@radix-ui/react-tooltip"; -import { InfoIcon } from "lucide-react"; export const InfoTooltip = ({ children, diff --git a/vite/src/components/ui/button.tsx b/vite/src/components/ui/button.tsx index f64c25d14..8885173b8 100644 --- a/vite/src/components/ui/button.tsx +++ b/vite/src/components/ui/button.tsx @@ -1,11 +1,9 @@ -import * as React from "react"; import { Slot } from "@radix-ui/react-slot"; import { cva, type VariantProps } from "class-variance-authority"; - -import { cn } from "@/lib/utils"; import { LoaderCircle, PlusIcon, Search } from "lucide-react"; -import { Tooltip, TooltipContent } from "./tooltip"; -import { TooltipTrigger } from "./tooltip"; +import * as React from "react"; +import { cn } from "@/lib/utils"; +import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip"; // [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 @@ -153,30 +151,6 @@ const Button = React.forwardRef( } else { return Button; } - return ( - { - if (isLoading) { - e.preventDefault(); - e.stopPropagation(); - return; - } - props.onClick?.(e); - }} - > - {isLoading && } - {startIcon && !isLoading && <>{startIcon}} - {variant == "add" && } - {children} - {endIcon && !isLoading && <>{endIcon}} - - ); }, ); Button.displayName = "Button"; diff --git a/vite/src/components/ui/command.tsx b/vite/src/components/ui/command.tsx index 339a4b7ea..2dbb539b8 100644 --- a/vite/src/components/ui/command.tsx +++ b/vite/src/components/ui/command.tsx @@ -1,15 +1,13 @@ -import * as React from "react"; import { Command as CommandPrimitive } from "cmdk"; -import { SearchIcon } from "lucide-react"; - -import { cn } from "@/lib/utils"; +import type * as React from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, -} from "@/components/ui/dialog"; +} from "@/components/v2/dialogs/Dialog"; +import { cn } from "@/lib/utils"; function Command({ className, @@ -19,7 +17,7 @@ function Command({ & { title?: string; description?: string; + className?: string; + showCloseButton?: boolean; }) { return ( @@ -42,8 +44,14 @@ function CommandDialog({ {title} {description} - - + + {children} @@ -58,13 +66,13 @@ function CommandInput({ return (
- + {/* */} ) { +}: React.ComponentProps & { + showCloseButton?: boolean; +}) { return ( @@ -67,10 +70,12 @@ function DialogContent({ {...props} > {children} - - - Close - + {showCloseButton && ( + + + Close + + )} ); diff --git a/vite/src/components/ui/popover.tsx b/vite/src/components/ui/popover.tsx index 773e7d82f..b3c537a54 100644 --- a/vite/src/components/ui/popover.tsx +++ b/vite/src/components/ui/popover.tsx @@ -1,5 +1,5 @@ -import * as React from "react"; import * as PopoverPrimitive from "@radix-ui/react-popover"; +import type * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/vite/src/components/ui/separator.tsx b/vite/src/components/ui/separator.tsx index 4a87d9f3a..90bde4af7 100644 --- a/vite/src/components/ui/separator.tsx +++ b/vite/src/components/ui/separator.tsx @@ -1,7 +1,7 @@ "use client"; -import * as React from "react"; import * as SeparatorPrimitive from "@radix-ui/react-separator"; +import type * as React from "react"; import { cn } from "@/lib/utils"; @@ -17,7 +17,7 @@ function Separator({ decorative={decorative} orientation={orientation} className={cn( - "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px", + "shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px bg-t11", className, )} {...props} diff --git a/vite/src/components/v2/CodeGroup.tsx b/vite/src/components/v2/CodeGroup.tsx new file mode 100644 index 000000000..24b820c17 --- /dev/null +++ b/vite/src/components/v2/CodeGroup.tsx @@ -0,0 +1,388 @@ +import { CheckIcon, CopyIcon } from "@phosphor-icons/react"; +import * as TabsPrimitive from "@radix-ui/react-tabs"; +import { common, createStarryNight } from "@wooorm/starry-night"; +import { toHtml } from "hast-util-to-html"; +import * as React from "react"; +import { useClickWithoutDrag } from "@/hooks/common/useClickWithoutDrag"; +import { cn } from "@/lib/utils"; + +const getStarryNight = async () => { + return await createStarryNight(common); +}; + +interface CodeGroupProps + extends React.ComponentPropsWithoutRef {} + +const CodeGroup = React.forwardRef< + React.ElementRef, + CodeGroupProps +>(({ ...props }, ref) => ); +CodeGroup.displayName = "CodeGroup"; + +interface CodeGroupListProps + extends React.ComponentPropsWithoutRef {} + +const CodeGroupList = React.forwardRef< + React.ElementRef, + CodeGroupListProps +>(({ className, ...props }, ref) => ( + +)); +CodeGroupList.displayName = "CodeGroupList"; + +interface CodeGroupTabProps + extends React.ComponentPropsWithoutRef {} + +const CodeGroupTab = React.forwardRef< + React.ElementRef, + CodeGroupTabProps +>(({ className, ...props }, ref) => ( + +)); +CodeGroupTab.displayName = "CodeGroupTab"; + +interface CodeGroupCopyButtonProps + extends React.ComponentPropsWithoutRef<"button"> { + onCopy?: () => void; +} + +const CodeGroupCopyButton = React.forwardRef< + HTMLButtonElement, + CodeGroupCopyButtonProps +>(({ className, onCopy, ...props }, ref) => { + const [copied, setCopied] = React.useState(false); + + const handleClick = React.useCallback( + (e: React.MouseEvent) => { + if (onCopy) onCopy(); + setCopied(true); + setTimeout(() => setCopied(false), 1200); + if (props.onClick) props.onClick(e); + }, + [onCopy, props.onClick], + ); + + return ( + + ); +}); +CodeGroupCopyButton.displayName = "CodeGroupCopyButton"; + +interface CodeGroupContentProps + extends React.ComponentPropsWithoutRef { + copyText?: string; +} + +const CodeGroupContent = React.forwardRef< + React.ElementRef, + CodeGroupContentProps +>(({ className, copyText, children, ...props }, ref) => { + const [showCopiedFeedback, setShowCopiedFeedback] = React.useState(false); + const [isExiting, setIsExiting] = React.useState(false); + + const handleCopy = React.useCallback( + (e: React.MouseEvent) => { + // Get current selection + const selection = window.getSelection(); + const selectedText = selection?.toString() || ""; + + // Determine what to copy + const textToCopy = selectedText || copyText || ""; + + if (textToCopy) { + navigator.clipboard.writeText(textToCopy); + + // Show feedback with fade in + setIsExiting(false); + setShowCopiedFeedback(true); + + // Start fade out after delay + setTimeout(() => { + setIsExiting(true); + }, 1000); + + // Hide completely after fade out animation + setTimeout(() => { + setShowCopiedFeedback(false); + setIsExiting(false); + }, 1200); + } + }, + [copyText], + ); + + const { handleMouseDown, handleClick } = useClickWithoutDrag(handleCopy); + + const handleKeyDown = React.useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + const textToCopy = copyText || ""; + if (textToCopy) { + navigator.clipboard.writeText(textToCopy); + setIsExiting(false); + setShowCopiedFeedback(true); + + setTimeout(() => { + setIsExiting(true); + }, 1000); + + setTimeout(() => { + setShowCopiedFeedback(false); + setIsExiting(false); + }, 1200); + } + } + }, + [copyText], + ); + + return ( +
+ + {children} + + + {showCopiedFeedback && ( +
+
+
+ + Copied! +
+
+ )} +
+ ); +}); +CodeGroupContent.displayName = "CodeGroupContent"; + +interface CodeGroupCodeProps extends React.ComponentPropsWithoutRef<"pre"> { + language?: string; + children: string; +} + +const CodeGroupCode = React.forwardRef( + ({ className, language = "jsx", children, ...props }, ref) => { + const [highlightedCode, setHighlightedCode] = React.useState(""); + + React.useEffect(() => { + const highlight = async () => { + try { + const starryNight = await getStarryNight(); + const scope = starryNight.flagToScope(language); + + if (scope) { + const tree = starryNight.highlight(children, scope); + let html = toHtml(tree); + + // Post-process: mark operators (single/double char pl-k spans) differently from keywords + // Operators to mark as grey: : = ! + - * / % & | ^ ~ < > ? + html = html.replace( + /([!:=<>+\-*/%&|^~?]+|>|<|&|=>|==|===|!==|!=|<=|>=|&&|\|\|)<\/span>/g, + '$1', + ); + + // Post-process: detect function declarations (pl-c1 followed by = async or = () + // Mark these as function names (should be red) + html = html.replace( + /([^<]+)<\/span>(\s*)=<\/span>(\s*)(async<\/span>|[(])/g, + '$1$2=$3$4', + ); + + // Post-process: wrap property names in object literals (text before : that's not in a span) + // Match word characters followed by a colon span + html = html.replace( + /([a-zA-Z_$][a-zA-Z0-9_$]*)(:<\/span>)/g, + '$1$2', + ); + + // Post-process: wrap HTML/JSX tag names to make them blue like pl-k + // Match tag names after < or <(<\/)?<\/span>([a-zA-Z][a-zA-Z0-9]*)/g, + '<$1$2', + ); + + // Post-process: handle plain text HTML tags (not already wrapped in spans) + // Common HTML tags dictionary + const htmlTags = [ + "html", + "head", + "body", + "div", + "span", + "p", + "a", + "img", + "button", + "input", + "form", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "ul", + "ol", + "li", + "nav", + "header", + "footer", + "section", + "article", + "main", + "aside", + "table", + "tr", + "td", + "th", + "thead", + "tbody", + "br", + "hr", + "meta", + "link", + "script", + "style", + "title", + "base", + "noscript", + ]; + + const tagPattern = htmlTags.join("|"); + + // Match HTML tags in plain text: or or + html = html.replace( + new RegExp( + `(<)(/?)(${tagPattern})(\\s[^&]*?)?(>|/>)`, + "g", + ), + '$1$2$3$4$5', + ); + + // Post-process: handle self-closing tags and closing brackets for any remaining cases + // Match closing > or /> and make them blue + html = html.replace( + /([a-zA-Z0-9"'\s}])(>|\/>)(?!<\/span>)/g, + '$1$2', + ); + + // Match JSX attributes (word before = in JSX context) + // Handles both with space and without space before attribute + html = html.replace( + /([>\s])([a-zA-Z][a-zA-Z0-9]*)(=<\/span>{)/g, + '$1$2$3', + ); + + // Post-process: detect boolean values (true/false) and make them purple like strings + html = html.replace( + /(true|false)<\/span>/g, + '$1', + ); + + setHighlightedCode(html); + } else { + setHighlightedCode(children); + } + } catch (error) { + console.error("Syntax highlighting error:", error); + setHighlightedCode(children); + } + }; + + highlight(); + }, [children, language]); + + return ( +
+				
+			
+ ); + }, +); +CodeGroupCode.displayName = "CodeGroupCode"; + +export { + CodeGroup, + CodeGroupList, + CodeGroupTab, + CodeGroupCopyButton, + CodeGroupContent, + CodeGroupCode, +}; diff --git a/vite/src/components/v2/badges/Badge.tsx b/vite/src/components/v2/badges/Badge.tsx new file mode 100644 index 000000000..203feb429 --- /dev/null +++ b/vite/src/components/v2/badges/Badge.tsx @@ -0,0 +1,60 @@ +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +// transition-colors focus:outline-none focus:ring-2 focus:ring-zinc-950 focus:ring-offset-2 dark:border-zinc-800 dark:focus:ring-zinc-300 + +const badgeVariants = cva( + `inline-flex items-center rounded-lg border border-zinc-200 px-1.5 py-0.5 + + // Custom stuff + text-body-secondary + `, + { + variants: { + variant: { + default: + "border-transparent bg-zinc-900 text-zinc-50 shadow hover:bg-zinc-900/80 dark:bg-zinc-50 dark:text-zinc-900 dark:hover:bg-zinc-50/80", + + muted: "bg-muted border border-transparent", + // secondary: + // "border-transparent bg-zinc-100 text-zinc-900 hover:bg-zinc-100/80 dark:bg-zinc-800 dark:text-zinc-50 dark:hover:bg-zinc-800/80", + // destructive: + // "border-transparent bg-red-500 text-zinc-50 shadow hover:bg-red-500/80 dark:bg-red-900 dark:text-zinc-50 dark:hover:bg-red-900/80", + // outline: "text-zinc-950 dark:text-zinc-50", + // purple: "bg-purple-50 text-purple-500 border-purple-200", + // blue: "bg-blue-50 text-blue-500 border-blue-200", + // green: + // "bg-green-50 text-green-500 border-green-200 !hover:bg-green-100", + // yellow: "bg-yellow-50 text-yellow-500 border-yellow-200", + // red: "bg-red-50 text-red-500 border-red-200", + // status: "px-1.5 py-0 text-white border-none", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span"; + + return ( + + ); +} + +export { Badge, badgeVariants }; diff --git a/vite/src/components/v2/badges/IconBadge.tsx b/vite/src/components/v2/badges/IconBadge.tsx new file mode 100644 index 000000000..95de9b602 --- /dev/null +++ b/vite/src/components/v2/badges/IconBadge.tsx @@ -0,0 +1,118 @@ +/* eslint-disable react-refresh/only-export-components */ + +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; +import { cn } from "@/lib/utils"; +import { Badge } from "./Badge"; + +const iconBadgeVariants = cva( + "flex-row justify-center gap-[3px] min-w-10", // Gap is handled in position variants + { + variants: { + position: { + left: "flex-row", + right: "flex-row-reverse", + }, + }, + defaultVariants: { + position: "left", + }, + }, +); + +export interface IconBadgeProps + extends Omit< + React.ComponentProps<"span">, + keyof VariantProps + >, + VariantProps { + icon?: React.ReactNode; + rightIcon?: React.ReactNode; + variant?: "default" | "muted"; + asChild?: boolean; +} + +const IconBadge = React.forwardRef( + ( + { + className, + variant = "muted", + position = "left", + asChild = false, + icon, + rightIcon, + children, + ...props + }, + ref, + ) => { + const getIconColor = () => { + switch (variant) { + case "muted": + return "text-t4"; + case "default": + return "text-zinc-50"; + default: + return "text-t4"; // Default fallback + } + }; + + const renderIcon = (icon: React.ReactNode) => { + if (!icon) return null; + + // Clone the icon and add default size and color classes + if (React.isValidElement(icon)) { + return React.cloneElement(icon, { + className: cn("size-3", getIconColor(), icon.props.className), + } as React.HTMLAttributes); + } + + return icon; + }; + + const renderContent = () => { + switch (position) { + case "left": + return ( + <> + {renderIcon(icon)} + {children} + {renderIcon(rightIcon)} + + ); + case "right": + return ( + <> + {renderIcon(rightIcon)} + {children} + {renderIcon(icon)} + + ); + default: + return ( + <> + {renderIcon(icon)} + {children} + {renderIcon(rightIcon)} + + ); + } + }; + + return ( + + {renderContent()} + + ); + }, +); + +IconBadge.displayName = "IconBadge"; + +export { IconBadge, iconBadgeVariants }; diff --git a/vite/src/components/v2/badges/PlanTypeBadge.tsx b/vite/src/components/v2/badges/PlanTypeBadge.tsx new file mode 100644 index 000000000..3076dca03 --- /dev/null +++ b/vite/src/components/v2/badges/PlanTypeBadge.tsx @@ -0,0 +1,59 @@ +import { PlusSquareIcon } from "@phosphor-icons/react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { DefaultIcon, FreeTrialIcon } from "@/components/v2/icons/AutumnIcons"; +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center gap-1 px-1.5 py-0.5 rounded-[6px] text-tiny font-medium w-fit shrink-0", + { + variants: { + variant: { + default: "bg-muted text-body-secondary", + freeTrial: "bg-muted text-body-secondary", + addon: "bg-muted text-body-secondary", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface PlanTypeBadgeProps extends VariantProps { + className?: string; +} + +export const PlanTypeBadge = ({ variant, className }: PlanTypeBadgeProps) => { + const getIcon = () => { + switch (variant) { + case "default": + return ; + case "freeTrial": + return ; + case "addon": + return ; + default: + return ; + } + }; + + const getLabel = () => { + switch (variant) { + case "default": + return "Default"; + case "freeTrial": + return "Free Trial"; + case "addon": + return "Add-on"; + default: + return "Default"; + } + }; + + return ( +
+ {getIcon()} + {getLabel()} +
+ ); +}; diff --git a/vite/src/components/v2/badges/PlanTypeBadges.tsx b/vite/src/components/v2/badges/PlanTypeBadges.tsx new file mode 100644 index 000000000..f771b95f5 --- /dev/null +++ b/vite/src/components/v2/badges/PlanTypeBadges.tsx @@ -0,0 +1,39 @@ +import type { ProductV2 } from "@autumn/shared"; +import { PlanTypeBadge } from "./PlanTypeBadge"; + +interface PlanTypeBadgesProps { + product: ProductV2; + className?: string; +} + +export const PlanTypeBadges = ({ product, className }: PlanTypeBadgesProps) => { + const badges = []; + + if (product.is_default) { + badges.push( + , + ); + } + + if (product.free_trial) { + badges.push( + , + ); + } + + if (product.is_add_on) { + badges.push( + , + ); + } + + if (badges.length === 0) { + return null; + } + + return
{badges}
; +}; diff --git a/vite/src/components/v2/badges/StackBadge.tsx b/vite/src/components/v2/badges/StackBadge.tsx new file mode 100644 index 000000000..332edefeb --- /dev/null +++ b/vite/src/components/v2/badges/StackBadge.tsx @@ -0,0 +1,72 @@ +import type * as React from "react"; +import { cn } from "@/lib/utils"; + +interface StackBadgeProps { + stack: string; + asset?: string; + icon?: React.ReactNode; + isSelected?: boolean; + onClick?: () => void; + onSelectedChange?: (selected: boolean) => void; + className?: string; +} + +export default function StackBadge({ + stack, + asset, + icon, + isSelected = false, + onClick, + onSelectedChange, + className, +}: StackBadgeProps) { + const isClickable = !!(onClick || onSelectedChange); + + const handleClick = () => { + if (!isClickable) return; + onSelectedChange?.(!isSelected); + onClick?.(); + }; + + const Component = isClickable ? "button" : "div"; + + return ( + +
+ {asset ? ( + {stack} + ) : ( +
{icon}
+ )} +
+
+ {stack} +
+
+ ); +} diff --git a/vite/src/components/v2/badges/StepBadge.tsx b/vite/src/components/v2/badges/StepBadge.tsx new file mode 100644 index 000000000..5d85f751b --- /dev/null +++ b/vite/src/components/v2/badges/StepBadge.tsx @@ -0,0 +1,9 @@ +export const StepBadge = ({ children }: { children: React.ReactNode }) => { + return ( +
+
+ {children} +
+
+ ); +}; diff --git a/vite/src/components/v2/breadcrumb.tsx b/vite/src/components/v2/breadcrumb.tsx new file mode 100644 index 000000000..58ec0456b --- /dev/null +++ b/vite/src/components/v2/breadcrumb.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import { useNavigate } from "react-router"; +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { cn } from "@/lib/utils"; +import { useEnv } from "@/utils/envUtils"; +import { navigateTo } from "@/utils/genUtils"; + +interface BreadcrumbItemType { + name: string; + href: string; +} + +export default function V2Breadcrumb({ + items, + className, +}: { + items: BreadcrumbItemType[]; + className?: string; +}) { + const env = useEnv(); + const navigate = useNavigate(); + + return ( + + + {items.map((item, index) => ( + + navigateTo(item.href, navigate, env)} + className="cursor-pointer" + > + {item.name} + + {index < items.length - 1 && } + + ))} + + + ); +} diff --git a/vite/src/components/v2/buttons/Button.tsx b/vite/src/components/v2/buttons/Button.tsx new file mode 100644 index 000000000..d93f4d146 --- /dev/null +++ b/vite/src/components/v2/buttons/Button.tsx @@ -0,0 +1,170 @@ +/* eslint-disable react-refresh/only-export-components */ +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; +import SmallSpinner from "@/components/general/SmallSpinner"; +import { cn } from "@/lib/utils"; + +// hover:border-primary +// focus-visible:bg-active-primary focus-visible:border-primary +// active:bg-active-primary active:border-primary + +// Remove ring styles +// focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive +const buttonVariants = cva( + `inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none + rounded-lg group/btn transition-none w-fit + `, + { + variants: { + variant: { + // Custom + primary: `btn-primary-shadow !text-primary-foreground bg-primary border border-transparent hover:bg-primary-btn-hover + active:bg-primary-btn-active active:border-primary-btn-border + focus-visible:bg-primary-btn-active focus-visible:border-primary-btn-border + `, + + secondary: `bg-input-background border border-[var(--color-input)] hover:border-primary hover:bg-hover-primary btn-secondary-shadow + focus-visible:bg-active-primary focus-visible:border-primary + active:bg-active-primary active:border-primary + `, + + skeleton: `text-body border border-transparent + hover:bg-muted-hover + focus-visible:bg-muted-active focus-visible:border-primary + active:bg-muted-active active:border-primary`, + + muted: `bg-muted hover:bg-muted-hover border border-transparent + focus-visible:bg-muted-active focus-visible:border-primary + active:bg-muted-active active:border-primary + `, + + destructive: `bg-destructive !text-destructive-foreground border-[1.2px] border-transparent + hover:bg-destructive-hover btn-destructive-shadow + focus-visible:border-destructive-border + active:border-destructive-border + `, + }, + size: { + default: "py-1 !px-[7px] text-body h-input", + sm: "py-1 !px-[7px] text-tiny h-6", + }, + }, + defaultVariants: { + variant: "primary", + size: "default", + }, + }, +); + +export interface ButtonProps + extends React.ComponentProps<"button">, + VariantProps { + asChild?: boolean; + isLoading?: boolean; + transition?: boolean; + disableActive?: boolean; + hide?: boolean; +} + +const Button = React.forwardRef( + ( + { + className, + variant, + size, + asChild = false, + isLoading = false, + transition = false, + disableActive = false, + hide = false, + children, + ...props + }, + ref, + ) => { + const Comp = asChild ? Slot : "button"; + const buttonRef = React.useRef(null); + const [contentWidth, setContentWidth] = React.useState(null); + + // Combine refs using useImperativeHandle + React.useImperativeHandle( + ref, + () => buttonRef.current as HTMLButtonElement, + [], + ); + + React.useEffect(() => { + if (buttonRef.current && !isLoading) { + // Measure the full button width including padding + const width = buttonRef.current.offsetWidth; + setContentWidth(width); + } + }, [isLoading]); + + // Measure width on mount and when loading state changes + React.useEffect(() => { + if (buttonRef.current && !isLoading) { + // Use requestAnimationFrame to ensure DOM is fully rendered + requestAnimationFrame(() => { + if (buttonRef.current) { + const width = buttonRef.current.offsetWidth; + setContentWidth(width); + } + }); + } + }, [isLoading]); + + const getDisableActiveStyles = () => { + if (!disableActive) return ""; + + switch (variant) { + case "primary": + return "active:!bg-primary active:!border-transparent focus-visible:!bg-primary focus-visible:!border-transparent"; + + case "secondary": + return "active:!bg-input-background active:!border-[var(--color-input)] focus-visible:!bg-input-background focus-visible:!border-[var(--color-input)]"; + + case "skeleton": + return "active:!bg-transparent active:!border-transparent focus-visible:!bg-transparent focus-visible:!border-transparent"; + + case "muted": + return "active:!bg-muted active:!border-transparent focus-visible:!bg-muted focus-visible:!border-transparent"; + + case "destructive": + return "active:!bg-destructive active:!border-transparent focus-visible:!bg-destructive focus-visible:!border-transparent"; + + default: + return ""; + } + }; + + if (hide) return null; + + return ( + + {isLoading ? : children} + + ); + }, +); + +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/vite/src/components/v2/buttons/CopyButton.tsx b/vite/src/components/v2/buttons/CopyButton.tsx new file mode 100644 index 000000000..b927391a5 --- /dev/null +++ b/vite/src/components/v2/buttons/CopyButton.tsx @@ -0,0 +1,62 @@ +import { CheckIcon, CopyIcon } from "@phosphor-icons/react"; +import { useEffect, useState } from "react"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import type { IconButtonProps } from "./IconButton"; +import { IconButton } from "./IconButton"; + +interface CopyButtonProps extends IconButtonProps { + children?: React.ReactNode; + text: string; +} + +export const CopyButton = ({ text, ...props }: CopyButtonProps) => { + const [copied, setCopied] = useState(false); + + useEffect(() => { + if (copied) { + setTimeout(() => { + setCopied(false); + }, 1500); // Show "Copied" message for 2 seconds + } + }, [copied]); + + const handleCopy = (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + navigator.clipboard.writeText(text); + setCopied(true); + }; + + return ( + + {}}> + + } + > + {text} + + + +
+ + Copied +
+
+
+
+ ); +}; diff --git a/vite/src/components/v2/buttons/GroupedTabButton.tsx b/vite/src/components/v2/buttons/GroupedTabButton.tsx new file mode 100644 index 000000000..b8cbf1bf2 --- /dev/null +++ b/vite/src/components/v2/buttons/GroupedTabButton.tsx @@ -0,0 +1,68 @@ +import type * as React from "react"; +import { cn } from "@/lib/utils"; + +interface GroupedTabButtonProps { + value: string; + onValueChange: (value: string) => void; + options: Array<{ + value: string; + label: string; + icon?: React.ReactNode; + }>; + className?: string; +} + +export const GroupedTabButton = ({ + value, + onValueChange, + options, + className, +}: GroupedTabButtonProps) => { + const isTwoTab = options.length === 2; + + return ( +
+ {options.map((option, index) => { + const isActive = value === option.value; + const isFirst = index === 0; + const isLast = index === options.length - 1; + + return ( + + ); + })} +
+ ); +}; diff --git a/vite/src/components/v2/buttons/HoverClickableIcon.tsx b/vite/src/components/v2/buttons/HoverClickableIcon.tsx new file mode 100644 index 000000000..012f2af52 --- /dev/null +++ b/vite/src/components/v2/buttons/HoverClickableIcon.tsx @@ -0,0 +1,44 @@ +import type { MouseEvent, ReactElement } from "react"; +import { Button } from "@/components/ui/button"; + +interface HoverClickableIconProps { + icon: ReactElement; + onClick?: (e: MouseEvent) => void; + disabled?: boolean; + className?: string; + size?: number; + "aria-label"?: string; +} + +export const HoverClickableIcon = ({ + icon, + onClick, + disabled = false, + className = "", + size = 24, + "aria-label": ariaLabel, +}: HoverClickableIconProps) => { + return ( + + ); +}; diff --git a/vite/src/components/v2/buttons/IconButton.tsx b/vite/src/components/v2/buttons/IconButton.tsx new file mode 100644 index 000000000..a05139302 --- /dev/null +++ b/vite/src/components/v2/buttons/IconButton.tsx @@ -0,0 +1,149 @@ +/* eslint-disable react-refresh/only-export-components */ + +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; +import { cn } from "@/lib/utils"; +import { Button, type ButtonProps } from "./Button"; + +const iconButtonVariants = cva( + "", // Empty base - we'll use buttonVariants as base + { + variants: { + iconOrientation: { + left: "flex-row", + center: "flex-row justify-center", + right: "flex-row-reverse", + }, + }, + compoundVariants: [ + { + className: "gap-1", + }, + ], + defaultVariants: { + iconOrientation: "left", + }, + }, +); + +export interface IconButtonProps + extends ButtonProps, + VariantProps { + icon?: React.ReactNode; + rightIcon?: React.ReactNode; +} + +const IconButton = React.forwardRef( + ( + { + className, + variant, + size, + iconOrientation = "left", + asChild = false, + icon, + rightIcon, + children, + ...props + }, + ref, + ) => { + const getIconColor = () => { + switch (variant) { + case "secondary": + case "muted": + case "skeleton": + return "text-t3"; + case "primary": + return "text-table-hover"; + case "destructive": + return "text-error-light"; + default: + return "text-t3"; // Default fallback + } + }; + + const renderIcon = (icon: React.ReactNode) => { + if (!icon) return null; + + // Clone the icon and add default size and color classes + if (React.isValidElement(icon)) { + return React.cloneElement(icon, { + className: cn( + size === "sm" ? "size-3" : "size-3.5", + getIconColor(), + icon.props.className, + ), + } as React.HTMLAttributes); + } + + return icon; + }; + + const renderContent = () => { + switch (iconOrientation) { + case "left": + return ( + <> + {renderIcon(icon)} + {children} + {renderIcon(rightIcon)} + + ); + case "right": + return ( + <> + {renderIcon(icon)} + {children} + {renderIcon(rightIcon)} + + ); + case "center": + return ( + <> + {renderIcon(icon || rightIcon)} + {children} + + ); + default: + return ( + <> + {renderIcon(icon)} + {children} + {renderIcon(rightIcon)} + + ); + } + }; + + const iconToMainClass = () => { + switch (iconOrientation) { + case "center": + return "!h-6 w-6"; // by default is size small + default: + return ""; + } + }; + + return ( + + ); + }, +); + +IconButton.displayName = "IconButton"; + +export { IconButton, iconButtonVariants }; diff --git a/vite/src/components/v2/buttons/PanelButton.tsx b/vite/src/components/v2/buttons/PanelButton.tsx new file mode 100644 index 000000000..aac98766c --- /dev/null +++ b/vite/src/components/v2/buttons/PanelButton.tsx @@ -0,0 +1,78 @@ +import type { ReactNode } from "react"; +import { cn } from "@/lib/utils"; + +interface PanelButtonProps { + isSelected: boolean; + onClick: () => void; + icon: ReactNode; + className?: string; +} + +export function PanelButton({ + isSelected, + onClick, + icon, + className = "", +}: PanelButtonProps) { + return ( + + ); +} diff --git a/vite/src/components/v2/buttons/ShortcutButton.tsx b/vite/src/components/v2/buttons/ShortcutButton.tsx new file mode 100644 index 000000000..09492d0dd --- /dev/null +++ b/vite/src/components/v2/buttons/ShortcutButton.tsx @@ -0,0 +1,86 @@ +import { useHotkeys } from "react-hotkeys-hook"; +import { Button, type ButtonProps } from "@/components/v2/buttons/Button"; + +export const ShortcutButton = ({ + metaShortcut, + singleShortcut, + children, + isLoading, + variant, + ...props +}: { + metaShortcut?: string; + singleShortcut?: string; + children: React.ReactNode; + isLoading?: boolean; + variant?: "primary" | "secondary"; +} & ButtonProps) => { + const getMetaKey = () => { + if (navigator.userAgent.includes("Mac")) { + return "⌘"; + } + return "Ctrl"; + }; + + useHotkeys( + metaShortcut + ? [`meta+${metaShortcut}`] + : singleShortcut + ? [singleShortcut] + : [], + (e) => { + e.preventDefault(); + props?.onClick?.(e as unknown as React.MouseEvent); + }, + { + enableOnFormTags: true, + }, + ); + + const keystrokeContainer = (keyStroke: string, isEnter = false) => { + const isSingleChar = keyStroke.length === 1; + const sizeClasses = isSingleChar ? "w-4" : "px-1"; + const baseClasses = `flex items-center justify-center ${sizeClasses} h-4 rounded-md text-tiny font-medium`; + const variantClasses = + variant === "secondary" + ? "bg-muted text-body-secondary" + : "bg-purple-medium !text-primary-foreground"; + + return ( +
+ + {keyStroke} + +
+ ); + }; + + const getShortcutDisplay = () => { + if (metaShortcut) { + if (metaShortcut === "enter") return "↵"; + if (metaShortcut === "backspace") return "⌫"; + return metaShortcut.toUpperCase(); + } + if (singleShortcut) { + if (singleShortcut === "escape") return "Esc"; + return singleShortcut.toUpperCase(); + } + return ""; + }; + + return ( + + ); +}; diff --git a/vite/src/components/v2/cards/Card.tsx b/vite/src/components/v2/cards/Card.tsx new file mode 100644 index 000000000..3e7de3070 --- /dev/null +++ b/vite/src/components/v2/cards/Card.tsx @@ -0,0 +1,92 @@ +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +function Card({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardAction({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardContent({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardAction, + CardDescription, + CardContent, +}; diff --git a/vite/src/components/v2/checkboxes/AreaCheckbox.tsx b/vite/src/components/v2/checkboxes/AreaCheckbox.tsx new file mode 100644 index 000000000..5378d1930 --- /dev/null +++ b/vite/src/components/v2/checkboxes/AreaCheckbox.tsx @@ -0,0 +1,91 @@ +/** biome-ignore-all lint/a11y/noStaticElementInteractions: shush */ +"use client"; + +import React from "react"; +import { cn } from "@/lib/utils"; +import { Checkbox } from "./Checkbox"; + +interface AreaCheckboxProps { + className?: string; + checked?: boolean; + onCheckedChange?: (checked: boolean) => void; + title: string; + tooltip?: string; + disabled?: boolean; + hide?: boolean; + description?: string; + children?: React.ReactNode; +} + +function AreaCheckbox({ + className, + checked = false, + onCheckedChange, + title, + tooltip, + disabled = false, + hide = false, + description, + children, +}: AreaCheckboxProps) { + const id = React.useId(); + + if (hide) return null; + return ( +
+ { + if (!disabled && onCheckedChange) { + onCheckedChange(checked as boolean); + } + }} + disabled={disabled} + size="sm" + className="mt-[3px]" + /> + +
+ + {/* Expanded content */} + {(children || description) && ( +
+ {description &&

{description}

} + {children} +
+ )} +
+
+ ); +} + +export { AreaCheckbox }; + +// {tooltip && ( +// +// +// +// +// +// +//

{tooltip}

+//
+//
+//
+// )} diff --git a/vite/src/components/v2/checkboxes/Checkbox.tsx b/vite/src/components/v2/checkboxes/Checkbox.tsx new file mode 100644 index 000000000..a73a86cad --- /dev/null +++ b/vite/src/components/v2/checkboxes/Checkbox.tsx @@ -0,0 +1,66 @@ +"use client"; + +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import { CheckIcon } from "lucide-react"; +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +interface CheckboxProps + extends React.ComponentProps { + size?: "sm" | "md" | "lg"; + disabled?: boolean; +} + +function Checkbox({ + className, + size = "sm", + disabled = false, + style, + onCheckedChange, + checked, + ...props +}: CheckboxProps) { + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter" && !disabled) { + e.preventDefault(); + onCheckedChange?.(!checked); + } + }; + + return ( + + + + + + ); +} + +export { Checkbox }; diff --git a/vite/src/components/v2/checkboxes/IconCheckbox.tsx b/vite/src/components/v2/checkboxes/IconCheckbox.tsx new file mode 100644 index 000000000..f13ba324b --- /dev/null +++ b/vite/src/components/v2/checkboxes/IconCheckbox.tsx @@ -0,0 +1,165 @@ +"use client"; + +import { Slot } from "@radix-ui/react-slot"; +import type { VariantProps } from "class-variance-authority"; +import * as React from "react"; +import { cn } from "@/lib/utils"; +import { Button, type ButtonProps } from "../buttons/Button"; +import { iconButtonVariants } from "../buttons/IconButton"; + +export interface IconCheckboxProps + extends ButtonProps, + VariantProps { + checked?: boolean; + onCheckedChange?: (checked: boolean) => void; + icon?: React.ReactNode; + iconOrientation?: "left" | "center" | "right"; +} + +const IconCheckbox = React.forwardRef( + ( + { + className, + variant = "secondary", + size = "sm", + hide = false, + iconOrientation = "center", + asChild = false, + checked = false, + onCheckedChange, + icon, + onClick, + children, + ...props + }, + ref, + ) => { + const Comp = asChild ? Slot : Button; + + const handleClick = (event: React.MouseEvent) => { + onCheckedChange?.(!checked); + onClick?.(event); + // Remove focus after click to prevent stuck active state + event.currentTarget.blur(); + }; + + const getIconColor = () => { + if (checked) { + switch (variant) { + case "secondary": + case "muted": + case "skeleton": + return "text-t2"; + case "primary": + return "text-table-hover"; + case "destructive": + return "text-error-light"; + default: + return "text-t2"; + } + } else { + switch (variant) { + case "secondary": + case "muted": + case "skeleton": + return "text-t3"; + case "primary": + return "text-table-hover"; + case "destructive": + return "text-error-light"; + default: + return "text-t3"; + } + } + }; + + const renderIcon = (icon: React.ReactNode) => { + if (!icon) return null; + + if (React.isValidElement(icon)) { + return React.cloneElement(icon, { + className: cn( + size === "sm" ? "size-3" : "size-3.5", + getIconColor(), + icon.props.className, + ), + } as React.HTMLAttributes); + } + + return icon; + }; + + const renderContent = () => { + switch (iconOrientation) { + case "left": + return ( + <> + {renderIcon(icon)} + {children} + + ); + case "right": + return ( + <> + {children} + {renderIcon(icon)} + + ); + case "center": + return ( + <> + {renderIcon(icon)} + {children} + + ); + default: + return ( + <> + {renderIcon(icon)} + {children} + + ); + } + }; + + const iconToMainClass = () => { + switch (iconOrientation) { + case "center": + if (size === "sm") { + return "!h-6 w-6"; + } else { + return "!h-7 w-7"; + } + default: + return ""; + } + }; + + if (hide) return null; + + return ( + + {renderContent()} + + ); + }, +); + +IconCheckbox.displayName = "IconCheckbox"; + +export { IconCheckbox }; diff --git a/vite/src/components/v2/checkboxes/LongCheckbox.tsx b/vite/src/components/v2/checkboxes/LongCheckbox.tsx new file mode 100644 index 000000000..12e6e9261 --- /dev/null +++ b/vite/src/components/v2/checkboxes/LongCheckbox.tsx @@ -0,0 +1,56 @@ +"use client"; + +import React from "react"; +import { cn } from "@/lib/utils"; +import { Checkbox } from "./Checkbox"; + +interface LongCheckboxProps { + className?: string; + checked?: boolean; + onCheckedChange?: (checked: boolean) => void; + title: string; + subtitle?: string; + disabled?: boolean; +} + +function LongCheckbox({ + className, + checked = false, + onCheckedChange, + title, + subtitle, + disabled = false, +}: LongCheckboxProps) { + const id = React.useId(); + + return ( + + ); +} + +export { LongCheckbox }; diff --git a/vite/src/components/v2/checkboxes/TextCheckbox.tsx b/vite/src/components/v2/checkboxes/TextCheckbox.tsx new file mode 100644 index 000000000..f3698f811 --- /dev/null +++ b/vite/src/components/v2/checkboxes/TextCheckbox.tsx @@ -0,0 +1,37 @@ +import type * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import type * as React from "react"; +import { useId } from "react"; +import { cn } from "@/lib/utils"; +import { Checkbox } from "./Checkbox"; + +interface TextCheckboxProps + extends React.ComponentProps { + children: React.ReactNode; +} + +export const TextCheckbox = ({ + children, + disabled, + ...checkboxProps +}: TextCheckboxProps) => { + const id = useId(); + return ( + + ); +}; diff --git a/vite/src/components/v2/dialogs/Dialog.tsx b/vite/src/components/v2/dialogs/Dialog.tsx new file mode 100644 index 000000000..a4c1f2146 --- /dev/null +++ b/vite/src/components/v2/dialogs/Dialog.tsx @@ -0,0 +1,146 @@ +"use client"; + +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { XIcon } from "lucide-react"; +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +function Dialog({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogPortal({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogClose({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: React.ComponentProps & { + showCloseButton?: boolean; +}) { + return ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + + ); +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function DialogFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function DialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +}; diff --git a/vite/src/components/v2/form/FormLabel.tsx b/vite/src/components/v2/form/FormLabel.tsx new file mode 100644 index 000000000..9fd6fa611 --- /dev/null +++ b/vite/src/components/v2/form/FormLabel.tsx @@ -0,0 +1,23 @@ +import { cn } from "@/lib/utils"; + +export const FormLabel = ({ + children, + disabled, + className, +}: { + children: React.ReactNode; + disabled?: boolean; + className?: string; +}) => { + return ( +
+ {children} +
+ ); +}; diff --git a/vite/src/components/v2/icons/AutumnIcons.tsx b/vite/src/components/v2/icons/AutumnIcons.tsx new file mode 100644 index 000000000..3390939e1 --- /dev/null +++ b/vite/src/components/v2/icons/AutumnIcons.tsx @@ -0,0 +1,339 @@ +import { useId } from "react"; + +export const FeatureArrowIcon = () => { + return ( + + + Arrow + + ); +}; + +export const IncludedUsageIcon = ({ + size = 14, + color = "#2BAC11", + className = "", +}: { + size?: number; + color?: string; + className?: string; +}) => { + return ( + + Included Usage + + + + + ); +}; + +export const PrepaidUsageIcon = () => { + return ( + + Prepaid Usage + + + + + + + + + + + + + + + ); +}; + +export const UsageBasedIcon = ({ color = "#DE1779" }: { color?: string }) => { + return ( + + Usage Based + + + + + + ); +}; + +export const CoinsIcon = ({ + size = 16, + color = "#F59E0B", +}: { + size?: number; + color?: string; +}) => { + return ( + + Paid + + + + + + ); +}; + +export const BooleanIcon = ({ + size = 16, + color = "#8A8A8A", +}: { + size?: number; + color?: string; +}) => { + return ( + + Boolean + + + + ); +}; + +export const ContinuousUseIcon = () => { + return ( + + Allocated + + + + ); +}; + +export const DefaultIcon = ({ + size = 16, + color = "#666666", +}: { + size?: number; + color?: string; +}) => { + return ( + + Default + + + + ); +}; + +export const FreeTrialIcon = ({ + size = 15, + color = "#666666", +}: { + size?: number; + color?: string; +}) => { + return ( + + Free Trial + + + + ); +}; diff --git a/vite/src/components/v2/inputs/Input.tsx b/vite/src/components/v2/inputs/Input.tsx new file mode 100644 index 000000000..89f141fef --- /dev/null +++ b/vite/src/components/v2/inputs/Input.tsx @@ -0,0 +1,58 @@ +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const inputVariants = cva( + `file:text-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 w-full min-w-0 rounded-lg border bg-transparent text-base outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm placeholder:select-none shadow-sm transition-none p-2 + + // Custom classes + h-input input-base input-shadow-default input-state-focus + `, + { + variants: { + variant: { + default: "", + destructive: "input-destructive-base input-destructive-shadow", + headless: "!border-0 !shadow-none !ring-0 !bg-transparent !p-0 !px-0.5", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface InputProps + extends React.ComponentProps<"input">, + VariantProps {} + +function Input({ + className, + type, + variant, + onFocus, + onBlur, + ...props +}: InputProps) { + const [isFocused, setIsFocused] = React.useState(false); + return ( + { + setIsFocused(true); + onFocus?.(e); + }} + onBlur={(e) => { + setIsFocused(false); + onBlur?.(e); + }} + data-state={isFocused ? "open" : "closed"} + className={cn(inputVariants({ variant }), className)} + {...props} + /> + ); +} + +export { Input }; diff --git a/vite/src/components/v2/inputs/InputGroup.tsx b/vite/src/components/v2/inputs/InputGroup.tsx new file mode 100644 index 000000000..c6c6951d8 --- /dev/null +++ b/vite/src/components/v2/inputs/InputGroup.tsx @@ -0,0 +1,186 @@ +/** biome-ignore-all lint/a11y/useKeyWithClickEvents: shadcn */ +/** biome-ignore-all lint/a11y/useSemanticElements: shadcn */ +"use client"; + +import { cva, type VariantProps } from "class-variance-authority"; +import type * as React from "react"; +import { Button } from "@/components/v2/buttons/Button"; +import { Input } from "@/components/v2/inputs/Input"; +import { LongInput as Textarea } from "@/components/v2/inputs/LongInput"; +import { cn } from "@/lib/utils"; + +function InputGroup({ + className, + onFocus, + onBlur, + ...props +}: React.ComponentProps<"div">) { + return ( +
[data-align=inline-start]]:[&>input]:pl-2", + "has-[>[data-align=inline-end]]:[&>input]:pr-2", + "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3", + "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3", + + // Error state. + "has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40", + + className, + )} + onClick={(e) => { + if ((e.target as HTMLElement).closest("button")) { + return; + } + const input = e.currentTarget.querySelector("input, textarea") as + | HTMLInputElement + | HTMLTextAreaElement + | null; + input?.focus(); + }} + {...props} + /> + ); +} + +const inputGroupAddonVariants = cva( + "text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50", + { + variants: { + align: { + "inline-start": + "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]", + "inline-end": + "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]", + "block-start": + "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5", + "block-end": + "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5", + }, + }, + defaultVariants: { + align: "inline-start", + }, + }, +); + +function InputGroupAddon({ + className, + align = "inline-start", + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
{ + if ((e.target as HTMLElement).closest("button")) { + return; + } + e.currentTarget.parentElement?.querySelector("input")?.focus(); + }} + {...props} + /> + ); +} + +const inputGroupButtonVariants = cva( + "text-sm shadow-none flex gap-2 items-center", + { + variants: { + size: { + xs: "h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2", + sm: "h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5", + "icon-xs": + "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0", + "icon-sm": "size-8 p-0 has-[>svg]:p-0", + }, + }, + defaultVariants: { + size: "xs", + }, + }, +); + +function InputGroupButton({ + className, + type = "button", + // variant = "ghost", + size = "xs", + ...props +}: Omit, "size"> & + VariantProps) { + return ( +

xUZ1BEtC_thluE`o^ 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