From 97dd0182ab7ebb47ab092327386e3c823c84c5df Mon Sep 17 00:00:00 2001 From: melvinchia3636 Date: Fri, 29 May 2026 00:01:46 +0800 Subject: [PATCH] refactor(ui): post-tailwind refactoring started --- .agent/workflows/create-dashboard-widget.md | 106 +- .github/ISSUE_TEMPLATE/bug_report.yml | 4 +- .github/ISSUE_TEMPLATE/feature_request.yml | 4 +- .github/agents/de-tailwind.agent.md | 719 -------- .github/copilot-instructions.md | 8 +- .../instructions/de-tailwind.instructions.md | 428 ----- .prettierrc | 11 +- .vscode/settings.json | 1 + README.md | 5 - bun.lock | 1563 +++++++++-------- client/index.html | 55 +- client/package.json | 6 +- client/public/manifest.json | 2 +- client/src/App.tsx | 33 +- .../components/AvatarColumn.tsx | 15 +- .../components/OrdinaryColumn.tsx | 6 +- .../components/PasswordColumn.tsx | 5 +- .../components/QRLoginColumn.tsx | 11 +- .../components/TwoFAColumn.tsx | 6 +- client/src/core/accountSettings/index.tsx | 2 +- client/src/core/accountSettings/manifest.ts | 3 +- .../modals/DisableTwoFAModal.tsx | 6 +- .../components/OTPConfirmScreen.tsx | 6 +- .../components/QRCodeDisplay.tsx | 6 +- .../components/TwoFAEnableProcedure.tsx | 3 +- .../modals/EnableTwoFAModal/index.tsx | 5 +- .../accountSettings/modals/ModifyModal.tsx | 5 +- .../components/ConfirmScreen.tsx | 3 +- .../components/ErrorScreen.tsx | 3 +- .../components/SuccessScreen.tsx | 3 +- .../hooks/useQRLoginApproval.ts | 3 +- .../modals/QRLoginScannerModal/index.tsx | 2 +- .../src/core/apiKeys/components/EntryItem.tsx | 17 +- client/src/core/apiKeys/index.tsx | 5 +- client/src/core/apiKeys/manifest.ts | 3 +- .../core/apiKeys/modals/ModifyAPIKeyModal.tsx | 3 +- .../modals/ModulesRequiredListModal.tsx | 5 +- .../src/core/auth/components/AuthFooter.tsx | 37 + client/src/core/auth/components/AuthForm.tsx | 17 +- .../src/core/auth/components/AuthHeader.tsx | 45 +- .../components/SignInButton.tsx | 7 +- .../components/SigninWithProviderButton.tsx | 8 +- .../components/AuthSignInButtons/index.tsx | 33 +- client/src/core/auth/index.tsx | 2 +- .../QRLoginModal/components/QRContent.tsx | 5 +- .../QRLoginModal/hooks/useQRLoginSession.ts | 3 +- .../core/auth/modals/QRLoginModal/index.tsx | 3 +- .../TwoFAModal/components/ResendOTPButton.tsx | 5 +- .../TwoFAModal/components/UsingAuthApp.tsx | 6 +- .../TwoFAModal/components/UsingEmail.tsx | 11 +- .../src/core/auth/modals/TwoFAModal/index.tsx | 5 +- client/src/core/auth/pages/LoginPage.tsx | 53 +- .../src/core/auth/pages/UserCreationPage.tsx | 3 +- .../core/backups/components/BackupItem.tsx | 9 +- .../backups/components/CreateBackupModal.tsx | 3 +- client/src/core/backups/index.tsx | 5 +- client/src/core/backups/manifest.ts | 3 +- .../dashboard/components/DashboardGrid.tsx | 5 +- .../dashboard/components/NotFoundWidget.tsx | 4 +- client/src/core/dashboard/index.css | 4 +- client/src/core/dashboard/index.tsx | 26 +- client/src/core/dashboard/manifest.ts | 3 +- .../components/ComponentItem.tsx | 10 +- .../modals/ManageWidgetsModal/index.tsx | 2 +- .../dashboard/providers/WidgetProvider.tsx | 5 +- client/src/core/dashboard/widgets/Clock.tsx | 3 +- client/src/core/dashboard/widgets/Date.tsx | 5 +- client/src/core/dashboard/widgets/Quotes.tsx | 7 +- client/src/core/documentation/index.tsx | 3 +- client/src/core/documentation/manifest.ts | 3 +- client/src/core/moduleManager/manifest.ts | 3 +- .../Categories/components/CategoryItem.tsx | 7 +- .../components/ModifyCategoryModal.tsx | 11 +- .../components/ModifyTranslationKeyModal.tsx | 3 +- .../moduleManager/pages/Categories/index.tsx | 11 +- .../pages/Modules/components/ModuleItem.tsx | 11 +- .../moduleManager/pages/Modules/index.tsx | 5 +- .../components/BgImageSelector/index.tsx | 15 +- .../components/AdjustmentColumn.tsx | 3 +- .../components/ResultShowcase.tsx | 3 +- .../modals/AdjustBgImageModal/index.tsx | 8 +- .../components/DefaultBgTempSelector.tsx | 3 +- .../components/BgTempSelector/index.tsx | 8 +- .../components/BorderRadiusSelector/index.tsx | 8 +- .../components/BorderedSelector.tsx | 8 +- .../components/CustomFontUploadModal.tsx | 5 +- .../components/FontListItem.tsx | 5 +- .../FontFamilySelectorModal/index.tsx | 8 +- .../tabs/CustomFontSelector.tsx | 9 +- .../tabs/GoogleFontSelector.tsx | 11 +- .../components/FontFamilySelector/index.tsx | 5 +- .../components/FontScaleSelector.tsx | 10 +- .../components/LanguageSelector.tsx | 5 +- .../components/DefaultThemeColorSelector.tsx | 6 +- .../components/ThemeColorSelector/index.tsx | 8 +- .../components/ThemeSelector.tsx | 8 +- client/src/core/personalization/index.tsx | 2 +- client/src/core/personalization/manifest.ts | 3 +- .../src/federation/loaders/loadCoreModules.ts | 2 +- .../federation/loaders/loadModuleConfig.ts | 3 +- client/src/federation/loaders/loadModules.ts | 2 +- .../providers/CoreFederationProvider.tsx | 3 +- client/src/federation/utils/sortRoutes.ts | 2 +- client/src/forgeAPI.tsx | 2 +- client/src/index.css | 13 +- .../features/APIKeyStatusProvider.tsx | 12 +- .../features/ExternalModuleProviders.tsx | 2 +- .../features/UserPersonalizationProvider.tsx | 6 +- client/src/providers/index.tsx | 12 +- client/src/routes/components/RootLayout.tsx | 5 +- .../routes/components/RouteErrorScreen.tsx | 3 +- .../components/Sidebar/MainSidebarTitle.tsx | 5 +- .../src/routes/components/Sidebar/Sidebar.tsx | 5 +- .../components/Sidebar/SidebarBottomBar.tsx | 7 +- .../components/Sidebar/SidebarEventBanner.tsx | 9 +- .../components/Sidebar/SidebarHeader.tsx | 5 +- .../components/Sidebar/SidebarItems.tsx | 21 +- client/src/routes/hooks/useAppRouter.ts | 5 +- client/src/routes/hooks/useTitleEffect.ts | 3 +- .../routes/providers/AppRoutesProvider.tsx | 2 +- client/src/routes/utils/routeBuilder.tsx | 10 +- client/src/routes/utils/routerFactory.tsx | 7 +- client/tsconfig.json | 23 +- client/vite.config.ts | 6 +- docker-compose.yaml | 6 +- docs/package.json | 6 +- docs/src/App.tsx | 9 +- docs/src/Router.tsx | 3 +- .../Boilerplate/components/NavigationBar.tsx | 3 +- docs/src/components/Boilerplate/index.tsx | 3 +- docs/src/components/CustomLink.tsx | 3 +- docs/src/components/GithubStarCount.tsx | 3 +- docs/src/components/Header.tsx | 5 +- docs/src/components/Layout.tsx | 3 +- docs/src/components/MdxComponents.tsx | 3 +- docs/src/components/Rightbar.tsx | 3 +- docs/src/components/Sidebar.tsx | 3 +- .../01.getting-started/01.Introduction.mdx | 2 +- .../01.getting-started/02.Installation.mdx | 2 +- .../01.getting-started/03.Configuration.mdx | 2 +- .../01.getting-started/04.Deployment.mdx | 2 +- .../components/EnvExample.tsx | 3 +- .../contents/02.user-guide/01.QuickStart.mdx | 2 +- .../src/contents/02.user-guide/02.Modules.mdx | 2 +- .../contents/02.user-guide/03.Dashboard.mdx | 2 +- .../02.user-guide/04.Personalization.mdx | 2 +- .../src/contents/02.user-guide/05.APIKeys.mdx | 2 +- .../02.user-guide/06.LanguagePacks.mdx | 16 +- .../02.user-guide/components/BgTemp.tsx | 2 +- .../components/CustomColorInput.tsx | 5 +- .../components/LightAndDarkMode.tsx | 3 +- .../02.user-guide/components/ThemeColors.tsx | 3 +- .../02.ProjectStructure.mdx | 2 +- .../03.developer-guide/03.Modules.mdx | 24 +- .../03.developer-guide/04.Localization.mdx | 10 +- .../contents/03.developer-guide/05.Forms.mdx | 6 +- .../03.developer-guide/06.BuildingAPI.mdx | 4 +- .../03.developer-guide/07.UsingAPI.mdx | 18 +- .../08.DatabaseOperations.mdx | 2 +- .../03.developer-guide/09.SyncingSchemas.mdx | 2 +- .../03.developer-guide/10.APIKeys.mdx | 2 +- .../03.developer-guide/99.Contributing.mdx | 2 +- .../src/contents/04.progress/01.changelog.mdx | 2 +- docs/src/contents/04.progress/02.roadmap.mdx | 2 +- .../04.progress/components/Version.tsx | 3 +- .../contents/04.progress/versions/2025/10.mdx | 2 +- .../contents/04.progress/versions/2025/52.mdx | 2 +- .../contents/04.progress/versions/2026/04.mdx | 6 +- docs/src/index.css | 2 +- docs/src/main.tsx | 6 +- docs/tsconfig.node.json | 7 +- docs/vite.config.d.ts | 4 +- eslint.config.js | 11 + .../lifeforge--lang-en/accountSettings.json | 2 +- locales/lifeforge--lang-en/apiKeys.json | 2 +- locales/lifeforge--lang-en/auth.json | 2 +- locales/lifeforge--lang-en/backups.json | 2 +- locales/lifeforge--lang-en/documentation.json | 2 +- locales/lifeforge--lang-en/fetch.json | 2 +- locales/lifeforge--lang-en/misc.json | 2 +- locales/lifeforge--lang-en/modals.json | 2 +- locales/lifeforge--lang-en/moduleManager.json | 138 +- locales/lifeforge--lang-en/package.json | 2 +- .../lifeforge--lang-en/personalization.json | 2 +- locales/lifeforge--lang-en/sidebar.json | 2 +- package.json | 164 +- packages/lifeforge-log/tsconfig.json | 48 +- packages/lifeforge-server-utils/package.json | 4 +- .../src/typescript/PBService.interface.ts | 3 +- .../src/typescript/core_context.types.ts | 3 +- .../src/typescript/forge_controller.types.ts | 3 +- .../src/typescript/pb_service.types.ts | 3 +- .../src/typescript/response.types.ts | 2 +- .../src/typescript/tempfile_manager.types.ts | 2 +- packages/lifeforge-server-utils/tsconfig.json | 49 +- packages/lifeforge-ui/.env.example | 1 - .../components/modals/index.ts | 9 - .../components/ComboboxInputWrapper.tsx | 99 -- .../components/CalendarHeader.css.ts | 36 - .../DateInput/components/CalendarHeader.tsx | 142 -- .../inputs/FileInput/FileInput.css.ts | 10 - .../layout/ModuleHeader/ModuleHeader.css.ts | 76 - .../components/navigation/Tabs/Tabs.css.ts | 31 - .../src/components/navigation/Tabs/index.tsx | 112 -- .../components/SidebarActionButton.css.ts | 17 - .../SidebarSubsectionItemLink.css.ts | 31 - .../SidebarSubsectionItemWithOnClick.css.ts | 21 - .../overlays/ContextMenu/ContextMenu.css.ts | 40 - .../components/primitives/Bordered/index.tsx | 268 --- .../src/components/primitives/Box/index.tsx | 178 -- .../src/components/primitives/Flex/index.tsx | 227 --- .../src/components/primitives/Grid/index.tsx | 225 --- .../components/primitives/Prose/Prose.css.ts | 122 -- .../primitives/Prose/Prose.stories.tsx | 51 - .../src/storybook/ScrollableStory.tsx | 12 - packages/lifeforge-ui/src/system/colors.ts | 102 -- .../lifeforge-ui/src/system/grid-utils.ts | 19 - packages/lifeforge-ui/src/system/index.ts | 62 - .../lifeforge-ui/src/system/layout-utils.ts | 295 ---- .../lifeforge-ui/src/system/responsive.ts | 74 - .../lifeforge-ui/src/system/sprinkles.css.ts | 63 - packages/lifeforge-ui/src/system/types.ts | 119 -- packages/lifeforge-ui/src/utils/forgeAPI.tsx | 4 - packages/{lifeforge-ui => ui}/.gitignore | 0 .../{lifeforge-ui => ui}/.storybook/i18n.ts | 2 +- .../{lifeforge-ui => ui}/.storybook/index.css | 0 .../{lifeforge-ui => ui}/.storybook/main.ts | 0 .../.storybook/manager-head.html | 0 .../.storybook/manager.ts | 0 .../.storybook/preview.tsx | 0 .../.storybook/vite-env.d.ts | 0 packages/{lifeforge-ui => ui}/LICENSE | 0 packages/{lifeforge-ui => ui}/package.json | 7 +- .../auth/OTPInputBox/OTPInputBox.stories.tsx | 2 +- .../src/components/auth/OTPInputBox/index.tsx | 4 +- .../CreatePasswordScreen.stories.tsx | 2 +- .../components/CreatePasswordScreen.tsx | 15 +- .../components/LockedScreen.stories.tsx | 2 +- .../components/LockedScreen.tsx | 12 +- .../auth/WithMasterPassword/index.tsx | 4 +- .../src/components/auth/index.ts | 0 .../SSOAppMainView/SSOAppMainView.stories.tsx | 2 +- .../auth/sso/SSOAppMainView/index.tsx | 9 +- .../auth/sso/SSOHeader/SSOHeader.stories.tsx | 2 +- .../components/auth/sso/SSOHeader/index.tsx | 12 +- .../UnauthorizedScreen.stories.tsx | 2 +- .../auth/sso/UnauthorizedScreen/index.tsx | 10 +- .../src/components/auth/sso/index.ts | 0 .../OptionsColumn/OptionsColumn.stories.tsx | 6 +- .../data-display/OptionsColumn/index.tsx | 10 +- .../data-display/TagChip/TagChip.stories.tsx | 2 +- .../components/data-display/TagChip/index.tsx | 15 +- .../TagsFilter/TagsFilter.stories.tsx | 7 +- .../data-display/TagsFilter/index.tsx | 5 +- .../ViewModeSelector/ViewModeSelector.css.ts | 8 +- .../ViewModeSelector.stories.tsx | 4 +- .../data-display/ViewModeSelector/index.tsx | 5 +- .../VirtualGrid/VirtualGrid.stories.tsx | 15 +- .../data-display/VirtualGrid/index.tsx | 4 +- .../data-display/Widget/Widget.css.ts | 10 +- .../data-display/Widget/Widget.stories.tsx | 72 +- .../Widget/components/TitleAndDesc.tsx | 3 +- .../Widget/components/WidgetIcon.tsx | 8 +- .../components/data-display/Widget/index.tsx | 2 +- .../src/components/data-display/index.ts | 0 .../src/components/feedback/Alert.css.ts | 0 .../components/feedback/Alert/Alert.css.ts | 0 .../feedback/Alert/Alert.stories.tsx | 2 +- .../src/components/feedback/Alert/index.tsx | 5 +- .../EmptyStateScreen.stories.tsx | 2 +- .../feedback/EmptyStateScreen/index.tsx | 6 +- .../ErrorScreen/ErrorScreen.stories.tsx | 2 +- .../components/feedback/ErrorScreen/index.tsx | 19 +- .../LoadingScreen/LoadingScreen.stories.tsx | 2 +- .../feedback/LoadingScreen/index.tsx | 10 +- .../NotFoundScreen/NotFoundScreen.stories.tsx | 2 +- .../feedback/NotFoundScreen/index.tsx | 5 +- .../src/components/feedback/index.ts | 0 .../src/components/inputs/AllInputs.mdx | 7 +- .../components/inputs/Button/Button.css.ts | 0 .../inputs/Button/Button.stories.tsx | 4 +- .../inputs/Button/components/ButtonIcon.tsx | 15 +- .../Button/hooks/useButtonStyleProps.ts | 5 +- .../src/components/inputs/Button/index.tsx | 2 +- .../inputs/Button/styles/plain.css.ts | 19 +- .../inputs/Button/styles/primary.css.ts | 25 +- .../inputs/Button/styles/secondary.css.ts | 19 +- .../inputs/Button/styles/tertiary.css.ts | 13 +- .../inputs/Checkbox/Checkbox.css.ts | 14 +- .../inputs/Checkbox/Checkbox.stories.tsx | 6 +- .../src/components/inputs/Checkbox/index.tsx | 8 +- .../inputs/ColorInput/ColorInput.stories.tsx | 28 +- .../components/PaletteButtons.css.ts | 0 .../components/PaletteButtons.tsx | 4 +- .../FlatUIColorsModal/constants/palettes.json | 0 .../FlatUIColorsModal/index.stories.tsx | 2 +- .../modals/FlatUIColorsModal/index.tsx | 14 +- .../MorandiColorPaletteModal.css.ts | 6 +- .../constants/morandi_colors.ts | 0 .../index.stories.tsx | 2 +- .../modals/ModandiColorPaletteModal/index.tsx | 10 +- .../TailwindCSSColorsModal.css.ts | 0 .../components/ColorItem.css.ts | 6 +- .../components/ColorItem.tsx | 6 +- .../TailwindCSSColorsModal/index.stories.tsx | 2 +- .../modals/TailwindCSSColorsModal/index.tsx | 6 +- .../TailwindCSSColorsModal/utils/colors.ts | 0 .../ColorInput/ColorPickerModal/index.css | 0 .../ColorInput/ColorPickerModal/index.tsx | 6 +- .../stores/useColorPickerModalStore.ts | 0 .../components/inputs/ColorInput/index.tsx | 7 +- .../ComboboxInput/ComboboxInput.stories.tsx | 9 +- .../components/ComboboxInputWrapper.css.ts | 4 +- .../components/ComboboxInputWrapper.tsx | 96 + .../components/ComboboxOption.tsx | 5 +- .../components/ComboboxOptions.css.ts | 0 .../components/ComboboxOptions.tsx | 3 +- .../components/inputs/ComboboxInput/index.tsx | 4 +- .../CurrencyInput/CurrencyInput.stories.tsx | 32 +- .../components/inputs/CurrencyInput/index.tsx | 2 +- .../inputs/DateInput/DateInput.css.ts | 4 +- .../inputs/DateInput/DateInput.stories.tsx | 32 +- .../components/CalendarHeader.css.ts | 32 + .../DateInput/components/CalendarHeader.tsx | 136 ++ .../src/components/inputs/DateInput/index.css | 0 .../src/components/inputs/DateInput/index.tsx | 5 +- .../src/components/inputs/FAB/FAB.stories.tsx | 4 +- .../src/components/inputs/FAB/index.tsx | 3 +- .../inputs/FileInput/FileInput.css.ts | 10 + .../inputs/FileInput/FileInput.stories.tsx | 0 .../components/AIImageGenerator.tsx | 12 +- .../FilePickerModal/components/ImageURL.tsx | 8 +- .../components/DnDContainer.css.ts | 8 +- .../LocalUpload/components/DnDContainer.tsx | 7 +- .../components/PreviewContainer.tsx | 7 +- .../components/LocalUpload/index.tsx | 0 .../components/CategoryFilter.tsx | 13 +- .../components/ColorFilter.tsx | 5 +- .../components/EditorsChoiceSwitch.tsx | 7 +- .../components/ImageTypeFilter.tsx | 12 +- .../SearchFilterModal/components/index.ts | 0 .../constants/filterOptions.ts | 0 .../components/SearchFilterModal/index.tsx | 6 +- .../Pixabay/components/SearchResults.css.ts | 14 +- .../Pixabay/components/SearchResults.tsx | 6 +- .../components/Pixabay/index.tsx | 11 +- .../Pixabay/typescript/pixabay_interfaces.ts | 0 .../FilePickerModal/constants/file_icons.ts | 1 - .../FileInput/FilePickerModal/index.tsx | 11 +- .../src/components/inputs/FileInput/index.tsx | 9 +- .../inputs/IconInput/IconInput.css.ts | 0 .../inputs/IconInput/IconInput.stories.tsx | 28 +- .../components/ChipSelector.tsx | 10 +- .../IconPickerModal/components/IconEntry.tsx | 5 +- .../IconPickerModal/index.stories.tsx | 9 +- .../IconInput/IconPickerModal/index.tsx | 8 +- .../IconPickerModal/pages/IconSet.tsx | 6 +- .../IconSetList/components/CategoryEntry.tsx | 4 +- .../pages/IconSetList/components/Header.tsx | 4 +- .../IconSetList/components/IconSetEntry.tsx | 11 +- .../pages/IconSetList/index.tsx | 4 +- .../IconPickerModal/pages/SearchResult.tsx | 6 +- .../typescript/icon_selector_interfaces.ts | 0 .../IconInput/components/IconPreview.tsx | 5 +- .../src/components/inputs/IconInput/index.tsx | 4 +- .../inputs/Listbox/Listbox.stories.tsx | 33 +- .../src/components/inputs/Listbox/index.tsx | 11 +- .../ListboxInput/ListboxInput.stories.tsx | 29 +- .../components/ListboxInputWrapper.css.ts | 4 +- .../components/ListboxInputWrapper.tsx | 13 +- .../components/ListboxNullOption.tsx | 5 +- .../ListboxInput/components/ListboxOption.tsx | 5 +- .../components/ListboxOptions.css.ts | 0 .../components/ListboxOptions.tsx | 3 +- .../hooks/useListboxBlurOnClose.ts | 1 - .../components/inputs/ListboxInput/index.tsx | 2 +- .../LocationInput/LocationInput.stories.tsx | 30 +- .../components/LocationActionButton.tsx | 14 +- .../components/inputs/LocationInput/index.tsx | 23 +- .../NumberInput/NumberInput.stories.tsx | 28 +- .../components/inputs/NumberInput/index.tsx | 1 - .../inputs/QRCodeScanner/QRCodeScanner.css.ts | 0 .../QRCodeScanner/QRCodeScanner.stories.tsx | 4 +- .../components/inputs/QRCodeScanner/index.tsx | 5 +- .../inputs/RRuleInput/RRuleInput.stories.tsx | 2 +- .../RRuleInput/components/DailyForm.tsx | 4 +- .../RRuleInput/components/HourlyForm.tsx | 4 +- .../components/MonthlyExactDateForm.tsx | 7 +- .../components/MonthlyRelativeDayForm.tsx | 18 +- .../components/MonthlyForm/index.tsx | 4 +- .../components/SelectableFormWrapper.tsx | 5 +- .../RRuleInput/components/WeeklyForm.tsx | 4 +- .../components/YearlyExactDateForm.tsx | 7 +- .../components/YearlyRelativeDayForm.tsx | 7 +- .../components/YearlyForm/index.tsx | 0 .../components/inputs/RRuleInput/index.tsx | 5 +- .../inputs/RRuleInput/utils/getRRuleString.ts | 0 .../inputs/SearchInput/SearchInput.css.ts | 14 +- .../SearchInput/SearchInput.stories.tsx | 6 +- .../components/inputs/SearchInput/index.tsx | 12 +- .../inputs/SliderInput/SliderInput.css.ts | 14 +- .../SliderInput/SliderInput.stories.tsx | 4 +- .../SliderInput/components/SliderHeader.tsx | 8 +- .../SliderInput/components/SliderTicks.tsx | 11 +- .../components/inputs/SliderInput/index.tsx | 15 +- .../inputs/Switch/Switch.stories.tsx | 0 .../src/components/inputs/Switch/index.tsx | 10 +- .../inputs/TagsInput/TagsInput.stories.tsx | 32 +- .../src/components/inputs/TagsInput/index.tsx | 4 +- .../TextAreaInput/TextAreaInput.stories.tsx | 54 +- .../components/inputs/TextAreaInput/index.tsx | 2 +- .../inputs/TextInput/TextInput.stories.tsx | 35 +- .../TextInput/components/TextInputBox.css.ts | 0 .../TextInput/components/TextInputBox.tsx | 5 +- .../src/components/inputs/TextInput/index.tsx | 5 +- .../src/components/inputs/index.ts | 0 .../shared/components/InputActionButton.tsx | 4 +- .../inputs/shared/components/InputIcon.tsx | 12 +- .../shared/components/InputInnerWrapper.tsx | 2 +- .../components/InputLabel/InputLabel.css.ts | 0 .../shared/components/InputLabel/index.tsx | 4 +- .../InputWrapper/InputWrapper.css.ts | 16 +- .../shared/components/InputWrapper/index.tsx | 49 +- .../components/Placeholder/Placeholder.css.ts | 6 +- .../shared/components/Placeholder/index.tsx | 3 +- .../shared/contexts/InputFocusContext.tsx | 30 +- .../inputs/shared/hooks/useInputLabel.ts | 0 .../src/components/inputs/shared/types.ts | 0 .../inputs/shared/utils/autoFocusableRef.tsx | 0 .../components/layout/Card/Card.stories.tsx | 6 +- .../src/components/layout/Card/index.tsx | 1 - .../ContentWrapperWithSidebar/index.tsx | 2 +- .../layout/LayoutWithSidebar/index.tsx | 3 +- .../ModuleHeader/ModuleHeader.stories.tsx | 16 +- .../components/layout/ModuleHeader/index.tsx | 110 +- .../ModuleWrapper/ModuleWrapper.stories.tsx | 6 +- .../components/layout/ModuleWrapper/index.tsx | 8 +- .../src/components/layout/index.ts | 0 .../GoBackButton/GoBackButton.stories.tsx | 0 .../navigation/GoBackButton/index.tsx | 2 +- .../Pagination/Pagination.stories.tsx | 0 .../Pagination/components/EllipsisIcon.tsx | 5 +- .../Pagination/components/NavButton.tsx | 4 +- .../Pagination/components/PageNumButton.tsx | 5 +- .../Pagination/components/PageNumbers.tsx | 3 +- .../navigation/Pagination/index.tsx | 3 +- .../navigation/Tabs/Tabs.stories.tsx | 19 +- .../src/components/navigation/Tabs/index.tsx | 122 ++ .../src/components/navigation/index.ts | 0 .../sidebar/MainSidebarItem/index.tsx | 4 +- .../SidebarDivider/SidebarDivider.stories.tsx | 2 +- .../sidebar/SidebarDivider/index.tsx | 3 +- .../SidebarItem/SidebarItem.stories.tsx | 7 +- .../components/SidebarActionButton.css.ts | 17 + .../components/SidebarActionButton.tsx | 7 +- .../components/SidebarCancelButton.tsx | 7 +- .../components/SidebarItemContent.css.ts | 0 .../components/SidebarItemContent.tsx | 5 +- .../components/SidebarItemIcon.tsx | 6 +- .../components/SidebarItemSubsection.css.ts | 6 +- .../components/SidebarItemSubsection.tsx | 6 +- .../SidebarItemSubsectionExpandIcon.tsx | 6 +- .../components/SidebarItemWrapper.css.ts | 14 +- .../components/SidebarItemWrapper.tsx | 3 +- .../SidebarSubsectionItemLink.css.ts | 31 + .../components/SidebarSubsectionItemLink.tsx | 10 +- .../SidebarSubsectionItemWithOnClick.css.ts | 21 + .../SidebarSubsectionItemWithOnClick.tsx | 8 +- .../navigation/sidebar/SidebarItem/index.tsx | 6 +- .../sidebar/SidebarTitle/SidebarTitle.css.ts | 0 .../SidebarTitle/SidebarTitle.stories.tsx | 2 +- .../navigation/sidebar/SidebarTitle/index.tsx | 5 +- .../sidebar/SidebarWrapper/index.tsx | 7 +- .../components/navigation/sidebar/index.ts | 2 +- .../ContextMenu/ContextMenu.stories.tsx | 5 +- .../components/ContextMenuGroup.css.ts | 10 +- .../components/ContextMenuGroup.stories.tsx | 0 .../components/ContextMenuGroup.tsx | 5 +- .../components/ContextMenuItem.css.ts | 17 +- .../components/ContextMenuItem.stories.tsx | 0 .../components/ContextMenuItem.tsx | 4 +- .../components/overlays/ContextMenu/index.tsx | 4 +- .../src/components/overlays/index.ts | 0 .../ModalManager/ModalManager.stories.tsx | 8 +- .../modals/core/ModalManager/index.tsx | 3 +- .../core/components/ModalHeader.stories.tsx | 12 +- .../modals/core/components/ModalHeader.tsx | 4 +- .../core/components/ModalWrapper.css.ts | 14 +- .../modals/core/components/ModalWrapper.tsx | 4 +- .../ConfirmationModal.stories.tsx | 12 +- .../features/ConfirmationModal/index.tsx | 7 +- .../features/FormModal/FormModal.stories.tsx | 4 +- .../components/FormCheckboxInput.tsx | 7 +- .../FormInputs/components/FormColorInput.tsx | 3 +- .../components/FormCurrencyInput.tsx | 3 +- .../FormInputs/components/FormDateInput.tsx | 3 +- .../FormInputs/components/FormFileInput.tsx | 3 +- .../FormInputs/components/FormIconInput.tsx | 3 +- .../components/FormListboxInput.tsx | 13 +- .../components/FormLocationInput.tsx | 3 +- .../FormInputs/components/FormNumberInput.tsx | 3 +- .../FormInputs/components/FormRRuleInput.tsx | 3 +- .../FormInputs/components/FormSliderInput.tsx | 3 +- .../components/FormTextAreaInput.tsx | 3 +- .../FormInputs/components/FormTextInput.tsx | 5 +- .../FormModal/components/FormInputs/index.tsx | 4 +- .../FormModal/components/SubmitButton.tsx | 2 +- .../modals/features/FormModal/formBuilder.ts | 0 .../modals/features/FormModal/index.tsx | 7 +- .../FormModal/typescript/form.types.ts | 0 .../features/FormModal/utils/formUtils.ts | 0 .../modals/features/ViewImageModal/index.tsx | 3 +- .../src/components/overlays/modals/index.ts | 0 .../primitives/Bordered/Bordered.css.ts | 18 +- .../primitives/Bordered/Bordered.stories.tsx | 70 +- .../components/primitives/Bordered/index.tsx | 210 +++ .../src/components/primitives/Box/Box.css.ts | 18 +- .../components/primitives/Box/Box.stories.tsx | 25 +- .../src/components/primitives/Box/index.tsx | 154 ++ .../components/primitives/Flex/Flex.css.ts | 16 +- .../primitives/Flex/Flex.stories.tsx | 188 +- .../src/components/primitives/Flex/index.tsx | 203 +++ .../components/primitives/Grid/Grid.css.ts | 16 +- .../primitives/Grid/Grid.stories.tsx | 109 +- .../src/components/primitives/Grid/index.tsx | 204 +++ .../primitives/Icon/Icon.stories.tsx | 193 ++ .../src/components/primitives/Icon/index.tsx | 23 + .../components/primitives/Prose/Prose.css.ts | 434 +++++ .../primitives/Prose/Prose.stories.tsx | 137 ++ .../src/components/primitives/Prose/index.tsx | 3 +- .../primitives/Slot/Slot.stories.tsx | 164 +- .../src/components/primitives/Slot/index.tsx | 0 .../components/primitives/Text/Text.css.ts | 33 +- .../primitives/Text/Text.stories.tsx | 16 +- .../src/components/primitives/Text/index.tsx | 149 +- .../Transition/Transition.stories.tsx | 342 ++++ .../primitives/Transition/index.tsx | 0 .../primitives/WithDivide/WithDivide.css.ts | 0 .../WithDivide/WithDivide.stories.tsx | 136 ++ .../primitives/WithDivide/index.tsx | 6 +- .../src/components/primitives/index.ts | 2 + .../APIOnlineStatusWrapper/index.tsx | 4 +- .../utilities/EncryptionWrapper/index.tsx | 10 +- .../utilities/Scrollbar/Scrollbar.stories.tsx | 4 +- .../components/utilities/Scrollbar/index.tsx | 2 +- .../Scrollbars/defaultRenderElements.tsx | 0 .../components/utilities/Scrollbars/index.tsx | 0 .../components/utilities/Scrollbars/styles.ts | 0 .../Scrollbars/utils/getInnerHeight.ts | 0 .../Scrollbars/utils/getInnerWidth.ts | 0 .../Scrollbars/utils/getScrollbarWidth.ts | 0 .../utilities/Scrollbars/utils/isString.ts | 0 .../utilities/Scrollbars/utils/returnFalse.ts | 0 .../utilities/Tooltip/Tooltip.stories.tsx | 4 +- .../components/utilities/Tooltip/index.tsx | 14 +- .../components/utilities/WithQuery/index.tsx | 2 +- .../utilities/WithQueryData/index.tsx | 5 +- .../src/components/utilities/index.ts | 0 packages/{lifeforge-ui => ui}/src/index.ts | 6 +- packages/ui/src/providers/ModalProvider.tsx | 77 + packages/ui/src/providers/index.ts | 1 + .../src/storybook/PreviewWrapper.tsx | 9 +- .../src/storybook/QCProvider.tsx | 1 - .../src/storybook/SBThemeProvider.tsx | 3 +- packages/ui/src/storybook/ScrollableStory.tsx | 14 + .../src/storybook/VariantContainer.tsx | 2 +- .../src/storybook/mockController.ts | 0 .../src/storybook/toolbars/bgTemp.ts | 1 - .../src/storybook/toolbars/fontScale.ts | 1 - .../src/storybook/toolbars/theme.ts | 1 - .../src/storybook/toolbars/themeColor.ts | 1 - .../src/storybook/useSBTheme.tsx | 0 .../src/styles/autofill.css | 0 .../src/styles/global.css | 0 .../{lifeforge-ui => ui}/src/styles/index.css | 0 .../src/styles/preflight.css | 6 +- .../src/styles/themes/background.css | 0 .../src/styles/themes/foreground.css | 0 .../src/styles/themes/index.css | 0 .../{lifeforge-ui => ui}/src/styles/utils.css | 0 packages/ui/src/system/arbitrary.ts | 39 + packages/ui/src/system/colors/constants.ts | 31 + packages/ui/src/system/colors/index.ts | 3 + packages/ui/src/system/colors/utils.ts | 15 + packages/ui/src/system/grid-utils.ts | 15 + packages/ui/src/system/index.ts | 19 + packages/ui/src/system/props-resolver.ts | 86 + packages/ui/src/system/responsive/constant.ts | 100 ++ .../src/system/responsive/index.css.ts} | 36 +- packages/ui/src/system/responsive/index.ts | 7 + packages/ui/src/system/responsive/types.ts | 25 + .../responsive/utils/escapeCssClassName.ts | 7 + .../utils/getResponsiveLayoutStyles.ts | 81 + .../utils/normalizeResponsiveProps.ts | 45 + .../src/system/tailwind-palette.ts | 0 packages/ui/src/system/themes.ts | 11 + packages/ui/src/system/tokens/index.ts | 7 + .../ui/src/system/tokens/layout-props.css.ts | 34 + .../tokens/resolvers/common-props-resolver.ts | 17 + .../ui/src/system/tokens/resolvers/index.ts | 5 + .../resolvers/layout-props-resolvers.ts | 17 + .../resolvers/spacing-props-resolvers.ts | 33 + .../ui/src/system/tokens/spacing-props.css.ts | 48 + .../ui/src/system/tokens/theme-props.css.ts | 20 + .../src/system/vars.css.ts | 6 +- packages/ui/src/utils/forgeAPI.tsx | 3 + packages/{lifeforge-ui => ui}/tsconfig.json | 4 +- packages/{lifeforge-ui => ui}/tsup.config.ts | 0 packages/{lifeforge-ui => ui}/vercel.json | 0 packages/{lifeforge-ui => ui}/vite.config.ts | 4 +- readme/README.ms.md | 18 +- readme/README.zh-CN.md | 26 +- readme/README.zh-TW.md | 26 +- server/package.json | 2 +- server/src/core/functions/auth/encryption.ts | 8 +- .../functions/database/PBService/index.ts | 3 +- .../database/PBService/services/create.ts | 10 +- .../database/PBService/services/delete.ts | 5 +- .../PBService/services/getFirstListItem.ts | 5 +- .../PBService/services/getFullList.ts | 5 +- .../database/PBService/services/getList.ts | 5 +- .../database/PBService/services/getOne.ts | 5 +- .../database/PBService/services/update.ts | 5 +- server/src/core/functions/database/dbUtils.ts | 3 +- .../src/core/functions/database/getAPIKey.ts | 3 +- .../encryption/functions/decryptPayload.ts | 3 +- server/src/core/functions/external/ai.ts | 11 +- server/src/core/functions/external/ocr.ts | 3 +- .../core/functions/media/convertPDFToImage.ts | 3 +- .../src/core/functions/media/retrieveMedia.ts | 3 +- .../routes/functions/controllerLogic.ts | 3 +- .../functions/routes/functions/forgeRouter.ts | 3 +- .../routes/utils/checkRecordExistence.ts | 3 +- .../functions/routes/utils/parsePayload.ts | 3 +- .../core/functions/routes/utils/parseQuery.ts | 3 +- .../core/functions/routes/utils/response.ts | 5 +- .../routes/utils/splitMediaAndData.ts | 3 +- .../src/core/functions/socketio/taskPool.ts | 3 +- .../core/functions/utils/tempFileManager.ts | 3 +- server/src/core/routes/core.routes.ts | 3 +- server/src/core/routes/index.ts | 3 +- server/src/lib/ai/routes/imageGeneration.ts | 3 +- server/src/lib/apiKeys/routes/entries.ts | 3 +- server/src/lib/apiKeys/schema.ts | 1 + server/src/lib/backups/index.ts | 3 +- server/src/lib/corsAnywhere/index.ts | 3 +- server/src/lib/locales/index.ts | 4 +- server/src/lib/locations/index.ts | 3 +- .../lib/modules/utils/scanFederatedModules.ts | 3 +- server/src/lib/pixabay/index.ts | 3 +- server/src/lib/user/routes/auth.ts | 5 +- server/src/lib/user/routes/customFonts.ts | 3 +- server/src/lib/user/routes/oauth.ts | 3 +- server/src/lib/user/routes/personalization.ts | 3 +- server/src/lib/user/routes/qrLogin.ts | 3 +- server/src/lib/user/routes/twoFA.ts | 5 +- server/src/lib/user/schema.ts | 1 + server/src/lib/user/utils/auth.ts | 3 +- server/tsconfig.json | 24 +- shared/package.json | 2 +- shared/src/api/core/createForgeProxy.ts | 2 +- shared/src/index.ts | 4 - shared/src/utils/fetchAPI.ts | 2 +- shared/tsconfig.json | 16 +- tools/package.json | 2 +- tools/src/cli/setup.ts | 3 +- .../database-initialization/superuser.ts | 2 +- .../generateSchemaContent.ts | 2 +- .../matchCollectionToModule.ts | 2 +- .../db/handlers/generateMigrationsHandler.ts | 11 +- tools/src/commands/db/utils/constants.ts | 3 - tools/src/commands/dev/config/commands.ts | 8 +- .../dev/functions/getConcurrentServices.ts | 2 +- .../modules/functions/prompts/module-type.ts | 2 +- .../modules/functions/validateModuleAuthor.ts | 2 +- .../functions/validateModuleStructure.ts | 2 +- .../commands/project/constants/projects.ts | 2 +- tools/src/templates/bare-bones/_tsconfig.json | 28 +- .../bare-bones/client/_tsconfig.json | 25 +- .../src/templates/bare-bones/client/index.tsx | 2 +- .../bare-bones/client/utils/forgeAPI.ts | 2 +- tools/src/templates/bare-bones/manifest.ts | 3 +- tools/src/templates/bare-bones/package.json | 4 +- .../src/templates/client-only/_tsconfig.json | 28 +- .../client-only/client/_tsconfig.json | 25 +- .../templates/client-only/client/index.tsx | 2 +- tools/src/templates/client-only/manifest.ts | 3 +- tools/src/templates/client-only/package.json | 4 +- tools/src/templates/with-crud/_tsconfig.json | 28 +- .../templates/with-crud/client/_tsconfig.json | 25 +- .../with-crud/client/components/EntryItem.tsx | 2 +- .../client/components/ModifyEntryModal.tsx | 4 +- .../src/templates/with-crud/client/index.tsx | 4 +- .../with-crud/client/utils/forgeAPI.ts | 2 +- tools/src/templates/with-crud/manifest.ts | 3 +- tools/src/templates/with-crud/package.json | 4 +- .../src/templates/with-routes/_tsconfig.json | 28 +- .../with-routes/client/_tsconfig.json | 25 +- .../client/pages/EntryDetails/index.tsx | 4 +- .../client/pages/EntryList/index.tsx | 4 +- .../with-routes/client/utils/forgeAPI.ts | 2 +- tools/src/templates/with-routes/manifest.ts | 3 +- tools/src/templates/with-routes/package.json | 4 +- tools/src/utils/commands.ts | 14 +- tools/tsconfig.json | 14 +- tsconfig.json | 2 +- 706 files changed, 6719 insertions(+), 7051 deletions(-) delete mode 100644 .github/agents/de-tailwind.agent.md delete mode 100644 .github/instructions/de-tailwind.instructions.md create mode 100644 client/src/core/auth/components/AuthFooter.tsx delete mode 100644 packages/lifeforge-ui/.env.example delete mode 100644 packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/index.ts delete mode 100644 packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.tsx delete mode 100644 packages/lifeforge-ui/src/components/inputs/DateInput/components/CalendarHeader.css.ts delete mode 100644 packages/lifeforge-ui/src/components/inputs/DateInput/components/CalendarHeader.tsx delete mode 100644 packages/lifeforge-ui/src/components/inputs/FileInput/FileInput.css.ts delete mode 100644 packages/lifeforge-ui/src/components/layout/ModuleHeader/ModuleHeader.css.ts delete mode 100644 packages/lifeforge-ui/src/components/navigation/Tabs/Tabs.css.ts delete mode 100644 packages/lifeforge-ui/src/components/navigation/Tabs/index.tsx delete mode 100644 packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.css.ts delete mode 100644 packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.css.ts delete mode 100644 packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.css.ts delete mode 100644 packages/lifeforge-ui/src/components/overlays/ContextMenu/ContextMenu.css.ts delete mode 100644 packages/lifeforge-ui/src/components/primitives/Bordered/index.tsx delete mode 100644 packages/lifeforge-ui/src/components/primitives/Box/index.tsx delete mode 100644 packages/lifeforge-ui/src/components/primitives/Flex/index.tsx delete mode 100644 packages/lifeforge-ui/src/components/primitives/Grid/index.tsx delete mode 100644 packages/lifeforge-ui/src/components/primitives/Prose/Prose.css.ts delete mode 100644 packages/lifeforge-ui/src/components/primitives/Prose/Prose.stories.tsx delete mode 100644 packages/lifeforge-ui/src/storybook/ScrollableStory.tsx delete mode 100644 packages/lifeforge-ui/src/system/colors.ts delete mode 100644 packages/lifeforge-ui/src/system/grid-utils.ts delete mode 100644 packages/lifeforge-ui/src/system/index.ts delete mode 100644 packages/lifeforge-ui/src/system/layout-utils.ts delete mode 100644 packages/lifeforge-ui/src/system/responsive.ts delete mode 100644 packages/lifeforge-ui/src/system/sprinkles.css.ts delete mode 100644 packages/lifeforge-ui/src/system/types.ts delete mode 100644 packages/lifeforge-ui/src/utils/forgeAPI.tsx rename packages/{lifeforge-ui => ui}/.gitignore (100%) rename packages/{lifeforge-ui => ui}/.storybook/i18n.ts (97%) rename packages/{lifeforge-ui => ui}/.storybook/index.css (100%) rename packages/{lifeforge-ui => ui}/.storybook/main.ts (100%) rename packages/{lifeforge-ui => ui}/.storybook/manager-head.html (100%) rename packages/{lifeforge-ui => ui}/.storybook/manager.ts (100%) rename packages/{lifeforge-ui => ui}/.storybook/preview.tsx (100%) rename packages/{lifeforge-ui => ui}/.storybook/vite-env.d.ts (100%) rename packages/{lifeforge-ui => ui}/LICENSE (100%) rename packages/{lifeforge-ui => ui}/package.json (95%) rename packages/{lifeforge-ui => ui}/src/components/auth/OTPInputBox/OTPInputBox.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/auth/OTPInputBox/index.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/auth/WithMasterPassword/components/CreatePasswordScreen.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/auth/WithMasterPassword/components/CreatePasswordScreen.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/auth/WithMasterPassword/components/LockedScreen.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/auth/WithMasterPassword/components/LockedScreen.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/auth/WithMasterPassword/index.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/auth/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/SSOAppMainView/SSOAppMainView.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/SSOAppMainView/index.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/SSOHeader/SSOHeader.stories.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/SSOHeader/index.tsx (80%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/UnauthorizedScreen/UnauthorizedScreen.stories.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/UnauthorizedScreen/index.tsx (78%) rename packages/{lifeforge-ui => ui}/src/components/auth/sso/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/data-display/OptionsColumn/OptionsColumn.stories.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/data-display/OptionsColumn/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/data-display/TagChip/TagChip.stories.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/data-display/TagChip/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/data-display/TagsFilter/TagsFilter.stories.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/data-display/TagsFilter/index.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts (65%) rename packages/{lifeforge-ui => ui}/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/data-display/ViewModeSelector/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/data-display/VirtualGrid/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/data-display/Widget/Widget.css.ts (82%) rename packages/{lifeforge-ui => ui}/src/components/data-display/Widget/Widget.stories.tsx (77%) rename packages/{lifeforge-ui => ui}/src/components/data-display/Widget/components/TitleAndDesc.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/data-display/Widget/components/WidgetIcon.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/data-display/Widget/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/data-display/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/feedback/Alert.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/feedback/Alert/Alert.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/feedback/Alert/Alert.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/feedback/Alert/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/feedback/EmptyStateScreen/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/feedback/ErrorScreen/index.tsx (72%) rename packages/{lifeforge-ui => ui}/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/feedback/LoadingScreen/index.tsx (79%) rename packages/{lifeforge-ui => ui}/src/components/feedback/NotFoundScreen/NotFoundScreen.stories.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/feedback/NotFoundScreen/index.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/feedback/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/AllInputs.mdx (94%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/Button.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/Button.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/components/ButtonIcon.tsx (79%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/hooks/useButtonStyleProps.ts (88%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/index.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/styles/plain.css.ts (66%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/styles/primary.css.ts (63%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/styles/secondary.css.ts (66%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Button/styles/tertiary.css.ts (66%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Checkbox/Checkbox.css.ts (60%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Checkbox/Checkbox.stories.tsx (88%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Checkbox/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorInput.stories.tsx (77%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/constants/palettes.json (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx (86%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/ModandiColorPaletteModal/MorandiColorPaletteModal.css.ts (51%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/ModandiColorPaletteModal/constants/morandi_colors.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/ModandiColorPaletteModal/index.stories.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/ModandiColorPaletteModal/index.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/TailwindCSSColorsModal.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/components/ColorItem.css.ts (51%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/components/ColorItem.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/index.stories.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/utils/colors.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/index.css (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/ColorPickerModal/stores/useColorPickerModalStore.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ColorInput/index.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ComboboxInput/ComboboxInput.stories.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts (52%) create mode 100644 packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.tsx rename packages/{lifeforge-ui => ui}/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ComboboxInput/components/ComboboxOptions.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ComboboxInput/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx (81%) rename packages/{lifeforge-ui => ui}/src/components/inputs/CurrencyInput/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/DateInput/DateInput.css.ts (68%) rename packages/{lifeforge-ui => ui}/src/components/inputs/DateInput/DateInput.stories.tsx (80%) create mode 100644 packages/ui/src/components/inputs/DateInput/components/CalendarHeader.css.ts create mode 100644 packages/ui/src/components/inputs/DateInput/components/CalendarHeader.tsx rename packages/{lifeforge-ui => ui}/src/components/inputs/DateInput/index.css (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/DateInput/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FAB/FAB.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FAB/index.tsx (95%) create mode 100644 packages/ui/src/components/inputs/FileInput/FileInput.css.ts rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FileInput.stories.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/AIImageGenerator.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/ImageURL.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/DnDContainer.css.ts (62%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/DnDContainer.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/PreviewContainer.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/index.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/components/CategoryFilter.tsx (82%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/components/ColorFilter.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/components/EditorsChoiceSwitch.tsx (87%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/components/ImageTypeFilter.tsx (84%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/components/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/constants/filterOptions.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchFilterModal/index.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchResults.css.ts (51%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/components/SearchResults.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/typescript/pixabay_interfaces.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/constants/file_icons.ts (99%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/FilePickerModal/index.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/inputs/FileInput/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconInput.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconInput.stories.tsx (80%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/components/ChipSelector.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/components/IconEntry.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/index.stories.tsx (71%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/Header.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx (88%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/IconPickerModal/typescript/icon_selector_interfaces.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/components/IconPreview.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/inputs/IconInput/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Listbox/Listbox.stories.tsx (82%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Listbox/index.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/ListboxInput.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts (52%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/components/ListboxOption.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/components/ListboxOptions.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/components/ListboxOptions.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts (99%) rename packages/{lifeforge-ui => ui}/src/components/inputs/ListboxInput/index.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/inputs/LocationInput/LocationInput.stories.tsx (77%) rename packages/{lifeforge-ui => ui}/src/components/inputs/LocationInput/components/LocationActionButton.tsx (79%) rename packages/{lifeforge-ui => ui}/src/components/inputs/LocationInput/index.tsx (87%) rename packages/{lifeforge-ui => ui}/src/components/inputs/NumberInput/NumberInput.stories.tsx (79%) rename packages/{lifeforge-ui => ui}/src/components/inputs/NumberInput/index.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/inputs/QRCodeScanner/QRCodeScanner.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/inputs/QRCodeScanner/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/RRuleInput.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/DailyForm.tsx (86%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/HourlyForm.tsx (86%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx (76%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx (83%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/WeeklyForm.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/components/YearlyForm/index.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/RRuleInput/utils/getRRuleString.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SearchInput/SearchInput.css.ts (58%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SearchInput/SearchInput.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SearchInput/index.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SliderInput/SliderInput.css.ts (84%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SliderInput/SliderInput.stories.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SliderInput/components/SliderHeader.tsx (87%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SliderInput/components/SliderTicks.tsx (84%) rename packages/{lifeforge-ui => ui}/src/components/inputs/SliderInput/index.tsx (84%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Switch/Switch.stories.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/Switch/index.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TagsInput/TagsInput.stories.tsx (80%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TagsInput/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx (75%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TextAreaInput/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TextInput/TextInput.stories.tsx (82%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TextInput/components/TextInputBox.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TextInput/components/TextInputBox.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/TextInput/index.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/inputs/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputActionButton.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputIcon.tsx (77%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputInnerWrapper.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputLabel/InputLabel.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputLabel/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts (79%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/InputWrapper/index.tsx (76%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts (72%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/components/Placeholder/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/contexts/InputFocusContext.tsx (68%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/hooks/useInputLabel.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/types.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/inputs/shared/utils/autoFocusableRef.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/layout/Card/Card.stories.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/layout/Card/index.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/layout/ContentWrapperWithSidebar/index.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/layout/LayoutWithSidebar/index.tsx (81%) rename packages/{lifeforge-ui => ui}/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/layout/ModuleHeader/index.tsx (60%) rename packages/{lifeforge-ui => ui}/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/layout/ModuleWrapper/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/layout/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/navigation/GoBackButton/GoBackButton.stories.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/navigation/GoBackButton/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Pagination/Pagination.stories.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Pagination/components/EllipsisIcon.tsx (73%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Pagination/components/NavButton.tsx (91%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Pagination/components/PageNumButton.tsx (86%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Pagination/components/PageNumbers.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Pagination/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/navigation/Tabs/Tabs.stories.tsx (94%) create mode 100644 packages/ui/src/components/navigation/Tabs/index.tsx rename packages/{lifeforge-ui => ui}/src/components/navigation/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/MainSidebarItem/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarDivider/index.tsx (87%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx (99%) create mode 100644 packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.css.ts rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx (80%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx (81%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts (68%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts (66%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx (96%) create mode 100644 packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.css.ts rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx (90%) create mode 100644 packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.css.ts rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarItem/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.css.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarTitle/index.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/SidebarWrapper/index.tsx (88%) rename packages/{lifeforge-ui => ui}/src/components/navigation/sidebar/index.ts (80%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/ContextMenu.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts (51%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/components/ContextMenuGroup.stories.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts (74%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/components/ContextMenuItem.stories.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/overlays/ContextMenu/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/overlays/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/core/ModalManager/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/core/components/ModalHeader.stories.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/core/components/ModalHeader.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/core/components/ModalWrapper.css.ts (73%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/core/components/ModalWrapper.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/ConfirmationModal/index.tsx (95%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/FormModal.stories.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormCheckboxInput.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormColorInput.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormCurrencyInput.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormDateInput.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormFileInput.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormIconInput.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormListboxInput.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormLocationInput.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormNumberInput.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormRRuleInput.tsx (89%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormSliderInput.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormTextAreaInput.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/components/FormTextInput.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/FormInputs/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/components/SubmitButton.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/formBuilder.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/index.tsx (98%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/typescript/form.types.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/FormModal/utils/formUtils.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/features/ViewImageModal/index.tsx (90%) rename packages/{lifeforge-ui => ui}/src/components/overlays/modals/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Bordered/Bordered.css.ts (78%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Bordered/Bordered.stories.tsx (85%) create mode 100644 packages/ui/src/components/primitives/Bordered/index.tsx rename packages/{lifeforge-ui => ui}/src/components/primitives/Box/Box.css.ts (64%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Box/Box.stories.tsx (94%) create mode 100644 packages/ui/src/components/primitives/Box/index.tsx rename packages/{lifeforge-ui => ui}/src/components/primitives/Flex/Flex.css.ts (77%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Flex/Flex.stories.tsx (82%) create mode 100644 packages/ui/src/components/primitives/Flex/index.tsx rename packages/{lifeforge-ui => ui}/src/components/primitives/Grid/Grid.css.ts (75%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Grid/Grid.stories.tsx (87%) create mode 100644 packages/ui/src/components/primitives/Grid/index.tsx create mode 100644 packages/ui/src/components/primitives/Icon/Icon.stories.tsx create mode 100644 packages/ui/src/components/primitives/Icon/index.tsx create mode 100644 packages/ui/src/components/primitives/Prose/Prose.css.ts create mode 100644 packages/ui/src/components/primitives/Prose/Prose.stories.tsx rename packages/{lifeforge-ui => ui}/src/components/primitives/Prose/index.tsx (99%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Slot/Slot.stories.tsx (51%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Slot/index.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Text/Text.css.ts (77%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Text/Text.stories.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/primitives/Text/index.tsx (52%) create mode 100644 packages/ui/src/components/primitives/Transition/Transition.stories.tsx rename packages/{lifeforge-ui => ui}/src/components/primitives/Transition/index.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/primitives/WithDivide/WithDivide.css.ts (100%) create mode 100644 packages/ui/src/components/primitives/WithDivide/WithDivide.stories.tsx rename packages/{lifeforge-ui => ui}/src/components/primitives/WithDivide/index.tsx (93%) rename packages/{lifeforge-ui => ui}/src/components/primitives/index.ts (90%) rename packages/{lifeforge-ui => ui}/src/components/utilities/APIOnlineStatusWrapper/index.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/utilities/EncryptionWrapper/index.tsx (70%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbar/Scrollbar.stories.tsx (94%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbar/index.tsx (96%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/defaultRenderElements.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/index.tsx (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/styles.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/utils/getInnerHeight.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/utils/getInnerWidth.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/utils/getScrollbarWidth.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/utils/isString.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Scrollbars/utils/returnFalse.ts (100%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Tooltip/Tooltip.stories.tsx (97%) rename packages/{lifeforge-ui => ui}/src/components/utilities/Tooltip/index.tsx (85%) rename packages/{lifeforge-ui => ui}/src/components/utilities/WithQuery/index.tsx (92%) rename packages/{lifeforge-ui => ui}/src/components/utilities/WithQueryData/index.tsx (88%) rename packages/{lifeforge-ui => ui}/src/components/utilities/index.ts (100%) rename packages/{lifeforge-ui => ui}/src/index.ts (73%) create mode 100644 packages/ui/src/providers/ModalProvider.tsx create mode 100644 packages/ui/src/providers/index.ts rename packages/{lifeforge-ui => ui}/src/storybook/PreviewWrapper.tsx (86%) rename packages/{lifeforge-ui => ui}/src/storybook/QCProvider.tsx (99%) rename packages/{lifeforge-ui => ui}/src/storybook/SBThemeProvider.tsx (95%) create mode 100644 packages/ui/src/storybook/ScrollableStory.tsx rename packages/{lifeforge-ui => ui}/src/storybook/VariantContainer.tsx (85%) rename packages/{lifeforge-ui => ui}/src/storybook/mockController.ts (100%) rename packages/{lifeforge-ui => ui}/src/storybook/toolbars/bgTemp.ts (99%) rename packages/{lifeforge-ui => ui}/src/storybook/toolbars/fontScale.ts (99%) rename packages/{lifeforge-ui => ui}/src/storybook/toolbars/theme.ts (99%) rename packages/{lifeforge-ui => ui}/src/storybook/toolbars/themeColor.ts (99%) rename packages/{lifeforge-ui => ui}/src/storybook/useSBTheme.tsx (100%) rename packages/{lifeforge-ui => ui}/src/styles/autofill.css (100%) rename packages/{lifeforge-ui => ui}/src/styles/global.css (100%) rename packages/{lifeforge-ui => ui}/src/styles/index.css (100%) rename packages/{lifeforge-ui => ui}/src/styles/preflight.css (97%) rename packages/{lifeforge-ui => ui}/src/styles/themes/background.css (100%) rename packages/{lifeforge-ui => ui}/src/styles/themes/foreground.css (100%) rename packages/{lifeforge-ui => ui}/src/styles/themes/index.css (100%) rename packages/{lifeforge-ui => ui}/src/styles/utils.css (100%) create mode 100644 packages/ui/src/system/arbitrary.ts create mode 100644 packages/ui/src/system/colors/constants.ts create mode 100644 packages/ui/src/system/colors/index.ts create mode 100644 packages/ui/src/system/colors/utils.ts create mode 100644 packages/ui/src/system/grid-utils.ts create mode 100644 packages/ui/src/system/index.ts create mode 100644 packages/ui/src/system/props-resolver.ts create mode 100644 packages/ui/src/system/responsive/constant.ts rename packages/{lifeforge-ui/src/system/custom-props.css.ts => ui/src/system/responsive/index.css.ts} (64%) create mode 100644 packages/ui/src/system/responsive/index.ts create mode 100644 packages/ui/src/system/responsive/types.ts create mode 100644 packages/ui/src/system/responsive/utils/escapeCssClassName.ts create mode 100644 packages/ui/src/system/responsive/utils/getResponsiveLayoutStyles.ts create mode 100644 packages/ui/src/system/responsive/utils/normalizeResponsiveProps.ts rename packages/{lifeforge-ui => ui}/src/system/tailwind-palette.ts (100%) create mode 100644 packages/ui/src/system/themes.ts create mode 100644 packages/ui/src/system/tokens/index.ts create mode 100644 packages/ui/src/system/tokens/layout-props.css.ts create mode 100644 packages/ui/src/system/tokens/resolvers/common-props-resolver.ts create mode 100644 packages/ui/src/system/tokens/resolvers/index.ts create mode 100644 packages/ui/src/system/tokens/resolvers/layout-props-resolvers.ts create mode 100644 packages/ui/src/system/tokens/resolvers/spacing-props-resolvers.ts create mode 100644 packages/ui/src/system/tokens/spacing-props.css.ts create mode 100644 packages/ui/src/system/tokens/theme-props.css.ts rename packages/{lifeforge-ui => ui}/src/system/vars.css.ts (93%) create mode 100644 packages/ui/src/utils/forgeAPI.tsx rename packages/{lifeforge-ui => ui}/tsconfig.json (95%) rename packages/{lifeforge-ui => ui}/tsup.config.ts (100%) rename packages/{lifeforge-ui => ui}/vercel.json (100%) rename packages/{lifeforge-ui => ui}/vite.config.ts (91%) diff --git a/.agent/workflows/create-dashboard-widget.md b/.agent/workflows/create-dashboard-widget.md index c91ae7e8f..dee02b147 100644 --- a/.agent/workflows/create-dashboard-widget.md +++ b/.agent/workflows/create-dashboard-widget.md @@ -30,14 +30,15 @@ Create a new file at `apps//client/src/widgets/.tsx` ### Widget File Structure Every widget file MUST export: + 1. A **default export** - the React component function 2. A **named export `config`** - the `WidgetConfig` object ### Basic Widget Template ```tsx -import { Widget } from 'lifeforge-ui' -import type { WidgetConfig } from 'shared' +import type { WidgetConfig } from '@lifeforge/shared' +import { Widget } from '@lifeforge/ui' export default function MyWidget() { return ( @@ -53,7 +54,7 @@ export default function MyWidget() { export const config: WidgetConfig = { namespace: 'apps.', - id: '', // camelCase, unique identifier + id: '', // camelCase, unique identifier icon: 'tabler:icon-name' } ``` @@ -68,10 +69,10 @@ export const config: WidgetConfig = { namespace: 'apps.', id: '', icon: 'tabler:icon-name', - minW: 2, // Minimum width in grid units (optional) - minH: 2, // Minimum height in grid units (optional) - maxW: 4, // Maximum width in grid units (optional) - maxH: 4 // Maximum height in grid units (optional) + minW: 2, // Minimum width in grid units (optional) + minH: 2, // Minimum height in grid units (optional) + maxW: 4, // Maximum width in grid units (optional) + maxH: 4 // Maximum height in grid units (optional) } ``` @@ -79,9 +80,9 @@ export const config: WidgetConfig = { ```tsx import { useQuery } from '@tanstack/react-query' -import { Button, EmptyStateScreen, Widget, WithQuery } from 'lifeforge-ui' -import { Link } from 'shared' -import type { WidgetConfig } from 'shared' +import { Button, EmptyStateScreen, Widget, WithQuery } from '@lifeforge/ui' +import { Link } from '@lifeforge/shared' +import type { WidgetConfig } from '@lifeforge/shared' import forgeAPI from '@/utils/forgeAPI' @@ -140,16 +141,18 @@ export const config: WidgetConfig = { Widgets can receive dimension props to adapt their layout: ```tsx -function ResponsiveWidget({ - dimension: { w, h } -}: { - dimension: { w: number; h: number } +function ResponsiveWidget({ + dimension: { w, h } +}: { + dimension: { w: number; h: number } }) { return ( -
+
{/* Content that adapts to dimensions */}
) @@ -185,12 +188,12 @@ Update the module's locale files at `apps//locales/`: ### Required Locale Fields -| Key | Usage | -|-----|-------| -| `widgets..title` | Widget title in header and widget manager | -| `widgets..description` | Description shown in widget manager | -| `widgets..empty..title` | Empty state title | -| `widgets..empty..description` | Empty state description | +| Key | Usage | +| ------------------------------------------------- | ----------------------------------------- | +| `widgets..title` | Widget title in header and widget manager | +| `widgets..description` | Description shown in widget manager | +| `widgets..empty..title` | Empty state title | +| `widgets..empty..description` | Empty state description | > [!IMPORTANT] > Add translations to ALL locale files: `en.json`, `ms.json`, `zh-CN.json`, `zh-TW.json` @@ -203,9 +206,9 @@ Widgets are **automatically discovered** by the dashboard system. The main dashb ```ts const widgets = import.meta.glob([ - '../**/widgets/*.tsx', // Core app widgets - './widgets/*.tsx', // Dashboard's own widgets - '../../../../apps/**/client/src/widgets/*.tsx' // Module widgets + '../**/widgets/*.tsx', // Core app widgets + './widgets/*.tsx', // Dashboard's own widgets + '../../../../apps/**/client/src/widgets/*.tsx' // Module widgets ]) ``` @@ -218,13 +221,13 @@ const widgets = import.meta.glob([ ```ts interface WidgetConfig { - namespace?: string // Translation namespace (e.g., 'apps.calendar') - id: string // Unique widget identifier in camelCase - icon: string // Iconify icon name (e.g., 'tabler:calendar') - minW?: number // Minimum width in grid units (1 unit = varies by screen) - minH?: number // Minimum height in grid units (1 unit = 100px) - maxW?: number // Maximum width in grid units - maxH?: number // Maximum height in grid units + namespace?: string // Translation namespace (e.g., 'apps.calendar') + id: string // Unique widget identifier in camelCase + icon: string // Iconify icon name (e.g., 'tabler:calendar') + minW?: number // Minimum width in grid units (1 unit = varies by screen) + minH?: number // Minimum height in grid units (1 unit = 100px) + maxW?: number // Maximum width in grid units + maxH?: number // Maximum height in grid units } ``` @@ -240,14 +243,14 @@ interface WidgetConfig { The `Widget` component from `lifeforge-ui` accepts: -| Prop | Type | Description | -|------|------|-------------| -| `icon` | `string` | Iconify icon name | -| `title` | `string` | Widget title (auto-translated if namespace provided) | -| `namespace` | `string \| false` | Translation namespace, `false` to disable | -| `className` | `string` | Additional CSS classes | -| `actionComponent` | `ReactNode` | Component beside title (e.g., navigation button) | -| `children` | `ReactNode` | Widget content | +| Prop | Type | Description | +| ----------------- | ----------------- | ---------------------------------------------------- | +| `icon` | `string` | Iconify icon name | +| `title` | `string` | Widget title (auto-translated if namespace provided) | +| `namespace` | `string \| false` | Translation namespace, `false` to disable | +| `className` | `string` | Additional CSS classes | +| `actionComponent` | `ReactNode` | Component beside title (e.g., navigation button) | +| `children` | `ReactNode` | Widget content | --- @@ -255,14 +258,14 @@ The `Widget` component from `lifeforge-ui` accepts: Import from `lifeforge-ui`: -| Component | Usage | -|-----------|-------| -| `Widget` | Container wrapper with title and icon | -| `WithQuery` | Handles loading/error states for API queries | -| `EmptyStateScreen` | Shows when no data exists | -| `Scrollbar` | Scrollable content wrapper | -| `Button` | Action buttons | -| `LoadingScreen` | Loading indicator | +| Component | Usage | +| ------------------ | -------------------------------------------- | +| `Widget` | Container wrapper with title and icon | +| `WithQuery` | Handles loading/error states for API queries | +| `EmptyStateScreen` | Shows when no data exists | +| `Scrollbar` | Scrollable content wrapper | +| `Button` | Action buttons | +| `LoadingScreen` | Loading indicator | --- @@ -271,17 +274,20 @@ Import from `lifeforge-ui`: Examine these existing widgets for patterns: ### Simple Display Widgets (No API) + - `client/src/apps/dashboard/widgets/Clock.tsx` - Time display with dimensions - `client/src/apps/dashboard/widgets/Date.tsx` - Date display with theming - `client/src/apps/dashboard/widgets/Quotes.tsx` - External API fetch ### Data-Driven Widgets + - `apps/calendar/client/src/widgets/TodaysEvent.tsx` - List with items - `apps/wallet/client/src/widgets/AssetsBalance.tsx` - Grid layout with toggle - `apps/todoList/client/src/widgets/TodoList.tsx` - List with context provider - `apps/codeTime/client/src/widgets/CodeTime.tsx` - Chart visualization ### Interactive Widgets + - `apps/music/client/src/widgets/MusicPlayer.tsx` - Media controls - `apps/calendar/client/src/widgets/MiniCalendar.tsx` - Interactive calendar diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index be4cd01a1..711f1808f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ name: 🐛 Bug Report description: Create a report to help us improve -title: "[Bug]: " -labels: ["bug"] +title: '[Bug]: ' +labels: ['bug'] type: bug body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 204b246b4..355fe9d7a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,7 +1,7 @@ name: ✨ Feature Request description: Suggest an idea for this project -title: "[Feature]: " -labels: ["enhancement"] +title: '[Feature]: ' +labels: ['enhancement'] type: feature body: - type: markdown diff --git a/.github/agents/de-tailwind.agent.md b/.github/agents/de-tailwind.agent.md deleted file mode 100644 index 3872e0e7f..000000000 --- a/.github/agents/de-tailwind.agent.md +++ /dev/null @@ -1,719 +0,0 @@ ---- -description: "Use when replacing, migrating, or removing Tailwind CSS utility classes in lifeforge-ui components or stories. Trigger phrases: de-tailwind, remove tailwind, migrate to vanilla-extract, replace tailwind classes, convert tailwind, primitives migration." -tools: [read, edit, search, todo] ---- -You are a specialist at migrating lifeforge-ui components from Tailwind CSS to primitive components and vanilla-extract CSS-in-JS. Your job is to eliminate every Tailwind utility class from component and story source files while preserving every pixel of the original styling logic. - -## Mandatory Pre-Work - -Before touching ANY file, you MUST: - -1. Read the **complete** source file you are about to modify — understand every conditional class, dark-mode variant, hover/focus state, and context selector. -2. Read the **primitive component prop types** (see §1 below) — know exactly which props are available so you don't reach for `style={}` when a prop exists. -3. Consult the **space token table** (see §2 below) to map every Tailwind spacing value before writing. -4. Understand the **system architecture** (see §0.5 below) before writing any `.css.ts` file. - -## Constraints - -- DO NOT leave any Tailwind utility class in a file you have edited. -- DO NOT use `style={{}}` when a primitive prop exists for the same property. -- DO NOT hardcode hex strings or raw `var(--color-*)` in `.css.ts` — always use `bg[n]` / `custom[n]` / `withOpacity()` imported from `@/system`. -- DO NOT create `.css.ts` files for stories (`.stories.tsx`) — primitives only. -- DO NOT add comments, docstrings, or explanations to code you did not change. -- DO NOT refactor logic, rename variables, or make any change beyond the styling migration. -- ONLY work on files under `packages/lifeforge-ui/src/`. -- **`asChild` MUST be tried first — ALWAYS, before writing any `.css.ts` export.** For every non-primitive element that needs color, spacing, or layout styling, ask: "can a primitive with `asChild` express this?" If yes, use `asChild`. Writing a `.css.ts` export when `asChild` would have worked is a mistake. Only reach for `.css.ts` when primitives are genuinely incapable of expressing the property: `cursor`, complex `boxShadow`, and context selectors (`.bordered &`, `.has-bg-image &`). -- **Use `` for any border styling** — never write `borderColor`/`borderWidth`/`borderStyle` in a `.css.ts` `style()` when `` can express it. -- **Use `` for any transition** — never write `transition: '...'` in a `.css.ts` file. -- **Use `` for dividers between sibling items** — never use `divide-*` Tailwind classes or manual `:not(:first-child)` selectors in `.css.ts`. - ---- - -## §0.5 — System Architecture - -### Source files - -| Path | Purpose | -|------|---------| -| `src/system/colors.ts` | `colors` map (sprinkle values), `bg[n]` / `custom[n]` objects (for `style()` calls), `ColorToken` type | -| `src/system/vars.css.ts` | `vars` design tokens — `space`, `radii`, `fontSize`, `lineHeight`, `fontWeight` | -| `src/system/sprinkles.css.ts` | `commonProperties` + `themeColorProperties` + `commonSprinkles` | -| `src/system/types.ts` | `ThemeCondition`, `ThemeConditionProp`, all prop interfaces | -| `src/system/responsive.ts` | `responsiveConditions`, `normalizeResponsiveProp`, `ResponsiveProp` | -| `src/system/layout-utils.ts` | `getResponsiveLayoutStyles`, `resolveCommonSprinkleProps` | -| `src/system/index.ts` | Barrel — everything above re-exported | - -All imports from the system use the `@/system` alias. - -### `ThemeConditionProp` - -A union type that accepts either a plain value **or** a per-condition map: - -```ts -type ThemeConditionProp = T | Partial> -// ThemeCondition = 'base' | 'dark' | 'hover' | 'darkHover' | 'hasBgImage' | 'darkHasBgImage' -``` - -The six conditions map to selectors: - -| Condition | Selector | -|-----------|----------| -| `base` | (default — no selector) | -| `dark` | `.dark &` | -| `hover` | `&:hover` | -| `darkHover` | `.dark &:hover` | -| `hasBgImage` | `.has-bg-image &` | -| `darkHasBgImage` | `.dark .has-bg-image &` | - -### `themeColorProperties` (from `@/system`) - -A sprinkle `defineProperties` block that applies the 6 conditions above to -`backgroundColor`, `color`, and `borderColor` — all keyed by `ColorToken` -(`'transparent' | 'bg-50'…'bg-950' | 'custom-50'…'custom-900'`). - -All container primitives compose this into their `createSprinkles(...)` call, -which is what enables the `bg` prop. Component `.css.ts` files can also compose -it when they need theme-adaptive per-element colors. - -### Color token helpers - -| Import | Use in | -|--------|--------| -| `colors` (from `@/system`) | Sprinkle property values in `defineProperties({ properties: { color: colors } })` | -| `bg[n]` (from `@/system`) | `style()` calls — e.g. `backgroundColor: bg[50]` | -| `custom[n]` (from `@/system`) | `style()` calls — e.g. `color: custom[500]` | -| `withOpacity(token, 0.1)` (from `@/system`) | opacity-modified colors — `withOpacity(bg[500], 0.2)` | - -> **NO raw hex strings or hardcoded `var(--color-*)` in `.css.ts` files.** -> Always use `bg[n]`, `custom[n]`, or `withOpacity(...)`. - ---- - -## §1 — Primitive Components - -Import from `@components/primitives`. - -### Container primitives — shared props - -All three container primitives (`Box`, `Flex`, `Grid`) share these additional props beyond their own layout props: - -| Prop | Type | Description | -|------|------|-------------| -| `bg` | `ThemeConditionProp` | Theme-adaptive background color | -| `rounded` | `ResponsiveProp` | Border radius token | -| `shadow` | `boolean` | Adds `var(--custom-shadow)` box shadow | - -The `bg` prop accepts either a flat token or a per-condition map: - -```tsx -// flat — same in all conditions - - -// adaptive — different per theme condition - - - -``` - -### `Box` - -General-purpose block element. Accepts all [Layout Props] + [Margin Props]. - -```tsx - - rounded="md" // border-radius token: 'none'|'sm'|'md'|'lg'|'xl'|'2xl'|'3xl'|'full' - shadow // adds var(--custom-shadow) - // Layout props (CSS strings, responsive): - width="100%" - minWidth="0" - maxWidth="48rem" - height="100%" - // Positioning: - position="relative" // 'static'|'relative'|'absolute'|'fixed'|'sticky' - inset="0" - top="0" right="0" bottom="0" left="0" - overflow="hidden" // 'visible'|'hidden'|'scroll'|'auto' - overflowX="auto" - overflowY="hidden" - // Grid-child props (CSS strings): - gridColumn="span 2 / span 2" - gridRow="span 2 / span 2" - flexBasis="0" flexGrow="1" flexShrink="0" - // Padding (SpaceToken): - p="md" px="lg" py="sm" pt="xs" pr="md" pb="sm" pl="xl" - // Margin (SpaceToken): - m="md" mx="auto" my="lg" mt="xs" mr="sm" mb="md" ml="xl" - className="extra-class" - style={{ /* arbitrary overrides */ }} -/> -``` - -### `Flex` - -Flexbox container. - -```tsx - -``` - -### `Grid` - -CSS Grid container. - -```tsx - -``` - -### `Text` - -Inline text/span. Renders as `` by default. - -```tsx - -``` - -> **`color` and `bg` on `Text` use `ThemeConditionProp`, not `ResponsiveProp`.** -> They respond to dark mode / hover conditions, not breakpoints. - -### `Bordered` - -Renders a container with configurable border. Supports all Box layout/margin props plus border-specific props. - -```tsx -; default { base: 'bg-200', dark: 'bg-700' } - borderColor={{ base: 'bg-200', dark: 'bg-700', hover: 'bg-300' }} - borderWidth="1px" // CSS string (default: '1px') - borderStyle="solid" // 'solid'|'dashed'|'dotted'|'double'|'none' (default: 'solid') - borderSide="all" // 'all'|'top'|'right'|'bottom'|'left'|'x'|'y' (default: 'all') - bg={{ base: 'bg-50', dark: 'bg-900' }} - color={{ base: 'bg-900', dark: 'bg-50' }} - rounded="lg" - shadow - // + all Box layout/margin/padding props -/> -``` - -Use `` whenever a border with theme-adaptive color is needed — it replaces both the `border-*` Tailwind classes and the manual `.css.ts` border pattern. Prefer it over writing `borderColor` in a `.css.ts` `style()`. - -### `Transition` - -Applies CSS `transition` to its single child via slot (no extra DOM node). - -```tsx - -
...
-
-``` - -Use `` to replace every `transition-*` Tailwind class. **Do not write `transition: '...'` in a `.css.ts` file when `` can express it.** - -### `WithDivide` - -Merges a top-border divider style onto its single child via slot. Border appears on every child except the first sibling (`:not(:first-child)`). - -```tsx - -
list item
-
-``` - -Import `bg` and `withOpacity` from `@/system` to use token helpers as values: - -```tsx -import { bg, withOpacity } from '@/system' - -{items.map(item => ( - -
{item.label}
-
-))} -``` - -### `asChild` pattern - -All primitives support `asChild`. When set, the primitive merges its sprinkle classes and inline style variables onto the single child element instead of rendering a wrapper DOM node: - -```tsx -// ✅ Preferred — no extra DOM node, no .css.ts export needed - - - - -// ✅ Text asChild — applies color/weight to any element - - ... - -``` - -> **Important:** when using `asChild`, the child must accept and forward both `className` AND `style`. CSS variables from sprinkles are injected via the inline `style` prop — if the child does not forward `style`, theme-adaptive colors will silently fail. - -> **`asChild` is not optional.** It is the default choice for any non-primitive element that needs primitive-expressible styling. `.css.ts` is the last resort — only when `asChild` cannot physically express the required CSS property. - -### Responsive props - -All `SpaceToken` and most layout/size props accept a responsive object: - -```tsx - - -``` - -Breakpoints: `base` | `sm` (640px) | `md` (768px) | `lg` (1024px) | `xl` (1280px) | `2xl` (1536px) - ---- - -## §2 — Space Token Reference - -`--spacing` is Tailwind's default `0.25rem` per unit. - -| SpaceToken | Value | Tailwind equivalent | -|------------|-------|---------------------| -| `none` | `0` | `0` | -| `xs` | `calc(var(--spacing) * 1)` = 0.25rem | `1` | -| `sm` | `calc(var(--spacing) * 2)` = 0.5rem | `2` | -| `md` | `calc(var(--spacing) * 4)` = 1rem | `4` | -| `lg` | `calc(var(--spacing) * 6)` = 1.5rem | `6` | -| `xl` | `calc(var(--spacing) * 8)` = 2rem | `8` | -| `2xl` | `calc(var(--spacing) * 12)` = 3rem | `12` | -| `3xl` | `calc(var(--spacing) * 16)` = 4rem | `16` | - -Spacing values **not** in this table (e.g. `gap-3` = 0.75rem, arbitrary `mt-[30%]`) must use an inline `style` prop: - -```tsx - -``` - ---- - -## §3 — Common Tailwind → Primitive Mapping - -| Tailwind class | Primitive equivalent | -|---|---| -| `flex` | `` | -| `flex flex-col` | `` | -| `flex items-center justify-center` | `` | -| `flex items-center justify-between` | `` | -| `flex-center` (utility) | `` | -| `grid grid-cols-3` | `` | -| `gap-6` | `gap="lg"` | -| `p-16` | `p="3xl"` | -| `px-16` | `px="3xl"` | -| `w-full` | `width="100%"` | -| `h-full` | `height="100%"` | -| `min-w-0` | `minWidth="0"` | -| `min-w-64` | `minWidth="16rem"` | -| `size-full` | `width="100%" height="100%"` on `` or `` | -| `col-span-2` | `gridColumn="span 2 / span 2"` on a wrapping `` | -| `row-span-2` | `gridRow="span 2 / span 2"` on a wrapping `` | -| `shrink-0` | `flexShrink="0"` | -| `text-bg-500` | `` | -| `text-bg-500 dark:text-bg-50` | `` | -| `text-lg` | `` | -| `font-semibold` | `` | -| `truncate` | `` — **shorthand must come first** | -| `text-lg sm:text-xl` | `` | -| `overflow-hidden` | `overflow="hidden"` | -| `position-relative` | `position="relative"` | -| `mb-1` | `mb="xs"` | -| `p-2 sm:p-4` | `p={{ base: 'sm', sm: 'md' }}` | -| `bg-bg-50 dark:bg-bg-900` | `bg={{ base: 'bg-50', dark: 'bg-900' }}` on a container | -| `hover:bg-bg-100 dark:hover:bg-bg-800` | `bg={{ base: 'bg-50', dark: 'bg-900', hover: 'bg-100', darkHover: 'bg-800' }}` | -| `shadow-custom` | `shadow` on any container primitive | - ---- - -## §4 — Styling Categorisation - -| Property type | Destination | -|---|---| -| `display`, `flex-direction`, `gap`, `padding`, `margin`, `width`, `height`, `overflow`, `position`, `inset` | **Primitive prop** | -| `backgroundColor` of a container primitive | **`bg` prop** — `bg={{ base: 'bg-50', dark: 'bg-900' }}` | -| `backgroundColor` of a non-primitive child | **`asChild` on ``/``** (always first) — only use `.css.ts` sprinkle if `asChild` is impossible | -| `color` of a `` | **`color` prop** — `color={{ base: 'bg-500', dark: 'bg-50' }}` | -| `color` of a non-Text element | **`asChild` with ``** — `.css.ts` sprinkle only if the element cannot accept/forward `className` + `style` | -| `border-*` (width + style + color) | **``** primitive — replaces all three properties together | -| `borderColor` only (no Bordered) | **`.css.ts` sprinkle** (Pattern B) | -| `borderRadius` | **`rounded` prop** on container OR `borderRadius: vars.radii.*` in `.css.ts` | -| `box-shadow` (`shadow-custom`) | **`shadow` prop** on container primitive | -| `box-shadow` (complex/non-standard) | **Pattern A** — `.css.ts` `style()` | -| `transition-*` | **``** primitive — never write `transition` in `.css.ts` | -| `cursor`, `hover`, `focus`, `active` (non-color) | **Pattern A** — `.css.ts` `style()` | -| Dividers between list items (`divide-*`) | **``** wrapping each item | -| Dark-mode variants | **`bg`/`color` prop** (preferred) OR **Pattern B** OR **Pattern A** selectors | -| Context selectors (`.bordered &`, `.has-bg-image &`) | **Pattern A** — `.css.ts` `style()` selectors | -| `font-weight`, `font-size` | **``** props | -| Spacing not in token table | **`style={{ ... }}`** inline on the primitive | - -### Theme-adaptive color decision tree - -**Follow this tree strictly, top to bottom. Do not skip ahead to `.css.ts`.** - -``` -Is it a transition (transition-* class)? - └─ YES → use wrapping the child. STOP. - -Is it a list divider (divide-* or border between siblings)? - └─ YES → wrap each item in . STOP. - -Is it a full border (border-width + border-style + border-color)? - └─ YES → use . STOP. - -Is the element a container primitive (Box/Flex/Grid)? - └─ YES → use `bg` prop: - use `shadow` prop for box-shadow - └─ NO → Is it a ? - └─ YES → use `color`/`bg` props: - └─ NO → MANDATORY: try `asChild` on a primitive first. - Does the element accept and forward className + style? - └─ YES → use `asChild`. STOP. Do not write a .css.ts export. - └─ NO → only now may you write a .css.ts sprinkle (Pattern B) -``` - -> **If you find yourself writing a `.css.ts` export for color or background, stop and ask: could `asChild` have handled this? If yes, revert and use `asChild`.** - ---- - -## §5 — `.css.ts` Patterns - -### Pattern A: `style()` for structural/interactive-only styles - -Use for `boxShadow`, `transition`, `cursor`, `borderWidth`, and rules that depend on **parent context selectors** (`.bordered &`) where a sprinkle cannot be used. - -```ts -import { style } from '@vanilla-extract/css' -import { bg, custom, withOpacity, vars } from '@/system' - -export const wrapper = style({ - borderRadius: vars.radii.lg, - transition: 'all 0.2s', - backgroundColor: bg[50], - selectors: { - '.dark &': { backgroundColor: bg[900] }, - '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } - } -}) -``` - -### Pattern B: `themeColorProperties` sprinkle for theme-adaptive colors on child elements - -When a **non-primitive element inside a component** needs adaptive `backgroundColor`, `color`, or `borderColor` across dark / hover / hasBgImage conditions: - -```ts -import { createSprinkles } from '@vanilla-extract/sprinkles' -import { style } from '@vanilla-extract/css' -import { themeColorProperties, vars } from '@/system' - -const sprinkles = createSprinkles(themeColorProperties) - -export const iconWrapper = style([ - { borderRadius: vars.radii.lg }, - sprinkles({ backgroundColor: { base: 'bg-100', dark: 'bg-800' } }) -]) - -export const titleText = sprinkles({ - color: { base: 'bg-500', dark: 'bg-50' } -}) - -export const optionInactive = sprinkles({ - color: { base: 'bg-500', hover: 'bg-800', darkHover: 'bg-50' } -}) -``` - -`themeColorProperties` supports: -- `backgroundColor: ColorToken | Partial>` -- `color: ColorToken | Partial>` -- `borderColor: ColorToken | Partial>` - -### Token helpers (`.css.ts` only) - -| Need | Code | -|------|------| -| Background color | `bg[50]` … `bg[950]` | -| Accent color | `custom[50]` … `custom[900]` | -| Color with opacity | `withOpacity(bg[500], 0.1)` | -| Border radius | `vars.radii.sm/md/lg/xl/2xl/3xl/full` | -| Space value | `vars.space.xs/sm/md/lg/xl/2xl/3xl` | -| Font size | `vars.fontSize.sm/base/lg/xl/.../9xl` | -| Font weight | `vars.fontWeight.normal/medium/semibold/bold` | -| Box shadow | `boxShadow: 'var(--custom-shadow)'` | - -### Common Tailwind utility → `.css.ts` mapping - -| Tailwind utility | `.css.ts` equivalent | -|---|---| -| `component-bg` | `bg={{ base: 'bg-50', dark: 'bg-900' }}` on primitive (preferred) OR `backgroundColor: bg[50]` + `.dark &` selector | -| `component-bg-lighter` | `backgroundColor: bg[100]` + `.dark &` → `withOpacity(bg[800], 0.5)` | -| `shadow-custom` | `shadow` prop on primitive OR `boxShadow: 'var(--custom-shadow)'` | -| `border-bg-500/20` | `borderColor: withOpacity(bg[500], 0.2)` | -| `bg-bg-500/10` | `backgroundColor: withOpacity(bg[500], 0.1)` | -| `text-bg-500 dark:text-bg-50` | `` OR `sprinkles({ color: { base: 'bg-500', dark: 'bg-50' } })` in css.ts | -| `in-[.bordered]:border-2` | `selectors: { '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } }` | -| `hover:bg-bg-100` | `bg={{ ..., hover: 'bg-100' }}` on primitive OR `sprinkles({ backgroundColor: { hover: 'bg-100' } })` | -| `transition-all` | `transition: 'all 0.2s'` | -| `rounded-lg` | `rounded="lg"` prop on primitive, or `borderRadius: vars.radii.lg` in `.css.ts` | -| `text-2xl sm:text-3xl` | `` | - ---- - -## §6 — Workflow - -### Components (`.tsx` + `.css.ts`) - -1. **Audit the file** — catalogue every Tailwind class; classify as layout, theme-adaptive color, structural/interactive, or context-selector. -2. **Plan primitive replacements** — map `flex`/`grid`/`div`/`span` wrappers to ``/``/``/`` with correct props using §3. -3. **`asChild` is mandatory before `.css.ts`** — for every styled non-primitive element, you MUST evaluate `asChild` first. Only proceed to `.css.ts` if `asChild` is structurally impossible (element does not forward `className`/`style`, or the property is `transition`/`cursor`/context selector). -4. **Create `ComponentName.css.ts`** only for what genuinely cannot be expressed via primitives — one export per logical role, named by purpose. -5. **Import** with `import * as styles from './ComponentName.css'`; compose with `clsx()`. - -### Stories (`.stories.tsx`) - -- Use primitives only. No `.css.ts`. -- Replace every `
` with ``, every `
` wrapper with ``, every ``/`

` with ``. -- Move `col-span-*` / `row-span-*` from child `className` to a wrapping ``. -- Remove unused imports; add `Box`, `Flex`, `Grid`, `Text` from `@components/primitives`. - -### Prop ordering lint rule - -JSX props must be **alphabetical**, except: -- `ref` — always **first** -- Boolean shorthand props (e.g. `truncate`, `shadow`) — always **before** other props - ---- - -## §7 — Examples - -### Story: grid wrapper with spanning children - -```tsx -// Before -

- -
- -// After - - - - - -``` - -### Component: themed wrapper — bg on primitive + shadow prop - -```tsx -// Before -
- -// Widget.css.ts — only what primitives can't express -import { style } from '@vanilla-extract/css' -import { withOpacity, bg } from '@/system' - -export const wrapper = style({ - borderColor: withOpacity(bg[500], 0.2), - selectors: { - '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } - } -}) - -// After (Widget.tsx) — bg and shadow on primitive props - -``` - -### Component: child element theme colors — themeColorProperties sprinkle - -```tsx -// Before -
-

- -// Widget.css.ts -import { createSprinkles } from '@vanilla-extract/sprinkles' -import { style } from '@vanilla-extract/css' -import { themeColorProperties, vars } from '@/system' - -const sprinkles = createSprinkles(themeColorProperties) - -export const iconWrapper = style([ - { borderRadius: vars.radii.lg }, - sprinkles({ backgroundColor: { base: 'bg-100', dark: 'bg-800' } }) -]) - -export const titleText = sprinkles({ - color: { base: 'bg-500', dark: 'bg-50' } -}) - -// After (Widget.tsx) - - -``` - -### Text with theme-adaptive color via prop (no .css.ts needed) - -```tsx -// Before - - -// After — ThemeConditionProp directly on Text - -``` - -### Interactive card — bg with hover/darkHover conditions - -```tsx -// Before -
- -// Card.css.ts — only transition/cursor in style() -import { style } from '@vanilla-extract/css' -export const interactive = style({ cursor: 'pointer', transition: 'all 0.2s' }) - -// After (Card.tsx) - -``` - -### asChild: applying primitive props to a third-party component - -```tsx -// Before - - - - -// After — no new .css.ts needed - - - - - -``` - ---- - -## §8 — Preservation Checklist - -Before marking a file done, verify: - -- [ ] All conditional class logic reproduced (variant props, boolean flags) -- [ ] All dark-mode styles present (`dark` condition on `bg`/`color` prop, or `.dark &` selector) -- [ ] All responsive styles present (`@media` blocks or responsive primitive props) -- [ ] All hover/focus/active states present (`hover`/`darkHover` conditions or `.css.ts` selectors) -- [ ] All context-selector styles present (`.bordered &`, `.has-bg-image &`) -- [ ] Dynamic inline styles that cannot be tokenised are still passed via `style={{}}` -- [ ] Zero Tailwind class names remain in the file -- [ ] `get_errors` reports zero TypeScript errors - ---- - -## §9 — Completion Steps - -After `get_errors` passes: - -1. Mark the migrated component(s) as `[x]` in `packages/lifeforge-ui/TAILWIND_MIGRATION.md`. -2. Update the progress summary table — Migrated count, Total, and % Done for the affected category row and the **Total** row. - -## Output Format - -After completing a file migration, report: -1. Which file(s) were edited. -2. Which `.css.ts` file(s) were created or updated. -3. A brief summary of any non-obvious mapping decisions (e.g. spacing values that needed `style={{}}`). -4. Confirmation that `get_errors` passed with zero errors. - diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 2d94a35d3..90b5d3a4a 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -28,7 +28,7 @@ This monorepo uses Bun workspaces with a type-safe API pattern shared between se ### Server conventions (Express + PocketBase) -- Define endpoints with `forge` in app routers. Always specify Zod schemas via `.input({ body, query })`—handlers receive fully typed `body`, `query`, `pb`, `io`, and `media` (if used). +- Define endpoints with `forge` in app routers. Always specify Zod schemas via `.input({ body, query })`-handlers receive fully typed `body`, `query`, `pb`, `io`, and `media` (if used). - Use `.existenceCheck('body'|'query', { field: 'collection' | '[collection]' })` to assert PocketBase IDs exist before running logic. Brackets mark optional fields; arrays are supported. - For uploads, declare `.media({ field: { optional?: boolean } })`. Upload middlewares are auto-attached; `.callback` receives `media` with files. - Set `.isDownloadable()` for file responses (adds headers) and `.noDefaultResponse()` when manually writing responses; otherwise responses are wrapped by `successWithBaseResponse` with `statusCode()`. @@ -52,9 +52,9 @@ This monorepo uses Bun workspaces with a type-safe API pattern shared between se ### Shared package patterns - `shared/src/api/core/forgeAPIClient.ts` is the single source for creating typed clients from the server’s route type. Don’t hand-roll fetchers. -- Providers and hooks (e.g., API endpoint/online status, personalization, sidebar, toast) live in `shared/src/providers/*`—reuse them in `client` and `lifeforge-ui`. +- Providers and hooks (e.g., API endpoint/online status, personalization, sidebar, toast) live in `shared/src/providers/*`-reuse them in `client` and `lifeforge-ui`. -### Adding features — concrete examples +### Adding features - concrete examples - New server endpoint: create under `server/src/apps//routes/*.ts` using `forge`. Register it in that feature’s `index.ts` via `forgeRouter({ ... })`; it will be mounted automatically in the main `routes.ts`. - New client call: use `forgeAPI.....` with `.input()` and `.query()`/`.mutate()`; don’t hardcode URLs. @@ -62,6 +62,6 @@ This monorepo uses Bun workspaces with a type-safe API pattern shared between se ### External dependencies and integration points -- PocketBase (primary DB/storage), Socket.IO (server push), Zod (validation), React Query (data fetching), Tailwind v4, Day.js, lodash. The server also includes media tooling (Sharp/FFmpeg/PDF utilities) and various 3rd-party integrations—follow existing patterns in `server/src/core/lib/*`. +- PocketBase (primary DB/storage), Socket.IO (server push), Zod (validation), React Query (data fetching), Tailwind v4, Day.js, lodash. The server also includes media tooling (Sharp/FFmpeg/PDF utilities) and various 3rd-party integrations-follow existing patterns in `server/src/core/lib/*`. Questions or gaps? If an endpoint or config is unclear, point to the exact file and propose the smallest diff aligned with the patterns above, and ask for environment values when required. diff --git a/.github/instructions/de-tailwind.instructions.md b/.github/instructions/de-tailwind.instructions.md deleted file mode 100644 index 48374b21e..000000000 --- a/.github/instructions/de-tailwind.instructions.md +++ /dev/null @@ -1,428 +0,0 @@ ---- -applyTo: "packages/lifeforge-ui/src/**" ---- - -# De-Tailwind Instructions for lifeforge-ui - -## Overview - -Replace all Tailwind utility classes in components and stories with vanilla-extract -CSS-in-JS and the `lifeforge-ui` primitive components. The goal is zero Tailwind -in component/story source files while **preserving every pixel of styling logic**. - ---- - -## Step 0 — Read Before You Write - -Before touching any file, read: - -1. The **full component source** — understand every conditional class, every - dark-mode variant, every hover/focus state. -2. The **primitive component prop types** (see §1 below) — know exactly which - props are available so you don't reach for `style={}` when a prop exists. -3. The **space token table** (see §2 below) — map Tailwind spacing to tokens - before writing a single line. - ---- - -## §1 — Primitive Components - -Import from `@components/primitives`. - -### `Box` - -General-purpose block element. Accepts all [Layout Props] + [Margin Props]. - -```tsx - -``` - -### `Flex` - -Flexbox container. - -```tsx - -``` - -### `Grid` - -CSS Grid container. - -```tsx - -``` - -### `Text` - -Inline text/span. Renders as `` by default. - -```tsx - -``` - -### Responsive props - -All `SpaceToken` and most other props accept a responsive object: - -```tsx - - -``` - -Breakpoints: `base` | `sm` (640px) | `md` (768px) | `lg` (1024px) | `xl` (1280px) | `2xl` (1536px) - ---- - -## §2 — Space Token Reference - -`--spacing` is Tailwind's default `0.25rem` per unit. - -| SpaceToken | Value | Tailwind equivalent | -|------------|------------------------|-----------------------| -| `none` | `0` | `0` | -| `xs` | `calc(var(--spacing) * 1)` = 0.25rem | `1` | -| `sm` | `calc(var(--spacing) * 2)` = 0.5rem | `2` | -| `md` | `calc(var(--spacing) * 4)` = 1rem | `4` | -| `lg` | `calc(var(--spacing) * 6)` = 1.5rem | `6` | -| `xl` | `calc(var(--spacing) * 8)` = 2rem | `8` | -| `2xl` | `calc(var(--spacing) * 12)` = 3rem | `12` | -| `3xl` | `calc(var(--spacing) * 16)` = 4rem | `16` | - -Spacing values **not** in the token table (e.g. `gap-3` = 0.75rem, arbitrary -`mt-[30%]`) must use an inline `style` prop: - -```tsx - -``` - ---- - -## §3 — Common Tailwind → Primitive Mapping - -| Tailwind class | Primitive equivalent | -|------------------------------------|----------------------------------------------------------| -| `flex` | `` | -| `flex flex-col` | `` | -| `flex items-center justify-center` | `` | -| `flex items-center justify-between`| `` | -| `flex-center` (utility) | `` | -| `grid grid-cols-3` | `` | -| `gap-6` | `gap="lg"` | -| `p-16` | `p="3xl"` | -| `px-16` | `px="3xl"` | -| `w-full` | `width="100%"` | -| `h-full` | `height="100%"` | -| `min-w-0` | `minWidth="0"` | -| `min-w-64` | `minWidth="16rem"` | -| `size-full` | `width="100%" height="100%"` on a `` or `` | -| `col-span-2` | `gridColumn="span 2 / span 2"` on a wrapping `` | -| `row-span-2` | `gridRow="span 2 / span 2"` on a wrapping `` | -| `shrink-0` | `flexShrink="0"` | -| `text-bg-500` | `` | -| `text-lg` | `` | -| `font-semibold` | `` | -| `truncate` | `` — **shorthand must come first** | -| `text-lg sm:text-xl` | `` | -| `overflow-hidden` | `overflow="hidden"` | -| `position-relative` | `position="relative"` | -| `mb-1` | `mb="xs"` | -| `p-2 sm:p-4` | `p={{ base: 'sm', sm: 'md' }}` | - ---- - -## §4 — De-Tailwinding Stories (`.stories.tsx`) - -**Rule: Use primitives only. No `.css.ts` needed.** - -### Checklist - -- [ ] Replace every `
` with `` + corresponding props -- [ ] Replace every `
` with `` + corresponding props -- [ ] Replace every `
` wrapper (no layout) with `` -- [ ] Replace `

` with `` -- [ ] Replace `` with `` -- [ ] Move `col-span-*` / `row-span-*` from the child component `className` to a - wrapping `` around it -- [ ] Spacing not in token table → `style={{ ... }}` -- [ ] Remove the `tailwindcss/colors` import if `COLORS` is only used for story - data (keep it if it feeds `iconColor` props etc.) -- [ ] Update imports: add `Box`, `Flex`, `Grid`, `Text` from `@components/primitives`, - remove any now-unused imports - -### Prop ordering lint rules - -JSX props must be **alphabetical**, except: -- `ref` — always **first** -- Boolean shorthand props (e.g. `truncate`) — always **before** other props - ---- - -## §5 — De-Tailwinding Components (`.tsx` + `.css.ts`) - -**Rule: Use primitives for layout structure; create `ComponentName.css.ts` for -all theming, color, shadow, hover, dark-mode, and state-variant styles.** - -### Workflow - -1. **Identify styling categories** in the component: - - *Layout* (display, flex/grid, gap, padding, margin, width, height, - overflow, position) → **primitive props** - - *Theming* (background color, border color, shadow, border-radius, opacity, - dark mode, `.bordered` / `.has-bg-image` context selectors) → **`.css.ts`** - - *Interactive* (hover, focus, active, transition) → **`.css.ts`** - - *Responsive font sizes / padding* that are theming-flavoured → **`.css.ts` - `@media` blocks** or **responsive primitive props** (prefer primitive props - when the value maps to a token) - -2. **Create `ComponentName.css.ts`** next to the component file. - -3. **Export one `style()` per logical role** — name exports by purpose, not by - Tailwind class names. - -4. **Import and use** with `import * as styles from './ComponentName.css'` and - `className={clsx(styles.foo, condition && styles.bar)}`. - -### `.css.ts` template - -```ts -import { style } from '@vanilla-extract/css' - -import { bg } from '@/styles/vanilla-extract' -import { withOpacity } from '@/styles/vanilla-extract/utils' - -import { vars } from '../../system' - -export const someRole = style({ - // Use bg[n] tokens — NEVER raw hex strings or var(--color-bg-*) directly - backgroundColor: bg[50], - selectors: { - '.dark &': { backgroundColor: bg[900] }, - '&:hover': { backgroundColor: bg[100] } - } -}) -``` - -### Token helpers - -| Need | Code | -|-----------------------------|-------------------------------------------| -| Background color | `bg[50]` … `bg[950]` | -| Color with opacity | `withOpacity(bg[500], 0.1)` | -| Border radius | `vars.radii.sm/md/lg/xl/2xl/3xl/full` | -| Space value | `vars.space.xs/sm/md/lg/xl/2xl/3xl` | -| Font size | `vars.fontSize.sm/base/lg/xl/.../9xl` | -| Font weight | `vars.fontWeight.normal/medium/semibold/bold` | -| Box shadow (`shadow-custom`)| `boxShadow: 'var(--custom-shadow)'` | - -### Common Tailwind utility → `.css.ts` mapping - -| Tailwind utility | `.css.ts` equivalent | -|-----------------------------|--------------------------------------------------------------| -| `component-bg` | `backgroundColor: bg[50]` + `.dark &` → `bg[900]` | -| `component-bg-lighter` | `backgroundColor: bg[100]` + `.dark &` → `withOpacity(bg[800], 0.5)` | -| `shadow-custom` | `boxShadow: 'var(--custom-shadow)'` | -| `border-bg-500/20` | `borderColor: withOpacity(bg[500], 0.2)` | -| `bg-bg-500/10` | `backgroundColor: withOpacity(bg[500], 0.1)` | -| `text-bg-500 dark:text-bg-50` | `color: bg[500]` + `.dark &` → `color: bg[50]` | -| `in-[.bordered]:border-2` | `selectors: { '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } }` | -| `hover:bg-bg-100` | `selectors: { '&:hover': { backgroundColor: bg[100] } }` | -| `transition-all` | `transition: 'all 0.2s'` | -| `rounded-lg` | `borderRadius: vars.radii.lg` | -| `text-2xl sm:text-3xl` | `fontSize: vars.fontSize['2xl'], '@media': { '(min-width: 640px)': { fontSize: vars.fontSize['3xl'] } }` | - -### What stays in `.css.ts` vs moves to primitive props - -| Property | Where | -|----------------------------------|--------------------------| -| `display`, `flexDirection`, `gap`, `padding`, `margin`, `width`, `height`, `overflow`, `position` | **Primitive prop** | -| `backgroundColor` (theme-aware) | **`.css.ts`** | -| `borderColor` (theme-aware) | **`.css.ts`** | -| `borderRadius` | **`.css.ts`** (or `rounded` prop on `Box`) | -| `boxShadow` | **`.css.ts`** | -| `color` (theme-aware or interactive) | **`.css.ts`** | -| `fontWeight`, `fontSize` | **``** | -| `transition`, `hover`, `focus` | **`.css.ts`** | -| Dark-mode selectors | **`.css.ts`** | -| Context selectors (`.bordered &`, `.dark &`) | **`.css.ts`** | - ---- - -## §6 — Preservation Checklist - -Before calling done, verify every item from the original: - -- [ ] All conditional class logic is reproduced (variant props, boolean flags) -- [ ] All dark-mode styles are present (`.dark &` selectors in `.css.ts`) -- [ ] All responsive styles are present (`@media` blocks or responsive props) -- [ ] All hover/focus/active states are present -- [ ] All context-selector styles are present (`.bordered &`, `.has-bg-image &`) -- [ ] `iconColor` / dynamic inline styles that can't be tokenised are still - passed as `style={{ backgroundColor: ... }}` on the relevant primitive -- [ ] No Tailwind utility classes remain in the file (search for `className="` - containing any bare Tailwind class names) -- [ ] `get_errors` reports zero TypeScript errors after all edits - ---- - -## §7 — Examples - -### Story: grid wrapper with spanning children - -```tsx -// Before -

- -
- -// After - - - - - -``` - -### Component: themed wrapper div - -```tsx -// Before -
- -// Widget.css.ts -export const wrapper = style({ - boxShadow: 'var(--custom-shadow)', - backgroundColor: bg[50], - borderColor: withOpacity(bg[500], 0.2), - borderRadius: vars.radii.lg, - selectors: { - '.dark &': { backgroundColor: bg[900] }, - '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } - } -}) - -// After (Widget.tsx) - -``` - -### Component: responsive icon sizing - -```tsx -// Before -
- -// Widget.css.ts -export const largeIconWrapper = style({ - boxShadow: 'var(--custom-shadow)', - borderRadius: vars.radii.lg -}) -export const largeIconWrapperNoColor = style({ - backgroundColor: bg[100], - selectors: { '.dark &': { backgroundColor: withOpacity(bg[800], 0.5) } } -}) - -// After (Widget.tsx) - -``` - -### Text with dark-mode colour - -```tsx -// Before -

- -// Widget.css.ts -export const titleTextDefault = style({ - color: bg[500], - selectors: { '.dark &': { color: bg[50] } } -}) - -// After (Widget.tsx) - -``` diff --git a/.prettierrc b/.prettierrc index 6a466aa8a..a190e6a21 100644 --- a/.prettierrc +++ b/.prettierrc @@ -8,16 +8,9 @@ "@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss" ], - "importOrder": [ - "^shared/(.*)$", - "@core/(.*)$", - "@components/(.*)$", - "@functions/(.*)$", - "@/(.*)$", - "^[./]" - ], + "importOrder": ["^@lifeforge/(.*)$", "^@/(.*)$", "^[./]"], "importOrderSeparation": true, "importOrderSortSpecifiers": true, "tabWidth": 2, "bracketSameLine": false -} \ No newline at end of file +} diff --git a/.vscode/settings.json b/.vscode/settings.json index e340e13de..16ef10dd3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "cSpell.words": [ "Bg", + "centered", "color", "datepicker", "ITMDB", diff --git a/README.md b/README.md index 8b354d37b..32a773963 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,6 @@ A self-hosted solution to streamline and organize all aspects of your life.

Buy Me A Coffee - ## 🤔 The Problem People nowadays having tons of different apps to increase their productivity, but [using too much apps distracts your focus](https://theunfilteredreport.com/why-productivity-apps-are-making-people-less-productive/). @@ -128,9 +127,6 @@ explore and discover within the project.

- - - ## ⌨️ Setup **LifeForge now supports Docker for easy deployment! 🐳 You can get up and running with just a few commands. For those who prefer manual installation, that option is still available.** @@ -141,7 +137,6 @@ Visit the [Documentation](https://docs.lifeforge.dev) to see how to install and We welcome contributions from the community! If you're interested in contributing to LifeForge, please check out our [Contributing Guidelines](https://docs.lifeforge.dev/developer-guide/contributing). - ### Contributing to Core As this project is still in its early stages, we highly encourage developers to make a discussion in the [Discussions](https://github.com/lifeforge-app/lifeforge/discussions) section before starting any significant work. This helps ensure that your contributions align with the project's goals and reduces the chances of duplicated efforts. diff --git a/bun.lock b/bun.lock index 282d56ff6..9c23aefae 100644 --- a/bun.lock +++ b/bun.lock @@ -39,7 +39,7 @@ "eslint": "^9.26.0", "eslint-config-standard-with-typescript": "^40.0.0", "eslint-import-resolver-alias": "^1.1.2", - "eslint-plugin-import": "^2.31.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-perfectionist": "^5.9.0", "eslint-plugin-react": "^7.37.5", @@ -59,9 +59,9 @@ "name": "@lifeforge/lifeforge--achievements", "version": "0.0.11", "peerDependencies": { - "@lifeforge/server-utils": "0.0.1", - "lifeforge-ui": "0.25.29-1", - "shared": "0.0.1", + "@lifeforge/server-utils": "workspace:*", + "@lifeforge/shared": "workspace:*", + "@lifeforge/ui": "workspace:*", }, }, "client": { @@ -72,6 +72,8 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@iconify/react": "^6.0.2", + "@lifeforge/shared": "workspace:*", + "@lifeforge/ui": "workspace:*", "@tailwindcss/postcss": "^4.1.5", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.5", @@ -89,7 +91,6 @@ "eslint-plugin-react-compiler": "^19.1.0-rc.2", "i18next": "^25.6.0", "i18next-http-backend": "^2.7.3", - "lifeforge-ui": "workspace:*", "lodash": "^4.17.21", "lodash-es": "^4.17.22", "opentype.js": "^1.3.4", @@ -107,7 +108,6 @@ "react-toastify": "^11.0.5", "react-virtualized": "^9.22.6", "recharts": "^2.15.0", - "shared": "workspace:*", "socket.io-client": "^4.8.1", "tailwindcss": "^4.1.14", "tailwindcss-animate": "^1.0.7", @@ -134,6 +134,8 @@ "version": "0.0.0", "dependencies": { "@iconify/react": "^6.0.0", + "@lifeforge/shared": "workspace:*", + "@lifeforge/ui": "workspace:*", "@mdx-js/mdx": "^3.1.0", "@mdx-js/react": "^3.1.0", "@mdx-js/rollup": "^3.1.0", @@ -143,7 +145,6 @@ "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.18", "i18next": "^25.6.0", - "lifeforge-ui": "workspace:*", "lodash": "^4.17.21", "mermaid": "^11.12.2", "postcss": "^8.5.6", @@ -155,7 +156,6 @@ "react-router": "^7.9.4", "react-syntax-highlighter": "^15.6.1", "remark-gfm": "^4.0.1", - "shared": "workspace:*", "tailwindcss": "^4.1.11", "vite-plugin-mdx": "^3.6.1", }, @@ -199,6 +199,7 @@ "version": "0.0.1", "dependencies": { "@lifeforge/log": "workspace:*", + "@lifeforge/shared": "workspace:*", "chalk": "^5.6.2", "crypto-js": "^4.2.0", "express": "^4.21.2", @@ -209,7 +210,6 @@ "multer": "^1.4.5-lts.1", "openai": "^4.81.0", "pdf2pic": "^3.1.5", - "shared": "workspace:*", "socket.io": "^4.8.3", "tesseract.js": "^5.1.1", "uuid": "^11.1.0", @@ -226,8 +226,8 @@ "pocketbase": "^0.26.2", }, }, - "packages/lifeforge-ui": { - "name": "lifeforge-ui", + "packages/ui": { + "name": "@lifeforge/ui", "version": "0.25.29-1", "dependencies": { "@headlessui/react": "^2.2.9", @@ -236,6 +236,7 @@ "@iconify/tools": "^4.1.4", "@iconify/types": "^2.0.0", "@iconify/utils": "^3.0.2", + "@lifeforge/shared": "workspace:*", "@million/lint": "^1.0.14", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dropdown-menu": "^2.1.16", @@ -245,6 +246,7 @@ "@uiw/react-color": "^2.9.0", "@vanilla-extract/css": "^1.20.1", "@vanilla-extract/recipes": "^0.5.7", + "@vanilla-extract/sprinkles": "^1.6.5", "@vanilla-extract/vite-plugin": "^5.1.4", "@vitejs/plugin-react": "^4.7.0", "@yudiel/react-qr-scanner": "^2.3.1", @@ -275,7 +277,6 @@ "react-tooltip": "^5.30.0", "react-virtualized": "^9.22.6", "rrule": "^2.8.1", - "shared": "workspace:*", "tinycolor2": "^1.6.0", "uuid": "^11.1.0", "zod": "4.3.5", @@ -318,6 +319,7 @@ "dependencies": { "@lifeforge/log": "workspace:*", "@lifeforge/server-utils": "workspace:*", + "@lifeforge/shared": "workspace:*", "bcryptjs": "^3.0.2", "chalk": "^5.4.1", "commander": "^14.0.2", @@ -337,7 +339,6 @@ "pdf2pic": "^3.2.0", "pocketbase": "^0.26.2", "request": "^2.88.2", - "shared": "workspace:*", "socket.io": "^4.8.1", "speakeasy": "^2.0.0", "tesseract.js": "^6.0.1", @@ -366,7 +367,7 @@ }, }, "shared": { - "name": "shared", + "name": "@lifeforge/shared", "version": "0.0.1", "dependencies": { "@tanstack/react-query": "^5.90.11", @@ -400,6 +401,7 @@ "version": "0.0.0", "dependencies": { "@lifeforge/log": "workspace:*", + "@lifeforge/shared": "workspace:*", "chalk": "^5.6.2", "commander": "^14.0.2", "concurrently": "^9.2.1", @@ -413,7 +415,6 @@ "prettier": "^3.7.4", "prompts": "^2.4.2", "semver": "^7.7.3", - "shared": "workspace:*", "tar": "^7.5.2", "zod": "4.3.5", }, @@ -427,9 +428,7 @@ }, }, "packages": { - "@acemir/cssom": ["@acemir/cssom@0.9.31", "", {}, "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA=="], - - "@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="], + "@adobe/css-tools": ["@adobe/css-tools@4.5.0", "", {}, "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q=="], "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], @@ -441,83 +440,69 @@ "@antfu/utils": ["@antfu/utils@8.1.1", "", {}, "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ=="], - "@asamuzakjp/css-color": ["@asamuzakjp/css-color@4.1.1", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "lru-cache": "^11.2.4" } }, "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ=="], - - "@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@6.7.6", "", { "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.1.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.2.4" } }, "sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg=="], - - "@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="], - "@axiomhq/js": ["@axiomhq/js@1.0.0-rc.3", "", { "dependencies": { "fetch-retry": "^6.0.0", "uuid": "^8.3.2" } }, "sha512-Zm10TczcMLounWqC42nMkXQ7XKLqjzLrd5ia022oBKDUZqAFVg2y9d1quQVNV4FlXyg9MKDdfMjpKQRmzEGaog=="], - "@babel/code-frame": ["@babel/code-frame@7.28.6", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q=="], + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/compat-data": ["@babel/compat-data@7.28.6", "", {}, "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg=="], + "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], - "@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@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-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/generator": ["@babel/generator@7.28.6", "", { "dependencies": { "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw=="], + "@babel/generator": ["@babel/generator@7.29.7", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="], - "@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-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.29.7", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], - "@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-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.28.6", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg=="], + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.29.7", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ=="], - "@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-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], - "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], - "@babel/parser": ["@babel/parser@7.28.6", "", { "dependencies": { "@babel/types": "^7.28.6" }, "bin": "./bin/babel-parser.js" }, "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ=="], + "@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="], "@babel/plugin-proposal-private-methods": ["@babel/plugin-proposal-private-methods@7.18.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA=="], - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA=="], - "@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-self": ["@babel/plugin-transform-react-jsx-self@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw=="], - "@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/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q=="], - "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="], - "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/traverse": ["@babel/traverse@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/types": "^7.28.6", "debug": "^4.3.1" } }, "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg=="], + "@babel/traverse": ["@babel/traverse@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="], - "@babel/types": ["@babel/types@7.28.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg=="], + "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], - "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.1", "", {}, "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw=="], + "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], - "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@11.0.3", "", { "dependencies": { "@chevrotain/gast": "11.0.3", "@chevrotain/types": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ=="], - - "@chevrotain/gast": ["@chevrotain/gast@11.0.3", "", { "dependencies": { "@chevrotain/types": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q=="], - - "@chevrotain/regexp-to-ast": ["@chevrotain/regexp-to-ast@11.0.3", "", {}, "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA=="], - - "@chevrotain/types": ["@chevrotain/types@11.0.3", "", {}, "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ=="], - - "@chevrotain/utils": ["@chevrotain/utils@11.0.3", "", {}, "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ=="], + "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], "@chromatic-com/storybook": ["@chromatic-com/storybook@4.1.3", "", { "dependencies": { "@neoconfetti/react": "^1.0.0", "chromatic": "^13.3.3", "filesize": "^10.0.12", "jsonfile": "^6.1.0", "strip-ansi": "^7.1.0" }, "peerDependencies": { "storybook": "^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0" } }, "sha512-hc0HO9GAV9pxqDE6fTVOV5KeLpTiCfV8Jrpk5ogKLiIgeq2C+NPjpt74YnrZTjiK8E19fYcMP+2WY9ZtX7zHmw=="], @@ -527,18 +512,6 @@ "@colors/colors": ["@colors/colors@1.6.0", "", {}, "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA=="], - "@csstools/color-helpers": ["@csstools/color-helpers@5.1.0", "", {}, "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA=="], - - "@csstools/css-calc": ["@csstools/css-calc@2.1.4", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], - - "@csstools/css-color-parser": ["@csstools/css-color-parser@3.1.0", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "@csstools/css-calc": "^2.1.4" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA=="], - - "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.5", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ=="], - - "@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.0.26", "", {}, "sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA=="], - - "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], - "@dabh/diagnostics": ["@dabh/diagnostics@2.0.8", "", { "dependencies": { "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } }, "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q=="], "@dnd-kit/accessibility": ["@dnd-kit/accessibility@3.1.1", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw=="], @@ -549,97 +522,103 @@ "@dnd-kit/utilities": ["@dnd-kit/utilities@3.2.2", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + "@emotion/hash": ["@emotion/hash@0.9.2", "", {}, "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.27.2", "", { "os": "android", "cpu": "arm" }, "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.2", "", { "os": "android", "cpu": "arm64" }, "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.27.2", "", { "os": "android", "cpu": "x64" }, "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.2", "", { "os": "linux", "cpu": "arm" }, "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.2", "", { "os": "linux", "cpu": "none" }, "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.2", "", { "os": "linux", "cpu": "none" }, "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.2", "", { "os": "linux", "cpu": "none" }, "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.2", "", { "os": "linux", "cpu": "x64" }, "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.2", "", { "os": "none", "cpu": "arm64" }, "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.2", "", { "os": "none", "cpu": "x64" }, "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.2", "", { "os": "none", "cpu": "arm64" }, "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.2", "", { "os": "win32", "cpu": "x64" }, "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], - "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], + "@eslint/config-array": ["@eslint/config-array@0.21.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.5" } }, "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw=="], "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], - "@eslint/eslintrc": ["@eslint/eslintrc@3.3.3", "", { "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.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ=="], + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.5", "", { "dependencies": { "ajv": "^6.14.0", "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.1", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" } }, "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg=="], - "@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="], + "@eslint/js": ["@eslint/js@9.39.4", "", {}, "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw=="], "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], - "@exodus/bytes": ["@exodus/bytes@1.10.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-tf8YdcbirXdPnJ+Nd4UN1EXnz+IP2DI45YVEr3vvzcVTOyrApkmIB4zvOQVd3XPr7RXnfBtAx+PXImXOIU0Ajg=="], + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], - "@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.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], "@floating-ui/react": ["@floating-ui/react@0.26.28", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw=="], - "@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/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], - "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], - "@headlessui/react": ["@headlessui/react@2.2.9", "", { "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.20.2", "@react-aria/interactions": "^3.25.0", "@tanstack/react-virtual": "^3.13.9", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ=="], + "@headlessui/react": ["@headlessui/react@2.2.10", "", { "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.20.2", "@react-aria/interactions": "^3.25.0", "@tanstack/react-virtual": "^3.13.9", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA=="], - "@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], + "@hono/node-server": ["@hono/node-server@1.19.14", "", { "peerDependencies": { "hono": "^4" } }, "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], + + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], @@ -653,17 +632,23 @@ "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], - "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], + "@iconify/utils": ["@iconify/utils@3.1.3", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw=="], + + "@internationalized/date": ["@internationalized/date@3.12.1", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ=="], + + "@internationalized/number": ["@internationalized/number@3.6.6", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ=="], + + "@internationalized/string": ["@internationalized/string@3.2.8", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-NdbMQUSfXLYIQol5VyMtinm9pZDciiMfN7RtmSuSB78io1hqwJ0naYfxyW6vgxWBkzWymQa/3uLDlbfmshtCaA=="], "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], - "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.1", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ=="], "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], - "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + "@istanbuljs/schema": ["@istanbuljs/schema@0.1.6", "", {}, "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw=="], "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], @@ -693,21 +678,25 @@ "@lifeforge/server-utils": ["@lifeforge/server-utils@workspace:packages/lifeforge-server-utils"], + "@lifeforge/shared": ["@lifeforge/shared@workspace:shared"], + + "@lifeforge/ui": ["@lifeforge/ui@workspace:packages/ui"], + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], "@mdx-js/rollup": ["@mdx-js/rollup@3.1.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", "source-map": "^0.7.0", "vfile": "^6.0.0" }, "peerDependencies": { "rollup": ">=2" } }, "sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw=="], - "@mermaid-js/parser": ["@mermaid-js/parser@0.6.3", "", { "dependencies": { "langium": "3.3.1" } }, "sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA=="], + "@mermaid-js/parser": ["@mermaid-js/parser@1.1.1", "", { "dependencies": { "@chevrotain/types": "~11.1.1" } }, "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw=="], - "@microsoft/api-extractor": ["@microsoft/api-extractor@7.55.2", "", { "dependencies": { "@microsoft/api-extractor-model": "7.32.2", "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.19.1", "@rushstack/rig-package": "0.6.0", "@rushstack/terminal": "0.19.5", "@rushstack/ts-command-line": "5.1.5", "diff": "~8.0.2", "lodash": "~4.17.15", "minimatch": "10.0.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.8.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-1jlWO4qmgqYoVUcyh+oXYRztZde/pAi7cSVzBz/rc+S7CoVzDasy8QE13dx6sLG4VRo8SfkkLbFORR6tBw4uGQ=="], + "@microsoft/api-extractor": ["@microsoft/api-extractor@7.58.7", "", { "dependencies": { "@microsoft/api-extractor-model": "7.33.8", "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.1", "@rushstack/node-core-library": "5.23.1", "@rushstack/rig-package": "0.7.3", "@rushstack/terminal": "0.24.0", "@rushstack/ts-command-line": "5.3.9", "diff": "~8.0.2", "minimatch": "10.2.3", "resolve": "~1.22.1", "semver": "~7.7.4", "source-map": "~0.6.1", "typescript": "5.9.3" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-yK6OycD46gIzLRpj6ueVUWPk1ACSpkN1LBo05gY1qPTylbWyUCanXfH7+VgkI5LJrJoRSQR5F04XuCffCXLOBw=="], - "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.32.2", "", { "dependencies": { "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.19.1" } }, "sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww=="], + "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.33.8", "", { "dependencies": { "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.1", "@rushstack/node-core-library": "5.23.1" } }, "sha512-aIcoQggPyer3B6Ze3usz0YWC/oBwUHfRH5ETUsr+oT2BRA6SfTJl7IKPcPZkX4UR+PohowzW4uMxsvjrn8vm+w=="], "@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], - "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.18.0", "", { "dependencies": { "@microsoft/tsdoc": "0.16.0", "ajv": "~8.12.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw=="], + "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.18.1", "", { "dependencies": { "@microsoft/tsdoc": "0.16.0", "ajv": "~8.18.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg=="], "@million/install": ["@million/install@1.0.14", "", { "dependencies": { "@antfu/ni": "^0.21.12", "@axiomhq/js": "1.0.0-rc.3", "@babel/parser": "^7.25.3", "@babel/types": "7.26.0", "@clack/prompts": "^0.7.0", "ast-types": "^0.14.2", "cli-high": "^0.4.2", "diff": "^5.1.0", "effect": "^3.8.4", "nanoid": "^5.0.7", "recast": "^0.23.9", "xycolors": "^0.1.2" }, "bin": { "install": "bin/index.js" } }, "sha512-xZvj4AEHc5hyn8RCiLl9dYNqggj2fa0lgNvUkCiJyhRJPNE2hZrUa/Ka0Weu82VpBaO//zujG0YErk7osjNXPA=="], @@ -749,6 +738,8 @@ "@napi-rs/nice-win32-x64-msvc": ["@napi-rs/nice-win32-x64-msvc@1.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + "@neoconfetti/react": ["@neoconfetti/react@1.0.0", "", {}, "sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A=="], "@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=="], @@ -759,6 +750,8 @@ "@originjs/vite-plugin-federation": ["@originjs/vite-plugin-federation@1.4.1", "", { "dependencies": { "estree-walker": "^3.0.2", "magic-string": "^0.27.0" } }, "sha512-Uo08jW5pj1t58OUKuZNkmzcfTN2pqeVuAWCCiKf/75/oll4Efq4cHOqSE1FXMlvwZNGDziNdDyBbQ5IANem3CQ=="], + "@oxc-project/types": ["@oxc-project/types@0.132.0", "", {}, "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ=="], + "@pinojs/redact": ["@pinojs/redact@0.4.0", "", {}, "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], @@ -833,93 +826,115 @@ "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], - "@react-aria/focus": ["@react-aria/focus@3.21.3", "", { "dependencies": { "@react-aria/interactions": "^3.26.0", "@react-aria/utils": "^3.32.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw=="], + "@react-aria/focus": ["@react-aria/focus@3.22.0", "", { "dependencies": { "@swc/helpers": "^0.5.0", "react-aria": "3.48.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg=="], - "@react-aria/interactions": ["@react-aria/interactions@3.26.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-aria/utils": "^3.32.0", "@react-stately/flags": "^3.1.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-AAEcHiltjfbmP1i9iaVw34Mb7kbkiHpYdqieWufldh4aplWgsF11YQZOfaCJW4QoR2ML4Zzoa9nfFwLXA52R7Q=="], - - "@react-aria/ssr": ["@react-aria/ssr@3.9.10", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ=="], - - "@react-aria/utils": ["@react-aria/utils@3.32.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-stately/flags": "^3.1.2", "@react-stately/utils": "^3.11.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/7Rud06+HVBIlTwmwmJa2W8xVtgxgzm0+kLbuFooZRzKDON6hhozS1dOMR/YLMxyJOaYOTpImcP4vRR9gL1hEg=="], + "@react-aria/interactions": ["@react-aria/interactions@3.28.0", "", { "dependencies": { "@react-types/shared": "^3.34.0", "@swc/helpers": "^0.5.0", "react-aria": "3.48.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng=="], "@react-dnd/asap": ["@react-dnd/asap@5.0.2", "", {}, "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A=="], "@react-dnd/invariant": ["@react-dnd/invariant@4.0.2", "", {}, "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw=="], - "@react-stately/flags": ["@react-stately/flags@3.1.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg=="], + "@react-types/shared": ["@react-types/shared@3.34.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ=="], - "@react-stately/utils": ["@react-stately/utils@3.11.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.2", "", { "os": "android", "cpu": "arm64" }, "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ=="], - "@react-types/shared": ["@react-types/shared@3.32.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ=="], "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.55.3", "", { "os": "android", "cpu": "arm" }, "sha512-qyX8+93kK/7R5BEXPC2PjUt0+fS/VO2BVHjEHyIEWiYn88rcRBHmdLgoJjktBltgAf+NY7RfCGB1SoyKS/p9kg=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.4", "", { "os": "android", "cpu": "arm" }, "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.55.3", "", { "os": "android", "cpu": "arm64" }, "sha512-6sHrL42bjt5dHQzJ12Q4vMKfN+kUnZ0atHHnv4V0Wd9JMTk7FDzSY35+7qbz3ypQYMBPANbpGK7JpnWNnhGt8g=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.4", "", { "os": "android", "cpu": "arm64" }, "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.55.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1ht2SpGIjEl2igJ9AbNpPIKzb1B5goXOcmtD0RFxnwNuMxqkR6AUaaErZz+4o+FKmzxcSNBOLrzsICZVNYa1Rw=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.55.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-FYZ4iVunXxtT+CZqQoPVwPhH7549e/Gy7PIRRtq4t5f/vt54pX6eG9ebttRH6QSH7r/zxAFA4EZGlQ0h0FvXiA=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.55.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-M/mwDCJ4wLsIgyxv2Lj7Len+UMHd4zAXu4GQ2UaCdksStglWhP61U3uowkaYBQBhVoNpwx5Hputo8eSqM7K82Q=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.55.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-5jZT2c7jBCrMegKYTYTpni8mg8y3uY8gzeq2ndFOANwNuC/xJbVAoGKR9LhMDA0H3nIhvaqUoBEuJoICBudFrA=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.55.3", "", { "os": "linux", "cpu": "arm" }, "sha512-YeGUhkN1oA+iSPzzhEjVPS29YbViOr8s4lSsFaZKLHswgqP911xx25fPOyE9+khmN6W4VeM0aevbDp4kkEoHiA=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.4", "", { "os": "linux", "cpu": "arm" }, "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.55.3", "", { "os": "linux", "cpu": "arm" }, "sha512-eo0iOIOvcAlWB3Z3eh8pVM8hZ0oVkK3AjEM9nSrkSug2l15qHzF3TOwT0747omI6+CJJvl7drwZepT+re6Fy/w=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.4", "", { "os": "linux", "cpu": "arm" }, "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.55.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-DJay3ep76bKUDImmn//W5SvpjRN5LmK/ntWyeJs/dcnwiiHESd3N4uteK9FDLf0S0W8E6Y0sVRXpOCoQclQqNg=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.55.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-BKKWQkY2WgJ5MC/ayvIJTHjy0JUGb5efaHCUiG/39sSUvAYRBaO3+/EK0AZT1RF3pSj86O24GLLik9mAYu0IJg=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.55.3", "", { "os": "linux", "cpu": "none" }, "sha512-Q9nVlWtKAG7ISW80OiZGxTr6rYtyDSkauHUtvkQI6TNOJjFvpj4gcH+KaJihqYInnAzEEUetPQubRwHef4exVg=="], + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.55.3", "", { "os": "linux", "cpu": "none" }, "sha512-2H5LmhzrpC4fFRNwknzmmTvvyJPHwESoJgyReXeFoYYuIDfBhP29TEXOkCJE/KxHi27mj7wDUClNq78ue3QEBQ=="], + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.55.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9S542V0ie9LCTznPYlvaeySwBeIEa7rDBgLHKZ5S9DBgcqdJYburabm8TqiqG6mrdTzfV5uttQRHcbKff9lWtA=="], + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.55.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ukxw+YH3XXpcezLgbJeasgxyTbdpnNAkrIlFGDl7t+pgCxZ89/6n1a+MxlY7CegU+nDgrgdqDelPRNQ/47zs0g=="], + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.55.3", "", { "os": "linux", "cpu": "none" }, "sha512-Iauw9UsTTvlF++FhghFJjqYxyXdggXsOqGpFBylaRopVpcbfyIIsNvkf9oGwfgIcf57z3m8+/oSYTo6HutBFNw=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.55.3", "", { "os": "linux", "cpu": "none" }, "sha512-3OqKAHSEQXKdq9mQ4eajqUgNIK27VZPW3I26EP8miIzuKzCJ3aW3oEn2pzF+4/Hj/Moc0YDsOtBgT5bZ56/vcA=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.55.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-0CM8dSVzVIaqMcXIFej8zZrSFLnGrAE8qlNbbHfTw1EEPnFTg1U1ekI0JdzjPyzSfUsHWtodilQQG/RA55berA=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.55.3", "", { "os": "linux", "cpu": "x64" }, "sha512-+fgJE12FZMIgBaKIAGd45rxf+5ftcycANJRWk8Vz0NnMTM5rADPGuRFTYar+Mqs560xuART7XsX2lSACa1iOmQ=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.4", "", { "os": "linux", "cpu": "x64" }, "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.55.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tMD7NnbAolWPzQlJQJjVFh/fNH3K/KnA7K8gv2dJWCwwnaK6DFCYST1QXYWfu5V0cDwarWC8Sf/cfMHniNq21A=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.55.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-u5KsqxOxjEeIbn7bUK1MPM34jrnPwjeqgyin4/N6e/KzXKfpE9Mi0nCxcQjaM9lLmPcHmn/xx1yOjgTMtu1jWQ=="], + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.55.3", "", { "os": "none", "cpu": "arm64" }, "sha512-vo54aXwjpTtsAnb3ca7Yxs9t2INZg7QdXN/7yaoG7nPGbOBXYXQY41Km+S1Ov26vzOAzLcAjmMdjyEqS1JkVhw=="], + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.4", "", { "os": "none", "cpu": "arm64" }, "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.55.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-HI+PIVZ+m+9AgpnY3pt6rinUdRYrGHvmVdsNQ4odNqQ/eRF78DVpMR7mOq7nW06QxpczibwBmeQzB68wJ+4W4A=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.55.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-vRByotbdMo3Wdi+8oC2nVxtc3RkkFKrGaok+a62AT8lz/YBuQjaVYAS5Zcs3tPzW43Vsf9J0wehJbUY5xRSekA=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.55.3", "", { "os": "win32", "cpu": "x64" }, "sha512-POZHq7UeuzMJljC5NjKi8vKMFN6/5EOqcX1yGntNLp7rUTpBAXQ1hW8kWPFxYLv07QMcNM75xqVLGPWQq6TKFA=="], + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.4", "", { "os": "win32", "cpu": "x64" }, "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.55.3", "", { "os": "win32", "cpu": "x64" }, "sha512-aPFONczE4fUFKNXszdvnd2GqKEYQdV5oEsIbKPujJmWlCI9zEsv1Otig8RKK+X9bed9gFUN6LAeN4ZcNuu4zjg=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.4", "", { "os": "win32", "cpu": "x64" }, "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw=="], "@rrweb/types": ["@rrweb/types@2.0.0-alpha.16", "", { "dependencies": { "rrweb-snapshot": "^2.0.0-alpha.16" } }, "sha512-E6cACNVsm+NUhn7dzocQoKyXI7BHrHRRm5Ab23yrAzEQ2caWocCEYJhqDlc4KRVJBkQfXZfyWm8+2d0uggFuZg=="], "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], - "@rushstack/node-core-library": ["@rushstack/node-core-library@5.19.1", "", { "dependencies": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", "semver": "~7.5.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA=="], + "@rushstack/node-core-library": ["@rushstack/node-core-library@5.23.1", "", { "dependencies": { "ajv": "~8.18.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", "semver": "~7.7.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-wlKmIKIYCKuCASbITvOxLZXepPbwXvrv7S6ig6XNWFchSyhL/E2txmVXspHY49Wu2dzf7nI27a2k/yV5BA3EiA=="], - "@rushstack/problem-matcher": ["@rushstack/problem-matcher@0.1.1", "", { "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA=="], + "@rushstack/problem-matcher": ["@rushstack/problem-matcher@0.2.1", "", { "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog=="], - "@rushstack/rig-package": ["@rushstack/rig-package@0.6.0", "", { "dependencies": { "resolve": "~1.22.1", "strip-json-comments": "~3.1.1" } }, "sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw=="], + "@rushstack/rig-package": ["@rushstack/rig-package@0.7.3", "", { "dependencies": { "jju": "~1.4.0", "resolve": "~1.22.1" } }, "sha512-aAA518n6wxxjCfnTAOjQnm7ngNE0FVHxHAw2pxKlIhxrMn0XQjGcXKF0oKWpjBgJOmsaJpVob/v+zr3zxgPWuA=="], - "@rushstack/terminal": ["@rushstack/terminal@0.19.5", "", { "dependencies": { "@rushstack/node-core-library": "5.19.1", "@rushstack/problem-matcher": "0.1.1", "supports-color": "~8.1.1" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-6k5tpdB88G0K7QrH/3yfKO84HK9ggftfUZ51p7fePyCE7+RLLHkWZbID9OFWbXuna+eeCFE7AkKnRMHMxNbz7Q=="], + "@rushstack/terminal": ["@rushstack/terminal@0.24.0", "", { "dependencies": { "@rushstack/node-core-library": "5.23.1", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-8ZQS4MMaGsv27EXCBiH7WMPkRZrffeDoIevs6z9TM5dzqiY6+Hn4evfK/G+gvgBTjfvfkHIZPQQmalmI2sM4TQ=="], - "@rushstack/ts-command-line": ["@rushstack/ts-command-line@5.1.5", "", { "dependencies": { "@rushstack/terminal": "0.19.5", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-YmrFTFUdHXblYSa+Xc9OO9FsL/XFcckZy0ycQ6q7VSBsVs5P0uD9vcges5Q9vctGlVdu27w+Ct6IuJ458V0cTQ=="], + "@rushstack/ts-command-line": ["@rushstack/ts-command-line@5.3.9", "", { "dependencies": { "@rushstack/terminal": "0.24.0", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-GIHqU+sRGQ3LGWAZu1O+9Yh++qwtyNIIGuNbcWHJjBTm2qRez0cwINUHZ+pQLR8UuzZDcMajrDaNbUYoaL/XtQ=="], - "@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], + "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], "@so-ric/colorspace": ["@so-ric/colorspace@1.1.6", "", { "dependencies": { "color": "^5.0.2", "text-hex": "1.0.x" } }, "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw=="], @@ -937,7 +952,7 @@ "@storybook/global": ["@storybook/global@5.0.0", "", {}, "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ=="], - "@storybook/icons": ["@storybook/icons@2.0.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-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg=="], + "@storybook/icons": ["@storybook/icons@2.0.2", "", { "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-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw=="], "@storybook/react": ["@storybook/react@10.1.0", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/react-dom-shim": "10.1.0", "react-docgen": "^8.0.2" }, "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", "storybook": "^10.1.0", "typescript": ">= 4.9.x" }, "optionalPeers": ["typescript"] }, "sha512-6Uc3SmUhUlAcNjl8PevnLplZC7HtcE2tz6NEPJWYt3KAb7D11bDZB7BD7jGOU9edE+vRXsTHUUPmaxJpWQ+5nQ=="], @@ -945,49 +960,49 @@ "@storybook/react-vite": ["@storybook/react-vite@10.1.0", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.6.1", "@rollup/pluginutils": "^5.0.2", "@storybook/builder-vite": "10.1.0", "@storybook/react": "10.1.0", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", "resolve": "^1.22.8", "tsconfig-paths": "^4.2.0" }, "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", "storybook": "^10.1.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gFLTU92QQ69saFzQGeIRysQ1G2o3DSWWuG07JRj03493H9USKhvzHo88utKZ2BQP/H93UgcEwy6Ms5psIS3AUA=="], - "@swc/helpers": ["@swc/helpers@0.5.18", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ=="], + "@swc/helpers": ["@swc/helpers@0.5.23", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw=="], - "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.18", "", { "os": "android", "cpu": "arm64" }, "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18", "", { "os": "linux", "cpu": "arm" }, "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.18", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.0", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.18", "", { "os": "win32", "cpu": "x64" }, "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.18", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "postcss": "^8.4.41", "tailwindcss": "4.1.18" } }, "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.0", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "postcss": "^8.5.10", "tailwindcss": "4.3.0" } }, "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w=="], "@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="], - "@tailwindcss/vite": ["@tailwindcss/vite@4.1.18", "", { "dependencies": { "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "tailwindcss": "4.1.18" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA=="], + "@tailwindcss/vite": ["@tailwindcss/vite@4.3.0", "", { "dependencies": { "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "tailwindcss": "4.3.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw=="], - "@tanstack/query-core": ["@tanstack/query-core@5.90.19", "", {}, "sha512-GLW5sjPVIvH491VV1ufddnfldyVB+teCnpPIvweEfkpRx7CfUmUGhoh9cdcUKBh/KwVxk22aNEDxeTsvmyB/WA=="], + "@tanstack/query-core": ["@tanstack/query-core@5.100.14", "", {}, "sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew=="], - "@tanstack/react-query": ["@tanstack/react-query@5.90.19", "", { "dependencies": { "@tanstack/query-core": "5.90.19" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-qTZRZ4QyTzQc+M0IzrbKHxSeISUmRB3RPGmao5bT+sI6ayxSRhn0FXEnT5Hg3as8SBFcRosrXXRFB+yAcxVxJQ=="], + "@tanstack/react-query": ["@tanstack/react-query@5.100.14", "", { "dependencies": { "@tanstack/query-core": "5.100.14" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-oOr6aRdSFEwWhzxEkD/9ZcItM3+LjBSkeVmadWKwUssAHTsqd/7bOjWrX4AbvEkoEhgAxzN0Xk6H/aYzXiYBAw=="], - "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.18", "", { "dependencies": { "@tanstack/virtual-core": "3.13.18" }, "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-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A=="], + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.26", "", { "dependencies": { "@tanstack/virtual-core": "3.16.0" }, "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-DosdgjOxCLahkn0o+ilmZYwEjo1glfMGuRT/j3PQ18yr5XqA8N/BCaL9IJ3B5TRl+nnzyK2IOFgAILwzN3a9xQ=="], - "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.18", "", {}, "sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg=="], + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.16.0", "", {}, "sha512-Er2N7q3WOiH6y2JLxsxNX+u2/sLqSsL0bxFgDjuiPiA7vKhZRm+IzcS17vRee3GNXr64UsesA5CAp9yTiIYw9A=="], "@testing-library/dom": ["@testing-library/dom@10.4.1", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "picocolors": "1.1.1", "pretty-format": "^27.0.2" } }, "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg=="], @@ -997,10 +1012,10 @@ "@trivago/prettier-plugin-sort-imports": ["@trivago/prettier-plugin-sort-imports@5.2.2", "", { "dependencies": { "@babel/generator": "^7.26.5", "@babel/parser": "^7.26.7", "@babel/traverse": "^7.26.7", "@babel/types": "^7.26.7", "javascript-natural-sort": "^0.7.1", "lodash": "^4.17.21" }, "peerDependencies": { "@vue/compiler-sfc": "3.x", "prettier": "2.x - 3.x", "prettier-plugin-svelte": "3.x", "svelte": "4.x || 5.x" }, "optionalPeers": ["@vue/compiler-sfc", "prettier-plugin-svelte", "svelte"] }, "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA=="], - "@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="], - "@tsconfig/svelte": ["@tsconfig/svelte@1.0.13", "", {}, "sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], + "@types/argparse": ["@types/argparse@1.0.38", "", {}, "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA=="], "@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="], @@ -1093,7 +1108,7 @@ "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], @@ -1103,7 +1118,7 @@ "@types/emscripten": ["@types/emscripten@1.41.5", "", {}, "sha512-cMQm7pxu6BxtHyqJ7mQZ2kXWV5SLmugybFdHCBbJ5eHzOo6VhBckEgAT3//rP5FwPHNPeEiq4SmQ5ucBwsOo4Q=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -1125,7 +1140,7 @@ "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], - "@types/lodash": ["@types/lodash@4.17.23", "", {}, "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="], + "@types/lodash": ["@types/lodash@4.17.24", "", {}, "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ=="], "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], @@ -1139,11 +1154,11 @@ "@types/multer": ["@types/multer@1.4.13", "", { "dependencies": { "@types/express": "*" } }, "sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw=="], - "@types/node": ["@types/node@24.10.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw=="], + "@types/node": ["@types/node@24.12.4", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA=="], "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], - "@types/opentype.js": ["@types/opentype.js@1.3.8", "", {}, "sha512-H6qeTp03jrknklSn4bpT1/9+1xCAEIU2CnjcWPkicJy8A1SKuthanbvoHYMiv79/2W3Xn1XE4gfSJFzt2U3JSw=="], + "@types/opentype.js": ["@types/opentype.js@1.3.9", "", {}, "sha512-KOGywvDPncA4/tTWV5xKNhjpsoSSAHIx3mHOhL5l3XX+c6Xu2dQnHvGs7mRNQsQRte1EqmQ0cPQQ8Z14lkv+yw=="], "@types/prettier": ["@types/prettier@3.0.0", "", { "dependencies": { "prettier": "*" } }, "sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA=="], @@ -1151,13 +1166,13 @@ "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], - "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], + "@types/qs": ["@types/qs@6.15.1", "", {}, "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw=="], "@types/raf": ["@types/raf@3.4.3", "", {}, "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw=="], "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - "@types/react": ["@types/react@19.2.9", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA=="], + "@types/react": ["@types/react@19.2.15", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q=="], "@types/react-custom-scrollbars": ["@types/react-custom-scrollbars@4.0.13", "", { "dependencies": { "@types/react": "*" } }, "sha512-t+15reWgAE1jXlrhaZoxjuH/SQf+EG0rzAzSCzTIkSiP5CDT7KhoExNPwIa6uUxtPkjc3gdW/ry7GetLEwCfGA=="], @@ -1195,165 +1210,171 @@ "@types/uuid": ["@types/uuid@10.0.0", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="], + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@7.18.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/type-utils": "7.18.0", "@typescript-eslint/utils": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.56.0" } }, "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@7.18.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/type-utils": "7.18.0", "@typescript-eslint/utils": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.56.0", "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@7.18.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@7.18.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.56.0", "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.53.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.53.1", "@typescript-eslint/types": "^8.53.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.60.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.60.0", "@typescript-eslint/types": "^8.60.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg=="], "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0" } }, "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.53.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.60.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@7.18.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "7.18.0", "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@7.18.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "7.18.0", "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "eslint": "^8.56.0", "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA=="], "@typescript-eslint/types": ["@typescript-eslint/types@7.18.0", "", {}, "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" } }, "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@7.18.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw=="], "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg=="], - "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260120.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260120.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260120.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260120.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260120.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260120.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260120.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260120.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-nnEf37C9ue7OBRnF2zmV/OCBmV5Y7T/K4mCHa+nxgiXcF/1w8sA0cgdFl+gHQ0mysqUJ+Bu5btAMeWgpLyjrgg=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260527.2", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260527.2", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260527.2", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260527.2", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260527.2", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260527.2", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260527.2", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260527.2" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-piqkDwikVeizCFqA1lcwI5F4wOAtBdxuliWe77ApBNRyBPPvfCJB+u/HYi9/8t5nd0sWvFs6/qt/AzJ1CCoykQ=="], - "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260120.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-r3pWFuR2H7mn6ScwpH5jJljKQqKto0npVuJSk6pRwFwexpTyxOGmJTZJ1V0AWiisaNxU2+CNAqWFJSJYIE/QTg=="], + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3LqSu4DlxkEfeC/Z/29QMCJn5jjkDtXI7LYuxfmjdmAatS6umDKqm8J17fnP/7fyrZUMBTIYRwSDpChGV3G1ew=="], - "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260120.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cuC1+wLbUP+Ip2UT94G134fqRdp5w3b3dhcCO6/FQ4yXxvRNyv/WK+upHBUFDaeSOeHgDTyO9/QFYUWwC4If1A=="], + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-H4+sxE9qaBbLF83wMdWE0FsgfK0Pom+/O+/oxqyGzhVkDJlNt3vfpgQZMit48/Gm44AacGfBggJ9Dhbi3aeSFw=="], - "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260120.1", "", { "os": "linux", "cpu": "arm" }, "sha512-vN6OYVySol/kQZjJGmAzd6L30SyVlCgmCXS8WjUYtE5clN0YrzQHop16RK29fYZHMxpkOniVBtRPxUYQANZBlQ=="], + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260527.2", "", { "os": "linux", "cpu": "arm" }, "sha512-6I9Cv9ozwfS9zB9vRQDPIYseLX3artEO9jl3yVgLj4ishwlSF4cWAbIsjl5IztPaEgHv8coej/6tX1D0uaBzXg=="], - "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260120.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-zZGvEGY7wcHYefMZ87KNmvjN3NLIhsCMHEpHZiGCS3khKf+8z6ZsanrzCjOTodvL01VPyBzHxV1EtkSxAcLiQg=="], + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-BGUDMjC2Z3TTdZRkGGwhBLelkP5UYgO2rbep8aF4dS3fu7T5lFPPrnfS6EgqJgie+cF5Fsev7xEq8wWyBDM+lg=="], - "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260120.1", "", { "os": "linux", "cpu": "x64" }, "sha512-JBfNhWd/asd5MDeS3VgRvE24pGKBkmvLub6tsux6ypr+Yhy+o0WaAEzVpmlRYZUqss2ai5tvOu4dzPBXzZAtFw=="], + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260527.2", "", { "os": "linux", "cpu": "x64" }, "sha512-vpazOu+ozlxBo8U57YJMzsOPuxAV8H7fu36KJ8ea8At/D8pdGmOAy5TuB+9OBQV9JDe0OXJMy2kmbhOpmkTAmA=="], - "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260120.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-tTndRtYCq2xwgE0VkTi9ACNiJaV43+PqvBqCxk8ceYi3X36Ve+CCnwlZfZJ4k9NxZthtrAwF/kUmpC9iIYbq1w=="], + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-DBFnFE3V6AITkPO1K1VxXf3yEZKjU2FwtXlNwRqhzDu0rrL2SsJHOSrBDX+OacTxQFzZMxFcpiuhV8jHZALPEg=="], - "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260120.1", "", { "os": "win32", "cpu": "x64" }, "sha512-oZia7hFL6k9pVepfonuPI86Jmyz6WlJKR57tWCDwRNmpA7odxuTq1PbvcYgy1z4+wHF1nnKKJY0PMAiq6ac18w=="], + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260527.2", "", { "os": "win32", "cpu": "x64" }, "sha512-1tBlErMvQgcMqqYwsx4tytupcjCJcOUXD3vBn1Wb/kAvus1FzWQAFE0fcKBvLfcqLQfTiiEwKKEtbLjGmakqqg=="], "@uidotdev/usehooks": ["@uidotdev/usehooks@2.4.1", "", { "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg=="], - "@uiw/color-convert": ["@uiw/color-convert@2.9.2", "", { "peerDependencies": { "@babel/runtime": ">=7.19.0" } }, "sha512-ibw9OS29S7GlL+vDwU3p5XG3vhR7XdzUecydpZbakUeg2Td6nfsnrCAX9sbLwQ73p0abO42v+V4qRaWq+7/BjQ=="], + "@uiw/color-convert": ["@uiw/color-convert@2.10.3", "", { "peerDependencies": { "@babel/runtime": ">=7.19.0" } }, "sha512-5tIjb4CZzGR7K3Sshswsuuc6FOAFNFwjtF0hkhKH3f+CMauC4Akv7LPq6o9v68S7dIAeKvfj8qWg5Tc2I1TVSA=="], - "@uiw/react-color": ["@uiw/react-color@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2", "@uiw/react-color-block": "2.9.2", "@uiw/react-color-chrome": "2.9.2", "@uiw/react-color-circle": "2.9.2", "@uiw/react-color-colorful": "2.9.2", "@uiw/react-color-compact": "2.9.2", "@uiw/react-color-editable-input": "2.9.2", "@uiw/react-color-editable-input-hsla": "2.9.2", "@uiw/react-color-editable-input-rgba": "2.9.2", "@uiw/react-color-github": "2.9.2", "@uiw/react-color-hue": "2.9.2", "@uiw/react-color-material": "2.9.2", "@uiw/react-color-name": "2.9.2", "@uiw/react-color-saturation": "2.9.2", "@uiw/react-color-shade-slider": "2.9.2", "@uiw/react-color-sketch": "2.9.2", "@uiw/react-color-slider": "2.9.2", "@uiw/react-color-swatch": "2.9.2", "@uiw/react-color-wheel": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-nIrw4Ol6boAkr1CUcCAkrUFVrKbT9T7/0qaSDpXmiDgKYf77gbXTWTsqVuXVDCSoCn28LvurpASS4AW8oiSBtg=="], + "@uiw/react-color": ["@uiw/react-color@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3", "@uiw/react-color-block": "2.10.3", "@uiw/react-color-chrome": "2.10.3", "@uiw/react-color-circle": "2.10.3", "@uiw/react-color-colorful": "2.10.3", "@uiw/react-color-compact": "2.10.3", "@uiw/react-color-editable-input": "2.10.3", "@uiw/react-color-editable-input-hsla": "2.10.3", "@uiw/react-color-editable-input-rgba": "2.10.3", "@uiw/react-color-github": "2.10.3", "@uiw/react-color-hue": "2.10.3", "@uiw/react-color-material": "2.10.3", "@uiw/react-color-name": "2.10.3", "@uiw/react-color-saturation": "2.10.3", "@uiw/react-color-shade-slider": "2.10.3", "@uiw/react-color-sketch": "2.10.3", "@uiw/react-color-slider": "2.10.3", "@uiw/react-color-swatch": "2.10.3", "@uiw/react-color-wheel": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-OezqWY4Fo8yJf8yn2sfdDS3xmAir6FBDSiDJ0tR/CoXwQ2RaQl0mZlarfb/I0aaGiJ/jAORAGStTX/G5XoB2jw=="], - "@uiw/react-color-alpha": ["@uiw/react-color-alpha@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-drag-event-interactive": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-a2ACkE2vZIS4xnN9DaRfkQtAX/t8oK5NRSbX2QeOL23WIMHP1VNs7Yq5gXB68RHYenFgvs2JHuMOxZ2mK1W5Mw=="], + "@uiw/react-color-alpha": ["@uiw/react-color-alpha@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-drag-event-interactive": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-82wtNRmEW5uZV2hmw5SYZKPIZjN6aqm8/CZOg8KXfx8eoIqpbjrRBwABggPO/O5Dj2JNAPC4eYyHslE24Pxy8w=="], - "@uiw/react-color-block": ["@uiw/react-color-block@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-editable-input": "2.9.2", "@uiw/react-color-swatch": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-0EIZTELA5pnxyMlBOFo3hrpy73db+Qeq6E+QptNfD/8izor8OvY1Uquj2VqD6gDz+iVHMELIoKxpaQ8sZR7NOg=="], + "@uiw/react-color-block": ["@uiw/react-color-block@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-editable-input": "2.10.3", "@uiw/react-color-swatch": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-TVwU/bfpt51kWqL+CcQmocQrRQHAprJL/1IxjH48ZWfLqIQ1TTZVueopGBadc2CYzDygkyTWsmYpkZJZxM9YjQ=="], - "@uiw/react-color-chrome": ["@uiw/react-color-chrome@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2", "@uiw/react-color-editable-input": "2.9.2", "@uiw/react-color-editable-input-hsla": "2.9.2", "@uiw/react-color-editable-input-rgba": "2.9.2", "@uiw/react-color-github": "2.9.2", "@uiw/react-color-hue": "2.9.2", "@uiw/react-color-saturation": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-p7OZB7VWrkVbHxcTHsAq5U2vt3hAP3VvKEiDi592LKxS11IMnSd15ta8ngbJaXZWatqEpJSNgj12581yHtx+Bg=="], + "@uiw/react-color-chrome": ["@uiw/react-color-chrome@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3", "@uiw/react-color-editable-input": "2.10.3", "@uiw/react-color-editable-input-hsla": "2.10.3", "@uiw/react-color-editable-input-rgba": "2.10.3", "@uiw/react-color-github": "2.10.3", "@uiw/react-color-hue": "2.10.3", "@uiw/react-color-saturation": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-28qmnD19YR1wjzWe62OnwvDRhXrGy/Oq2sg/p+PBUPp8nemvq4sBX9mIToAxHtb2TiSWKCr0JapWwHZveu0tjA=="], - "@uiw/react-color-circle": ["@uiw/react-color-circle@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-swatch": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-7XaeX3LfCRkZKffHL/KtYps7I9hNpmx9sJOuwi0ML+3urToFD8s7Iuq3upYZt8REYt1Y84SBjuUqx2YYmjUEjA=="], + "@uiw/react-color-circle": ["@uiw/react-color-circle@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-swatch": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-aHO0Xf5AziEQ8PnckxIcGskPPx8Ql7BIaC7+Ngya34TDwDa/kUbEhwohn89TxNZ8ZZhG/uldTDIswMXK8Fe4zA=="], - "@uiw/react-color-colorful": ["@uiw/react-color-colorful@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2", "@uiw/react-color-hue": "2.9.2", "@uiw/react-color-saturation": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-tz/xeHayna2wpLipkZmcMgL1rmLMxfAmlOyBhUeWrpvqb9Fx59C/wL+5IYJA4rdsQvr9WyWjWmU/GhVKsEkW9w=="], + "@uiw/react-color-colorful": ["@uiw/react-color-colorful@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3", "@uiw/react-color-hue": "2.10.3", "@uiw/react-color-saturation": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-hnWr03wKNbJjNEZ4SFnwoeKNMtS2DR7rXsCv0bt17DVdBgYPZmuMTIwAR6nKFExdOwgOwXloP5KGESJYwyp2YQ=="], - "@uiw/react-color-compact": ["@uiw/react-color-compact@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-editable-input": "2.9.2", "@uiw/react-color-editable-input-rgba": "2.9.2", "@uiw/react-color-swatch": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-fSSgRRBjkYuGRebZ7XM5XGVFvFwEyEGaV6mOhUpr3JFKhIES0/9oPbd80GDbRdj57Zxxrj76MCtd/aCFfwQSWA=="], + "@uiw/react-color-compact": ["@uiw/react-color-compact@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-editable-input": "2.10.3", "@uiw/react-color-editable-input-rgba": "2.10.3", "@uiw/react-color-swatch": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-iXIG7idhaZ3XNFanKbVfFsL4w2GU5yWRUR+J5L1SzkXar1LTCjx7IDScweEBKnMdpPzDGiS2kTIn5anAif4ZDg=="], - "@uiw/react-color-editable-input": ["@uiw/react-color-editable-input@2.9.2", "", { "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-DY7pu12+LDRn6cxDMvsy1/quaPTxicAPz/kfODV7KBf8+Hq4rFWeJ4KS6m22IKIbQxrBQgmQG0WFJLaPeY7cPw=="], + "@uiw/react-color-editable-input": ["@uiw/react-color-editable-input@2.10.3", "", { "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-QnYNpFI0p8pssYbWxIJwfmUdPwzzX0IXOAl4mU8q1HQNYoXFBGFJ4rXkJSOdauumAfOr4C8RKZlTB4/83EBBPQ=="], - "@uiw/react-color-editable-input-hsla": ["@uiw/react-color-editable-input-hsla@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-editable-input-rgba": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-kZfj3W20msLeP8/HY498rG30eBHRPAyxduhu94HLa9XggT/0ogwA9xZJZgWd6B7FYPeRlhRDY7dnF7caND63GQ=="], + "@uiw/react-color-editable-input-hsla": ["@uiw/react-color-editable-input-hsla@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-editable-input-rgba": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-WoWsk52MN6rvxFD1HvNTrrGRmSKwrnp0S7htd4QnKuczlLtn4qfMXVwMARdvnR7ZqC1vn7FXZpVYd+Zh3upd2g=="], - "@uiw/react-color-editable-input-rgba": ["@uiw/react-color-editable-input-rgba@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-editable-input": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-sQW3tSao754954aQuVK4qvn1i+KC2piE4UftaBubD3QxC02gg5VfgZRoI6AV+nLr73Ifv3mCXewjN1BcP/+x4A=="], + "@uiw/react-color-editable-input-rgba": ["@uiw/react-color-editable-input-rgba@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-editable-input": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-n0kyNTNicRKASJNWYJexfwwfbbwvOJEYGQO8tX4PivmZYQVuYZq/vqsgYG5y+VGrBYZsHFfY+0LtPS4AXlz+Aw=="], - "@uiw/react-color-github": ["@uiw/react-color-github@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-swatch": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-pKR94swzWxqRFUEZJBQ8WHcw6CklxLWhDyjvGpxiieAlwUAL0mlmtCcctRgsmJRuAKQlZx4WNslRgNX5aVcoZw=="], + "@uiw/react-color-github": ["@uiw/react-color-github@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-swatch": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-BLiI12utcJQMT2Ym4OeYplraHLwUtW7SJQ2IbHQA7YPEU9FYqchHv1P/6DJBZi98gFqWFll+7xotEzHCCXZP5g=="], - "@uiw/react-color-hue": ["@uiw/react-color-hue@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-vDGN5YCzw09BfxkQeDvAeQ7zAy141uJ3HkFk1lsXL7ha8xZ35AItE1s/C6d60vFjGdoloKShh0yA7df3pnjmxA=="], + "@uiw/react-color-hue": ["@uiw/react-color-hue@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-dlaLaQEPXvaywc8xS8DgiYIbq4qUuI8fyERR7/bRsRXCTA9x4tFAD+lWenXcZBEhQh8HfZd1MhbvjcLzs7xpFg=="], - "@uiw/react-color-material": ["@uiw/react-color-material@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-editable-input": "2.9.2", "@uiw/react-color-editable-input-rgba": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-R9MI9IlTof/L1rdxUFQAWgAgUSNJGXQsPujo8UGpwR7o5d+A3wwybUnPBsGKRnZwDy5zW7x+lPxY46GXE9aU9Q=="], + "@uiw/react-color-material": ["@uiw/react-color-material@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-editable-input": "2.10.3", "@uiw/react-color-editable-input-rgba": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-zis1x0VPBCjFmlju0Syubo6ElNIwf91CM9xilL/A3K/LGRRVuvq/PK1mGRAjFonjfTHiTlOg1Lq3NsYCaVg8LA=="], - "@uiw/react-color-name": ["@uiw/react-color-name@2.9.2", "", { "dependencies": { "colors-named": "^1.0.1", "colors-named-hex": "^1.0.1" }, "peerDependencies": { "@babel/runtime": ">=7.19.0" } }, "sha512-knqRUkAe3pv6rB+tGzaURtwQkBqjRG62YNlzUx8Ty7g+pskWpLSPiMikW+9H5sLPq7wU3ichZiygqIp4BRgQzA=="], + "@uiw/react-color-name": ["@uiw/react-color-name@2.10.3", "", { "dependencies": { "colors-named": "^1.0.1", "colors-named-hex": "^1.0.1" }, "peerDependencies": { "@babel/runtime": ">=7.19.0" } }, "sha512-BnqZebCC2lmJezs190vUtzBybjMJypFkTEav/HP3FUzHD0XSsKHOZiHENzXp+TYr0Fb7WJQXxE/dl11zkcOwVg=="], - "@uiw/react-color-saturation": ["@uiw/react-color-saturation@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-drag-event-interactive": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-w1aUU+g6Axwbr1nLvF8k/zg5v7UW8z80eH6C7w+tdiOFOQKkKQlXqeOG0IIUUIj3v/ji+yM90IuOH+Ku7zsJrg=="], + "@uiw/react-color-saturation": ["@uiw/react-color-saturation@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-drag-event-interactive": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-iRIwNx3UTZrpV5hoQ5mcsZ8ahTXcMaGNvg8iS9JUByg+1PljwWcnqq5RNrRZJXPx+vryavefMkJLKHcPb9BLvQ=="], - "@uiw/react-color-shade-slider": ["@uiw/react-color-shade-slider@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-VE59rWv5ixqCN2CTpoe33j4SOCGU62bKguizx4HxgKczE/X0ySeEas8iP5XLg/4fYWl3EZN4uI+M8mNRnB0DPw=="], + "@uiw/react-color-shade-slider": ["@uiw/react-color-shade-slider@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-WgK/JgS3oDyIzah9Jcd8uPSild6WOlYq9+jroBQ3q4ZLk+DADZ6ELaIi+tXsloxx65AaLJvXlqE0By6HAyohaQ=="], - "@uiw/react-color-sketch": ["@uiw/react-color-sketch@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2", "@uiw/react-color-editable-input": "2.9.2", "@uiw/react-color-editable-input-rgba": "2.9.2", "@uiw/react-color-hue": "2.9.2", "@uiw/react-color-saturation": "2.9.2", "@uiw/react-color-swatch": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-PEvwaqDVDdBI/+fWASBWQOvx3ows7dIcv6Z06VHgEXk2chi95Fkrbd0YUUXMcp7ESsmUK1j5ozGMLAf9Nvx6Nw=="], + "@uiw/react-color-sketch": ["@uiw/react-color-sketch@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3", "@uiw/react-color-editable-input": "2.10.3", "@uiw/react-color-editable-input-rgba": "2.10.3", "@uiw/react-color-hue": "2.10.3", "@uiw/react-color-saturation": "2.10.3", "@uiw/react-color-swatch": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-4Vua0Ti1K/uOx0E3RV0xdOfLbpc4K8zXfWZtqyjJZ7jIZpB5KNgcai+b4R47VoUpyCYf2B30iCvBuFpN3cfqYA=="], - "@uiw/react-color-slider": ["@uiw/react-color-slider@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-color-alpha": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-vsi0AwmFJpb+flF8XCkacbX+MwLGOzrDKMqR29XE5sO8ERaezoT5mmYXzXXFcjyZYIuXse4C3JT38nsmOBp1vQ=="], + "@uiw/react-color-slider": ["@uiw/react-color-slider@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-color-alpha": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-aLJQPGV1/SpAWy6+U7RVqcJmhdtrdCYwvDL0/i5u/HC4VeWXB+w2LSSC63qWHwo+RkwfaJFLXKMO1JUWlQvxXg=="], - "@uiw/react-color-swatch": ["@uiw/react-color-swatch@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-6zBy+E9NzZR672M2wPsbbNRqKy9Wi9jOuuxxyzov1CEZp+pPX7UwMlCX6RUhKdO0PzTSPCVQmbz5bplu5vsW0w=="], + "@uiw/react-color-swatch": ["@uiw/react-color-swatch@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-7Q/h9RTeloFnrIo/k6U5g+D/abSIT62FiAQZLaEC34O2eOtu1LQReTXAgx39b1HSQ8piCgBYaQc7oM9WhRTPow=="], - "@uiw/react-color-wheel": ["@uiw/react-color-wheel@2.9.2", "", { "dependencies": { "@uiw/color-convert": "2.9.2", "@uiw/react-drag-event-interactive": "2.9.2" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-ayGzQyMZM3Cp+sX7LNElQ/QQWMO7YG4k/RQwVJAhxNQ+4lJ/p4LLSnI85D7NxILkk+jiXnjxRroxxZ2eJhWo+g=="], + "@uiw/react-color-wheel": ["@uiw/react-color-wheel@2.10.3", "", { "dependencies": { "@uiw/color-convert": "2.10.3", "@uiw/react-drag-event-interactive": "2.10.3" }, "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-eNFWioQt8Fr3UgHpuCxN4/gniZReOit3FzYxVFVXzQD5Hd6ch6jJDDZFFTl2NGVuTfsXLIepLYe9B5FHajC7AA=="], - "@uiw/react-drag-event-interactive": ["@uiw/react-drag-event-interactive@2.9.2", "", { "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-6gxQz+Ij7JkXlEOpfZhOu+Gdp/sI9VnMeDl8AJeYl3+0YXP31lXGmyb0NkNYnoUmJO+RrAf68c1raMpaDWs+Ow=="], + "@uiw/react-drag-event-interactive": ["@uiw/react-drag-event-interactive@2.10.3", "", { "peerDependencies": { "@babel/runtime": ">=7.19.0", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-veLm9HF1cairiYbGxcALYVu51T4XAzDz8fmtQ0SiLVFHBX74+iUGo2jArS/XALFBnapsLYTAWTnHXxe38mC/Vw=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="], + + "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], "@vanilla-extract/babel-plugin-debug-ids": ["@vanilla-extract/babel-plugin-debug-ids@1.2.2", "", { "dependencies": { "@babel/core": "^7.23.9" } }, "sha512-MeDWGICAF9zA/OZLOKwhoRlsUW+fiMwnfuOAqFVohL31Agj7Q/RBWAYweqjHLgFBCsdnr6XIfwjJnmb2znEWxw=="], - "@vanilla-extract/compiler": ["@vanilla-extract/compiler@0.3.4", "", { "dependencies": { "@vanilla-extract/css": "^1.18.0", "@vanilla-extract/integration": "^8.0.7", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", "vite-node": "^3.2.2" } }, "sha512-W9HXf9EAccpE1vEIATvSoBVj/bQnmHfYHfDJjUN8dcOHW6oMcnoGTqweDM9I66BHqlNH4d0IsaeZKSViOv7K4w=="], + "@vanilla-extract/compiler": ["@vanilla-extract/compiler@0.7.0", "", { "dependencies": { "@vanilla-extract/css": "^1.20.1", "@vanilla-extract/integration": "^8.0.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vite-node": "^3.2.2 || ^5.0.0 || ^6.0.0" } }, "sha512-rZQ40HVmsxfGLjoflwwsaUBLfpbpKDoZC19oiDA0FHq4LdrYtyVbFkc0MfqkNo/qBCvaZfsRezCqk0QQxCqZ8w=="], "@vanilla-extract/css": ["@vanilla-extract/css@1.20.1", "", { "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.9", "css-what": "^6.1.0", "csstype": "^3.2.3", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "sha512-5I9RNo5uZW9tsBnqrWzJqELegOqTHBrZyDFnES0gR9gJJHBB9dom1N0bwITM9tKwBcfKrTX4a6DHVeQdJ2ubQA=="], - "@vanilla-extract/integration": ["@vanilla-extract/integration@8.0.7", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/plugin-syntax-typescript": "^7.23.3", "@vanilla-extract/babel-plugin-debug-ids": "^1.2.2", "@vanilla-extract/css": "^1.18.0", "dedent": "^1.5.3", "esbuild": "npm:esbuild@>=0.17.6 <0.28.0", "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "mlly": "^1.4.2" } }, "sha512-ILob4F9cEHXpbWAVt3Y2iaQJpqYq/c/5TJC8Fz58C2XmX3QW2Y589krvViiyJhQfydCGK3EbwPQhVFjQaBeKfg=="], + "@vanilla-extract/integration": ["@vanilla-extract/integration@8.0.10", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/plugin-syntax-typescript": "^7.23.3", "@vanilla-extract/babel-plugin-debug-ids": "^1.2.2", "@vanilla-extract/css": "^1.20.1", "dedent": "^1.5.3", "esbuild": "npm:esbuild@>=0.17.6 <0.29.0", "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "mlly": "^1.4.2" } }, "sha512-01IB5gbrgTe8IIrtfRXXTmACl5D8Enzqp2cKbCWaMKXmnoilXXVCPbJoA96q88PXkNDXsXepCxUugMvEmL3c7A=="], "@vanilla-extract/private": ["@vanilla-extract/private@1.0.9", "", {}, "sha512-gT2jbfZuaaCLrAxwXbRgIhGhcXbRZCG3v4TTUnjw0EJ7ArdBRxkq4msNJkbuRkCgfIK5ATmprB5t9ljvLeFDEA=="], "@vanilla-extract/recipes": ["@vanilla-extract/recipes@0.5.7", "", { "peerDependencies": { "@vanilla-extract/css": "^1.0.0" } }, "sha512-Fvr+htdyb6LVUu+PhH61UFPhwkjgDEk8L4Zq9oIdte42sntpKrgFy90MyTRtGwjVALmrJ0pwRUVr8UoByYeW8A=="], - "@vanilla-extract/vite-plugin": ["@vanilla-extract/vite-plugin@5.1.4", "", { "dependencies": { "@vanilla-extract/compiler": "^0.3.4", "@vanilla-extract/integration": "^8.0.7" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-fTYNKUK3n4ApkUf2FEcO7mpqNKEHf9kDGg8DXlkqHtPxgwPhjuaajmDfQCSBsNgnA2SLI+CB5EO6kLQuKsw2Rw=="], + "@vanilla-extract/sprinkles": ["@vanilla-extract/sprinkles@1.6.5", "", { "peerDependencies": { "@vanilla-extract/css": "^1.0.0" } }, "sha512-HOYidLONR/SeGk8NBAeI64I4gYdsMX9vJmniL13ZcLVwawyK0s2GUENEAcGA+GYLIoeyQB61UqmhqPodJry7zA=="], + + "@vanilla-extract/vite-plugin": ["@vanilla-extract/vite-plugin@5.2.2", "", { "dependencies": { "@vanilla-extract/compiler": "^0.7.0", "@vanilla-extract/integration": "^8.0.9" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-AUyB4fDR2b/Mo0lcXhhlf6RxnDPYwFMyKKopalJ4BwQNKYzZSoTwHJ1PLPO9SKhpz7lzXc0Z18GHQZOewzl3YA=="], "@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=="], - "@vitest/browser": ["@vitest/browser@1.6.1", "", { "dependencies": { "@vitest/utils": "1.6.1", "magic-string": "^0.30.5", "sirv": "^2.0.4" }, "peerDependencies": { "playwright": "*", "vitest": "1.6.1", "webdriverio": "*" }, "optionalPeers": ["playwright", "webdriverio"] }, "sha512-9ZYW6KQ30hJ+rIfJoGH4wAub/KAb4YrFzX0kVLASvTm7nJWVC5EAv5SlzlXVl3h3DaUq5aqHlZl77nmOPnALUQ=="], + "@vitest/browser": ["@vitest/browser@1.6.1", "", { "dependencies": { "@vitest/utils": "1.6.1", "magic-string": "^0.30.5", "sirv": "^2.0.4" }, "peerDependencies": { "playwright": "*", "safaridriver": "*", "vitest": "1.6.1", "webdriverio": "*" }, "optionalPeers": ["playwright", "safaridriver", "webdriverio"] }, "sha512-9ZYW6KQ30hJ+rIfJoGH4wAub/KAb4YrFzX0kVLASvTm7nJWVC5EAv5SlzlXVl3h3DaUq5aqHlZl77nmOPnALUQ=="], "@vitest/coverage-v8": ["@vitest/coverage-v8@1.6.1", "", { "dependencies": { "@ampproject/remapping": "^2.2.1", "@bcoe/v8-coverage": "^0.2.3", "debug": "^4.3.4", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.4", "istanbul-reports": "^3.1.6", "magic-string": "^0.30.5", "magicast": "^0.3.3", "picocolors": "^1.0.0", "std-env": "^3.5.0", "strip-literal": "^2.0.0", "test-exclude": "^6.0.0" }, "peerDependencies": { "vitest": "1.6.1" } }, "sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw=="], - "@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@vitest/expect": ["@vitest/expect@4.1.7", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.7", "@vitest/utils": "4.1.7", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w=="], - "@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@vitest/mocker": ["@vitest/mocker@4.1.7", "", { "dependencies": { "@vitest/spy": "4.1.7", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA=="], - "@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.7", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw=="], - "@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@vitest/runner": ["@vitest/runner@4.1.7", "", { "dependencies": { "@vitest/utils": "4.1.7", "pathe": "^2.0.3" } }, "sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw=="], - "@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@vitest/snapshot": ["@vitest/snapshot@4.1.7", "", { "dependencies": { "@vitest/pretty-format": "4.1.7", "@vitest/utils": "4.1.7", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw=="], - "@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@vitest/spy": ["@vitest/spy@4.1.7", "", {}, "sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q=="], - "@vitest/ui": ["@vitest/ui@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3" }, "peerDependencies": { "vitest": "4.0.17" } }, "sha512-hRDjg6dlDz7JlZAvjbiCdAJ3SDG+NH8tjZe21vjxfvT2ssYAn72SRXMge3dKKABm3bIJ3C+3wdunIdur8PHEAw=="], + "@vitest/ui": ["@vitest/ui@4.1.7", "", { "dependencies": { "@vitest/utils": "4.1.7", "fflate": "^0.8.2", "flatted": "^3.4.2", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "vitest": "4.1.7" } }, "sha512-TP6utB2yX6rsJNVRo2qAlsi48i1YwFTrLV2tnTtWqJaYX7m4lRCCLirZBjU6xC5m0RsPHr+L2+N+eIPhgEzFfw=="], - "@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@vitest/utils": ["@vitest/utils@4.1.7", "", { "dependencies": { "@vitest/pretty-format": "4.1.7", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw=="], - "@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], + "@volar/language-core": ["@volar/language-core@2.4.28", "", { "dependencies": { "@volar/source-map": "2.4.28" } }, "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ=="], - "@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], + "@volar/source-map": ["@volar/source-map@2.4.28", "", {}, "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ=="], - "@volar/typescript": ["@volar/typescript@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg=="], + "@volar/typescript": ["@volar/typescript@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw=="], - "@vue/compiler-core": ["@vue/compiler-core@3.5.27", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/shared": "3.5.27", "entities": "^7.0.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ=="], + "@vue/compiler-core": ["@vue/compiler-core@3.5.35", "", { "dependencies": { "@babel/parser": "^7.29.3", "@vue/shared": "3.5.35", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw=="], - "@vue/compiler-dom": ["@vue/compiler-dom@3.5.27", "", { "dependencies": { "@vue/compiler-core": "3.5.27", "@vue/shared": "3.5.27" } }, "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w=="], + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.35", "", { "dependencies": { "@vue/compiler-core": "3.5.35", "@vue/shared": "3.5.35" } }, "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA=="], "@vue/compiler-vue2": ["@vue/compiler-vue2@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A=="], "@vue/language-core": ["@vue/language-core@2.2.0", "", { "dependencies": { "@volar/language-core": "~2.4.11", "@vue/compiler-dom": "^3.5.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", "alien-signals": "^0.4.9", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw=="], - "@vue/shared": ["@vue/shared@3.5.27", "", {}, "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ=="], + "@vue/shared": ["@vue/shared@3.5.35", "", {}, "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA=="], "@xstate/fsm": ["@xstate/fsm@1.6.5", "", {}, "sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw=="], - "@yudiel/react-qr-scanner": ["@yudiel/react-qr-scanner@2.5.1", "", { "dependencies": { "barcode-detector": "3.0.8", "webrtc-adapter": "9.0.3" }, "peerDependencies": { "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" } }, "sha512-FWzHaCneu30mQpE80VNWx4IPtBjXFEiTzhwWunZy3afvvAy/x0aVIgYijJKEbROoaAeDfcJ/gIyUCqPBP7bMOw=="], + "@yudiel/react-qr-scanner": ["@yudiel/react-qr-scanner@2.6.0", "", { "dependencies": { "barcode-detector": "^3.1.3", "webrtc-adapter": "^9.0.5" }, "peerDependencies": { "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" } }, "sha512-WjNcSt7qquYUz1LVbwKzSnRQI47sNrh4Vh6nNiGKVxnYcP+KgN5q9rcSzXyZ/7GRV9PPrnzoIuE5YdOxB9yAog=="], "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], + "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], "add-px-to-style": ["add-px-to-style@1.0.0", "", {}, "sha512-YMyxSlXpPjD8uWekCQGuN40lV4bnZagUwqa2m/uFv1z/tNImSk9fnXVMUI5qwME/zzI3MMQRvjZ+69zyfSSyew=="], - "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "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=="], + "ajv": ["ajv@6.15.0", "", { "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-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], @@ -1439,7 +1460,7 @@ "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], - "autoprefixer": ["autoprefixer@10.4.23", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001760", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA=="], + "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], @@ -1447,9 +1468,9 @@ "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], - "axe-core": ["axe-core@4.11.1", "", {}, "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A=="], + "axe-core": ["axe-core@4.11.4", "", {}, "sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA=="], - "axios": ["axios@1.13.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], + "axios": ["axios@1.16.1", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A=="], "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], @@ -1461,7 +1482,7 @@ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "barcode-detector": ["barcode-detector@3.0.8", "", { "dependencies": { "zxing-wasm": "2.2.4" } }, "sha512-Z9jzzE8ngEDyN9EU7lWdGgV07mcnEQnrX8W9WecXDqD2v+5CcVjt9+a134a5zb+kICvpsrDx6NYA6ay4LGFs8A=="], + "barcode-detector": ["barcode-detector@3.1.3", "", { "dependencies": { "zxing-wasm": "3.0.3" } }, "sha512-omL3/x26oU9jlR0gUQcGdXIjQtMlrUGKF7xRFO1RwrQkRkRU7WLz0mgQEsdUtYBm2uX3JH+HQLrKlyTS/BxZRw=="], "base": ["base@0.11.2", "", { "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", "define-property": "^1.0.0", "isobject": "^3.0.1", "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" } }, "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg=="], @@ -1471,7 +1492,7 @@ "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.9.16", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-KeUZdBuxngy825i8xvzaK1Ncnkx0tBmb3k8DkEuqjKRkmtvNTjey2ZsNeh8Dw4lfKvbCOu9oeNx2TKm2vHqcRw=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.32", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg=="], "basic-auth": ["basic-auth@2.0.1", "", { "dependencies": { "safe-buffer": "5.1.2" } }, "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="], @@ -1479,27 +1500,25 @@ "bcryptjs": ["bcryptjs@3.0.3", "", { "bin": { "bcrypt": "bin/bcrypt" } }, "sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g=="], - "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], - "binary-extensions": ["binary-extensions@1.13.1", "", {}, "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="], "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], "bmp-js": ["bmp-js@0.1.0", "", {}, "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="], - "body-parser": ["body-parser@1.20.4", "", { "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.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.14.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA=="], + "body-parser": ["body-parser@1.20.5", "", { "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.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.15.1", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA=="], "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], "boxen": ["boxen@5.1.2", "", { "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" } }, "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ=="], - "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="], "braces": ["braces@2.3.2", "", { "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", "fill-range": "^4.0.0", "isobject": "^3.0.1", "repeat-element": "^1.1.2", "snapdragon": "^0.8.1", "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" } }, "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w=="], "broadway": ["broadway@0.3.6", "", { "dependencies": { "cliff": "0.1.9", "eventemitter2": "0.4.14", "nconf": "0.6.9", "utile": "0.2.1", "winston": "0.8.0" } }, "sha512-zivf7KWx8ftTEsXaKfmve6wdSfbDJ6NLXwhwWN4Q1z5+/nsHWALP952KV9jJbJGwjZHEMZABHyuKqEAh3wb2kw=="], - "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], @@ -1509,7 +1528,7 @@ "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], - "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], "bundle-require": ["bundle-require@5.1.0", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.18" } }, "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA=="], @@ -1521,7 +1540,7 @@ "cache-base": ["cache-base@1.0.1", "", { "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", "has-value": "^1.0.0", "isobject": "^3.0.1", "set-value": "^2.0.0", "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" } }, "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ=="], - "call-bind": ["call-bind@1.0.8", "", { "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" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1533,7 +1552,7 @@ "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001765", "", {}, "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ=="], + "caniuse-lite": ["caniuse-lite@1.0.30001793", "", {}, "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA=="], "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], @@ -1553,21 +1572,17 @@ "check-error": ["check-error@1.0.3", "", { "dependencies": { "get-func-name": "^2.0.2" } }, "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg=="], - "cheerio": ["cheerio@1.1.2", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", "htmlparser2": "^10.0.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", "undici": "^7.12.0", "whatwg-mimetype": "^4.0.0" } }, "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg=="], + "cheerio": ["cheerio@1.2.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" } }, "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg=="], "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], - "chevrotain": ["chevrotain@11.0.3", "", { "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", "@chevrotain/regexp-to-ast": "11.0.3", "@chevrotain/types": "11.0.3", "@chevrotain/utils": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw=="], - - "chevrotain-allstar": ["chevrotain-allstar@0.3.1", "", { "dependencies": { "lodash-es": "^4.17.21" }, "peerDependencies": { "chevrotain": "^11.0.0" } }, "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw=="], - "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], "chromatic": ["chromatic@13.3.5", "", { "peerDependencies": { "@chromatic-com/cypress": "^0.*.* || ^1.0.0", "@chromatic-com/playwright": "^0.*.* || ^1.0.0" }, "optionalPeers": ["@chromatic-com/cypress", "@chromatic-com/playwright"], "bin": { "chroma": "dist/bin.js", "chromatic": "dist/bin.js", "chromatic-cli": "dist/bin.js" } }, "sha512-MzPhxpl838qJUo0A55osCF2ifwPbjcIPeElr1d4SHcjnHoIcg7l1syJDrAYK/a+PcCBrOGi06jPNpQAln5hWgw=="], - "ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], "class-utils": ["class-utils@0.3.6", "", { "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" } }, "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="], @@ -1605,15 +1620,15 @@ "colors": ["colors@0.6.2", "", {}, "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw=="], - "colors-named": ["colors-named@1.0.4", "", {}, "sha512-R254qrKSxFJNa7QmM7vrRaz5Hygr7MIaNbXcIx7WfmlYJ9OjZQ+aczGlnKS8lLtNT0GM9aGZ4EcmNXrh5ttv6g=="], + "colors-named": ["colors-named@1.0.5", "", {}, "sha512-xaspf9oddAOqP2LYNOgp8E3BwAzugrdO9J1kDNS5ySrzTgV9hrXGBt5w87ioLEr2pM4Ukt+GKedvzaLRxpv8pA=="], - "colors-named-hex": ["colors-named-hex@1.0.3", "", {}, "sha512-vhUoMdCdOKgD9Ni3p6uV3ET1JJCHzlcK6lN3/yl+6TUHinDE6HUFlmnvkh/NDZ2M9049Ipn3mX85qu6akRiC1g=="], + "colors-named-hex": ["colors-named-hex@1.0.4", "", {}, "sha512-X+Enw/2fFAgDRhUac69cRO/RJvHnWDBBrP8J1sJuEU16Buiiu8PPpJP4abSo0V+fJbkfwmQITE6zKx/SBJERGw=="], "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - "commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], "compare-versions": ["compare-versions@6.1.1", "", {}, "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg=="], @@ -1625,7 +1640,7 @@ "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=="], - "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], @@ -1649,7 +1664,7 @@ "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], @@ -1675,15 +1690,13 @@ "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], - "cssstyle": ["cssstyle@5.3.7", "", { "dependencies": { "@asamuzakjp/css-color": "^4.1.1", "@csstools/css-syntax-patches-for-csstree": "^1.0.21", "css-tree": "^3.1.0", "lru-cache": "^11.2.4" } }, "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], "culori": ["culori@4.0.2", "", {}, "sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw=="], "cycle": ["cycle@1.0.3", "", {}, "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA=="], - "cytoscape": ["cytoscape@3.33.1", "", {}, "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ=="], + "cytoscape": ["cytoscape@3.33.4", "", {}, "sha512-HIN5Pmd9MrX9BkV7tDwnOcEJCSFvCpc8X97h3f508J6I5FsqAY65wKOCvgH2CuP42CaahWaz4tuh32SOOIH7ww=="], "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], @@ -1753,33 +1766,29 @@ "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], - "dagre-d3-es": ["dagre-d3-es@7.0.13", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q=="], + "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], - "daisyui": ["daisyui@5.5.14", "", {}, "sha512-L47rvw7I7hK68TA97VB8Ee0woHew+/ohR6Lx6Ah/krfISOqcG4My7poNpX5Mo5/ytMxiR40fEaz6njzDi7cuSg=="], + "daisyui": ["daisyui@5.5.20", "", {}, "sha512-HemJcjl0Gk9rQ8BcgofN6p+EURrqftQG9wK1Hkxs98i49xe68+QxpNvry+PyxwkIUgrbMpNmZ5ZWjmtffAjfhQ=="], "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], - "data-urls": ["data-urls@6.0.1", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^15.1.0" } }, "sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ=="], - "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], + "date-fns": ["date-fns@4.3.0", "", {}, "sha512-OYcL+3N/jyWbYdFGqoMAhytDgxP9pbYPUUiRCOgn4Fewaadk9l/Wam4Avciiyp2BgkpfQyBV9B+ehnVJych+eQ=="], "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], - "dayjs": ["dayjs@1.11.19", "", {}, "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw=="], + "dayjs": ["dayjs@1.11.21", "", {}, "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="], "de-indent": ["de-indent@1.0.2", "", {}, "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], @@ -1787,7 +1796,7 @@ "decode-uri-component": ["decode-uri-component@0.2.2", "", {}, "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="], - "dedent": ["dedent@1.7.1", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg=="], + "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], "deep-eql": ["deep-eql@4.1.4", "", { "dependencies": { "type-detect": "^4.0.0" } }, "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg=="], @@ -1807,7 +1816,7 @@ "define-property": ["define-property@2.0.2", "", { "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" } }, "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ=="], - "delaunator": ["delaunator@5.0.1", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw=="], + "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], @@ -1823,7 +1832,7 @@ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], + "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], @@ -1847,13 +1856,13 @@ "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - "dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="], + "dompurify": ["dompurify@3.4.7", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA=="], "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-prop": ["dot-prop@4.2.1", "", { "dependencies": { "is-obj": "^1.0.0" } }, "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ=="], - "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], + "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], @@ -1865,13 +1874,13 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "effect": ["effect@3.19.14", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-3vwdq0zlvQOxXzXNKRIPKTqZNMyGCdaFUBfMPqpsyzZDre67kgC1EEHDV4EoQTovJ4w5fmJW756f86kkuz7WFA=="], + "effect": ["effect@3.21.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg=="], - "electron-to-chromium": ["electron-to-chromium@1.5.267", "", {}, "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw=="], + "electron-to-chromium": ["electron-to-chromium@1.5.363", "", {}, "sha512-VjUKPyWzGnT1fujlkEGC/BvN70Hh70KXtAqcmniXviYlJC/ivcT+BWGPyxWVbJZLfvtKR6dqg1L7T7pgAMBtWA=="], "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], + "empathic": ["empathic@2.0.1", "", {}, "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q=="], "enabled": ["enabled@2.0.0", "", {}, "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="], @@ -1881,17 +1890,17 @@ "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - "engine.io": ["engine.io@6.6.5", "", { "dependencies": { "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", "ws": "~8.18.3" } }, "sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A=="], + "engine.io": ["engine.io@6.6.8", "", { "dependencies": { "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "@types/ws": "^8.5.12", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", "ws": "~8.20.1" } }, "sha512-2agL3ueZhqxoVrfmntO8yuVj+uNSlIOnhykYHk3Cq0ShYPdUjjUiSJrQvXjq01I9jAuI0Zl2YO8Evv5Mqytm5g=="], - "engine.io-client": ["engine.io-client@6.6.4", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", "ws": "~8.18.3", "xmlhttprequest-ssl": "~2.1.1" } }, "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw=="], + "engine.io-client": ["engine.io-client@6.6.5", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", "ws": "~8.20.1", "xmlhttprequest-ssl": "~2.1.1" } }, "sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg=="], "engine.io-parser": ["engine.io-parser@5.2.3", "", {}, "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="], - "enhanced-resolve": ["enhanced-resolve@5.18.4", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q=="], + "enhanced-resolve": ["enhanced-resolve@5.22.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A=="], "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - "es-abstract": ["es-abstract@1.24.1", "", { "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.4", "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.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "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-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.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.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], + "es-abstract": ["es-abstract@1.24.2", "", { "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.4", "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.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "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-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.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.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], @@ -1899,11 +1908,11 @@ "es-get-iterator": ["es-get-iterator@1.1.3", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", "is-string": "^1.0.7", "isarray": "^2.0.5", "stop-iteration-iterator": "^1.0.0" } }, "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw=="], - "es-iterator-helpers": ["es-iterator-helpers@1.2.2", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.1", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.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", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" } }, "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w=="], + "es-iterator-helpers": ["es-iterator-helpers@1.3.2", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.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", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw=="], - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "es-module-lexer": ["es-module-lexer@2.1.0", "", {}, "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], "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=="], @@ -1911,11 +1920,13 @@ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + "es-toolkit": ["es-toolkit@1.47.0", "", {}, "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw=="], + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.27.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.2", "@esbuild/android-arm": "0.27.2", "@esbuild/android-arm64": "0.27.2", "@esbuild/android-x64": "0.27.2", "@esbuild/darwin-arm64": "0.27.2", "@esbuild/darwin-x64": "0.27.2", "@esbuild/freebsd-arm64": "0.27.2", "@esbuild/freebsd-x64": "0.27.2", "@esbuild/linux-arm": "0.27.2", "@esbuild/linux-arm64": "0.27.2", "@esbuild/linux-ia32": "0.27.2", "@esbuild/linux-loong64": "0.27.2", "@esbuild/linux-mips64el": "0.27.2", "@esbuild/linux-ppc64": "0.27.2", "@esbuild/linux-riscv64": "0.27.2", "@esbuild/linux-s390x": "0.27.2", "@esbuild/linux-x64": "0.27.2", "@esbuild/netbsd-arm64": "0.27.2", "@esbuild/netbsd-x64": "0.27.2", "@esbuild/openbsd-arm64": "0.27.2", "@esbuild/openbsd-x64": "0.27.2", "@esbuild/openharmony-arm64": "0.27.2", "@esbuild/sunos-x64": "0.27.2", "@esbuild/win32-arm64": "0.27.2", "@esbuild/win32-ia32": "0.27.2", "@esbuild/win32-x64": "0.27.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw=="], + "esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], "esbuild-android-arm64": ["esbuild-android-arm64@0.13.8", "", { "os": "android", "cpu": "arm64" }, "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA=="], @@ -1959,7 +1970,7 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "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-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], + "eslint": ["eslint@9.39.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.5", "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "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.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ=="], "eslint-compat-utils": ["eslint-compat-utils@0.5.1", "", { "dependencies": { "semver": "^7.5.4" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q=="], @@ -1969,9 +1980,9 @@ "eslint-import-resolver-alias": ["eslint-import-resolver-alias@1.1.2", "", { "peerDependencies": { "eslint-plugin-import": ">=1.4.0" } }, "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w=="], - "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.10", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.16.1", "resolve": "^2.0.0-next.6" } }, "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ=="], - "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], + "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" }, "peerDependencies": { "eslint": "*" }, "optionalPeers": ["eslint"] }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], "eslint-plugin-es-x": ["eslint-plugin-es-x@7.8.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", "@eslint-community/regexpp": "^4.11.0", "eslint-compat-utils": "^0.5.1" }, "peerDependencies": { "eslint": ">=8" } }, "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ=="], @@ -1989,11 +2000,11 @@ "eslint-plugin-react-compiler": ["eslint-plugin-react-compiler@19.1.0-rc.2", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "@babel/plugin-proposal-private-methods": "^7.18.6", "hermes-parser": "^0.25.1", "zod": "^3.22.4", "zod-validation-error": "^3.0.3" }, "peerDependencies": { "eslint": ">=7" } }, "sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw=="], - "eslint-plugin-sonarjs": ["eslint-plugin-sonarjs@3.0.5", "", { "dependencies": { "@eslint-community/regexpp": "4.12.1", "builtin-modules": "3.3.0", "bytes": "3.1.2", "functional-red-black-tree": "1.0.1", "jsx-ast-utils-x": "0.1.0", "lodash.merge": "4.6.2", "minimatch": "9.0.5", "scslre": "0.3.0", "semver": "7.7.2", "typescript": ">=5" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0" } }, "sha512-dI62Ff3zMezUToi161hs2i1HX1ie8Ia2hO0jtNBfdgRBicAG4ydy2WPt0rMTrAe3ZrlqhpAO3w1jcQEdneYoFA=="], + "eslint-plugin-sonarjs": ["eslint-plugin-sonarjs@3.0.7", "", { "dependencies": { "@eslint-community/regexpp": "4.12.2", "builtin-modules": "3.3.0", "bytes": "3.1.2", "functional-red-black-tree": "1.0.1", "jsx-ast-utils-x": "0.1.0", "lodash.merge": "4.6.2", "minimatch": "10.1.2", "scslre": "0.3.0", "semver": "7.7.4", "typescript": ">=5" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0" } }, "sha512-62jB20krIPvcwBLAyG3VVKa2ce2j2lL1yCb8Y0ylMRR/dLvCCTiQx8gQbXb+G81k1alPZ2/I3muZinqWQdBbzw=="], "eslint-plugin-storybook": ["eslint-plugin-storybook@10.1.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.8.1" }, "peerDependencies": { "eslint": ">=8", "storybook": "^10.1.0" } }, "sha512-5s/Hi9bKl6xSChPOlHwLrQDW+Nj6OXnl9nnQmbKtEQoCdEuSDbAEDc8zZ9NLAyD2rljE2N6Jhe9iP9+2lm43tQ=="], - "eslint-plugin-unused-imports": ["eslint-plugin-unused-imports@4.3.0", "", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^9.0.0 || ^8.0.0" }, "optionalPeers": ["@typescript-eslint/eslint-plugin"] }, "sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA=="], + "eslint-plugin-unused-imports": ["eslint-plugin-unused-imports@4.4.1", "", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0" }, "optionalPeers": ["@typescript-eslint/eslint-plugin"] }, "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ=="], "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], @@ -2043,7 +2054,7 @@ "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], - "express": ["express@4.22.1", "", { "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.14.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-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g=="], + "express": ["express@4.22.2", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.5", "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.15.1", "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-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q=="], "express-rate-limit": ["express-rate-limit@7.5.1", "", { "peerDependencies": { "express": ">= 4.11" } }, "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw=="], @@ -2063,7 +2074,7 @@ "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], - "fast-copy": ["fast-copy@4.0.2", "", {}, "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw=="], + "fast-copy": ["fast-copy@4.0.3", "", {}, "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], @@ -2077,6 +2088,8 @@ "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + "fast-uri": ["fast-uri@3.1.2", "", {}, "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="], + "faster-babel-types": ["faster-babel-types@0.1.0", "", { "peerDependencies": { "@babel/types": "^7" } }, "sha512-0bEgAyXBdX330U6WbY80Q/h8k0NAPT3Z3sRlC6Fiv0kxekow9JQv2KBL55jIDFxNKcixjvByNnTZfH4axKSB9g=="], "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], @@ -2091,7 +2104,7 @@ "fetch-retry": ["fetch-retry@6.0.0", "", {}, "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag=="], - "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], + "fflate": ["fflate@0.8.3", "", {}, "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA=="], "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], @@ -2115,11 +2128,11 @@ "flatiron": ["flatiron@0.4.3", "", { "dependencies": { "broadway": "~0.3.2", "director": "1.2.7", "optimist": "0.6.0", "prompt": "0.2.14" }, "bin": { "flatiron": "./bin/flatiron" } }, "sha512-+X3/0hl9in0FJPsPB5/xTpkxxMzDSoA4cyon46HtXhrfEbpqBvKxpR+HJGqMjKv4jcBmoLjEtTVIAADJjLjv8A=="], - "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="], "fn.name": ["fn.name@1.1.0", "", {}, "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="], - "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + "follow-redirects": ["follow-redirects@1.16.0", "", { "peerDependencies": { "debug": "*" }, "optionalPeers": ["debug"] }, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], @@ -2151,7 +2164,7 @@ "from": ["from@0.1.7", "", {}, "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g=="], - "fs-extra": ["fs-extra@11.3.3", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg=="], + "fs-extra": ["fs-extra@11.3.5", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg=="], "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], @@ -2183,13 +2196,13 @@ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="], + "get-tsconfig": ["get-tsconfig@4.14.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA=="], "get-value": ["get-value@2.0.6", "", {}, "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA=="], "getpass": ["getpass@0.1.7", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], - "glob": ["glob@13.0.0", "", { "dependencies": { "minimatch": "^10.1.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA=="], + "glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], @@ -2215,7 +2228,7 @@ "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], - "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], + "handlebars": ["handlebars@4.7.9", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ=="], "har-schema": ["har-schema@2.0.0", "", {}, "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="], @@ -2239,7 +2252,7 @@ "has-yarn": ["has-yarn@2.1.0", "", {}, "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], "hast-util-parse-selector": ["hast-util-parse-selector@2.2.5", "", {}, "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ=="], @@ -2265,23 +2278,19 @@ "highlightjs-vue": ["highlightjs-vue@1.0.0", "", {}, "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA=="], - "hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], - - "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], + "hono": ["hono@4.12.23", "", {}, "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA=="], "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], "html-parse-stringify": ["html-parse-stringify@3.0.1", "", { "dependencies": { "void-elements": "3.1.0" } }, "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg=="], - "htmlparser2": ["htmlparser2@10.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.1", "entities": "^6.0.0" } }, "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g=="], + "htmlparser2": ["htmlparser2@10.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "entities": "^7.0.1" } }, "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ=="], "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], - "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - "http-signature": ["http-signature@1.2.0", "", { "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ=="], - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], @@ -2289,7 +2298,7 @@ "i": ["i@0.3.7", "", {}, "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="], - "i18next": ["i18next@25.8.0", "", { "dependencies": { "@babel/runtime": "^7.28.4" }, "peerDependencies": { "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-urrg4HMFFMQZ2bbKRK7IZ8/CTE7D8H4JRlAwqA2ZwDRFfdd0K/4cdbNNLgfn9mo+I/h9wJu61qJzH7jCFAhUZQ=="], + "i18next": ["i18next@25.10.10", "", { "dependencies": { "@babel/runtime": "^7.29.2" }, "peerDependencies": { "typescript": "^5 || ^6" }, "optionalPeers": ["typescript"] }, "sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ=="], "i18next-http-backend": ["i18next-http-backend@2.7.3", "", { "dependencies": { "cross-fetch": "4.0.0" } }, "sha512-FgZxrXdRA5u44xfYsJlEBL4/KH3f2IluBpgV/7riW0YW2VEyM8FzVt2XHAOi6id0Ppj7vZvCZVpp5LrGXnc8Ig=="], @@ -2297,7 +2306,7 @@ "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "idb-keyval": ["idb-keyval@6.2.2", "", {}, "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg=="], + "idb-keyval": ["idb-keyval@6.2.4", "", {}, "sha512-D/NzHWUmYJGXi++z67aMSrnisb9A3621CyRK5G89JyTlN13C8xf0g04DLxUKMufPem3e3L2JAXR6Z00OWy183Q=="], "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], @@ -2305,6 +2314,8 @@ "import-lazy": ["import-lazy@2.1.0", "", {}, "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A=="], + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], @@ -2323,7 +2334,7 @@ "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "is-accessor-descriptor": ["is-accessor-descriptor@1.0.1", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA=="], + "is-accessor-descriptor": ["is-accessor-descriptor@1.0.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g=="], "is-alphabetical": ["is-alphabetical@1.0.4", "", {}, "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="], @@ -2349,7 +2360,7 @@ "is-ci": ["is-ci@2.0.0", "", { "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], "is-data-descriptor": ["is-data-descriptor@1.0.1", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw=="], @@ -2359,7 +2370,7 @@ "is-decimal": ["is-decimal@1.0.4", "", {}, "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="], - "is-descriptor": ["is-descriptor@1.0.3", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw=="], + "is-descriptor": ["is-descriptor@1.0.4", "", { "dependencies": { "is-accessor-descriptor": "^1.0.2", "is-data-descriptor": "^1.0.1" } }, "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww=="], "is-electron": ["is-electron@2.2.2", "", {}, "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg=="], @@ -2397,8 +2408,6 @@ "is-plain-object": ["is-plain-object@2.0.4", "", { "dependencies": { "isobject": "^3.0.1" } }, "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="], - "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], @@ -2427,7 +2436,7 @@ "is-yarn-global": ["is-yarn-global@0.3.0", "", {}, "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="], - "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], @@ -2455,7 +2464,7 @@ "javascript-stringify": ["javascript-stringify@2.1.0", "", {}, "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="], - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "jju": ["jju@1.4.0", "", {}, "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="], @@ -2467,8 +2476,6 @@ "jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], - "jsdom": ["jsdom@27.4.0", "", { "dependencies": { "@acemir/cssom": "^0.9.28", "@asamuzakjp/dom-selector": "^6.7.6", "@exodus/bytes": "^1.6.0", "cssstyle": "^5.3.4", "data-urls": "^6.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.0", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^15.1.0", "ws": "^8.18.3", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], @@ -2483,7 +2490,7 @@ "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], "jsprim": ["jsprim@1.4.2", "", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw=="], @@ -2491,7 +2498,7 @@ "jsx-ast-utils-x": ["jsx-ast-utils-x@0.1.0", "", {}, "sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw=="], - "katex": ["katex@0.16.27", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw=="], + "katex": ["katex@0.16.47", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg=="], "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], @@ -2505,8 +2512,6 @@ "kuler": ["kuler@2.0.0", "", {}, "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="], - "langium": ["langium@3.3.1", "", { "dependencies": { "chevrotain": "~11.0.3", "chevrotain-allstar": "~0.3.0", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.11", "vscode-uri": "~3.0.8" } }, "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w=="], - "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], @@ -2521,31 +2526,29 @@ "lifeforge-docs": ["lifeforge-docs@workspace:docs"], - "lifeforge-ui": ["lifeforge-ui@workspace:packages/lifeforge-ui"], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], - "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], - - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], @@ -2553,13 +2556,13 @@ "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], - "local-pkg": ["local-pkg@1.1.2", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A=="], + "local-pkg": ["local-pkg@1.2.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q=="], "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], - "lodash-es": ["lodash-es@4.17.22", "", {}, "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q=="], + "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], @@ -2599,7 +2602,7 @@ "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], - "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], @@ -2641,7 +2644,7 @@ "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - "mermaid": ["mermaid@11.12.2", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.1", "@mermaid-js/parser": "^0.6.3", "@types/d3": "^7.4.3", "cytoscape": "^3.29.3", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.13", "dayjs": "^1.11.18", "dompurify": "^3.2.5", "katex": "^0.16.22", "khroma": "^2.1.0", "lodash-es": "^4.17.21", "marked": "^16.2.1", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0" } }, "sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w=="], + "mermaid": ["mermaid@11.15.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "es-toolkit": "^1.45.1", "katex": "^0.16.25", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw=="], "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], @@ -2727,11 +2730,11 @@ "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], @@ -2741,7 +2744,7 @@ "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], - "mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "mlly": ["mlly@1.8.2", "", { "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.3" } }, "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA=="], "modern-ahocorasick": ["modern-ahocorasick@1.1.0", "", {}, "sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ=="], @@ -2761,9 +2764,9 @@ "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], - "nan": ["nan@2.24.0", "", {}, "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg=="], + "nan": ["nan@2.27.0", "", {}, "sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], "nanomatch": ["nanomatch@1.2.13", "", { "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" } }, "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA=="], @@ -2781,9 +2784,11 @@ "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], + "node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="], + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + "node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], @@ -2793,7 +2798,7 @@ "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - "nuqs": ["nuqs@2.8.6", "", { "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": "^5 || ^6 || ^7", "react-router-dom": "^5 || ^6 || ^7" }, "optionalPeers": ["@remix-run/react", "@tanstack/react-router", "next", "react-router", "react-router-dom"] }, "sha512-aRxeX68b4ULmhio8AADL2be1FWDy0EPqaByPvIYWrA7Pm07UjlrICp/VPlSnXJNAG0+3MQwv3OporO2sOXMVGA=="], + "nuqs": ["nuqs@2.8.9", "", { "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": "^5 || ^6 || ^7", "react-router-dom": "^5 || ^6 || ^7" }, "optionalPeers": ["@remix-run/react", "@tanstack/react-router", "next", "react-router", "react-router-dom"] }, "sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ=="], "oauth-sign": ["oauth-sign@0.9.0", "", {}, "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="], @@ -2837,11 +2842,11 @@ "onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], - "openai": ["openai@6.16.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-fZ1uBqjFUjXzbGc35fFtYKEOxd20kd9fDpFeqWtsOZWiubY8CZ1NAlXHW3iathaFvqmNtCWMIsosCuyeI7Joxg=="], + "openai": ["openai@6.39.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-O61LIsimY3acVabwvomwFhwrnN36yvHY2quIfy9keEcFytGgWeV35yLHQ6NVMLSBxRpHmcg2yuhCnlu2HT4pLQ=="], "opencollective-postinstall": ["opencollective-postinstall@2.0.3", "", { "bin": { "opencollective-postinstall": "index.js" } }, "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="], - "opentype.js": ["opentype.js@1.3.4", "", { "dependencies": { "string.prototype.codepointat": "^0.2.1", "tiny-inflate": "^1.0.3" }, "bin": { "ot": "bin/ot" } }, "sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw=="], + "opentype.js": ["opentype.js@1.3.5", "", { "bin": { "ot": "bin/ot" } }, "sha512-thKDiELidAApOvXlncrpwDZKJCa9fXLEKM4+FoEWI+qTLDeNb+h7EkN+8a7KQODsB1GZ+Exz9KknkoPrEdXZDw=="], "optimist": ["optimist@0.6.0", "", { "dependencies": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" } }, "sha512-ubrZPyOU0AHpXkmwqfWolap+eHMwQ484AKivkf0ZGyysd6fUJZl7ow9iu5UNV1vCZv46HQ7EM83IC3NGJ820hg=="], @@ -2889,9 +2894,9 @@ "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], - "path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], + "path-to-regexp": ["path-to-regexp@0.1.13", "", {}, "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="], "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], @@ -2909,7 +2914,7 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], @@ -2925,15 +2930,15 @@ "piscina": ["piscina@4.9.2", "", { "optionalDependencies": { "@napi-rs/nice": "^1.0.1" } }, "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ=="], - "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "pkg-types": ["pkg-types@2.3.1", "", { "dependencies": { "confbox": "^0.2.4", "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg=="], "pkginfo": ["pkginfo@0.3.1", "", {}, "sha512-yO5feByMzAp96LtP58wvPKSbaKAi/1C4kV9XpTctr6EepnP6F33RBNOiVrdz9BrPA98U2BMFsTNHo44TWcbQ2A=="], - "playwright": ["playwright@1.57.0", "", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="], + "playwright": ["playwright@1.60.0", "", { "dependencies": { "playwright-core": "1.60.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA=="], - "playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="], + "playwright-core": ["playwright-core@1.60.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA=="], - "pocketbase": ["pocketbase@0.26.6", "", {}, "sha512-Pl7V4y3DWglYITC4cBpclmuIzePRGsb/sXk/Wyqxznwu5JsHA5IILJY81PT2XQ3OSKCakWjbxjYBqtdcghzKvA=="], + "pocketbase": ["pocketbase@0.26.9", "", {}, "sha512-Tiv1/hNuUzRdvT0d8hF03dfzuefQ1WdSRp1A1q3wzFC/WYhQcbU/Qlaubl/3ZDo6xvFXBS8JAgBS/L+ms7nkVQ=="], "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], @@ -2943,7 +2948,7 @@ "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], @@ -2955,9 +2960,9 @@ "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - "prettier": ["prettier@3.8.0", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA=="], + "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], - "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.7.2", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA=="], + "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.7.4", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-UKii4RjY05SNt/WQi6/NcOn/LsT0/ILLXsxygjbRg5/YZelsSu5jTqorYHPDGq4nZy5q5hpCu+XdGZ1xaJEQgw=="], "pretty-bytes": ["pretty-bytes@7.1.0", "", {}, "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw=="], @@ -2985,13 +2990,13 @@ "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], "ps-tree": ["ps-tree@1.2.0", "", { "dependencies": { "event-stream": "=3.3.4" }, "bin": { "ps-tree": "./bin/ps-tree.js" } }, "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA=="], "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], - "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], @@ -3001,7 +3006,7 @@ "qrcode.react": ["qrcode.react@4.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA=="], - "qs": ["qs@6.14.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ=="], + "qs": ["qs@6.15.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw=="], "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], @@ -3017,7 +3022,9 @@ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "react": ["react@19.2.3", "", {}, "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA=="], + "react": ["react@19.2.6", "", {}, "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q=="], + + "react-aria": ["react-aria@3.48.0", "", { "dependencies": { "@internationalized/date": "^3.12.1", "@internationalized/number": "^3.6.6", "@internationalized/string": "^3.2.8", "@react-types/shared": "^3.34.0", "@swc/helpers": "^0.5.0", "aria-hidden": "^1.2.3", "clsx": "^2.0.0", "react-stately": "3.46.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w=="], "react-currency-input-field": ["react-currency-input-field@3.10.0", "", { "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-GRmZogHh1e1LrmgXg/fKHSuRLYUnj/c/AumfvfuDMA0UX1mDR6u2NR0fzDemRdq4tNHNLucJeJ2OKCr3ehqyDA=="], @@ -3025,27 +3032,27 @@ "react-datepicker": ["react-datepicker@8.10.0", "", { "dependencies": { "@floating-ui/react": "^0.27.15", "clsx": "^2.1.1", "date-fns": "^4.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-JIXuA+g+qP3c4MVJpx24o7n1gnv3WV/8A/D6964HucY1FlSEc30+ITPNUfbKZXYHl5rruCtxYCwi2lzn7gaz7g=="], - "react-docgen": ["react-docgen@8.0.2", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.2", "@types/babel__core": "^7.20.5", "@types/babel__traverse": "^7.20.7", "@types/doctrine": "^0.0.9", "@types/resolve": "^1.20.2", "doctrine": "^3.0.0", "resolve": "^1.22.1", "strip-indent": "^4.0.0" } }, "sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA=="], + "react-docgen": ["react-docgen@8.0.3", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.2", "@types/babel__core": "^7.20.5", "@types/babel__traverse": "^7.20.7", "@types/doctrine": "^0.0.9", "@types/resolve": "^1.20.2", "doctrine": "^3.0.0", "resolve": "^1.22.1", "strip-indent": "^4.0.0" } }, "sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w=="], "react-docgen-typescript": ["react-docgen-typescript@2.4.0", "", { "peerDependencies": { "typescript": ">= 4.3.x" } }, "sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg=="], - "react-dom": ["react-dom@19.2.3", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.3" } }, "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg=="], + "react-dom": ["react-dom@19.2.6", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.6" } }, "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g=="], "react-draggable": ["react-draggable@4.5.0", "", { "dependencies": { "clsx": "^2.1.1", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.3.0", "react-dom": ">= 16.3.0" } }, "sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw=="], - "react-dropzone": ["react-dropzone@14.3.8", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug=="], + "react-dropzone": ["react-dropzone@14.4.1", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g=="], - "react-error-boundary": ["react-error-boundary@6.1.0", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-02k9WQ/mUhdbXir0tC1NiMesGzRPaCsJEWU/4bcFrbY1YMZOtHShtZP6zw0SJrBWA/31H0KT9/FgdL8+sPKgHA=="], + "react-error-boundary": ["react-error-boundary@6.1.2", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-3DpCr5HVdZ0caUjYE/kIHBEJN0mNP3ZCgf16c48uJ5TbWjorKVp+YG8W3XqlJ7vJAVNw6wNIImyPXmFydwmyng=="], "react-grid-layout": ["react-grid-layout@1.5.3", "", { "dependencies": { "clsx": "^2.1.1", "fast-equals": "^4.0.3", "prop-types": "^15.8.1", "react-draggable": "^4.4.6", "react-resizable": "^3.0.5", "resize-observer-polyfill": "^1.5.1" }, "peerDependencies": { "react": ">= 16.3.0", "react-dom": ">= 16.3.0" } }, "sha512-KaG6IbjD6fYhagUtIvOzhftXG+ViKZjCjADe86X1KHl7C/dsBN2z0mi14nbvZKTkp0RKiil9RPcJBgq3LnoA8g=="], - "react-i18next": ["react-i18next@16.5.3", "", { "dependencies": { "@babel/runtime": "^7.28.4", "html-parse-stringify": "^3.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 25.6.2", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-fo+/NNch37zqxOzlBYrWMx0uy/yInPkRfjSuy4lqKdaecR17nvCHnEUt3QyzA8XjQ2B/0iW/5BhaHR3ZmukpGw=="], + "react-i18next": ["react-i18next@16.6.6", "", { "dependencies": { "@babel/runtime": "^7.29.2", "html-parse-stringify": "^3.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 25.10.9", "react": ">= 16.8.0", "react-dom": "*", "react-native": "*", "typescript": "^5 || ^6" }, "optionalPeers": ["react-dom", "react-native", "typescript"] }, "sha512-ZgL2HUoW34UKUkOV7uSQFE1CDnRPD+tCR3ywSuWH7u2iapnz86U8Bi3Vrs620qNDzCf1F47NxglCEkchCTDOHw=="], "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], "react-lifecycles-compat": ["react-lifecycles-compat@3.0.4", "", {}, "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="], - "react-medium-image-zoom": ["react-medium-image-zoom@5.4.0", "", { "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-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg=="], + "react-medium-image-zoom": ["react-medium-image-zoom@5.4.5", "", { "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-58QSIRK6X3uw2fSTejJRnH0JuKTZl7ZJYX+sAMaYx4YTEm33gsNdnP5RuQSCnBiAvisQeErqZWAT31bR89WB6g=="], "react-otp-input": ["react-otp-input@3.1.1", "", { "peerDependencies": { "react": ">=16.8.6 || ^17.0.0 || ^18.0.0", "react-dom": ">=16.8.6 || ^17.0.0 || ^18.0.0" } }, "sha512-bjPavgJ0/Zmf/AYi4onj8FbH93IjeD+e8pWwxIJreDEWsU1ILR5fs8jEJmMGWSBe/yyvPP6X/W6Mk9UkOCkTPw=="], @@ -3057,21 +3064,23 @@ "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-resizable": ["react-resizable@3.1.3", "", { "dependencies": { "prop-types": "15.x", "react-draggable": "^4.5.0" }, "peerDependencies": { "react": ">= 16.3", "react-dom": ">= 16.3" } }, "sha512-liJBNayhX7qA4tBJiBD321FDhJxgGTJ07uzH5zSORXoE8h7PyEZ8mLqmosST7ppf6C4zUsbd2gzDMmBCfFp9Lw=="], + "react-resizable": ["react-resizable@3.2.0", "", { "dependencies": { "prop-types": "15.x", "react-draggable": "^4.5.0" }, "peerDependencies": { "react": ">= 16.3", "react-dom": ">= 16.3" } }, "sha512-3NKQ0SLZV7rs3LQHeXlOzDSRQfFrkX6TVet77/Qk03zqiZyee37b7N8/gwDJAA8UUjRz7PdWCCy49hcso45SMQ=="], - "react-router": ["react-router@7.12.0", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw=="], + "react-router": ["react-router@7.15.1", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A=="], "react-scan": ["react-scan@0.0.31", "", { "dependencies": { "@clack/core": "^0.3.5", "@clack/prompts": "^0.8.2", "kleur": "^4.1.5", "mri": "^1.2.0", "playwright": "^1.49.0" }, "bin": { "react-scan": "bin/cli.js" } }, "sha512-reHgQnASWVXwHe0Ibk/EbsEPZhKrmNRf8EUNDmjMi1lzXec+Cj9litKxD0TG2ghAwg5V4sT0wzhiOgZSIefeVg=="], "react-smooth": ["react-smooth@4.0.4", "", { "dependencies": { "fast-equals": "^5.0.1", "prop-types": "^15.8.1", "react-transition-group": "^4.4.5" }, "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-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q=="], + "react-stately": ["react-stately@3.46.0", "", { "dependencies": { "@internationalized/date": "^3.12.1", "@internationalized/number": "^3.6.6", "@internationalized/string": "^3.2.8", "@react-types/shared": "^3.34.0", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA=="], + "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=="], "react-syntax-highlighter": ["react-syntax-highlighter@15.6.6", "", { "dependencies": { "@babel/runtime": "^7.3.1", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", "refractor": "^3.6.0" }, "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw=="], - "react-toastify": ["react-toastify@11.0.5", "", { "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA=="], + "react-toastify": ["react-toastify@11.1.0", "", { "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-e9h23x3phN0wbFeB6yovmWp7lobzV4CaCH0LO8nVP6H7Y+3GbcLpIzMm9dJhcp1RXbpyfvjgpfXqO80QAmn7sg=="], - "react-tooltip": ["react-tooltip@5.30.0", "", { "dependencies": { "@floating-ui/dom": "^1.6.1", "classnames": "^2.3.0" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-Yn8PfbgQ/wmqnL7oBpz1QiDaLKrzZMdSUUdk7nVeGTwzbxCAJiJzR4VSYW+eIO42F1INt57sPUmpgKv0KwJKtg=="], + "react-tooltip": ["react-tooltip@5.30.1", "", { "dependencies": { "@floating-ui/dom": "^1.6.1", "classnames": "^2.3.0" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-1lSPLQXuVooePxadUpmcwLgOsF1mIty7UZTJ9XnyfX4drOzStYs4JMXnazcDLguQr41W5OUZddOp9kfvArdpEQ=="], "react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="], @@ -3149,7 +3158,7 @@ "resize-observer-polyfill": ["resize-observer-polyfill@1.5.1", "", {}, "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="], - "resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + "resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="], "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], @@ -3165,11 +3174,13 @@ "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], - "robust-predicates": ["robust-predicates@3.0.2", "", {}, "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="], + "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], - "rollup": ["rollup@4.55.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.55.3", "@rollup/rollup-android-arm64": "4.55.3", "@rollup/rollup-darwin-arm64": "4.55.3", "@rollup/rollup-darwin-x64": "4.55.3", "@rollup/rollup-freebsd-arm64": "4.55.3", "@rollup/rollup-freebsd-x64": "4.55.3", "@rollup/rollup-linux-arm-gnueabihf": "4.55.3", "@rollup/rollup-linux-arm-musleabihf": "4.55.3", "@rollup/rollup-linux-arm64-gnu": "4.55.3", "@rollup/rollup-linux-arm64-musl": "4.55.3", "@rollup/rollup-linux-loong64-gnu": "4.55.3", "@rollup/rollup-linux-loong64-musl": "4.55.3", "@rollup/rollup-linux-ppc64-gnu": "4.55.3", "@rollup/rollup-linux-ppc64-musl": "4.55.3", "@rollup/rollup-linux-riscv64-gnu": "4.55.3", "@rollup/rollup-linux-riscv64-musl": "4.55.3", "@rollup/rollup-linux-s390x-gnu": "4.55.3", "@rollup/rollup-linux-x64-gnu": "4.55.3", "@rollup/rollup-linux-x64-musl": "4.55.3", "@rollup/rollup-openbsd-x64": "4.55.3", "@rollup/rollup-openharmony-arm64": "4.55.3", "@rollup/rollup-win32-arm64-msvc": "4.55.3", "@rollup/rollup-win32-ia32-msvc": "4.55.3", "@rollup/rollup-win32-x64-gnu": "4.55.3", "@rollup/rollup-win32-x64-msvc": "4.55.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA=="], + "rolldown": ["rolldown@1.0.2", "", { "dependencies": { "@oxc-project/types": "=0.132.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.2", "@rolldown/binding-darwin-arm64": "1.0.2", "@rolldown/binding-darwin-x64": "1.0.2", "@rolldown/binding-freebsd-x64": "1.0.2", "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", "@rolldown/binding-linux-arm64-gnu": "1.0.2", "@rolldown/binding-linux-arm64-musl": "1.0.2", "@rolldown/binding-linux-ppc64-gnu": "1.0.2", "@rolldown/binding-linux-s390x-gnu": "1.0.2", "@rolldown/binding-linux-x64-gnu": "1.0.2", "@rolldown/binding-linux-x64-musl": "1.0.2", "@rolldown/binding-openharmony-arm64": "1.0.2", "@rolldown/binding-wasm32-wasi": "1.0.2", "@rolldown/binding-win32-arm64-msvc": "1.0.2", "@rolldown/binding-win32-x64-msvc": "1.0.2" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g=="], - "rotating-file-stream": ["rotating-file-stream@3.2.7", "", {}, "sha512-SVquhBEVvRFY+nWLUc791Y0MIlyZrEClRZwZFLLRgJKldHyV1z4e2e/dp9LPqCS3AM//uq/c3PnOFgjqnm5P+A=="], + "rollup": ["rollup@4.60.4", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.4", "@rollup/rollup-android-arm64": "4.60.4", "@rollup/rollup-darwin-arm64": "4.60.4", "@rollup/rollup-darwin-x64": "4.60.4", "@rollup/rollup-freebsd-arm64": "4.60.4", "@rollup/rollup-freebsd-x64": "4.60.4", "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", "@rollup/rollup-linux-arm-musleabihf": "4.60.4", "@rollup/rollup-linux-arm64-gnu": "4.60.4", "@rollup/rollup-linux-arm64-musl": "4.60.4", "@rollup/rollup-linux-loong64-gnu": "4.60.4", "@rollup/rollup-linux-loong64-musl": "4.60.4", "@rollup/rollup-linux-ppc64-gnu": "4.60.4", "@rollup/rollup-linux-ppc64-musl": "4.60.4", "@rollup/rollup-linux-riscv64-gnu": "4.60.4", "@rollup/rollup-linux-riscv64-musl": "4.60.4", "@rollup/rollup-linux-s390x-gnu": "4.60.4", "@rollup/rollup-linux-x64-gnu": "4.60.4", "@rollup/rollup-linux-x64-musl": "4.60.4", "@rollup/rollup-openbsd-x64": "4.60.4", "@rollup/rollup-openharmony-arm64": "4.60.4", "@rollup/rollup-win32-arm64-msvc": "4.60.4", "@rollup/rollup-win32-ia32-msvc": "4.60.4", "@rollup/rollup-win32-x64-gnu": "4.60.4", "@rollup/rollup-win32-x64-msvc": "4.60.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g=="], + + "rotating-file-stream": ["rotating-file-stream@3.2.9", "", {}, "sha512-i9i0KkHh12ryl4xtELg+0gyoFre2PJ9RcQQLzquWsiqygyYsrZLckrqqYrthhnJZGZb4g+KUHtcoWYVq34gaug=="], "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], @@ -3181,7 +3192,7 @@ "rrweb-player": ["rrweb-player@1.0.0-alpha.4", "", { "dependencies": { "@tsconfig/svelte": "^1.0.0", "rrweb": "^2.0.0-alpha.4" } }, "sha512-Wlmn9GZ5Fdqa37vd3TzsYdLl/JWEvXNUrLCrYpnOwEgmY409HwVIvvA5aIo7k582LoKgdRCsB87N+f0oWAR0Kg=="], - "rrweb-snapshot": ["rrweb-snapshot@2.0.0-alpha.18", "", { "dependencies": { "postcss": "^8.4.38" } }, "sha512-hBHZL/NfgQX6wO1D9mpwqFu1NJPpim+moIcKhFEjVTZVRUfCln+LOugRc4teVTCISYHN8Cw5e2iNTWCSm+SkoA=="], + "rrweb-snapshot": ["rrweb-snapshot@2.0.0-alpha.20", "", { "dependencies": { "postcss": "^8.4.38" } }, "sha512-YTNf9YVeaGRo/jxY3FKBge2c/Ojd/KTHmuWloUSB+oyPXuY73ZeeG873qMMmhIpqEn7hn7aBF1eWEQmP7wjf8A=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], @@ -3189,7 +3200,7 @@ "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "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" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], @@ -3203,17 +3214,17 @@ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], + "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "scslre": ["scslre@0.3.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.8.0", "refa": "^0.12.0", "regexp-ast-analysis": "^0.7.0" } }, "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ=="], - "sdp": ["sdp@3.2.1", "", {}, "sha512-lwsAIzOPlH8/7IIjjz3K0zYBk7aBVVcvjMwt3M4fLxpjMYyy7i3I97SLHebgn4YBjirkzfp3RvRDWSKsh/+WFw=="], + "sdp": ["sdp@3.2.2", "", {}, "sha512-xZocWwfyp4hkbN4hLWxMjmv2Q8aNa9MhmOZ7L9aCZPT+dZsgRr6wZRrSYE3HTdyk/2pZKPSgqI7ns7Een1xMSA=="], "secure-json-parse": ["secure-json-parse@4.1.0", "", {}, "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA=="], - "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], "semver-diff": ["semver-diff@3.1.1", "", { "dependencies": { "semver": "^6.3.0" } }, "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg=="], @@ -3233,8 +3244,6 @@ "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "shared": ["shared@workspace:shared"], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], @@ -3245,7 +3254,7 @@ "side-channel": ["side-channel@1.1.0", "", { "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" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], @@ -3269,15 +3278,15 @@ "socket.io": ["socket.io@4.8.3", "", { "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A=="], - "socket.io-adapter": ["socket.io-adapter@2.5.6", "", { "dependencies": { "debug": "~4.4.1", "ws": "~8.18.3" } }, "sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ=="], + "socket.io-adapter": ["socket.io-adapter@2.5.7", "", { "dependencies": { "debug": "~4.4.1", "ws": "~8.20.1" } }, "sha512-e0LyK91f3cUxTmv95/KzoLg47+zF+s/sbxRGDNsyG4dmIP8ZSX8ax6byOxfJXeNNtS/8AZlfD+uP7gBeR7DLlg=="], "socket.io-client": ["socket.io-client@4.8.3", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1", "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" } }, "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g=="], - "socket.io-parser": ["socket.io-parser@4.2.5", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1" } }, "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ=="], + "socket.io-parser": ["socket.io-parser@4.2.6", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1" } }, "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg=="], - "sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + "sonic-boom": ["sonic-boom@4.2.1", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -3307,7 +3316,7 @@ "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "std-env": ["std-env@4.1.0", "", {}, "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ=="], "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], @@ -3325,8 +3334,6 @@ "string-width-cjs": ["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=="], - "string.prototype.codepointat": ["string.prototype.codepointat@0.2.1", "", {}, "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="], - "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="], "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "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" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], @@ -3343,7 +3350,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.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -3361,7 +3368,7 @@ "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], - "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], + "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], @@ -3371,9 +3378,7 @@ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "svgo": ["svgo@3.3.2", "", { "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0" }, "bin": "./bin/svgo" }, "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw=="], - - "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + "svgo": ["svgo@3.3.3", "", { "dependencies": { "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0", "sax": "^1.5.0" }, "bin": "./bin/svgo" }, "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng=="], "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], @@ -3383,9 +3388,9 @@ "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], - "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], - "tar": ["tar@7.5.6", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA=="], + "tar": ["tar@7.5.15", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ=="], "tesseract.js": ["tesseract.js@6.0.1", "", { "dependencies": { "bmp-js": "^0.1.0", "idb-keyval": "^6.2.0", "is-url": "^1.2.4", "node-fetch": "^2.6.9", "opencollective-postinstall": "^2.0.3", "regenerator-runtime": "^0.13.3", "tesseract.js-core": "^6.0.0", "wasm-feature-detect": "^1.2.11", "zlibjs": "^0.3.1" } }, "sha512-/sPvMvrCtgxnNRCjbTYbr7BRu0yfWDsMZQ2a/T5aN/L1t8wUQN6tTWv6p6FwzpoEBA0jrN2UD2SX4QQFRdoDbA=="], @@ -3403,29 +3408,23 @@ "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], - "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], - "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], - "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "tinyexec": ["tinyexec@1.2.2", "", {}, "sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], "tinypool": ["tinypool@0.8.4", "", {}, "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ=="], - "tinyrainbow": ["tinyrainbow@3.0.3", "", {}, "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q=="], + "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], - "tldts": ["tldts@7.0.19", "", { "dependencies": { "tldts-core": "^7.0.19" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA=="], - - "tldts-core": ["tldts-core@7.0.19", "", {}, "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A=="], - - "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + "tmp": ["tmp@0.2.7", "", {}, "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw=="], "to-camel-case": ["to-camel-case@1.0.0", "", { "dependencies": { "to-space-case": "^1.0.0" } }, "sha512-nD8pQi5H34kyu1QDMFjzEIYqk0xa9Alt6ZfrdEMuHCFOfTLhDG5pgTu/aAM9Wt9lXILwlXmWP43b8sav0GNE8Q=="], @@ -3447,7 +3446,7 @@ "tough-cookie": ["tough-cookie@2.5.0", "", { "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="], - "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], @@ -3471,7 +3470,7 @@ "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], - "tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="], + "tsx": ["tsx@4.22.3", "", { "dependencies": { "esbuild": "~0.28.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg=="], "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], @@ -3499,15 +3498,15 @@ "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "typescript-eslint": ["typescript-eslint@8.53.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.53.1", "@typescript-eslint/parser": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1", "@typescript-eslint/utils": "8.53.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg=="], + "typescript-eslint": ["typescript-eslint@8.60.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.60.0", "@typescript-eslint/parser": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0", "@typescript-eslint/utils": "8.60.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw=="], - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "undici": ["undici@7.18.2", "", {}, "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw=="], + "undici": ["undici@7.26.0", "", {}, "sha512-3O9Tf67pGhgOv9jM35AbhkXAKi13f3oy3aE4CSgr+TckGeY+/iu97ZXN+J7DpHPzLbVApFd1IFhcnBjREYXYcg=="], "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -3525,7 +3524,7 @@ "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], - "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], @@ -3561,7 +3560,7 @@ "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="], + "uuid": ["uuid@13.0.2", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw=="], "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], @@ -3573,7 +3572,7 @@ "victory-vendor": ["victory-vendor@36.9.2", "", { "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-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ=="], - "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "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-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "vite": ["vite@7.3.3", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "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-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA=="], "vite-node": ["vite-node@1.6.1", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA=="], @@ -3583,33 +3582,21 @@ "vite-tsconfig-paths": ["vite-tsconfig-paths@5.1.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w=="], - "vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "vitest": ["vitest@4.1.7", "", { "dependencies": { "@vitest/expect": "4.1.7", "@vitest/mocker": "4.1.7", "@vitest/pretty-format": "4.1.7", "@vitest/runner": "4.1.7", "@vitest/snapshot": "4.1.7", "@vitest/spy": "4.1.7", "@vitest/utils": "4.1.7", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.7", "@vitest/browser-preview": "4.1.7", "@vitest/browser-webdriverio": "4.1.7", "@vitest/coverage-istanbul": "4.1.7", "@vitest/coverage-v8": "4.1.7", "@vitest/ui": "4.1.7", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA=="], "void-elements": ["void-elements@3.1.0", "", {}, "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="], - "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], - - "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], - - "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], - - "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], - - "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], - "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], - "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], - "wasm-feature-detect": ["wasm-feature-detect@1.8.0", "", {}, "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ=="], "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], - "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], - "webrtc-adapter": ["webrtc-adapter@9.0.3", "", { "dependencies": { "sdp": "^3.2.0" } }, "sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ=="], + "webrtc-adapter": ["webrtc-adapter@9.0.5", "", { "dependencies": { "sdp": "^3.2.0" } }, "sha512-U9vjByy/sK2OMXu5mmfuZFKTMIUQe34c0JXRO+oDrxJTsntdYT2iIFwYMOV7HhMTuktcZLGf2W1N/OcSf9ssWg=="], "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], @@ -3617,7 +3604,7 @@ "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], - "whatwg-url": ["whatwg-url@15.1.0", "", { "dependencies": { "tr46": "^6.0.0", "webidl-conversions": "^8.0.0" } }, "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g=="], + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -3627,7 +3614,7 @@ "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - "which-typed-array": ["which-typed-array@1.1.20", "", { "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" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + "which-typed-array": ["which-typed-array@1.1.21", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw=="], "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], @@ -3649,14 +3636,10 @@ "write-file-atomic": ["write-file-atomic@2.4.3", "", { "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ=="], - "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + "ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], "xdg-basedir": ["xdg-basedir@3.0.0", "", {}, "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ=="], - "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], - - "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], - "xmlhttprequest-ssl": ["xmlhttprequest-ssl@2.1.2", "", {}, "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ=="], "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], @@ -3681,17 +3664,11 @@ "zod-validation-error": ["zod-validation-error@3.5.4", "", { "peerDependencies": { "zod": "^3.24.4" } }, "sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw=="], - "zustand": ["zustand@5.0.10", "", { "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-U1AiltS1O9hSy3rul+Ub82ut2fqIAefiSuwECWt6jlMVUGejvf+5omLcRBSzqbRagSM3hQZbtzdeRc6QVScXTg=="], + "zustand": ["zustand@5.0.13", "", { "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-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ=="], "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "zxing-wasm": ["zxing-wasm@2.2.4", "", { "dependencies": { "@types/emscripten": "^1.41.5", "type-fest": "^5.2.0" } }, "sha512-1gq5zs4wuNTs5umWLypzNNeuJoluFvwmvjiiT3L9z/TMlVveeJRWy7h90xyUqCe+Qq0zL0w7o5zkdDMWDr9aZA=="], - - "@asamuzakjp/css-color/lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="], - - "@asamuzakjp/dom-selector/css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], - - "@asamuzakjp/dom-selector/lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="], + "zxing-wasm": ["zxing-wasm@3.0.3", "", { "dependencies": { "@types/emscripten": "^1.41.5", "type-fest": "^5.6.0" } }, "sha512-DdOn/G5F+qvZELWeO5ZFFwcN611TfMybxPV0LUUoutUmiH2t47MZSB7gLV9O9YLhvudBdnzQNAoFOu4Xz8eOrQ=="], "@axiomhq/js/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], @@ -3703,10 +3680,6 @@ "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@chevrotain/cst-dts-gen/lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], - - "@chevrotain/gast/lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], - "@clack/prompts/is-unicode-supported": ["is-unicode-supported@2.1.0", "", { "bundled": true }, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], @@ -3725,11 +3698,9 @@ "@joshwooding/vite-plugin-react-docgen-typescript/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@lifeforge/client/react-i18next": ["react-i18next@15.7.4", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.4.0", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw=="], + "@lifeforge/client/react-i18next": ["react-i18next@15.7.4", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.4.0", "react": ">= 16.8.0", "react-dom": "*", "react-native": "*", "typescript": "^5" }, "optionalPeers": ["react-dom", "react-native", "typescript"] }, "sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw=="], - "@lifeforge/client/tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], - - "@lifeforge/log/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@lifeforge/log/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@lifeforge/server/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], @@ -3741,23 +3712,27 @@ "@lifeforge/server-utils/tesseract.js": ["tesseract.js@5.1.1", "", { "dependencies": { "bmp-js": "^0.1.0", "idb-keyval": "^6.2.0", "is-electron": "^2.2.2", "is-url": "^1.2.4", "node-fetch": "^2.6.9", "opencollective-postinstall": "^2.0.3", "regenerator-runtime": "^0.13.3", "tesseract.js-core": "^5.1.1", "wasm-feature-detect": "^1.2.11", "zlibjs": "^0.3.1" } }, "sha512-lzVl/Ar3P3zhpUT31NjqeCo1f+D5+YfpZ5J62eo2S14QNVOmHBTtbchHm/YAbOOOzCegFnKf4B3Qih9LuldcYQ=="], - "@lifeforge/server-utils/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "@lifeforge/server-utils/uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], - "@mdx-js/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + "@lifeforge/shared/react-i18next": ["react-i18next@15.7.4", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.4.0", "react": ">= 16.8.0", "react-dom": "*", "react-native": "*", "typescript": "^5" }, "optionalPeers": ["react-dom", "react-native", "typescript"] }, "sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw=="], - "@mdx-js/rollup/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + "@lifeforge/ui/react-i18next": ["react-i18next@15.7.4", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.4.0", "react": ">= 16.8.0", "react-dom": "*", "react-native": "*", "typescript": "^5" }, "optionalPeers": ["react-dom", "react-native", "typescript"] }, "sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw=="], - "@microsoft/api-extractor/minimatch": ["minimatch@10.0.3", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="], + "@lifeforge/ui/uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], - "@microsoft/api-extractor/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "@lifeforge/ui/vitest": ["vitest@1.6.1", "", { "dependencies": { "@vitest/expect": "1.6.1", "@vitest/runner": "1.6.1", "@vitest/snapshot": "1.6.1", "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", "execa": "^8.0.1", "local-pkg": "^0.5.0", "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.5.0", "strip-literal": "^2.0.0", "tinybench": "^2.5.1", "tinypool": "^0.8.3", "vite": "^5.0.0", "vite-node": "1.6.1", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "1.6.1", "@vitest/ui": "1.6.1", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag=="], - "@microsoft/api-extractor/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + "@microsoft/api-extractor/minimatch": ["minimatch@10.2.3", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg=="], - "@microsoft/api-extractor/typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], + "@microsoft/api-extractor/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], - "@microsoft/tsdoc-config/ajv": ["ajv@8.12.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="], + "@microsoft/api-extractor/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@microsoft/tsdoc-config/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "@microsoft/api-extractor/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "@microsoft/tsdoc-config/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + + "@microsoft/tsdoc-config/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "@million/install/@babel/types": ["@babel/types@7.26.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA=="], @@ -3765,7 +3740,7 @@ "@million/install/diff": ["diff@5.2.2", "", {}, "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A=="], - "@million/install/nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], + "@million/install/nanoid": ["nanoid@5.1.11", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg=="], "@million/lint/@babel/core": ["@babel/core@7.26.0", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", "@babel/generator": "^7.26.0", "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.0", "@babel/parser": "^7.26.0", "@babel/template": "^7.25.9", "@babel/traverse": "^7.25.9", "@babel/types": "^7.26.0", "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-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg=="], @@ -3773,7 +3748,7 @@ "@million/lint/esbuild": ["esbuild@0.20.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.20.2", "@esbuild/android-arm": "0.20.2", "@esbuild/android-arm64": "0.20.2", "@esbuild/android-x64": "0.20.2", "@esbuild/darwin-arm64": "0.20.2", "@esbuild/darwin-x64": "0.20.2", "@esbuild/freebsd-arm64": "0.20.2", "@esbuild/freebsd-x64": "0.20.2", "@esbuild/linux-arm": "0.20.2", "@esbuild/linux-arm64": "0.20.2", "@esbuild/linux-ia32": "0.20.2", "@esbuild/linux-loong64": "0.20.2", "@esbuild/linux-mips64el": "0.20.2", "@esbuild/linux-ppc64": "0.20.2", "@esbuild/linux-riscv64": "0.20.2", "@esbuild/linux-s390x": "0.20.2", "@esbuild/linux-x64": "0.20.2", "@esbuild/netbsd-x64": "0.20.2", "@esbuild/openbsd-x64": "0.20.2", "@esbuild/sunos-x64": "0.20.2", "@esbuild/win32-arm64": "0.20.2", "@esbuild/win32-ia32": "0.20.2", "@esbuild/win32-x64": "0.20.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g=="], - "@million/lint/nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], + "@million/lint/nanoid": ["nanoid@5.1.11", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg=="], "@million/lint/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], @@ -3781,17 +3756,15 @@ "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@rushstack/node-core-library/ajv": ["ajv@8.13.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.4.1" } }, "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA=="], + "@rushstack/node-core-library/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], "@rushstack/node-core-library/import-lazy": ["import-lazy@4.0.0", "", {}, "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw=="], - "@rushstack/node-core-library/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "@rushstack/node-core-library/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], - "@rushstack/node-core-library/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + "@rushstack/node-core-library/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@rushstack/rig-package/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], - - "@rushstack/rig-package/strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + "@rushstack/rig-package/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "@rushstack/ts-command-line/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], @@ -3801,85 +3774,79 @@ "@storybook/react-vite/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@storybook/react-vite/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "@storybook/react-vite/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "@storybook/react-vite/tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], "@tailwindcss/node/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@tailwindcss/node/tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@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@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], - - "@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/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@tailwindcss/postcss/tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], - - "@tailwindcss/vite/tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], - "@testing-library/dom/aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], "@testing-library/dom/dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], "@testing-library/dom/pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], - "@types/bcrypt/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/bcrypt/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/body-parser/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/body-parser/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@types/chai/assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], - "@types/connect/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/connect/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/cors/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/cors/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/express-serve-static-core/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/express-serve-static-core/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/jsdom/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/jsdom/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/morgan/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/morgan/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/node-fetch/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/node-fetch/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/prompts/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/prompts/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/request/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/request/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@types/request/form-data": ["form-data@2.5.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A=="], - "@types/send/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/send/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/serve-static/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/serve-static/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@types/serve-static/@types/send": ["@types/send@0.17.6", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="], - "@types/speakeasy/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/speakeasy/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@types/tar/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/tar/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@types/tar/minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], - "@types/yauzl/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "@types/ws/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@typescript-eslint/project-service/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "@types/yauzl/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@typescript-eslint/project-service/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@vanilla-extract/compiler/@vanilla-extract/css": ["@vanilla-extract/css@1.18.0", "", { "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.9", "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.2.3", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "sha512-/p0dwOjr0o8gE5BRQ5O9P0u/2DjUd6Zfga2JGmE4KaY7ZITWMszTzk4x4CPlM5cKkRr2ZGzbE6XkuPNfp9shSQ=="], + "@vanilla-extract/compiler/vite-node": ["vite-node@6.0.0", "", { "dependencies": { "cac": "^7.0.0", "es-module-lexer": "^2.0.0", "obug": "^2.1.1", "pathe": "^2.0.3", "vite": "^8.0.0" }, "bin": { "vite-node": "dist/cli.mjs" } }, "sha512-oj4PVrT+pDh6GYf5wfUXkcZyekYS8kKPfLPXVl8qe324Ec6l4K2DUKNadRbZ3LQl0qGcDz+PyOo7ZAh00Y+JjQ=="], - "@vanilla-extract/compiler/vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], - - "@vanilla-extract/integration/@vanilla-extract/css": ["@vanilla-extract/css@1.18.0", "", { "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.9", "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.2.3", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "sha512-/p0dwOjr0o8gE5BRQ5O9P0u/2DjUd6Zfga2JGmE4KaY7ZITWMszTzk4x4CPlM5cKkRr2ZGzbE6XkuPNfp9shSQ=="], + "@vanilla-extract/integration/esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], "@vitest/browser/@vitest/utils": ["@vitest/utils@1.6.1", "", { "dependencies": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", "loupe": "^2.3.7", "pretty-format": "^29.7.0" } }, "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g=="], @@ -3891,21 +3858,25 @@ "@vitest/coverage-v8/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "@vitest/coverage-v8/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "@vitest/coverage-v8/vitest": ["vitest@1.6.1", "", { "dependencies": { "@vitest/expect": "1.6.1", "@vitest/runner": "1.6.1", "@vitest/snapshot": "1.6.1", "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", "execa": "^8.0.1", "local-pkg": "^0.5.0", "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.5.0", "strip-literal": "^2.0.0", "tinybench": "^2.5.1", "tinypool": "^0.8.3", "vite": "^5.0.0", "vite-node": "1.6.1", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "1.6.1", "@vitest/ui": "1.6.1", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag=="], + "@vitest/expect/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], "@vitest/mocker/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "@vitest/snapshot/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@vue/compiler-core/entities": ["entities@7.0.0", "", {}, "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ=="], + "@vue/compiler-core/entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], "@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@vue/language-core/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@vue/language-core/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], - "ajv-formats/ajv": ["ajv@8.13.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.4.1" } }, "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA=="], + "ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], "anymatch/micromatch": ["micromatch@3.1.10", "", { "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "extglob": "^2.0.4", "fragment-cache": "^0.2.1", "kind-of": "^6.0.2", "nanomatch": "^1.2.9", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } }, "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg=="], @@ -3927,9 +3898,7 @@ "broadway/winston": ["winston@0.8.0", "", { "dependencies": { "async": "0.2.x", "colors": "0.6.x", "cycle": "1.0.x", "eyes": "0.1.x", "pkginfo": "0.3.x", "stack-trace": "0.0.x" } }, "sha512-BoFzn3FEOWlq+1rDbDrbD093E3IRqukS8DYiqtY4vblIFR+5MSGUstAU228MGJa0vodiqm/iU2c8OGw6Iorx1g=="], - "bun-types/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], - - "chevrotain/lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], + "bun-types/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "class-utils/define-property": ["define-property@0.2.5", "", { "dependencies": { "is-descriptor": "^0.1.0" } }, "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA=="], @@ -3949,10 +3918,6 @@ "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], - "cssstyle/css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], - - "cssstyle/lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="], - "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -3963,30 +3928,32 @@ "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], - "data-urls/whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], - "decode-named-character-reference/character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + "deep-equal/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "effect/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "encoding-sniffer/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - "engine.io/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "engine.io/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "engine.io/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "engine.io/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + "engine.io/ws": ["ws@8.20.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w=="], - "engine.io-client/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + "engine.io-client/ws": ["ws@8.20.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w=="], + + "es-get-iterator/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "eslint-config-standard-with-typescript/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], + "eslint-config-standard-with-typescript/@typescript-eslint/parser": ["@typescript-eslint/parser@6.21.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0", "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ=="], "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - "eslint-import-resolver-node/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], - "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -3995,25 +3962,21 @@ "eslint-plugin-n/globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="], - "eslint-plugin-n/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "eslint-plugin-n/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils": ["@typescript-eslint/utils@8.59.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.59.0", "@typescript-eslint/types": "8.59.0", "@typescript-eslint/typescript-estree": "8.59.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils": ["@typescript-eslint/utils@8.60.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA=="], "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-react-compiler/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "eslint-plugin-sonarjs/@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + "eslint-plugin-sonarjs/minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="], - "eslint-plugin-sonarjs/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "eslint-plugin-sonarjs/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "eslint-plugin-sonarjs/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "eslint-plugin-storybook/@typescript-eslint/utils": ["@typescript-eslint/utils@8.60.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA=="], - "eslint-plugin-storybook/@typescript-eslint/utils": ["@typescript-eslint/utils@8.53.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg=="], - - "estree-util-to-js/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - - "eval/@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + "eval/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], @@ -4039,7 +4002,7 @@ "formdata-node/web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], - "glob/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], + "glob/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "global-dirs/ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], @@ -4047,6 +4010,8 @@ "groq-sdk/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "has-values/kind-of": ["kind-of@4.0.0", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw=="], "hastscript/@types/hast": ["@types/hast@2.3.10", "", { "dependencies": { "@types/unist": "^2" } }, "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw=="], @@ -4057,6 +4022,8 @@ "hastscript/space-separated-tokens": ["space-separated-tokens@1.1.5", "", {}, "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="], + "htmlparser2/entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], "is-ci/ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], @@ -4067,31 +4034,15 @@ "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jsdom/parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="], - - "jsdom/tough-cookie": ["tough-cookie@6.0.0", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w=="], - "katex/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], - "langium/vscode-uri": ["vscode-uri@3.0.8", "", {}, "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="], - - "lifeforge-docs/tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], - - "lifeforge-ui/react-i18next": ["react-i18next@15.7.4", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.4.0", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw=="], - - "lifeforge-ui/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - - "lifeforge-ui/vitest": ["vitest@1.6.1", "", { "dependencies": { "@vitest/expect": "1.6.1", "@vitest/runner": "1.6.1", "@vitest/snapshot": "1.6.1", "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", "execa": "^8.0.1", "local-pkg": "^0.5.0", "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.5.0", "strip-literal": "^2.0.0", "tinybench": "^2.5.1", "tinypool": "^0.8.3", "vite": "^5.0.0", "vite-node": "1.6.1", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "1.6.1", "@vitest/ui": "1.6.1", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "mdast-util-mdx-jsx/parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - "mermaid/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "micromatch/braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], "mixin-deep/is-extendable": ["is-extendable@1.0.1", "", { "dependencies": { "is-plain-object": "^2.0.4" } }, "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="], @@ -4105,7 +4056,7 @@ "nconf/async": ["async@0.2.9", "", {}, "sha512-OAtM6mexGteNKdU29wcUfRW+VuBr94A3hx9h9yzBnPaQAbKoW1ORd68XM4CCAOpdL5wlNFgO29hsY1TKv2vAKw=="], - "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "node-exports-info/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], @@ -4121,7 +4072,7 @@ "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - "path-scurry/lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="], + "path-scurry/lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], "pino-pretty/pino-abstract-transport": ["pino-abstract-transport@3.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="], @@ -4137,11 +4088,11 @@ "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - "react-datepicker/@floating-ui/react": ["@floating-ui/react@0.27.16", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.6", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g=="], + "react-datepicker/@floating-ui/react": ["@floating-ui/react@0.27.19", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog=="], "react-docgen/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - "react-docgen/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "react-docgen/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "react-scan/@clack/prompts": ["@clack/prompts@0.8.2", "", { "dependencies": { "@clack/core": "0.3.5", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ=="], @@ -4151,6 +4102,8 @@ "react-virtualized/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], + "recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "redent/strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], "refractor/prismjs": ["prismjs@1.27.0", "", {}, "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="], @@ -4159,20 +4112,28 @@ "request/form-data": ["form-data@2.3.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="], - "request/qs": ["qs@6.5.3", "", {}, "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="], + "request/qs": ["qs@6.5.5", "", {}, "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ=="], "request/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "rollup/@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "rrweb/fflate": ["fflate@0.4.8", "", {}, "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="], + "rrweb/rrweb-snapshot": ["rrweb-snapshot@2.0.0-alpha.4", "", {}, "sha512-KQ2OtPpXO5jLYqg1OnXS/Hf+EzqnZyP5A+XPqBCjYpj3XIje/Od4gdUwjbFo3cVuWq5Cw5Y1d3/xwgIS7/XpQQ=="], + + "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "semver-diff/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "shared/react-i18next": ["react-i18next@15.7.4", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.4.0", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw=="], - "shush/strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], "snapdragon/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -4185,7 +4146,7 @@ "snapdragon-util/kind-of": ["kind-of@3.2.2", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="], - "socket.io-adapter/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + "socket.io-adapter/ws": ["ws@8.20.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w=="], "split-string/extend-shallow": ["extend-shallow@3.0.2", "", { "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" } }, "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q=="], @@ -4221,17 +4182,17 @@ "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "tsup/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.53.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/type-utils": "8.53.1", "@typescript-eslint/utils": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.53.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag=="], + "tsx/esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], - "typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.53.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg=="], + "typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.60.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.60.0", "@typescript-eslint/type-utils": "8.60.0", "@typescript-eslint/utils": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.60.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw=="], - "typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.53.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.53.1", "@typescript-eslint/tsconfig-utils": "8.53.1", "@typescript-eslint/types": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg=="], + "typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.60.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg=="], - "typescript-eslint/@typescript-eslint/utils": ["@typescript-eslint/utils@8.53.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg=="], + "typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.60.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.60.0", "@typescript-eslint/tsconfig-utils": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g=="], + + "typescript-eslint/@typescript-eslint/utils": ["@typescript-eslint/utils@8.60.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA=="], "unset-value/has-value": ["has-value@0.3.1", "", { "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", "isobject": "^2.0.0" } }, "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q=="], @@ -4253,7 +4214,7 @@ "vite-plugin-mdx/esbuild": ["esbuild@0.13.8", "", { "optionalDependencies": { "esbuild-android-arm64": "0.13.8", "esbuild-darwin-64": "0.13.8", "esbuild-darwin-arm64": "0.13.8", "esbuild-freebsd-64": "0.13.8", "esbuild-freebsd-arm64": "0.13.8", "esbuild-linux-32": "0.13.8", "esbuild-linux-64": "0.13.8", "esbuild-linux-arm": "0.13.8", "esbuild-linux-arm64": "0.13.8", "esbuild-linux-mips64le": "0.13.8", "esbuild-linux-ppc64le": "0.13.8", "esbuild-netbsd-64": "0.13.8", "esbuild-openbsd-64": "0.13.8", "esbuild-sunos-64": "0.13.8", "esbuild-windows-32": "0.13.8", "esbuild-windows-64": "0.13.8", "esbuild-windows-arm64": "0.13.8" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw=="], - "vite-plugin-mdx/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "vite-plugin-mdx/resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "vite-plugin-mdx/unified": ["unified@9.2.2", "", { "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" } }, "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ=="], @@ -4261,6 +4222,8 @@ "whatwg-encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "winston/async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -4269,9 +4232,7 @@ "write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "zxing-wasm/type-fest": ["type-fest@5.4.1", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ=="], - - "@asamuzakjp/dom-selector/css-tree/mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], + "zxing-wasm/type-fest": ["type-fest@5.6.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA=="], "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], @@ -4279,21 +4240,43 @@ "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "@joshwooding/vite-plugin-react-docgen-typescript/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@joshwooding/vite-plugin-react-docgen-typescript/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], "@joshwooding/vite-plugin-react-docgen-typescript/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "@lifeforge/log/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "@lifeforge/server-utils/groq-sdk/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "@lifeforge/server-utils/openai/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "@lifeforge/server-utils/tesseract.js/tesseract.js-core": ["tesseract.js-core@5.1.1", "", {}, "sha512-KX3bYSU5iGcO1XJa+QGPbi+Zjo2qq6eBhNjSGR5E5q0JtzkoipJKOUQD7ph8kFyteCEfEQ0maWLu8MCXtvX5uQ=="], - "@microsoft/api-extractor/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "@lifeforge/ui/vitest/@vitest/expect": ["@vitest/expect@1.6.1", "", { "dependencies": { "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "chai": "^4.3.10" } }, "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog=="], + + "@lifeforge/ui/vitest/@vitest/runner": ["@vitest/runner@1.6.1", "", { "dependencies": { "@vitest/utils": "1.6.1", "p-limit": "^5.0.0", "pathe": "^1.1.1" } }, "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA=="], + + "@lifeforge/ui/vitest/@vitest/snapshot": ["@vitest/snapshot@1.6.1", "", { "dependencies": { "magic-string": "^0.30.5", "pathe": "^1.1.1", "pretty-format": "^29.7.0" } }, "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ=="], + + "@lifeforge/ui/vitest/@vitest/spy": ["@vitest/spy@1.6.1", "", { "dependencies": { "tinyspy": "^2.2.0" } }, "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw=="], + + "@lifeforge/ui/vitest/@vitest/utils": ["@vitest/utils@1.6.1", "", { "dependencies": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", "loupe": "^2.3.7", "pretty-format": "^29.7.0" } }, "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g=="], + + "@lifeforge/ui/vitest/local-pkg": ["local-pkg@0.5.1", "", { "dependencies": { "mlly": "^1.7.3", "pkg-types": "^1.2.1" } }, "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ=="], + + "@lifeforge/ui/vitest/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "@lifeforge/ui/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "@lifeforge/ui/vitest/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + + "@lifeforge/ui/vitest/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + + "@microsoft/api-extractor/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "@microsoft/tsdoc-config/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "@million/lint/@babel/core/@babel/types": ["@babel/types@7.28.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg=="], + "@million/lint/@babel/core/@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], "@million/lint/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -4345,8 +4328,6 @@ "@rushstack/node-core-library/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "@rushstack/node-core-library/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "@storybook/builder-vite/@vitest/mocker/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], "@storybook/builder-vite/@vitest/mocker/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], @@ -4357,7 +4338,95 @@ "@testing-library/dom/pretty-format/react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@types/bcrypt/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/body-parser/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/connect/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/cors/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/express-serve-static-core/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/jsdom/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/morgan/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/node-fetch/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/prompts/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/request/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/send/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/serve-static/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/speakeasy/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/tar/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/ws/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/yauzl/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], + + "@vanilla-extract/compiler/vite-node/cac": ["cac@7.0.0", "", {}, "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ=="], + + "@vanilla-extract/compiler/vite-node/vite": ["vite@8.0.14", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.2", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="], + + "@vanilla-extract/integration/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="], + + "@vanilla-extract/integration/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="], + + "@vanilla-extract/integration/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="], + + "@vanilla-extract/integration/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="], + + "@vanilla-extract/integration/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="], + + "@vanilla-extract/integration/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="], + + "@vanilla-extract/integration/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="], + + "@vanilla-extract/integration/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], "@vitest/browser/vitest/@vitest/expect": ["@vitest/expect@1.6.1", "", { "dependencies": { "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "chai": "^4.3.10" } }, "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog=="], @@ -4371,6 +4440,8 @@ "@vitest/browser/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@vitest/browser/vitest/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "@vitest/browser/vitest/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], "@vitest/coverage-v8/vitest/@vitest/expect": ["@vitest/expect@1.6.1", "", { "dependencies": { "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "chai": "^4.3.10" } }, "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog=="], @@ -4389,7 +4460,7 @@ "@vitest/coverage-v8/vitest/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], - "@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -4405,7 +4476,9 @@ "broadway/winston/async": ["async@0.2.10", "", {}, "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="], - "class-utils/define-property/is-descriptor": ["is-descriptor@0.1.7", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg=="], + "bun-types/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "class-utils/define-property/is-descriptor": ["is-descriptor@0.1.8", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ=="], "cliff/winston/async": ["async@0.2.10", "", {}, "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="], @@ -4415,8 +4488,6 @@ "color/color-convert/color-name": ["color-name@2.1.0", "", {}, "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg=="], - "concat-stream/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - "concat-stream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "concat-stream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], @@ -4425,41 +4496,41 @@ "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], - "cssstyle/css-tree/mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], - "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], "d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], + "engine.io/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" } }, "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg=="], "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.21.0", "", {}, "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg=="], - "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], + "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ=="], "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.59.0", "", { "dependencies": { "@typescript-eslint/types": "8.59.0", "@typescript-eslint/visitor-keys": "8.59.0" } }, "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0" } }, "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.59.0", "", {}, "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.59.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.59.0", "@typescript-eslint/tsconfig-utils": "8.59.0", "@typescript-eslint/types": "8.59.0", "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.60.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.60.0", "@typescript-eslint/tsconfig-utils": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g=="], - "eslint-plugin-sonarjs/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0" } }, "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1" } }, "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], - - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.53.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.53.1", "@typescript-eslint/tsconfig-utils": "8.53.1", "@typescript-eslint/types": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.60.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.60.0", "@typescript-eslint/tsconfig-utils": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g=="], "eslint/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "eval/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "expand-brackets/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "expand-brackets/define-property/is-descriptor": ["is-descriptor@0.1.7", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg=="], + "expand-brackets/define-property/is-descriptor": ["is-descriptor@0.1.8", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -4471,6 +4542,8 @@ "forever-monitor/chokidar/readdirp": ["readdirp@2.2.1", "", { "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" } }, "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ=="], + "glob/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], + "groq-sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "has-values/kind-of/is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], @@ -4479,24 +4552,6 @@ "is-number/kind-of/is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], - "lifeforge-ui/vitest/@vitest/expect": ["@vitest/expect@1.6.1", "", { "dependencies": { "@vitest/spy": "1.6.1", "@vitest/utils": "1.6.1", "chai": "^4.3.10" } }, "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog=="], - - "lifeforge-ui/vitest/@vitest/runner": ["@vitest/runner@1.6.1", "", { "dependencies": { "@vitest/utils": "1.6.1", "p-limit": "^5.0.0", "pathe": "^1.1.1" } }, "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA=="], - - "lifeforge-ui/vitest/@vitest/snapshot": ["@vitest/snapshot@1.6.1", "", { "dependencies": { "magic-string": "^0.30.5", "pathe": "^1.1.1", "pretty-format": "^29.7.0" } }, "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ=="], - - "lifeforge-ui/vitest/@vitest/spy": ["@vitest/spy@1.6.1", "", { "dependencies": { "tinyspy": "^2.2.0" } }, "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw=="], - - "lifeforge-ui/vitest/@vitest/utils": ["@vitest/utils@1.6.1", "", { "dependencies": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", "loupe": "^2.3.7", "pretty-format": "^29.7.0" } }, "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g=="], - - "lifeforge-ui/vitest/local-pkg": ["local-pkg@0.5.1", "", { "dependencies": { "mlly": "^1.7.3", "pkg-types": "^1.2.1" } }, "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ=="], - - "lifeforge-ui/vitest/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - - "lifeforge-ui/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - - "lifeforge-ui/vitest/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], - "mdast-util-mdx-jsx/parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "mdast-util-mdx-jsx/parse-entities/character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], @@ -4517,11 +4572,7 @@ "nanomatch/extend-shallow/is-extendable": ["is-extendable@1.0.1", "", { "dependencies": { "is-plain-object": "^2.0.4" } }, "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="], - "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - - "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - - "object-copy/define-property/is-descriptor": ["is-descriptor@0.1.7", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg=="], + "object-copy/define-property/is-descriptor": ["is-descriptor@0.1.8", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ=="], "object-copy/kind-of/is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], @@ -4537,11 +4588,11 @@ "snapdragon/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "snapdragon/define-property/is-descriptor": ["is-descriptor@0.1.7", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg=="], + "snapdragon/define-property/is-descriptor": ["is-descriptor@0.1.8", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ=="], "split-string/extend-shallow/is-extendable": ["is-extendable@1.0.1", "", { "dependencies": { "is-plain-object": "^2.0.4" } }, "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="], - "static-extend/define-property/is-descriptor": ["is-descriptor@0.1.7", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg=="], + "static-extend/define-property/is-descriptor": ["is-descriptor@0.1.8", "", { "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" } }, "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ=="], "storybook/@vitest/expect/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], @@ -4557,33 +4608,85 @@ "to-regex/extend-shallow/is-extendable": ["is-extendable@1.0.1", "", { "dependencies": { "is-plain-object": "^2.0.4" } }, "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1" } }, "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ=="], + "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1", "@typescript-eslint/utils": "8.53.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w=="], + "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "tsx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="], + + "tsx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="], + + "tsx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="], + + "tsx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="], + + "tsx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="], + + "tsx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="], + + "tsx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="], + + "tsx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="], + + "tsx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="], + + "tsx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="], + + "tsx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="], + + "tsx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="], + + "tsx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="], + + "tsx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="], + + "tsx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="], + + "tsx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="], + + "tsx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="], + + "tsx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="], + + "tsx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="], + + "tsx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="], + + "tsx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="], + + "tsx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="], + + "tsx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="], + + "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0" } }, "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0", "@typescript-eslint/utils": "8.60.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], "typescript-eslint/@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], - "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1" } }, "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ=="], + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0" } }, "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw=="], - "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], - "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], - "typescript-eslint/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "typescript-eslint/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "typescript-eslint/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], - "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1" } }, "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ=="], + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0" } }, "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw=="], - "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], "unset-value/has-value/has-values": ["has-values@0.1.4", "", {}, "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ=="], @@ -4613,15 +4716,19 @@ "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@joshwooding/vite-plugin-react-docgen-typescript/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@joshwooding/vite-plugin-react-docgen-typescript/glob/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], "@lifeforge/server-utils/groq-sdk/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "@lifeforge/server-utils/openai/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "@microsoft/api-extractor/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "@lifeforge/ui/vitest/@vitest/spy/tinyspy": ["tinyspy@2.2.1", "", {}, "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A=="], - "@rushstack/node-core-library/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "@lifeforge/ui/vitest/local-pkg/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "@lifeforge/ui/vitest/vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + + "@microsoft/api-extractor/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "@vitest/browser/vitest/@vitest/spy/tinyspy": ["tinyspy@2.2.1", "", {}, "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A=="], @@ -4643,25 +4750,21 @@ "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.59.0", "", { "dependencies": { "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.59.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.59.0", "@typescript-eslint/types": "^8.59.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw=="], - - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.59.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg=="], - - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.59.0", "", { "dependencies": { "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], "forever-monitor/chokidar/glob-parent/is-glob": ["is-glob@3.1.0", "", { "dependencies": { "is-extglob": "^2.1.0" } }, "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw=="], @@ -4669,11 +4772,7 @@ "forever-monitor/chokidar/readdirp/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "lifeforge-ui/vitest/@vitest/spy/tinyspy": ["tinyspy@2.2.1", "", {}, "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A=="], - - "lifeforge-ui/vitest/local-pkg/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - - "lifeforge-ui/vitest/vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "mdast-util-mdx-jsx/parse-entities/is-alphanumerical/is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], @@ -4693,17 +4792,21 @@ "storybook/@vitest/expect/chai/pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.53.1", "", {}, "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "typescript-eslint/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], - "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], - "unset-value/has-value/isobject/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], + + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], "update-notifier-cjs/configstore/dot-prop/is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], @@ -4765,6 +4868,56 @@ "vite-plugin-mdx/unified/vfile/vfile-message": ["vfile-message@2.0.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ=="], + "@lifeforge/ui/vitest/local-pkg/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "@lifeforge/ui/vitest/local-pkg/pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], + + "@lifeforge/ui/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + "@vitest/browser/vitest/local-pkg/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], "@vitest/browser/vitest/local-pkg/pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], @@ -4865,78 +5018,36 @@ "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "eslint-config-standard-with-typescript/@typescript-eslint/parser/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], - "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], - "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "forever-monitor/chokidar/readdirp/micromatch/extend-shallow": ["extend-shallow@3.0.2", "", { "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" } }, "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q=="], - "forever-monitor/chokidar/readdirp/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - "forever-monitor/chokidar/readdirp/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "forever-monitor/chokidar/readdirp/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "lifeforge-ui/vitest/local-pkg/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "lifeforge-ui/vitest/local-pkg/pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "lifeforge-ui/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - "micromatch/braces/fill-range/to-regex-range/is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "eslint-plugin-storybook/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "forever-monitor/chokidar/readdirp/micromatch/extend-shallow/is-extendable": ["is-extendable@1.0.1", "", { "dependencies": { "is-plain-object": "^2.0.4" } }, "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="], } } diff --git a/client/index.html b/client/index.html index 0802957c1..7050f5947 100644 --- a/client/index.html +++ b/client/index.html @@ -27,23 +27,56 @@ align-items: center; justify-content: center; background-color: black; - color: white; font-family: 'Inter', sans-serif; + z-index: 9999; + } + + .loader { + width: 36px; + height: 36px; + border: 4px solid white; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: rotation 1s linear infinite; + } + + @keyframes rotation { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .forging-text { + font-size: 1.125rem; + font-weight: 500; + color: white; + } + + .dark .preloader { + background-color: var(--color-bg-950); + } + + #root { + height: 100vh; + width: 100%; + background-color: white; + color: black; + } + + .dark #root { + background-color: var(--color-bg-950); + color: var(--color-bg-50); } - -
- -

Forging things together...

+ +
+ +

Forging things together...

-
+
diff --git a/client/package.json b/client/package.json index a5deaa475..9942aff84 100644 --- a/client/package.json +++ b/client/package.json @@ -39,7 +39,7 @@ "eslint-plugin-react-compiler": "^19.1.0-rc.2", "i18next": "^25.6.0", "i18next-http-backend": "^2.7.3", - "lifeforge-ui": "workspace:*", + "@lifeforge/ui": "workspace:*", "lodash": "^4.17.21", "lodash-es": "^4.17.22", "opentype.js": "^1.3.4", @@ -57,7 +57,7 @@ "react-toastify": "^11.0.5", "react-virtualized": "^9.22.6", "recharts": "^2.15.0", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "socket.io-client": "^4.8.1", "tailwindcss": "^4.1.14", "tailwindcss-animate": "^1.0.7", @@ -78,4 +78,4 @@ "glob": "^13.0.0", "vite": "^7.0.5" } -} \ No newline at end of file +} diff --git a/client/public/manifest.json b/client/public/manifest.json index 1f5b76fe4..25804154a 100644 --- a/client/public/manifest.json +++ b/client/public/manifest.json @@ -49,4 +49,4 @@ "type": "image/png" } ] -} \ No newline at end of file +} diff --git a/client/src/App.tsx b/client/src/App.tsx index cd8b8b165..ee4941b14 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,7 +1,7 @@ -import { ErrorScreen } from 'lifeforge-ui' import { useEffect } from 'react' import { ErrorBoundary } from 'react-error-boundary' -import { ModalStoreProvider } from 'shared' + +import { ErrorScreen, Flex, ModalProvider, Text } from '@lifeforge/ui' import './i18n' import './index.css' @@ -23,14 +23,29 @@ function App() { } > -
- - - -
+ + + + + +
) } diff --git a/client/src/core/accountSettings/components/AvatarColumn.tsx b/client/src/core/accountSettings/components/AvatarColumn.tsx index 0efad67ef..7c88ae58b 100644 --- a/client/src/core/accountSettings/components/AvatarColumn.tsx +++ b/client/src/core/accountSettings/components/AvatarColumn.tsx @@ -1,16 +1,17 @@ import { Icon } from '@iconify/react' import { useMutation } from '@tanstack/react-query' +import { useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { toast } from 'react-toastify' + +import { useAuth } from '@lifeforge/shared' import { Button, ConfirmationModal, FilePickerModal, - OptionsColumn -} from 'lifeforge-ui' -import { useModalStore } from 'lifeforge-ui' -import { useCallback } from 'react' -import { useTranslation } from 'react-i18next' -import { toast } from 'react-toastify' -import { useAuth } from 'shared' + OptionsColumn, + useModalStore +} from '@lifeforge/ui' import forgeAPI from '@/forgeAPI' diff --git a/client/src/core/accountSettings/components/OrdinaryColumn.tsx b/client/src/core/accountSettings/components/OrdinaryColumn.tsx index a9d79d8ad..814f61a23 100644 --- a/client/src/core/accountSettings/components/OrdinaryColumn.tsx +++ b/client/src/core/accountSettings/components/OrdinaryColumn.tsx @@ -1,10 +1,10 @@ import dayjs from 'dayjs' -import { Button, OptionsColumn } from 'lifeforge-ui' -import { useModalStore } from 'lifeforge-ui' import _ from 'lodash' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' -import { useAuth } from 'shared' + +import { useAuth } from '@lifeforge/shared' +import { Button, OptionsColumn, useModalStore } from '@lifeforge/ui' import ModifyModal from '../modals/ModifyModal' diff --git a/client/src/core/accountSettings/components/PasswordColumn.tsx b/client/src/core/accountSettings/components/PasswordColumn.tsx index ec04f69c7..83617b101 100644 --- a/client/src/core/accountSettings/components/PasswordColumn.tsx +++ b/client/src/core/accountSettings/components/PasswordColumn.tsx @@ -1,7 +1,8 @@ -import { Button, OptionsColumn } from 'lifeforge-ui' import { useTranslation } from 'react-i18next' import { toast } from 'react-toastify' -import { usePromiseLoading } from 'shared' + +import { usePromiseLoading } from '@lifeforge/shared' +import { Button, OptionsColumn } from '@lifeforge/ui' import forgeAPI from '@/forgeAPI' diff --git a/client/src/core/accountSettings/components/QRLoginColumn.tsx b/client/src/core/accountSettings/components/QRLoginColumn.tsx index 91bb77ff9..98d400397 100644 --- a/client/src/core/accountSettings/components/QRLoginColumn.tsx +++ b/client/src/core/accountSettings/components/QRLoginColumn.tsx @@ -1,12 +1,13 @@ +import { useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { toast } from 'react-toastify' + import { Button, OptionsColumn, QRCodeScanner, useModalStore -} from 'lifeforge-ui' -import { useCallback } from 'react' -import { useTranslation } from 'react-i18next' -import { toast } from 'react-toastify' +} from '@lifeforge/ui' import QRLoginApprovalModal from '../modals/QRLoginScannerModal' @@ -45,10 +46,10 @@ function QRLoginColumn() { title={t('qrLogin.scanQRCode')} > -
+ ) } diff --git a/client/src/core/auth/index.tsx b/client/src/core/auth/index.tsx index e6c01ca1e..6f134ea0f 100644 --- a/client/src/core/auth/index.tsx +++ b/client/src/core/auth/index.tsx @@ -1,4 +1,4 @@ -import { WithQueryData } from 'lifeforge-ui' +import { WithQueryData } from '@lifeforge/ui' import forgeAPI from '@/forgeAPI' diff --git a/client/src/core/auth/modals/QRLoginModal/components/QRContent.tsx b/client/src/core/auth/modals/QRLoginModal/components/QRContent.tsx index a420c8567..3651fdffc 100644 --- a/client/src/core/auth/modals/QRLoginModal/components/QRContent.tsx +++ b/client/src/core/auth/modals/QRLoginModal/components/QRContent.tsx @@ -1,10 +1,11 @@ import { Icon } from '@iconify/react' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' -import { Button, LoadingScreen } from 'lifeforge-ui' import { QRCodeSVG } from 'qrcode.react' import { useTranslation } from 'react-i18next' +import { Button, LoadingScreen } from '@lifeforge/ui' + import useQRLoginSession from '../hooks/useQRLoginSession' dayjs.extend(duration) @@ -49,7 +50,7 @@ function QRByStatus({ return ( +
diff --git a/client/src/core/dashboard/manifest.ts b/client/src/core/dashboard/manifest.ts index 07eb0f828..85019ab59 100644 --- a/client/src/core/dashboard/manifest.ts +++ b/client/src/core/dashboard/manifest.ts @@ -1,5 +1,6 @@ import { lazy } from 'react' -import type { ModuleCategory } from 'shared' + +import type { ModuleCategory } from '@lifeforge/shared' export default { routes: { diff --git a/client/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx b/client/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx index 143bb8541..a39235ed4 100644 --- a/client/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx +++ b/client/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx @@ -1,9 +1,10 @@ import { Icon } from '@iconify/react' import clsx from 'clsx' -import { Switch } from 'lifeforge-ui' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' -import { type IDashboardLayout, usePersonalization } from 'shared' + +import { type IDashboardLayout, usePersonalization } from '@lifeforge/shared' +import { Switch } from '@lifeforge/ui' import { useUserPersonalization } from '@/providers/features/UserPersonalizationProvider' @@ -106,7 +107,10 @@ function ComponentListItem({ } return ( -
  • +
  • ))} )} diff --git a/packages/lifeforge-ui/src/components/data-display/TagsFilter/TagsFilter.stories.tsx b/packages/ui/src/components/data-display/TagsFilter/TagsFilter.stories.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/data-display/TagsFilter/TagsFilter.stories.tsx rename to packages/ui/src/components/data-display/TagsFilter/TagsFilter.stories.tsx index 5dfbdf00f..fb1252d99 100644 --- a/packages/lifeforge-ui/src/components/data-display/TagsFilter/TagsFilter.stories.tsx +++ b/packages/ui/src/components/data-display/TagsFilter/TagsFilter.stories.tsx @@ -1,11 +1,12 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { Button } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' + +import { TAILWIND_PALETTE } from '@/system' import { TagsFilter } from './index' -import { TAILWIND_PALETTE } from '@/system' const meta = { argTypes: { diff --git a/packages/lifeforge-ui/src/components/data-display/TagsFilter/index.tsx b/packages/ui/src/components/data-display/TagsFilter/index.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/data-display/TagsFilter/index.tsx rename to packages/ui/src/components/data-display/TagsFilter/index.tsx index 23cc118ed..ce8e4d309 100644 --- a/packages/lifeforge-ui/src/components/data-display/TagsFilter/index.tsx +++ b/packages/ui/src/components/data-display/TagsFilter/index.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { usePersonalization } from 'shared' +import { usePersonalization } from '@lifeforge/shared' -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' import { TagChip } from '../TagChip' @@ -127,4 +127,3 @@ export function TagsFilter>({ ) } - diff --git a/packages/lifeforge-ui/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts b/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts similarity index 65% rename from packages/lifeforge-ui/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts rename to packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts index 1ac1d6b62..7150550fb 100644 --- a/packages/lifeforge-ui/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts +++ b/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.css.ts @@ -1,13 +1,13 @@ import { style } from '@vanilla-extract/css' -import { bg, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' // container styling (shadow, background, border, radius) export const container = style([ { - borderColor: withOpacity(bg[500], 0.2), + borderColor: withOpacity(COLORS['bg-500'], 0.2), selectors: { - '.dark &': { borderColor: withOpacity(bg[500], 0.5) }, + '.dark &': { borderColor: withOpacity(COLORS['bg-500'], 0.5) }, '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } } } @@ -15,7 +15,7 @@ export const container = style([ // styles applied when an option is active/selected export const optionActive = style({ - borderColor: withOpacity(bg[500], 0.2), + borderColor: withOpacity(COLORS['bg-500'], 0.2), selectors: { '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } } diff --git a/packages/lifeforge-ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx b/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx rename to packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx index e9d28c400..753c0c14f 100644 --- a/packages/lifeforge-ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx +++ b/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { SearchInput } from '@components/inputs' -import { Box, Flex } from '@components/primitives' +import { SearchInput } from '@/components/inputs' +import { Box, Flex } from '@/components/primitives' import { Widget } from '../Widget' import { ViewModeSelector } from './index' diff --git a/packages/lifeforge-ui/src/components/data-display/ViewModeSelector/index.tsx b/packages/ui/src/components/data-display/ViewModeSelector/index.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/data-display/ViewModeSelector/index.tsx rename to packages/ui/src/components/data-display/ViewModeSelector/index.tsx index da602a0d0..c0a0f2ca7 100644 --- a/packages/lifeforge-ui/src/components/data-display/ViewModeSelector/index.tsx +++ b/packages/ui/src/components/data-display/ViewModeSelector/index.tsx @@ -1,7 +1,6 @@ -import { Icon } from '@iconify/react' import clsx from 'clsx' -import { Flex, Text } from '@components/primitives' +import { Flex, Icon, Text } from '@/components/primitives' import * as styles from './ViewModeSelector.css' @@ -82,7 +81,7 @@ export function ViewModeSelector< onModeChange(value as TKey) }} > - {icon && } + {icon && } {text} diff --git a/packages/lifeforge-ui/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx b/packages/ui/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx similarity index 94% rename from packages/lifeforge-ui/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx rename to packages/ui/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx index 29dcc7734..e66747acd 100644 --- a/packages/lifeforge-ui/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx +++ b/packages/ui/src/components/data-display/VirtualGrid/VirtualGrid.stories.tsx @@ -1,12 +1,12 @@ -import { Icon } from '@iconify/react' import type { Meta, StoryObj } from '@storybook/react-vite' import { useRef } from 'react' -import { Card } from '@components/layout' -import { Box, Flex, Text } from '@components/primitives' +import { Card } from '@/components/layout' +import { Box, Flex, Icon, Text } from '@/components/primitives' + +import { TAILWIND_PALETTE } from '@/system' import { VirtualGrid } from './index' -import { TAILWIND_PALETTE } from '@/system' const meta = { component: VirtualGrid, @@ -129,12 +129,7 @@ function CardItem({ item }: { item: SampleItem }) { {cardRef.current?.offsetHeight}px ) : ( - + )} diff --git a/packages/lifeforge-ui/src/components/data-display/VirtualGrid/index.tsx b/packages/ui/src/components/data-display/VirtualGrid/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/data-display/VirtualGrid/index.tsx rename to packages/ui/src/components/data-display/VirtualGrid/index.tsx index 31c5463b2..5f083016d 100644 --- a/packages/lifeforge-ui/src/components/data-display/VirtualGrid/index.tsx +++ b/packages/ui/src/components/data-display/VirtualGrid/index.tsx @@ -6,7 +6,7 @@ import { List } from 'react-virtualized' -import { Box, Grid } from '@components/primitives' +import { Box, Grid } from '@/components/primitives' interface VirtualGridProps { /** The array of items to render in the grid */ @@ -79,7 +79,7 @@ export function VirtualGrid({ > ( - + This is a dashboard item. @@ -63,7 +63,7 @@ export const WithDescription: Story = { title: 'Cool Widget' }, render: args => ( - + This is a dashboard item. @@ -101,20 +101,23 @@ export const WithIconColor: Story = { }, render: args => ( - - {[TAILWIND_PALETTE.red[500], TAILWIND_PALETTE.blue[500], TAILWIND_PALETTE.green[500], TAILWIND_PALETTE.yellow[500], TAILWIND_PALETTE.purple[500], TAILWIND_PALETTE.pink[500], TAILWIND_PALETTE.indigo[500], TAILWIND_PALETTE.orange[500]].map( - (color, i) => ( - - - This is a widget with an icon color. - - - ) - )} + + {[ + TAILWIND_PALETTE.red[500], + TAILWIND_PALETTE.blue[500], + TAILWIND_PALETTE.green[500], + TAILWIND_PALETTE.yellow[500], + TAILWIND_PALETTE.purple[500], + TAILWIND_PALETTE.pink[500], + TAILWIND_PALETTE.indigo[500], + TAILWIND_PALETTE.orange[500] + ].map((color, i) => ( + + + This is a widget with an icon color. + + + ))} ) @@ -127,7 +130,7 @@ export const WithActionComponent: Story = { title: 'A Cool Widget' }, render: args => ( - + This widget has a plus button beside the title. When clicked, maybe a @@ -201,20 +204,21 @@ export const LargeIconWithIconColor: Story = { }, render: args => ( - - {[TAILWIND_PALETTE.red[500], TAILWIND_PALETTE.blue[500], TAILWIND_PALETTE.green[500], TAILWIND_PALETTE.yellow[500], TAILWIND_PALETTE.purple[500], TAILWIND_PALETTE.pink[500]].map( - (color, i) => ( - - - This is a large icon variant widget. - - - ) - )} + + {[ + TAILWIND_PALETTE.red[500], + TAILWIND_PALETTE.blue[500], + TAILWIND_PALETTE.green[500], + TAILWIND_PALETTE.yellow[500], + TAILWIND_PALETTE.purple[500], + TAILWIND_PALETTE.pink[500] + ].map((color, i) => ( + + + This is a large icon variant widget. + + + ))} ) diff --git a/packages/lifeforge-ui/src/components/data-display/Widget/components/TitleAndDesc.tsx b/packages/ui/src/components/data-display/Widget/components/TitleAndDesc.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/data-display/Widget/components/TitleAndDesc.tsx rename to packages/ui/src/components/data-display/Widget/components/TitleAndDesc.tsx index d5b450b4d..441f088ec 100644 --- a/packages/lifeforge-ui/src/components/data-display/Widget/components/TitleAndDesc.tsx +++ b/packages/ui/src/components/data-display/Widget/components/TitleAndDesc.tsx @@ -1,7 +1,7 @@ import _ from 'lodash' import { useTranslation } from 'react-i18next' -import { Box, Text } from '@components/primitives' +import { Box, Text } from '@/components/primitives' export function TitleAndDesc({ title, @@ -57,4 +57,3 @@ export function TitleAndDesc({ ) } - diff --git a/packages/lifeforge-ui/src/components/data-display/Widget/components/WidgetIcon.tsx b/packages/ui/src/components/data-display/Widget/components/WidgetIcon.tsx similarity index 90% rename from packages/lifeforge-ui/src/components/data-display/Widget/components/WidgetIcon.tsx rename to packages/ui/src/components/data-display/Widget/components/WidgetIcon.tsx index 440893f97..bddb25dd6 100644 --- a/packages/lifeforge-ui/src/components/data-display/Widget/components/WidgetIcon.tsx +++ b/packages/ui/src/components/data-display/Widget/components/WidgetIcon.tsx @@ -1,8 +1,8 @@ -import { Icon } from '@iconify/react' import clsx from 'clsx' -import { anyColorToHex } from 'shared' -import { Box, Flex, Text } from '@components/primitives' +import { anyColorToHex } from '@lifeforge/shared' + +import { Box, Flex, Icon, Text } from '@/components/primitives' import * as styles from '../Widget.css' @@ -67,10 +67,8 @@ export function WidgetIcon({ color={iconColor ? undefined : { base: 'bg-600', dark: 'bg-400' }} > diff --git a/packages/lifeforge-ui/src/components/data-display/Widget/index.tsx b/packages/ui/src/components/data-display/Widget/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/data-display/Widget/index.tsx rename to packages/ui/src/components/data-display/Widget/index.tsx index af20da638..e70b17b92 100644 --- a/packages/lifeforge-ui/src/components/data-display/Widget/index.tsx +++ b/packages/ui/src/components/data-display/Widget/index.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx' -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' import * as styles from './Widget.css' import { TitleAndDesc } from './components/TitleAndDesc' diff --git a/packages/lifeforge-ui/src/components/data-display/index.ts b/packages/ui/src/components/data-display/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/data-display/index.ts rename to packages/ui/src/components/data-display/index.ts diff --git a/packages/lifeforge-ui/src/components/feedback/Alert.css.ts b/packages/ui/src/components/feedback/Alert.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/feedback/Alert.css.ts rename to packages/ui/src/components/feedback/Alert.css.ts diff --git a/packages/lifeforge-ui/src/components/feedback/Alert/Alert.css.ts b/packages/ui/src/components/feedback/Alert/Alert.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/feedback/Alert/Alert.css.ts rename to packages/ui/src/components/feedback/Alert/Alert.css.ts diff --git a/packages/lifeforge-ui/src/components/feedback/Alert/Alert.stories.tsx b/packages/ui/src/components/feedback/Alert/Alert.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/feedback/Alert/Alert.stories.tsx rename to packages/ui/src/components/feedback/Alert/Alert.stories.tsx index 768900037..270abc4dc 100644 --- a/packages/lifeforge-ui/src/components/feedback/Alert/Alert.stories.tsx +++ b/packages/ui/src/components/feedback/Alert/Alert.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' import { Alert } from './index' diff --git a/packages/lifeforge-ui/src/components/feedback/Alert/index.tsx b/packages/ui/src/components/feedback/Alert/index.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/feedback/Alert/index.tsx rename to packages/ui/src/components/feedback/Alert/index.tsx index 9bedd752a..b89f1036a 100644 --- a/packages/lifeforge-ui/src/components/feedback/Alert/index.tsx +++ b/packages/ui/src/components/feedback/Alert/index.tsx @@ -1,8 +1,8 @@ -import { Icon } from '@iconify/react' import clsx from 'clsx' import React from 'react' -import { Flex, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Flex, Text } from '@/components/primitives' import * as styles from './Alert.css' @@ -69,4 +69,3 @@ export function Alert({ ) } - diff --git a/packages/lifeforge-ui/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx b/packages/ui/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx rename to packages/ui/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx index dd755b4de..de6647ef8 100644 --- a/packages/lifeforge-ui/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx +++ b/packages/ui/src/components/feedback/EmptyStateScreen/EmptyStateScreen.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box, Text } from '@components/primitives' +import { Box, Text } from '@/components/primitives' import { EmptyStateScreen } from './index' diff --git a/packages/lifeforge-ui/src/components/feedback/EmptyStateScreen/index.tsx b/packages/ui/src/components/feedback/EmptyStateScreen/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/feedback/EmptyStateScreen/index.tsx rename to packages/ui/src/components/feedback/EmptyStateScreen/index.tsx index 9cedb9f19..29b24769f 100644 --- a/packages/lifeforge-ui/src/components/feedback/EmptyStateScreen/index.tsx +++ b/packages/ui/src/components/feedback/EmptyStateScreen/index.tsx @@ -1,8 +1,8 @@ -import { Icon } from '@iconify/react' import { useTranslation } from 'react-i18next' -import { Button } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text } from '@/components/primitives' interface EmptyStateScreenProps { /** Props for the call-to-action button. Refer to the Button component for available props. */ diff --git a/packages/lifeforge-ui/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx b/packages/ui/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx rename to packages/ui/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx index b30817a44..d4b45de24 100644 --- a/packages/lifeforge-ui/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx +++ b/packages/ui/src/components/feedback/ErrorScreen/ErrorScreen.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' import { ErrorScreen } from './index' diff --git a/packages/lifeforge-ui/src/components/feedback/ErrorScreen/index.tsx b/packages/ui/src/components/feedback/ErrorScreen/index.tsx similarity index 72% rename from packages/lifeforge-ui/src/components/feedback/ErrorScreen/index.tsx rename to packages/ui/src/components/feedback/ErrorScreen/index.tsx index 7d98f19ae..c422f5f41 100644 --- a/packages/lifeforge-ui/src/components/feedback/ErrorScreen/index.tsx +++ b/packages/ui/src/components/feedback/ErrorScreen/index.tsx @@ -1,7 +1,5 @@ -import { Icon } from '@iconify/react' - -import { Button } from '@components/inputs' -import { Flex, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Flex, Icon, Text } from '@/components/primitives' interface ErrorScreenProps { /** The error message to display. Can be a string or a React node for more complex formatting. */ @@ -24,19 +22,11 @@ export function ErrorScreen({ message, showRetryButton }: ErrorScreenProps) { width="100%" > - + {message} {showRetryButton && ( @@ -51,4 +41,3 @@ export function ErrorScreen({ message, showRetryButton }: ErrorScreenProps) { ) } - diff --git a/packages/lifeforge-ui/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx b/packages/ui/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx similarity index 94% rename from packages/lifeforge-ui/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx rename to packages/ui/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx index 745b428e1..1e64a410f 100644 --- a/packages/lifeforge-ui/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx +++ b/packages/ui/src/components/feedback/LoadingScreen/LoadingScreen.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' import { LoadingScreen } from './index' diff --git a/packages/lifeforge-ui/src/components/feedback/LoadingScreen/index.tsx b/packages/ui/src/components/feedback/LoadingScreen/index.tsx similarity index 79% rename from packages/lifeforge-ui/src/components/feedback/LoadingScreen/index.tsx rename to packages/ui/src/components/feedback/LoadingScreen/index.tsx index c0eebae86..c5af2ebd8 100644 --- a/packages/lifeforge-ui/src/components/feedback/LoadingScreen/index.tsx +++ b/packages/ui/src/components/feedback/LoadingScreen/index.tsx @@ -1,6 +1,5 @@ -import { Icon } from '@iconify/react' - -import { Flex, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Flex, Text } from '@/components/primitives' interface LoadingScreenProps { /** An optional message to display below the loading indicator. */ @@ -9,10 +8,7 @@ interface LoadingScreenProps { loaderSize?: string } -export function LoadingScreen({ - message, - loaderSize -}: LoadingScreenProps) { +export function LoadingScreen({ message, loaderSize }: LoadingScreenProps) { return ( ) } - diff --git a/packages/lifeforge-ui/src/components/feedback/index.ts b/packages/ui/src/components/feedback/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/feedback/index.ts rename to packages/ui/src/components/feedback/index.ts diff --git a/packages/lifeforge-ui/src/components/inputs/AllInputs.mdx b/packages/ui/src/components/inputs/AllInputs.mdx similarity index 94% rename from packages/lifeforge-ui/src/components/inputs/AllInputs.mdx rename to packages/ui/src/components/inputs/AllInputs.mdx index 3344bfdc3..afea696ff 100644 --- a/packages/lifeforge-ui/src/components/inputs/AllInputs.mdx +++ b/packages/ui/src/components/inputs/AllInputs.mdx @@ -1,6 +1,7 @@ import { Meta, Canvas } from '@storybook/addon-docs/blocks' -import { ModalStoreProvider, APIEndpointProvider } from "shared" +import { APIEndpointProvider } from "@lifeforge/shared" import { QCProvider } from "../../storybook/QCProvider" +import { ModalProvider } from "../../providers" import * as TextInputStories from './TextInput/TextInput.stories' import * as TextAreaInputStories from './TextAreaInput/TextAreaInput.stories' @@ -27,7 +28,7 @@ import { Box } from "../primitives" - + ## TextInput @@ -96,6 +97,6 @@ import { Box } from "../primitives" - + diff --git a/packages/lifeforge-ui/src/components/inputs/Button/Button.css.ts b/packages/ui/src/components/inputs/Button/Button.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/Button/Button.css.ts rename to packages/ui/src/components/inputs/Button/Button.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/Button/Button.stories.tsx b/packages/ui/src/components/inputs/Button/Button.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/inputs/Button/Button.stories.tsx rename to packages/ui/src/components/inputs/Button/Button.stories.tsx index f5efa6052..7914ecec5 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/Button.stories.tsx +++ b/packages/ui/src/components/inputs/Button/Button.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Alert } from '@components/feedback' -import { Flex } from '@components/primitives' +import { Alert } from '@/components/feedback' +import { Flex } from '@/components/primitives' import { Button } from './index' diff --git a/packages/lifeforge-ui/src/components/inputs/Button/components/ButtonIcon.tsx b/packages/ui/src/components/inputs/Button/components/ButtonIcon.tsx similarity index 79% rename from packages/lifeforge-ui/src/components/inputs/Button/components/ButtonIcon.tsx rename to packages/ui/src/components/inputs/Button/components/ButtonIcon.tsx index bfbc1d23b..7ea93f711 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/components/ButtonIcon.tsx +++ b/packages/ui/src/components/inputs/Button/components/ButtonIcon.tsx @@ -1,6 +1,7 @@ -import { Icon } from '@iconify/react' import { memo, useMemo } from 'react' +import { Box, Icon } from '@/components/primitives' + function _ButtonIcon({ icon, disabled, @@ -27,15 +28,15 @@ function _ButtonIcon({ }, [icon, disabled, loading, hasChildren]) return ( - + > + + ) } diff --git a/packages/lifeforge-ui/src/components/inputs/Button/hooks/useButtonStyleProps.ts b/packages/ui/src/components/inputs/Button/hooks/useButtonStyleProps.ts similarity index 88% rename from packages/lifeforge-ui/src/components/inputs/Button/hooks/useButtonStyleProps.ts rename to packages/ui/src/components/inputs/Button/hooks/useButtonStyleProps.ts index 3ec64f65b..e906f5903 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/hooks/useButtonStyleProps.ts +++ b/packages/ui/src/components/inputs/Button/hooks/useButtonStyleProps.ts @@ -1,7 +1,8 @@ import { type CSSProperties } from 'react' -import { usePersonalization } from 'shared' -import { type FlexProps } from '@components/primitives' +import { usePersonalization } from '@lifeforge/shared' + +import { type FlexProps } from '@/components/primitives' export function useButtonStyleProps({ variant, diff --git a/packages/lifeforge-ui/src/components/inputs/Button/index.tsx b/packages/ui/src/components/inputs/Button/index.tsx similarity index 99% rename from packages/lifeforge-ui/src/components/inputs/Button/index.tsx rename to packages/ui/src/components/inputs/Button/index.tsx index 4f40db24c..d999a643c 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/index.tsx +++ b/packages/ui/src/components/inputs/Button/index.tsx @@ -10,7 +10,7 @@ import { type FlexProps, Text, Transition -} from '@components/primitives' +} from '@/components/primitives' import { buttonRecipe } from './Button.css' import { ButtonIcon } from './components/ButtonIcon' diff --git a/packages/lifeforge-ui/src/components/inputs/Button/styles/plain.css.ts b/packages/ui/src/components/inputs/Button/styles/plain.css.ts similarity index 66% rename from packages/lifeforge-ui/src/components/inputs/Button/styles/plain.css.ts rename to packages/ui/src/components/inputs/Button/styles/plain.css.ts index afe18435a..4afeaff4c 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/styles/plain.css.ts +++ b/packages/ui/src/components/inputs/Button/styles/plain.css.ts @@ -1,22 +1,22 @@ -import { bg, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const plain = { backgroundColor: 'transparent', - color: bg[500], + color: COLORS['bg-500'], selectors: { '&:hover:not(:disabled)': { - backgroundColor: withOpacity(bg[200], 0.5), - color: bg[800] + backgroundColor: withOpacity(COLORS['bg-200'], 0.5), + color: COLORS['bg-800'] }, '.dark &:hover:not(:disabled)': { - backgroundColor: withOpacity(bg[800], 0.5), - color: bg[50] + backgroundColor: withOpacity(COLORS['bg-800'], 0.5), + color: COLORS['bg-50'] }, '&:disabled': { - color: bg[300] + color: COLORS['bg-300'] }, '.dark &:disabled': { - color: bg[700] + color: COLORS['bg-700'] } } } as const @@ -38,8 +38,7 @@ export const plainDangerous = { color: 'var(--color-dangerous)' }, '.dark &:disabled': { - color: - 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' + color: 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' } } } as const diff --git a/packages/lifeforge-ui/src/components/inputs/Button/styles/primary.css.ts b/packages/ui/src/components/inputs/Button/styles/primary.css.ts similarity index 63% rename from packages/lifeforge-ui/src/components/inputs/Button/styles/primary.css.ts rename to packages/ui/src/components/inputs/Button/styles/primary.css.ts index 99a02fc43..fbeb8cbde 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/styles/primary.css.ts +++ b/packages/ui/src/components/inputs/Button/styles/primary.css.ts @@ -1,29 +1,29 @@ -import { bg, custom, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const primary = { - backgroundColor: custom[500], + backgroundColor: COLORS['custom-500'], boxShadow: 'var(--custom-shadow)', - color: `var(--button-text-color, ${bg[50]})`, + color: `var(--button-text-color, ${COLORS['bg-50']})`, selectors: { '&:hover:not(:disabled)': { - backgroundColor: custom[600] + backgroundColor: COLORS['custom-600'] }, '&:disabled': { - backgroundColor: bg[200], - borderColor: withOpacity(bg[500], 0.2), - color: bg[400] + backgroundColor: COLORS['bg-200'], + borderColor: withOpacity(COLORS['bg-500'], 0.2), + color: COLORS['bg-400'] }, '.dark &:disabled': { - backgroundColor: withOpacity(bg[800], 0.5), - color: bg[600] + backgroundColor: withOpacity(COLORS['bg-800'], 0.5), + color: COLORS['bg-600'] }, '.bordered &': { borderWidth: '2px', borderStyle: 'solid', - borderColor: withOpacity(custom[900], 0.2) + borderColor: withOpacity(COLORS['custom-900'], 0.2) }, '.dark.bordered &': { - borderColor: custom[900] + borderColor: COLORS['custom-900'] } } } as const @@ -45,8 +45,7 @@ export const primaryDangerous = { '.dark &:disabled': { backgroundColor: 'color-mix(in srgb, var(--color-dangerous) 10%, transparent)', - color: - 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' + color: 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' }, '.bordered &': { borderColor: 'var(--color-dangerous)' diff --git a/packages/lifeforge-ui/src/components/inputs/Button/styles/secondary.css.ts b/packages/ui/src/components/inputs/Button/styles/secondary.css.ts similarity index 66% rename from packages/lifeforge-ui/src/components/inputs/Button/styles/secondary.css.ts rename to packages/ui/src/components/inputs/Button/styles/secondary.css.ts index 1e7813c4c..fe7574567 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/styles/secondary.css.ts +++ b/packages/ui/src/components/inputs/Button/styles/secondary.css.ts @@ -1,23 +1,23 @@ -import { bg, custom, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const secondary = { backgroundColor: 'transparent', borderWidth: '1.6px', borderStyle: 'solid', - borderColor: custom[500], + borderColor: COLORS['custom-500'], boxShadow: 'var(--custom-shadow)', - color: custom[500], + color: COLORS['custom-500'], selectors: { '&:hover:not(:disabled)': { - backgroundColor: withOpacity(custom[500], 0.1) + backgroundColor: withOpacity(COLORS['custom-500'], 0.1) }, '&:disabled': { - borderColor: bg[300], - color: bg[300] + borderColor: COLORS['bg-300'], + color: COLORS['bg-300'] }, '.dark &:disabled': { - borderColor: bg[700], - color: bg[700] + borderColor: COLORS['bg-700'], + color: COLORS['bg-700'] } } } as const @@ -37,8 +37,7 @@ export const secondaryDangerous = { '.dark &:disabled': { borderColor: 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)', - color: - 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' + color: 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' } } } as const diff --git a/packages/lifeforge-ui/src/components/inputs/Button/styles/tertiary.css.ts b/packages/ui/src/components/inputs/Button/styles/tertiary.css.ts similarity index 66% rename from packages/lifeforge-ui/src/components/inputs/Button/styles/tertiary.css.ts rename to packages/ui/src/components/inputs/Button/styles/tertiary.css.ts index d2220ea2f..b6c484fc0 100644 --- a/packages/lifeforge-ui/src/components/inputs/Button/styles/tertiary.css.ts +++ b/packages/ui/src/components/inputs/Button/styles/tertiary.css.ts @@ -1,18 +1,18 @@ -import { bg, custom, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const tertiary = { backgroundColor: 'transparent', - color: custom[500], + color: COLORS['custom-500'], selectors: { '&:hover:not(:disabled)': { - backgroundColor: withOpacity(custom[500], 0.15), + backgroundColor: withOpacity(COLORS['custom-500'], 0.15), boxShadow: 'var(--custom-shadow)' }, '&:disabled': { - color: bg[300] + color: COLORS['bg-300'] }, '.dark &:disabled': { - color: bg[700] + color: COLORS['bg-700'] } } } as const @@ -28,8 +28,7 @@ export const tertiaryDangerous = { color: 'var(--color-dangerous)' }, '.dark &:disabled': { - color: - 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' + color: 'color-mix(in srgb, var(--color-dangerous) 50%, transparent)' } } } as const diff --git a/packages/lifeforge-ui/src/components/inputs/Checkbox/Checkbox.css.ts b/packages/ui/src/components/inputs/Checkbox/Checkbox.css.ts similarity index 60% rename from packages/lifeforge-ui/src/components/inputs/Checkbox/Checkbox.css.ts rename to packages/ui/src/components/inputs/Checkbox/Checkbox.css.ts index ef83ca800..6340ff462 100644 --- a/packages/lifeforge-ui/src/components/inputs/Checkbox/Checkbox.css.ts +++ b/packages/ui/src/components/inputs/Checkbox/Checkbox.css.ts @@ -1,26 +1,26 @@ import { recipe } from '@vanilla-extract/recipes' -import { bg, custom } from '@/system' +import { COLORS } from '@/system' export const checkboxRootRecipe = recipe({ base: { selectors: { '&[data-state="checked"]': { - borderColor: custom[500], - backgroundColor: custom[500] + borderColor: COLORS['custom-500'], + backgroundColor: COLORS['custom-500'] }, '&[data-state="unchecked"]': { - borderColor: bg[300], + borderColor: COLORS['bg-300'], backgroundColor: 'transparent' }, '.dark &[data-state="unchecked"]': { - borderColor: bg[600] + borderColor: COLORS['bg-600'] }, '&[data-state="unchecked"]:hover': { - borderColor: bg[500] + borderColor: COLORS['bg-500'] }, '.dark &[data-state="unchecked"]:hover': { - borderColor: bg[200] + borderColor: COLORS['bg-200'] } } } diff --git a/packages/lifeforge-ui/src/components/inputs/Checkbox/Checkbox.stories.tsx b/packages/ui/src/components/inputs/Checkbox/Checkbox.stories.tsx similarity index 88% rename from packages/lifeforge-ui/src/components/inputs/Checkbox/Checkbox.stories.tsx rename to packages/ui/src/components/inputs/Checkbox/Checkbox.stories.tsx index 1e21763c9..75e8bd767 100644 --- a/packages/lifeforge-ui/src/components/inputs/Checkbox/Checkbox.stories.tsx +++ b/packages/ui/src/components/inputs/Checkbox/Checkbox.stories.tsx @@ -22,11 +22,7 @@ export const Default: Story = { const [checked, setChecked] = useState(props.checked) return ( - + ) } } diff --git a/packages/lifeforge-ui/src/components/inputs/Checkbox/index.tsx b/packages/ui/src/components/inputs/Checkbox/index.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/inputs/Checkbox/index.tsx rename to packages/ui/src/components/inputs/Checkbox/index.tsx index 7839781b6..f315b8910 100644 --- a/packages/lifeforge-ui/src/components/inputs/Checkbox/index.tsx +++ b/packages/ui/src/components/inputs/Checkbox/index.tsx @@ -1,9 +1,10 @@ -import { Icon } from '@iconify/react' import * as CheckboxPrimitive from '@radix-ui/react-checkbox' import clsx from 'clsx' -import { usePersonalization } from 'shared' -import { Bordered, Flex, Text, Transition } from '@components/primitives' +import { usePersonalization } from '@lifeforge/shared' + +import { Icon } from '@/components/primitives' +import { Bordered, Flex, Text, Transition } from '@/components/primitives' import { checkboxRootRecipe } from './Checkbox.css' @@ -76,4 +77,3 @@ export function Checkbox({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorInput.stories.tsx b/packages/ui/src/components/inputs/ColorInput/ColorInput.stories.tsx similarity index 77% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorInput.stories.tsx rename to packages/ui/src/components/inputs/ColorInput/ColorInput.stories.tsx index 8dd57bbe6..1eb38f94c 100644 --- a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorInput.stories.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorInput.stories.tsx @@ -21,9 +21,7 @@ export const Default: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } @@ -39,9 +37,7 @@ export const Required: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } @@ -57,9 +53,7 @@ export const Disabled: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } @@ -75,9 +69,7 @@ export const WithErrorMessage: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } @@ -94,9 +86,7 @@ export const DisabledWithErrorMessage: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } @@ -112,9 +102,7 @@ export const PlainVariant: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } @@ -131,8 +119,6 @@ export const PlainVariantWithErrorMessage: Story = { render: args => { const [color, setColor] = useState('') - return ( - - ) + return } } diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.css.ts b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.css.ts rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx index cf7f92b60..5f0838490 100644 --- a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx @@ -1,7 +1,8 @@ import { useCallback } from 'react' +import { useModalStore } from '@/providers' + import { Button } from '../../../../..' -import { useModalStore } from 'shared' import { Box, Flex } from '../../../../../components/primitives' import { useColorPickerModalStore } from '../stores/useColorPickerModalStore' import * as styles from './PaletteButtons.css' @@ -65,4 +66,3 @@ export function PaletteButtons() { ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/constants/palettes.json b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/constants/palettes.json similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/constants/palettes.json rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/constants/palettes.json diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx similarity index 90% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx index a655d9185..53d924b71 100644 --- a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { ModalWrapper } from '@components/overlays' +import { ModalWrapper } from '@/components/overlays' import { FlatUIColorsModal } from './index' diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx similarity index 86% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx index 30ea95e8c..029496422 100644 --- a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/FlatUIColorsModal/index.tsx @@ -1,9 +1,9 @@ -import { Icon } from '@iconify/react' -import { usePersonalization } from 'shared' +import { usePersonalization } from '@lifeforge/shared' -import { Card } from '@components/layout' -import { ModalHeader } from '@components/overlays' -import { Box, Flex, Grid, Text } from '@components/primitives' +import { Card } from '@/components/layout' +import { ModalHeader } from '@/components/overlays' +import { Icon } from '@/components/primitives' +import { Box, Flex, Grid, Text } from '@/components/primitives' import PALETTES from './constants/palettes.json' @@ -27,7 +27,7 @@ function FlatUIColorsModal({ onClose={onClose} /> - + {colors.map((flatUiColor, index) => ( diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/utils/colors.ts b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/utils/colors.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/utils/colors.ts rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/utils/colors.ts diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/index.css b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/index.css similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/index.css rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/index.css diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/index.tsx b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/index.tsx rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/index.tsx index 9225bc7c6..90b3ddd3f 100644 --- a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/index.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/index.tsx @@ -3,9 +3,9 @@ import { type ColorResult, Colorful, EditableInput } from '@uiw/react-color' import { useEffect } from 'react' import tinycolor from 'tinycolor2' -import { Button } from '@components/inputs' -import { ModalHeader } from '@components/overlays' -import { Box, Flex } from '@components/primitives' +import { Button } from '@/components/inputs' +import { ModalHeader } from '@/components/overlays' +import { Box, Flex } from '@/components/primitives' import { PaletteButtons } from './components/PaletteButtons' import { useColorPickerModalStore } from './stores/useColorPickerModalStore' diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/stores/useColorPickerModalStore.ts b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/stores/useColorPickerModalStore.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/ColorPickerModal/stores/useColorPickerModalStore.ts rename to packages/ui/src/components/inputs/ColorInput/ColorPickerModal/stores/useColorPickerModalStore.ts diff --git a/packages/lifeforge-ui/src/components/inputs/ColorInput/index.tsx b/packages/ui/src/components/inputs/ColorInput/index.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/inputs/ColorInput/index.tsx rename to packages/ui/src/components/inputs/ColorInput/index.tsx index dbbe89b3a..091111cb1 100644 --- a/packages/lifeforge-ui/src/components/inputs/ColorInput/index.tsx +++ b/packages/ui/src/components/inputs/ColorInput/index.tsx @@ -1,8 +1,7 @@ -import { Icon } from '@iconify/react' import { useRef, useState } from 'react' -import { useModalStore } from 'shared' -import { Bordered, Box, Flex, Text } from '@components/primitives' +import { Bordered, Box, Flex, Icon, Text } from '@/components/primitives' +import { useModalStore } from '@/providers' import { InputActionButton } from '../shared/components/InputActionButton' import { InputIcon } from '../shared/components/InputIcon' @@ -105,7 +104,7 @@ export function ColorInput({ {(focused || value !== '') && ( - + )} - p?.label || '' - } + displayValue={(p: (typeof PRIORITY_LEVELS)[0] | null) => p?.label || ''} value={value} onChange={onChange} onQueryChanged={setQuery} diff --git a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts similarity index 52% rename from packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts rename to packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts index d892f2183..e8d0c410e 100644 --- a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts +++ b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.css.ts @@ -1,9 +1,9 @@ import { style } from '@vanilla-extract/css' -import { custom } from '@/system' +import { COLORS } from '@/system' export const dataOpen = style({ selectors: { - '&[data-open]': { borderColor: custom[500] } + '&[data-open]': { borderColor: COLORS['custom-500'] } } }) diff --git a/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.tsx b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.tsx new file mode 100644 index 000000000..194c0f317 --- /dev/null +++ b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxInputWrapper.tsx @@ -0,0 +1,96 @@ +import { Combobox } from '@headlessui/react' +import clsx from 'clsx' + +import { inputWrapperRecipe } from '@/components/inputs/shared/components/InputWrapper/InputWrapper.css' +import { InputFocusProvider } from '@/components/inputs/shared/contexts/InputFocusContext' +import type { InputVariant } from '@/components/inputs/shared/types' +import { Box, Flex, Icon, Text } from '@/components/primitives' + +import * as styles from './ComboboxInputWrapper.css' + +export function ComboboxInputWrapper({ + value, + onChange, + setQuery, + children, + className, + disabled, + onClick, + errorMsg, + variant = 'classic' +}: { + value: T + onChange: (value: T | null) => void + setQuery: (query: string) => void + children: React.ReactNode + className?: string + disabled?: boolean + onClick?: (e: React.MouseEvent) => void + errorMsg?: string + variant?: InputVariant +}) { + return ( + + + + { + setQuery('') + }} + > + {children} + {errorMsg && ( + + + + )} + + + {errorMsg && ( + + {errorMsg} + + )} + + + ) +} diff --git a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx rename to packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx index 70fccc609..339d579e2 100644 --- a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx +++ b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOption.tsx @@ -1,6 +1,6 @@ import { ComboboxOption as HeadlessComboboxOption } from '@headlessui/react' -import { Icon } from '@iconify/react' +import { Icon } from '@/components/primitives' import { Bordered, Box, @@ -8,7 +8,7 @@ import { Text, Transition, WithDivide -} from '@components/primitives' +} from '@/components/primitives' export function ComboboxOption({ value, @@ -123,4 +123,3 @@ export function ComboboxOption({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.css.ts b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.css.ts rename to packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx rename to packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx index e80253a6c..f404b29ab 100644 --- a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx +++ b/packages/ui/src/components/inputs/ComboboxInput/components/ComboboxOptions.tsx @@ -1,6 +1,6 @@ import { ComboboxOptions as HeadlessComboBoxOptions } from '@headlessui/react' -import { Bordered, Text } from '@components/primitives' +import { Bordered, Text } from '@/components/primitives' import * as styles from './ComboboxOptions.css' @@ -34,4 +34,3 @@ export function ComboboxOptions({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/index.tsx b/packages/ui/src/components/inputs/ComboboxInput/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/ComboboxInput/index.tsx rename to packages/ui/src/components/inputs/ComboboxInput/index.tsx index da0b74b3d..70aba8ee8 100644 --- a/packages/lifeforge-ui/src/components/inputs/ComboboxInput/index.tsx +++ b/packages/ui/src/components/inputs/ComboboxInput/index.tsx @@ -2,10 +2,10 @@ import { ComboboxButton, ComboboxInput as HeadlessComboboxInput } from '@headlessui/react' -import { Icon } from '@iconify/react' import { useCallback, useMemo } from 'react' -import { Box, Flex, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import { InputActionButton } from '../shared/components/InputActionButton' import { InputIcon } from '../shared/components/InputIcon' diff --git a/packages/lifeforge-ui/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx b/packages/ui/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx similarity index 81% rename from packages/lifeforge-ui/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx rename to packages/ui/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx index 233f1d6a2..fe9cee555 100644 --- a/packages/lifeforge-ui/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx +++ b/packages/ui/src/components/inputs/CurrencyInput/CurrencyInput.stories.tsx @@ -20,9 +20,7 @@ export const Default: Story = { value: 0, variant: 'classic' }, - render: args => ( - - ) + render: args => } export const WithCurrencyPrefix: Story = { @@ -35,9 +33,7 @@ export const WithCurrencyPrefix: Story = { value: 87.69, variant: 'classic' }, - render: args => ( - - ) + render: args => } export const Required: Story = { @@ -49,9 +45,7 @@ export const Required: Story = { required: true, value: 0 }, - render: args => ( - - ) + render: args => } export const Disabled: Story = { @@ -63,9 +57,7 @@ export const Disabled: Story = { placeholder: '8.70', value: 42.5 }, - render: args => ( - - ) + render: args => } export const WithErrorMessage: Story = { @@ -77,9 +69,7 @@ export const WithErrorMessage: Story = { placeholder: '8.70', value: 0 }, - render: args => ( - - ) + render: args => } export const DisabledWithErrorMessage: Story = { @@ -92,9 +82,7 @@ export const DisabledWithErrorMessage: Story = { placeholder: '8.70', value: 42.5 }, - render: args => ( - - ) + render: args => } export const PlainVariant: Story = { @@ -107,9 +95,7 @@ export const PlainVariant: Story = { value: 87.69, variant: 'plain' }, - render: args => ( - - ) + render: args => } export const PlainVariantWithErrorMessage: Story = { @@ -123,7 +109,5 @@ export const PlainVariantWithErrorMessage: Story = { value: 87.69, variant: 'plain' }, - render: args => ( - - ) + render: args => } diff --git a/packages/lifeforge-ui/src/components/inputs/CurrencyInput/index.tsx b/packages/ui/src/components/inputs/CurrencyInput/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/CurrencyInput/index.tsx rename to packages/ui/src/components/inputs/CurrencyInput/index.tsx index fb92c8cd3..89936eb9a 100644 --- a/packages/lifeforge-ui/src/components/inputs/CurrencyInput/index.tsx +++ b/packages/ui/src/components/inputs/CurrencyInput/index.tsx @@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from 'react' import CurrencyInputField from 'react-currency-input-field' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import { InputIcon } from '../shared/components/InputIcon' import { InputInnerWrapper } from '../shared/components/InputInnerWrapper' diff --git a/packages/lifeforge-ui/src/components/inputs/DateInput/DateInput.css.ts b/packages/ui/src/components/inputs/DateInput/DateInput.css.ts similarity index 68% rename from packages/lifeforge-ui/src/components/inputs/DateInput/DateInput.css.ts rename to packages/ui/src/components/inputs/DateInput/DateInput.css.ts index 9ec64251e..f306a3b90 100644 --- a/packages/lifeforge-ui/src/components/inputs/DateInput/DateInput.css.ts +++ b/packages/ui/src/components/inputs/DateInput/DateInput.css.ts @@ -1,11 +1,11 @@ import { style } from '@vanilla-extract/css' -import { bg } from '@/system' +import { COLORS } from '@/system' export const weekDayRed = style({ color: 'var(--color-dangerous) !important' }) export const weekDayMuted = style({ - color: `${bg[500]} !important` + color: `${COLORS['bg-500']} !important` }) diff --git a/packages/lifeforge-ui/src/components/inputs/DateInput/DateInput.stories.tsx b/packages/ui/src/components/inputs/DateInput/DateInput.stories.tsx similarity index 80% rename from packages/lifeforge-ui/src/components/inputs/DateInput/DateInput.stories.tsx rename to packages/ui/src/components/inputs/DateInput/DateInput.stories.tsx index e136b0160..4f1f5720f 100644 --- a/packages/lifeforge-ui/src/components/inputs/DateInput/DateInput.stories.tsx +++ b/packages/ui/src/components/inputs/DateInput/DateInput.stories.tsx @@ -26,9 +26,7 @@ export const Default: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -49,9 +47,7 @@ export const WithTime: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -67,9 +63,7 @@ export const Required: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -83,9 +77,7 @@ export const Disabled: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -101,9 +93,7 @@ export const WithErrorMessage: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -119,9 +109,7 @@ export const DisabledWithErrorMessage: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -137,9 +125,7 @@ export const PlainVariant: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } @@ -156,8 +142,6 @@ export const PlainVariantWithErrorMessage: Story = { render: args => { const [date, setDate] = useState(args.value) - return ( - - ) + return } } diff --git a/packages/ui/src/components/inputs/DateInput/components/CalendarHeader.css.ts b/packages/ui/src/components/inputs/DateInput/components/CalendarHeader.css.ts new file mode 100644 index 000000000..315a2b675 --- /dev/null +++ b/packages/ui/src/components/inputs/DateInput/components/CalendarHeader.css.ts @@ -0,0 +1,32 @@ +import { style } from '@vanilla-extract/css' + +import { COLORS, vars, withOpacity } from '@/system' + +//TODO +export const navButton = style({ + padding: vars.space.sm, + selectors: { + '.dark &:hover': { backgroundColor: withOpacity(COLORS['bg-700'], 0.3) } + } +}) + +export const select = style({ + appearance: 'none', + fontSize: vars.fontSize.base, + fontWeight: vars.fontWeight.medium, + transition: 'all 0.2s', + selectors: { + '&:hover': { backgroundColor: withOpacity(COLORS['bg-200'], 0.3) }, + '.dark &:hover': { backgroundColor: withOpacity(COLORS['bg-700'], 0.3) } + } +}) + +export const selectArrow = style({ + position: 'absolute', + top: '50%', + right: '0.75rem', + width: '1.125rem', + height: '1.125rem', + transform: 'translateY(-50%)', + color: COLORS['bg-500'] +}) diff --git a/packages/ui/src/components/inputs/DateInput/components/CalendarHeader.tsx b/packages/ui/src/components/inputs/DateInput/components/CalendarHeader.tsx new file mode 100644 index 000000000..58dd39174 --- /dev/null +++ b/packages/ui/src/components/inputs/DateInput/components/CalendarHeader.tsx @@ -0,0 +1,136 @@ +import { Select } from '@headlessui/react' +import dayjs from 'dayjs' +import { range } from 'lodash' +import React from 'react' + +import { Button } from '@/components/inputs' +import { Box, Flex, Icon, Text } from '@/components/primitives' + +import * as styles from './CalendarHeader.css' + +export function CalendarHeader({ + date, + changeYear, + changeMonth, + decreaseMonth, + increaseMonth, + prevMonthButtonDisabled, + nextMonthButtonDisabled +}: { + date: Date + changeYear: (year: number) => void + changeMonth: (month: number) => void + decreaseMonth: () => void + increaseMonth: () => void + prevMonthButtonDisabled: boolean + nextMonthButtonDisabled: boolean +}) { + const years = range(1990, dayjs().year() + 10) + + const months = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ] + + return ( + + + ) diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/index.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/index.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/index.tsx rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/index.tsx index 7975bcb1c..acd03f9a3 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/index.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/index.tsx @@ -1,9 +1,9 @@ -import { Icon } from '@iconify/react' import { useCallback, useState } from 'react' -import { GoBackButton } from '@components/navigation' -import { ModalHeader } from '@components/overlays' -import { Box, Flex, Text, Transition } from '@components/primitives' +import { GoBackButton } from '@/components/navigation' +import { ModalHeader } from '@/components/overlays' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text, Transition } from '@/components/primitives' import { IconSet } from './pages/IconSet' import { IconSetList } from './pages/IconSetList/index' diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx index 92241c4a8..0e247e1d5 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx @@ -1,9 +1,9 @@ import { useEffect, useMemo, useState } from 'react' import { AutoSizer, List } from 'react-virtualized' -import { EmptyStateScreen, LoadingScreen } from '@components/feedback' -import { SearchInput } from '@components/inputs' -import { Flex, Text } from '@components/primitives' +import { EmptyStateScreen, LoadingScreen } from '@/components/feedback' +import { SearchInput } from '@/components/inputs' +import { Flex, Text } from '@/components/primitives' import { ChipSelector } from '../components/ChipSelector' import { IconEntry } from '../components/IconEntry' diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx index d7e2163bd..65f111d38 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/CategoryEntry.tsx @@ -1,6 +1,6 @@ import { memo } from 'react' -import { Bordered, Box, Grid, Text } from '@components/primitives' +import { Bordered, Box, Grid, Text } from '@/components/primitives' import type { IIconSet } from '../../../typescript/icon_selector_interfaces' import { IconSetEntry } from './IconSetEntry' @@ -40,7 +40,7 @@ function _CategoryEntry({ = importedCollections diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx similarity index 88% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx index 5efc5cb02..89cb2e960 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/components/IconSetEntry.tsx @@ -1,8 +1,7 @@ -import { Icon } from '@iconify/react' import { memo, useCallback } from 'react' -import { Card } from '@components/layout' -import { Bordered, Box, Flex, Text } from '@components/primitives' +import { Card } from '@/components/layout' +import { Bordered, Box, Flex, Icon, Text } from '@/components/primitives' import type { IIconSet } from '../../../typescript/icon_selector_interfaces' @@ -73,11 +72,7 @@ function _IconSetEntry({ {iconSet.total?.toLocaleString()} icons {iconSet.height !== undefined && ( - + {iconSet.height} )} diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx index 4684ed33f..25b0c9b8b 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx @@ -3,8 +3,8 @@ import { collections as importedCollections } from '@iconify/collections' import { type IconifyInfo } from '@iconify/types' import { useMemo, useState } from 'react' -import { Box, Flex } from '@components/primitives' -import { Scrollbar } from '@components/utilities' +import { Box, Flex } from '@/components/primitives' +import { Scrollbar } from '@/components/utilities' import type { IIconSet } from '../../typescript/icon_selector_interfaces' import { CategoryEntry } from './components/CategoryEntry' diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx index 4b457c70e..dcb3fd7be 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx @@ -1,9 +1,9 @@ import { useEffect, useMemo, useState } from 'react' import { AutoSizer, List } from 'react-virtualized' -import { EmptyStateScreen, LoadingScreen } from '@components/feedback' -import { Button, SearchInput } from '@components/inputs' -import { Flex } from '@components/primitives' +import { EmptyStateScreen, LoadingScreen } from '@/components/feedback' +import { Button, SearchInput } from '@/components/inputs' +import { Flex } from '@/components/primitives' import { ChipSelector } from '../components/ChipSelector' import { IconEntry } from '../components/IconEntry' diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/typescript/icon_selector_interfaces.ts b/packages/ui/src/components/inputs/IconInput/IconPickerModal/typescript/icon_selector_interfaces.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/IconInput/IconPickerModal/typescript/icon_selector_interfaces.ts rename to packages/ui/src/components/inputs/IconInput/IconPickerModal/typescript/icon_selector_interfaces.ts diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/components/IconPreview.tsx b/packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx similarity index 91% rename from packages/lifeforge-ui/src/components/inputs/IconInput/components/IconPreview.tsx rename to packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx index 34851250c..15640aca1 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/components/IconPreview.tsx +++ b/packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx @@ -1,8 +1,8 @@ import { Icon, loadIcon } from '@iconify/react' import { useEffect, useState } from 'react' -import { Box } from '@components/primitives' -import type { InputVariant } from '@components/inputs/shared/types' +import type { InputVariant } from '@/components/inputs/shared/types' +import { Box } from '@/components/primitives' import * as styles from '../IconInput.css' @@ -61,4 +61,3 @@ export function IconPreview({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/IconInput/index.tsx b/packages/ui/src/components/inputs/IconInput/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/inputs/IconInput/index.tsx rename to packages/ui/src/components/inputs/IconInput/index.tsx index 206b8e915..d0f7479cb 100644 --- a/packages/lifeforge-ui/src/components/inputs/IconInput/index.tsx +++ b/packages/ui/src/components/inputs/IconInput/index.tsx @@ -1,7 +1,7 @@ import { useCallback, useRef } from 'react' -import { useModalStore } from 'shared' -import { Box, Flex } from '@components/primitives' +import { Box, Flex } from '@/components/primitives' +import { useModalStore } from '@/providers' import { InputActionButton } from '../shared/components/InputActionButton' import { InputIcon } from '../shared/components/InputIcon' diff --git a/packages/lifeforge-ui/src/components/inputs/Listbox/Listbox.stories.tsx b/packages/ui/src/components/inputs/Listbox/Listbox.stories.tsx similarity index 82% rename from packages/lifeforge-ui/src/components/inputs/Listbox/Listbox.stories.tsx rename to packages/ui/src/components/inputs/Listbox/Listbox.stories.tsx index 5cc1cf872..ea661221b 100644 --- a/packages/lifeforge-ui/src/components/inputs/Listbox/Listbox.stories.tsx +++ b/packages/ui/src/components/inputs/Listbox/Listbox.stories.tsx @@ -1,12 +1,12 @@ -import { Icon } from '@iconify/react' import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Icon, Text } from '@/components/primitives' + +import { COLORS, TAILWIND_PALETTE } from '@/system' import { ListboxOption } from '../ListboxInput/components/ListboxOption' import { Listbox } from './index' -import { TAILWIND_PALETTE } from '@/system' const meta = { argTypes: { @@ -72,14 +72,13 @@ export const Default: Story = { - - {selectedOption?.label || 'Select an option'} - + {selectedOption?.label || 'Select an option'} )} value={value} @@ -100,7 +99,7 @@ export const Default: Story = { } /** - * A disabled listbox — non-interactive. + * A disabled listbox - non-interactive. */ export const Disabled: Story = { args: { @@ -121,14 +120,13 @@ export const Disabled: Story = { - - {selectedOption?.label || 'Select an option'} - + {selectedOption?.label || 'Select an option'} )} value={value} @@ -172,14 +170,11 @@ export const MultipleOptions: Story = { return ( <> - + {option?.label} diff --git a/packages/lifeforge-ui/src/components/inputs/Listbox/index.tsx b/packages/ui/src/components/inputs/Listbox/index.tsx similarity index 89% rename from packages/lifeforge-ui/src/components/inputs/Listbox/index.tsx rename to packages/ui/src/components/inputs/Listbox/index.tsx index aa11c39e5..e9118b147 100644 --- a/packages/lifeforge-ui/src/components/inputs/Listbox/index.tsx +++ b/packages/ui/src/components/inputs/Listbox/index.tsx @@ -1,7 +1,7 @@ import { Listbox as HeadlessListbox, ListboxButton } from '@headlessui/react' -import { Icon } from '@iconify/react' -import { Flex, type FlexProps, Text, Transition } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Flex, type FlexProps, Text, Transition } from '@/components/primitives' import { ListboxOptions } from '../ListboxInput/components/ListboxOptions' @@ -77,11 +77,7 @@ export function Listbox({ )} - + @@ -90,4 +86,3 @@ export function Listbox({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/ListboxInput.stories.tsx b/packages/ui/src/components/inputs/ListboxInput/ListboxInput.stories.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/ListboxInput.stories.tsx rename to packages/ui/src/components/inputs/ListboxInput/ListboxInput.stories.tsx index 005a678ab..59a6c9ea4 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/ListboxInput.stories.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/ListboxInput.stories.tsx @@ -1,13 +1,13 @@ -import { Icon } from '@iconify/react' import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Icon, Text } from '@/components/primitives' + +import { COLORS, TAILWIND_PALETTE } from '@/system' import { ListboxNullOption } from './components/ListboxNullOption' import { ListboxOption } from './components/ListboxOption' import { ListboxInput } from './index' -import { TAILWIND_PALETTE } from '@/system' const meta = { component: ListboxInput @@ -42,11 +42,12 @@ function OptionButtonContent({ value }: { value: string }) { const option = OPTIONS.find(o => o.value === value) return ( - + {value || 'Select an option'} @@ -129,7 +130,7 @@ export const Required: Story = { } /** - * A disabled ListboxInput — non-interactive and visually dimmed. + * A disabled ListboxInput - non-interactive and visually dimmed. */ export const Disabled: Story = { args: { @@ -338,19 +339,15 @@ export const MultipleSelection: Story = { {value.length > 0 ? ( value.map((v, index) => ( <> - + o.value === v)?.color ?? - TAILWIND_PALETTE.gray[500] - } icon={ OPTIONS.find(o => o.value === v)?.icon ?? 'tabler:cube' } style={{ - flexShrink: 0, - height: '1.25rem', - width: '1.25rem' + color: + OPTIONS.find(o => o.value === v)?.color ?? + COLORS['bg-500'] }} /> {v} @@ -442,7 +439,7 @@ export const PlainVariantWithErrorMessage: Story = { variant: 'plain' }, -render: args => { + render: args => { const [value, onChange] = useState('Option 1') return ( diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts b/packages/ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts similarity index 52% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts rename to packages/ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts index d892f2183..e8d0c410e 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts +++ b/packages/ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.css.ts @@ -1,9 +1,9 @@ import { style } from '@vanilla-extract/css' -import { custom } from '@/system' +import { COLORS } from '@/system' export const dataOpen = style({ selectors: { - '&[data-open]': { borderColor: custom[500] } + '&[data-open]': { borderColor: COLORS['custom-500'] } } }) diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx b/packages/ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx similarity index 85% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx rename to packages/ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx index 4592d463d..5c28ccad1 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/components/ListboxInputWrapper.tsx @@ -1,10 +1,9 @@ import { Listbox } from '@headlessui/react' -import { Icon } from '@iconify/react' import clsx from 'clsx' -import { inputWrapperRecipe } from '@components/inputs/shared/components/InputWrapper/InputWrapper.css' -import { InputFocusProvider } from '@components/inputs/shared/contexts/InputFocusContext' -import { Box, Flex, Text } from '@components/primitives' +import { inputWrapperRecipe } from '@/components/inputs/shared/components/InputWrapper/InputWrapper.css' +import { InputFocusProvider } from '@/components/inputs/shared/contexts/InputFocusContext' +import { Box, Flex, Icon, Text } from '@/components/primitives' import type { InputSize, InputVariant } from '../../shared/types' import { useListboxBlurOnClose } from '../hooks/useListboxBlurOnClose' @@ -85,10 +84,9 @@ export function ListboxInputWrapper({ mr={variant === 'classic' ? 'lg' : 'md'} > )} @@ -103,4 +101,3 @@ export function ListboxInputWrapper({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx b/packages/ui/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx rename to packages/ui/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx index 4047d93c1..1ba2f6951 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/components/ListboxNullOption.tsx @@ -1,7 +1,7 @@ import { ListboxOption as HeadlessListboxOption } from '@headlessui/react' -import { Icon } from '@iconify/react' -import { Box, Flex, Text, Transition, WithDivide } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text, Transition, WithDivide } from '@/components/primitives' export function ListboxNullOption({ icon, @@ -85,4 +85,3 @@ export function ListboxNullOption({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOption.tsx b/packages/ui/src/components/inputs/ListboxInput/components/ListboxOption.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOption.tsx rename to packages/ui/src/components/inputs/ListboxInput/components/ListboxOption.tsx index b7055eb62..e6b81e08f 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOption.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/components/ListboxOption.tsx @@ -1,7 +1,7 @@ import { ListboxOption as HeadlessListboxOption } from '@headlessui/react' -import { Icon } from '@iconify/react' import { formatHex, parse } from 'culori' +import { Icon } from '@/components/primitives' import { Bordered, Box, @@ -9,7 +9,7 @@ import { Text, Transition, WithDivide -} from '@components/primitives' +} from '@/components/primitives' export function ListboxOption({ value, @@ -167,4 +167,3 @@ export function ListboxOption({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOptions.css.ts b/packages/ui/src/components/inputs/ListboxInput/components/ListboxOptions.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOptions.css.ts rename to packages/ui/src/components/inputs/ListboxInput/components/ListboxOptions.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOptions.tsx b/packages/ui/src/components/inputs/ListboxInput/components/ListboxOptions.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOptions.tsx rename to packages/ui/src/components/inputs/ListboxInput/components/ListboxOptions.tsx index e1f4117da..b951283c3 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/components/ListboxOptions.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/components/ListboxOptions.tsx @@ -1,6 +1,6 @@ import { ListboxOptions as HeadlessListboxOptions } from '@headlessui/react' -import { Bordered, Text } from '@components/primitives' +import { Bordered, Text } from '@/components/primitives' import * as styles from './ListboxOptions.css' @@ -47,4 +47,3 @@ export function ListboxOptions({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts b/packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts similarity index 99% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts rename to packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts index 82d647d31..8f0fe1f8e 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts +++ b/packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts @@ -36,4 +36,3 @@ export function useListboxBlurOnClose() { return containerRef } - diff --git a/packages/lifeforge-ui/src/components/inputs/ListboxInput/index.tsx b/packages/ui/src/components/inputs/ListboxInput/index.tsx similarity index 99% rename from packages/lifeforge-ui/src/components/inputs/ListboxInput/index.tsx rename to packages/ui/src/components/inputs/ListboxInput/index.tsx index 58b6ae62d..bc43131ad 100644 --- a/packages/lifeforge-ui/src/components/inputs/ListboxInput/index.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/index.tsx @@ -1,7 +1,7 @@ import { ListboxButton } from '@headlessui/react' import { useCallback, useMemo } from 'react' -import { Box, Flex } from '@components/primitives' +import { Box, Flex } from '@/components/primitives' import { InputActionButton } from '../shared/components/InputActionButton' import { InputIcon } from '../shared/components/InputIcon' diff --git a/packages/lifeforge-ui/src/components/inputs/LocationInput/LocationInput.stories.tsx b/packages/ui/src/components/inputs/LocationInput/LocationInput.stories.tsx similarity index 77% rename from packages/lifeforge-ui/src/components/inputs/LocationInput/LocationInput.stories.tsx rename to packages/ui/src/components/inputs/LocationInput/LocationInput.stories.tsx index ab399c800..2e0b6b8c5 100644 --- a/packages/lifeforge-ui/src/components/inputs/LocationInput/LocationInput.stories.tsx +++ b/packages/ui/src/components/inputs/LocationInput/LocationInput.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { LocationInput, type Location } from './index' +import { type Location, LocationInput } from './index' const meta = { argTypes: { @@ -30,9 +30,7 @@ export const Default: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } @@ -48,9 +46,7 @@ export const Required: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } @@ -66,9 +62,7 @@ export const Disabled: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } @@ -84,9 +78,7 @@ export const WithErrorMessage: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } @@ -103,9 +95,7 @@ export const DisabledWithErrorMessage: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } @@ -120,9 +110,7 @@ export const PlainVariant: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } @@ -138,8 +126,6 @@ export const PlainVariantWithErrorMessage: Story = { render: args => { const [location, setLocation] = useState(null) - return ( - - ) + return } } diff --git a/packages/lifeforge-ui/src/components/inputs/LocationInput/components/LocationActionButton.tsx b/packages/ui/src/components/inputs/LocationInput/components/LocationActionButton.tsx similarity index 79% rename from packages/lifeforge-ui/src/components/inputs/LocationInput/components/LocationActionButton.tsx rename to packages/ui/src/components/inputs/LocationInput/components/LocationActionButton.tsx index d08b1ddcf..d8e111639 100644 --- a/packages/lifeforge-ui/src/components/inputs/LocationInput/components/LocationActionButton.tsx +++ b/packages/ui/src/components/inputs/LocationInput/components/LocationActionButton.tsx @@ -1,7 +1,6 @@ -import { Icon } from '@iconify/react' import { useTranslation } from 'react-i18next' -import { Box, Text } from '@components/primitives' +import { Box, Icon, Text } from '@/components/primitives' import { Tooltip } from '../../../utilities' @@ -17,15 +16,7 @@ export function LocationActionButton({ if (!showInfoIcon) return null if (enabled === 'loading') { - return ( - - - - ) + return } return ( @@ -56,4 +47,3 @@ export function LocationActionButton({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/LocationInput/index.tsx b/packages/ui/src/components/inputs/LocationInput/index.tsx similarity index 87% rename from packages/lifeforge-ui/src/components/inputs/LocationInput/index.tsx rename to packages/ui/src/components/inputs/LocationInput/index.tsx index 079994927..ceb069652 100644 --- a/packages/lifeforge-ui/src/components/inputs/LocationInput/index.tsx +++ b/packages/ui/src/components/inputs/LocationInput/index.tsx @@ -1,12 +1,12 @@ -import { Icon } from '@iconify/react' import { useQuery } from '@tanstack/react-query' import { useDebounce } from '@uidotdev/usehooks' import { useState } from 'react' -import { useAPIEndpoint } from 'shared' -import { ComboboxInput, ComboboxOption } from '@components/inputs' -import type { InputVariants } from '@components/inputs/shared/types' -import { Box, Flex, Text } from '@components/primitives' +import { useAPIEndpoint } from '@lifeforge/shared' + +import { ComboboxInput, ComboboxOption } from '@/components/inputs' +import type { InputVariants } from '@/components/inputs/shared/types' +import { Box, Flex, Icon, Text } from '@/components/primitives' import { forgeAPI } from '@/utils/forgeAPI' @@ -127,13 +127,11 @@ export function LocationInput({ ) : ( - - - + ))} @@ -148,4 +146,3 @@ export function LocationInput({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/NumberInput/NumberInput.stories.tsx b/packages/ui/src/components/inputs/NumberInput/NumberInput.stories.tsx similarity index 79% rename from packages/lifeforge-ui/src/components/inputs/NumberInput/NumberInput.stories.tsx rename to packages/ui/src/components/inputs/NumberInput/NumberInput.stories.tsx index cde3494fa..52a36fd89 100644 --- a/packages/lifeforge-ui/src/components/inputs/NumberInput/NumberInput.stories.tsx +++ b/packages/ui/src/components/inputs/NumberInput/NumberInput.stories.tsx @@ -17,9 +17,7 @@ export const Default: Story = { onChange: () => {}, value: 0 }, - render: args => ( - - ) + render: args => } export const Required: Story = { @@ -30,9 +28,7 @@ export const Required: Story = { required: true, value: 0 }, - render: args => ( - - ) + render: args => } export const Disabled: Story = { @@ -43,9 +39,7 @@ export const Disabled: Story = { onChange: () => {}, value: 42 }, - render: args => ( - - ) + render: args => } export const WithErrorMessage: Story = { @@ -56,9 +50,7 @@ export const WithErrorMessage: Story = { onChange: () => {}, value: 0 }, - render: args => ( - - ) + render: args => } export const DisabledWithErrorMessage: Story = { @@ -70,9 +62,7 @@ export const DisabledWithErrorMessage: Story = { onChange: () => {}, value: 42 }, - render: args => ( - - ) + render: args => } export const PlainVariant: Story = { @@ -83,9 +73,7 @@ export const PlainVariant: Story = { value: 42, variant: 'plain' }, - render: args => ( - - ) + render: args => } export const PlainVariantWithErrorMessage: Story = { @@ -97,7 +85,5 @@ export const PlainVariantWithErrorMessage: Story = { value: 42, variant: 'plain' }, - render: args => ( - - ) + render: args => } diff --git a/packages/lifeforge-ui/src/components/inputs/NumberInput/index.tsx b/packages/ui/src/components/inputs/NumberInput/index.tsx similarity index 99% rename from packages/lifeforge-ui/src/components/inputs/NumberInput/index.tsx rename to packages/ui/src/components/inputs/NumberInput/index.tsx index e5f95c348..ddd6748ba 100644 --- a/packages/lifeforge-ui/src/components/inputs/NumberInput/index.tsx +++ b/packages/ui/src/components/inputs/NumberInput/index.tsx @@ -114,4 +114,3 @@ export function NumberInput({ /> ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/QRCodeScanner/QRCodeScanner.css.ts b/packages/ui/src/components/inputs/QRCodeScanner/QRCodeScanner.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/QRCodeScanner/QRCodeScanner.css.ts rename to packages/ui/src/components/inputs/QRCodeScanner/QRCodeScanner.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx b/packages/ui/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx rename to packages/ui/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx index 37560f434..8004e14cd 100644 --- a/packages/lifeforge-ui/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx +++ b/packages/ui/src/components/inputs/QRCodeScanner/QRCodeScanner.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { TextInput } from '@components/inputs' -import { useModalStore } from 'shared' +import { TextInput } from '@/components/inputs' +import { useModalStore } from '@/providers' import { QRCodeScanner as QrCodeScanner } from './index' diff --git a/packages/lifeforge-ui/src/components/inputs/QRCodeScanner/index.tsx b/packages/ui/src/components/inputs/QRCodeScanner/index.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/QRCodeScanner/index.tsx rename to packages/ui/src/components/inputs/QRCodeScanner/index.tsx index 5e14861f7..61233a517 100644 --- a/packages/lifeforge-ui/src/components/inputs/QRCodeScanner/index.tsx +++ b/packages/ui/src/components/inputs/QRCodeScanner/index.tsx @@ -1,7 +1,7 @@ import { Scanner } from '@yudiel/react-qr-scanner' -import { ModalHeader } from '@components/overlays' -import { Box } from '@components/primitives' +import { ModalHeader } from '@/components/overlays' +import { Box } from '@/components/primitives' import * as styles from './QRCodeScanner.css' @@ -71,4 +71,3 @@ export function QRCodeScanner({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/RRuleInput.stories.tsx b/packages/ui/src/components/inputs/RRuleInput/RRuleInput.stories.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/RRuleInput.stories.tsx rename to packages/ui/src/components/inputs/RRuleInput/RRuleInput.stories.tsx index bfef2d52a..1f9ab04ec 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/RRuleInput.stories.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/RRuleInput.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { Text } from '@components/primitives' +import { Text } from '@/components/primitives' import { ScrollableStory } from '@/storybook/ScrollableStory' diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/DailyForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/DailyForm.tsx similarity index 86% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/DailyForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/DailyForm.tsx index bc2b7adda..ad2ac1a8c 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/DailyForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/DailyForm.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' -import { NumberInput } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { NumberInput } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' import type { FreqSpecificParams } from '..' diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/HourlyForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/HourlyForm.tsx similarity index 86% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/HourlyForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/HourlyForm.tsx index 13e519868..27c6c4e6b 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/HourlyForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/HourlyForm.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' -import { NumberInput } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { NumberInput } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' import type { FreqSpecificParams } from '..' diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx similarity index 76% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx index 93ee13bdc..df75ca1ee 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyExactDateForm.tsx @@ -1,8 +1,8 @@ import { useTranslation } from 'react-i18next' -import { Box } from '@components/primitives' -import { NumberInput } from '@components/inputs' -import type { FreqSpecificParams } from '@components/inputs/RRuleInput' +import { NumberInput } from '@/components/inputs' +import type { FreqSpecificParams } from '@/components/inputs/RRuleInput' +import { Box } from '@/components/primitives' export function MonthlyExactDateForm({ data, @@ -25,4 +25,3 @@ export function MonthlyExactDateForm({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx similarity index 83% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx index 498a0303a..48a7ff0f8 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/components/MonthlyRelativeDayForm.tsx @@ -1,8 +1,8 @@ import { useTranslation } from 'react-i18next' -import { Box } from '@components/primitives' -import { ListboxInput, ListboxOption } from '@components/inputs' -import type { FreqSpecificParams } from '@components/inputs/RRuleInput' +import { ListboxInput, ListboxOption } from '@/components/inputs' +import type { FreqSpecificParams } from '@/components/inputs/RRuleInput' +import { Box } from '@/components/primitives' export const DAYS = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] as const @@ -42,7 +42,7 @@ export function MonthlyRelativeDayForm({ <> {t( data.onTheDay.length === 3 && data.onTheDay !== 'day' - ? `common.misc:dates.days.${DAYS.indexOf(data.onTheDay as typeof DAYS[number])}` + ? `common.misc:dates.days.${DAYS.indexOf(data.onTheDay as (typeof DAYS)[number])}` : `recurring.onTheDay.${data.onTheDay}` )} @@ -52,17 +52,12 @@ export function MonthlyRelativeDayForm({ value={data.onTheDay} onChange={onTheDay => setData({ ...data, onTheDay })} > - {[ - ...DAYS, - 'day', - 'weekday', - 'weekendDay' - ].map((day, idx) => ( + {[...DAYS, 'day', 'weekday', 'weekendDay'].map((day, idx) => ( ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx b/packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx index dfe81c9fb..a92f30ef5 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/MonthlyForm/index.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' -import { NumberInput } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { NumberInput } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' import type { FreqSpecificParams } from '../..' import { SelectableFormWrapper } from '../SelectableFormWrapper' diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx b/packages/ui/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx index 64b9fb731..b9d71d8b2 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/SelectableFormWrapper.tsx @@ -1,8 +1,8 @@ import React from 'react' import { useTranslation } from 'react-i18next' -import { Checkbox } from '@components/inputs' -import { Bordered, Box, Flex, Text } from '@components/primitives' +import { Checkbox } from '@/components/inputs' +import { Bordered, Box, Flex, Text } from '@/components/primitives' export function SelectableFormWrapper({ selected, @@ -60,4 +60,3 @@ export function SelectableFormWrapper({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/WeeklyForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/WeeklyForm.tsx similarity index 91% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/WeeklyForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/WeeklyForm.tsx index b3857fdff..2861a1ace 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/WeeklyForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/WeeklyForm.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' -import { ListboxInput, ListboxOption, NumberInput } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { ListboxInput, ListboxOption, NumberInput } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' import type { FreqSpecificParams } from '..' diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx similarity index 85% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx index b4aee3d28..21de800c4 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyExactDateForm.tsx @@ -1,8 +1,8 @@ import { useTranslation } from 'react-i18next' -import { Box } from '@components/primitives' -import { ListboxInput, ListboxOption, NumberInput } from '@components/inputs' -import type { FreqSpecificParams } from '@components/inputs/RRuleInput' +import { ListboxInput, ListboxOption, NumberInput } from '@/components/inputs' +import type { FreqSpecificParams } from '@/components/inputs/RRuleInput' +import { Box } from '@/components/primitives' export function YearlyExactDateForm({ data, @@ -47,4 +47,3 @@ export function YearlyExactDateForm({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx b/packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx index 9aaa7647f..972d155a5 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/components/YearlyRelativeDayForm.tsx @@ -1,8 +1,8 @@ import { useTranslation } from 'react-i18next' -import { ListboxInput, ListboxOption } from '@components/inputs' -import type { FreqSpecificParams } from '@components/inputs/RRuleInput' -import { Box } from '@components/primitives' +import { ListboxInput, ListboxOption } from '@/components/inputs' +import type { FreqSpecificParams } from '@/components/inputs/RRuleInput' +import { Box } from '@/components/primitives' export const DAYS = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] as const @@ -90,4 +90,3 @@ export function YearlyRelativeDayForm({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/index.tsx b/packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/index.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/components/YearlyForm/index.tsx rename to packages/ui/src/components/inputs/RRuleInput/components/YearlyForm/index.tsx diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/index.tsx b/packages/ui/src/components/inputs/RRuleInput/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/index.tsx rename to packages/ui/src/components/inputs/RRuleInput/index.tsx index 2040bc775..37549e125 100644 --- a/packages/lifeforge-ui/src/components/inputs/RRuleInput/index.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/index.tsx @@ -1,7 +1,7 @@ import { useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import { DateInput } from '../DateInput' import { ListboxInput } from '../ListboxInput' @@ -12,7 +12,7 @@ import { HourlyForm } from './components/HourlyForm' import { MonthlyForm } from './components/MonthlyForm' import { WeeklyForm } from './components/WeeklyForm' import { YearlyForm } from './components/YearlyForm' -import { getRRULEString, fromRRULEString } from './utils/getRRuleString' +import { fromRRULEString, getRRULEString } from './utils/getRRuleString' type BaseParams = { freq: K @@ -383,4 +383,3 @@ export function RRuleInput({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/RRuleInput/utils/getRRuleString.ts b/packages/ui/src/components/inputs/RRuleInput/utils/getRRuleString.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/RRuleInput/utils/getRRuleString.ts rename to packages/ui/src/components/inputs/RRuleInput/utils/getRRuleString.ts diff --git a/packages/lifeforge-ui/src/components/inputs/SearchInput/SearchInput.css.ts b/packages/ui/src/components/inputs/SearchInput/SearchInput.css.ts similarity index 58% rename from packages/lifeforge-ui/src/components/inputs/SearchInput/SearchInput.css.ts rename to packages/ui/src/components/inputs/SearchInput/SearchInput.css.ts index 2deb69cdd..25ab881e7 100644 --- a/packages/lifeforge-ui/src/components/inputs/SearchInput/SearchInput.css.ts +++ b/packages/ui/src/components/inputs/SearchInput/SearchInput.css.ts @@ -1,9 +1,9 @@ import { style } from '@vanilla-extract/css' -import { bg, custom, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const searchWrapper = style({ - borderColor: withOpacity(bg[500], 0.2), + borderColor: withOpacity(COLORS['bg-500'], 0.2), transition: 'all 0.2s', selectors: { '.bordered &': { @@ -11,24 +11,24 @@ export const searchWrapper = style({ borderStyle: 'solid' }, '.has-bg-image &': { - backgroundColor: withOpacity(bg[50], 0.5), + backgroundColor: withOpacity(COLORS['bg-50'], 0.5), backdropFilter: 'blur(4px)' }, '.dark .has-bg-image &': { - backgroundColor: withOpacity(bg[900], 0.5), + backgroundColor: withOpacity(COLORS['bg-900'], 0.5), backdropFilter: 'blur(4px)' }, '.has-bg-image &:hover': { - backgroundColor: withOpacity(bg[100], 0.5) + backgroundColor: withOpacity(COLORS['bg-100'], 0.5) }, '.dark .has-bg-image &:hover': { - backgroundColor: withOpacity(bg[800], 0.5) + backgroundColor: withOpacity(COLORS['bg-800'], 0.5) } } }) export const searchInput = style({ backgroundColor: 'transparent', - caretColor: custom[500], + caretColor: COLORS['custom-500'], width: '100%' }) diff --git a/packages/lifeforge-ui/src/components/inputs/SearchInput/SearchInput.stories.tsx b/packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/inputs/SearchInput/SearchInput.stories.tsx rename to packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx index 241af431c..e41a9c601 100644 --- a/packages/lifeforge-ui/src/components/inputs/SearchInput/SearchInput.stories.tsx +++ b/packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx @@ -1,10 +1,10 @@ -import { Icon } from '@iconify/react' import type { StoryObj, Meta as _Meta } from '@storybook/react-vite' import { useQuery } from '@tanstack/react-query' import { useState } from 'react' -import { Box, Flex, Text } from '@components/primitives' -import { WithQuery } from '@components/utilities' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text } from '@/components/primitives' +import { WithQuery } from '@/components/utilities' import { SearchInput } from './index' diff --git a/packages/lifeforge-ui/src/components/inputs/SearchInput/index.tsx b/packages/ui/src/components/inputs/SearchInput/index.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/inputs/SearchInput/index.tsx rename to packages/ui/src/components/inputs/SearchInput/index.tsx index da1959434..b3e97e36f 100644 --- a/packages/lifeforge-ui/src/components/inputs/SearchInput/index.tsx +++ b/packages/ui/src/components/inputs/SearchInput/index.tsx @@ -1,20 +1,21 @@ -import { Icon } from '@iconify/react' import { useDebounce } from '@uidotdev/usehooks' import clsx from 'clsx' import _ from 'lodash' import { useEffect, useRef, useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' -import { useDivSize } from 'shared' -import { Card } from '@components/layout' +import { useDivSize } from '@lifeforge/shared' + +import { Card } from '@/components/layout' +import { Icon } from '@/components/primitives' import { Box, Flex, type FlexProps, Text, Transition -} from '@components/primitives' +} from '@/components/primitives' import { Button } from '../Button' import { Placeholder } from '../shared/components/Placeholder' @@ -220,7 +221,7 @@ export function SearchInput({ }} {...props} > - + @@ -322,4 +323,3 @@ export function SearchInput({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/SliderInput/SliderInput.css.ts b/packages/ui/src/components/inputs/SliderInput/SliderInput.css.ts similarity index 84% rename from packages/lifeforge-ui/src/components/inputs/SliderInput/SliderInput.css.ts rename to packages/ui/src/components/inputs/SliderInput/SliderInput.css.ts index d8253e2da..d4ab07793 100644 --- a/packages/lifeforge-ui/src/components/inputs/SliderInput/SliderInput.css.ts +++ b/packages/ui/src/components/inputs/SliderInput/SliderInput.css.ts @@ -1,6 +1,6 @@ import { globalStyle, style } from '@vanilla-extract/css' -import { bg, custom } from '@/system' +import { COLORS } from '@/system' export const track = style({ position: 'relative', @@ -12,7 +12,7 @@ export const track = style({ export const fill = style({ height: '1rem', borderRadius: '9999px', - backgroundColor: custom[500] + backgroundColor: COLORS['custom-500'] }) export const input = style({ @@ -23,7 +23,7 @@ export const input = style({ background: 'transparent', margin: 0, cursor: 'pointer', - accentColor: custom[500], + accentColor: COLORS['custom-500'], position: 'absolute', inset: 0, zIndex: 2 @@ -41,10 +41,10 @@ globalStyle(`${input}::-webkit-slider-thumb`, { height: '1em', width: '1em', borderRadius: '9999px', - background: custom[500], + background: COLORS['custom-500'], borderWidth: '3px', borderStyle: 'solid', - borderColor: bg[50], + borderColor: COLORS['bg-50'], boxShadow: 'var(--custom-shadow)', cursor: 'pointer', transition: 'transform 0.15s ease' @@ -58,10 +58,10 @@ globalStyle(`${input}::-moz-range-thumb`, { height: '1em', width: '1em', borderRadius: '9999px', - background: custom[500], + background: COLORS['custom-500'], borderWidth: '3px', borderStyle: 'solid', - borderColor: bg[50], + borderColor: COLORS['bg-50'], boxShadow: 'var(--custom-shadow)', cursor: 'pointer', transition: 'transform 0.15s ease' diff --git a/packages/lifeforge-ui/src/components/inputs/SliderInput/SliderInput.stories.tsx b/packages/ui/src/components/inputs/SliderInput/SliderInput.stories.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/inputs/SliderInput/SliderInput.stories.tsx rename to packages/ui/src/components/inputs/SliderInput/SliderInput.stories.tsx index 81a306b59..90825e89f 100644 --- a/packages/lifeforge-ui/src/components/inputs/SliderInput/SliderInput.stories.tsx +++ b/packages/ui/src/components/inputs/SliderInput/SliderInput.stories.tsx @@ -14,9 +14,7 @@ type Story = StoryObj function SliderStory(args: React.ComponentProps) { const [value, onChange] = useState(args.value) - return ( - - ) + return } export const Default: Story = { diff --git a/packages/lifeforge-ui/src/components/inputs/SliderInput/components/SliderHeader.tsx b/packages/ui/src/components/inputs/SliderInput/components/SliderHeader.tsx similarity index 87% rename from packages/lifeforge-ui/src/components/inputs/SliderInput/components/SliderHeader.tsx rename to packages/ui/src/components/inputs/SliderInput/components/SliderHeader.tsx index 7d0faa709..2392021e3 100644 --- a/packages/lifeforge-ui/src/components/inputs/SliderInput/components/SliderHeader.tsx +++ b/packages/ui/src/components/inputs/SliderInput/components/SliderHeader.tsx @@ -1,7 +1,6 @@ -import { Icon } from '@iconify/react' - -import { useInputLabel } from '@components/inputs/shared/hooks/useInputLabel' -import { Flex, Text } from '@components/primitives' +import { useInputLabel } from '@/components/inputs/shared/hooks/useInputLabel' +import { Icon } from '@/components/primitives' +import { Flex, Text } from '@/components/primitives' export function SliderHeader({ icon, @@ -59,4 +58,3 @@ export function SliderHeader({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/SliderInput/components/SliderTicks.tsx b/packages/ui/src/components/inputs/SliderInput/components/SliderTicks.tsx similarity index 84% rename from packages/lifeforge-ui/src/components/inputs/SliderInput/components/SliderTicks.tsx rename to packages/ui/src/components/inputs/SliderInput/components/SliderTicks.tsx index db53c9b44..6b36f4b6a 100644 --- a/packages/lifeforge-ui/src/components/inputs/SliderInput/components/SliderTicks.tsx +++ b/packages/ui/src/components/inputs/SliderInput/components/SliderTicks.tsx @@ -1,8 +1,14 @@ import React from 'react' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Text } from '@/components/primitives' -export function SliderTicks({ min = 0, max = 100 }: { min?: number; max?: number }) { +export function SliderTicks({ + min = 0, + max = 100 +}: { + min?: number + max?: number +}) { return ( {[min, ((min + max) / 2).toFixed(1), max].map((label, index) => ( @@ -35,4 +41,3 @@ export function SliderTicks({ min = 0, max = 100 }: { min?: number; max?: number ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/SliderInput/index.tsx b/packages/ui/src/components/inputs/SliderInput/index.tsx similarity index 84% rename from packages/lifeforge-ui/src/components/inputs/SliderInput/index.tsx rename to packages/ui/src/components/inputs/SliderInput/index.tsx index 57db956fd..6a675c154 100644 --- a/packages/lifeforge-ui/src/components/inputs/SliderInput/index.tsx +++ b/packages/ui/src/components/inputs/SliderInput/index.tsx @@ -1,10 +1,10 @@ import clsx from 'clsx' -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' +import * as styles from './SliderInput.css' import { SliderHeader } from './components/SliderHeader' import { SliderTicks } from './components/SliderTicks' -import * as styles from './SliderInput.css' interface SliderInputProps { label?: string @@ -49,12 +49,13 @@ export function SliderInput({ /> - + @@ -78,4 +79,3 @@ export function Switch({ value, onChange, disabled }: SwitchProps) { ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/TagsInput/TagsInput.stories.tsx b/packages/ui/src/components/inputs/TagsInput/TagsInput.stories.tsx similarity index 80% rename from packages/lifeforge-ui/src/components/inputs/TagsInput/TagsInput.stories.tsx rename to packages/ui/src/components/inputs/TagsInput/TagsInput.stories.tsx index 9c8878a5b..e816bbb37 100644 --- a/packages/lifeforge-ui/src/components/inputs/TagsInput/TagsInput.stories.tsx +++ b/packages/ui/src/components/inputs/TagsInput/TagsInput.stories.tsx @@ -26,9 +26,7 @@ export const Default: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -52,9 +50,7 @@ export const WithActionButton: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -70,9 +66,7 @@ export const Required: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -88,9 +82,7 @@ export const Disabled: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -107,9 +99,7 @@ export const WithErrorMessage: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -127,9 +117,7 @@ export const DisabledWithErrorMessage: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -146,9 +134,7 @@ export const PlainVariant: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } @@ -166,8 +152,6 @@ export const PlainVariantWithErrorMessage: Story = { render: args => { const [value, onChange] = useState([]) - return ( - - ) + return } } diff --git a/packages/lifeforge-ui/src/components/inputs/TagsInput/index.tsx b/packages/ui/src/components/inputs/TagsInput/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/TagsInput/index.tsx rename to packages/ui/src/components/inputs/TagsInput/index.tsx index 960d83cb2..0912f8d06 100644 --- a/packages/lifeforge-ui/src/components/inputs/TagsInput/index.tsx +++ b/packages/ui/src/components/inputs/TagsInput/index.tsx @@ -1,7 +1,7 @@ import { useRef, useState } from 'react' -import { TagChip } from '@components/data-display' -import { Flex } from '@components/primitives' +import { TagChip } from '@/components/data-display' +import { Flex } from '@/components/primitives' import { TextInputBox } from '../TextInput/components/TextInputBox' import { InputActionButton } from '../shared/components/InputActionButton' diff --git a/packages/lifeforge-ui/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx b/packages/ui/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx similarity index 75% rename from packages/lifeforge-ui/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx rename to packages/ui/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx index 36ed91b59..38e66c55f 100644 --- a/packages/lifeforge-ui/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx +++ b/packages/ui/src/components/inputs/TextAreaInput/TextAreaInput.stories.tsx @@ -22,13 +22,7 @@ export const Default: Story = { render: args => { const [value, onChange] = useState(args.value) - return ( - - ) + return } } @@ -44,13 +38,7 @@ export const Required: Story = { render: args => { const [value, onChange] = useState(args.value) - return ( - - ) + return } } @@ -66,12 +54,7 @@ export const Disabled: Story = { const [value, onChange] = useState(args.value) return ( - + ) } } @@ -89,13 +72,7 @@ export const WithErrorMessage: Story = { render: args => { const [value, onChange] = useState(args.value) - return ( - - ) + return } } @@ -114,12 +91,7 @@ export const DisabledWithErrorMessage: Story = { const [value, onChange] = useState(args.value) return ( - + ) } } @@ -137,13 +109,7 @@ export const PlainVariant: Story = { render: args => { const [value, onChange] = useState(args.value) - return ( - - ) + return } } @@ -161,12 +127,6 @@ export const PlainVariantWithErrorMessage: Story = { render: args => { const [value, onChange] = useState(args.value) - return ( - - ) + return } } diff --git a/packages/lifeforge-ui/src/components/inputs/TextAreaInput/index.tsx b/packages/ui/src/components/inputs/TextAreaInput/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/inputs/TextAreaInput/index.tsx rename to packages/ui/src/components/inputs/TextAreaInput/index.tsx index bbbcf86c2..227f0d1f8 100644 --- a/packages/lifeforge-ui/src/components/inputs/TextAreaInput/index.tsx +++ b/packages/ui/src/components/inputs/TextAreaInput/index.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef } from 'react' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import { vars } from '@/system' diff --git a/packages/lifeforge-ui/src/components/inputs/TextInput/TextInput.stories.tsx b/packages/ui/src/components/inputs/TextInput/TextInput.stories.tsx similarity index 82% rename from packages/lifeforge-ui/src/components/inputs/TextInput/TextInput.stories.tsx rename to packages/ui/src/components/inputs/TextInput/TextInput.stories.tsx index e1c29567b..adb863c81 100644 --- a/packages/lifeforge-ui/src/components/inputs/TextInput/TextInput.stories.tsx +++ b/packages/ui/src/components/inputs/TextInput/TextInput.stories.tsx @@ -1,8 +1,7 @@ -import { Icon } from '@iconify/react' import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { Flex, Text } from '@components/primitives' +import { Flex, Icon, Text } from '@/components/primitives' import { TextInput } from './index' @@ -36,9 +35,7 @@ export const Default: Story = { render: args => { const [value, onChange] = useState('') - return ( - - ) + return } } @@ -55,9 +52,7 @@ export const PasswordInput: Story = { render: args => { const [value, onChange] = useState('') - return ( - - ) + return } } @@ -77,9 +72,7 @@ export const WithActionButton: Story = { render: args => { const [value, onChange] = useState('') - return ( - - ) + return } } @@ -97,9 +90,7 @@ export const Required: Story = { render: args => { const [value, onChange] = useState('') - return ( - - ) + return } } @@ -115,9 +106,7 @@ export const Disabled: Story = { render: args => { const [value, onChange] = useState('Existing value') - return ( - - ) + return } } @@ -134,9 +123,7 @@ export const WithErrorMessage: Story = { render: args => { const [value, onChange] = useState('') - return ( - - ) + return } } @@ -154,9 +141,7 @@ export const DisabledWithErrorMessage: Story = { render: args => { const [value, onChange] = useState('Existing value') - return ( - - ) + return } } @@ -179,7 +164,7 @@ export const PlainVariantWithErrorMessage: Story = { - + Username @@ -208,7 +193,7 @@ export const PlainVariant: Story = { - + Username diff --git a/packages/lifeforge-ui/src/components/inputs/TextInput/components/TextInputBox.css.ts b/packages/ui/src/components/inputs/TextInput/components/TextInputBox.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/TextInput/components/TextInputBox.css.ts rename to packages/ui/src/components/inputs/TextInput/components/TextInputBox.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/TextInput/components/TextInputBox.tsx b/packages/ui/src/components/inputs/TextInput/components/TextInputBox.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/inputs/TextInput/components/TextInputBox.tsx rename to packages/ui/src/components/inputs/TextInput/components/TextInputBox.tsx index 0bf7f3d98..bce9d8b5d 100644 --- a/packages/lifeforge-ui/src/components/inputs/TextInput/components/TextInputBox.tsx +++ b/packages/ui/src/components/inputs/TextInput/components/TextInputBox.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx' -import { Placeholder } from '@components/inputs/shared/components/Placeholder' -import { autoFocusableRef } from '@components/inputs/shared/utils/autoFocusableRef' +import { Placeholder } from '@/components/inputs/shared/components/Placeholder' +import { autoFocusableRef } from '@/components/inputs/shared/utils/autoFocusableRef' import type { InputSize, InputVariant } from '../../shared/types' import { textInputBoxRecipe } from './TextInputBox.css' @@ -79,4 +79,3 @@ export function TextInputBox({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/TextInput/index.tsx b/packages/ui/src/components/inputs/TextInput/index.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/inputs/TextInput/index.tsx rename to packages/ui/src/components/inputs/TextInput/index.tsx index 425050385..96b853e92 100644 --- a/packages/lifeforge-ui/src/components/inputs/TextInput/index.tsx +++ b/packages/ui/src/components/inputs/TextInput/index.tsx @@ -1,7 +1,8 @@ import { memo, useRef, useState } from 'react' -import { usePromiseLoading } from 'shared' -import { Flex } from '@components/primitives' +import { usePromiseLoading } from '@lifeforge/shared' + +import { Flex } from '@/components/primitives' import { Button } from '../Button' import { InputIcon } from '../shared/components/InputIcon' diff --git a/packages/lifeforge-ui/src/components/inputs/index.ts b/packages/ui/src/components/inputs/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/index.ts rename to packages/ui/src/components/inputs/index.ts diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputActionButton.tsx b/packages/ui/src/components/inputs/shared/components/InputActionButton.tsx similarity index 94% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputActionButton.tsx rename to packages/ui/src/components/inputs/shared/components/InputActionButton.tsx index 9b79e85f3..e7a8bbcf8 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/InputActionButton.tsx +++ b/packages/ui/src/components/inputs/shared/components/InputActionButton.tsx @@ -1,7 +1,7 @@ -import { Icon } from '@iconify/react' import { type ComponentPropsWithoutRef, type ReactNode } from 'react' -import { Flex, Text, Transition } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Flex, Text, Transition } from '@/components/primitives' import type { InputVariant } from '../types' diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputIcon.tsx b/packages/ui/src/components/inputs/shared/components/InputIcon.tsx similarity index 77% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputIcon.tsx rename to packages/ui/src/components/inputs/shared/components/InputIcon.tsx index e56a05525..416ee0157 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/InputIcon.tsx +++ b/packages/ui/src/components/inputs/shared/components/InputIcon.tsx @@ -1,7 +1,6 @@ -import { Icon } from '@iconify/react' import { memo } from 'react' -import { Box, Text } from '@components/primitives' +import { Box, Icon } from '@/components/primitives' import { useInputFocused } from '../contexts/InputFocusContext' @@ -26,8 +25,7 @@ function _InputIcon({ pointerEvents: 'none' }} > - - - + icon={icon} + size="1.5em" + /> ) } diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputInnerWrapper.tsx b/packages/ui/src/components/inputs/shared/components/InputInnerWrapper.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputInnerWrapper.tsx rename to packages/ui/src/components/inputs/shared/components/InputInnerWrapper.tsx index 45285c943..d9d1a1370 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/InputInnerWrapper.tsx +++ b/packages/ui/src/components/inputs/shared/components/InputInnerWrapper.tsx @@ -1,6 +1,6 @@ import React from 'react' -import { Flex, type FlexProps } from '@components/primitives' +import { Flex, type FlexProps } from '@/components/primitives' import type { InputVariant } from '../types' diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputLabel/InputLabel.css.ts b/packages/ui/src/components/inputs/shared/components/InputLabel/InputLabel.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputLabel/InputLabel.css.ts rename to packages/ui/src/components/inputs/shared/components/InputLabel/InputLabel.css.ts diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputLabel/index.tsx b/packages/ui/src/components/inputs/shared/components/InputLabel/index.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputLabel/index.tsx rename to packages/ui/src/components/inputs/shared/components/InputLabel/index.tsx index e063dd7db..b01df9085 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/InputLabel/index.tsx +++ b/packages/ui/src/components/inputs/shared/components/InputLabel/index.tsx @@ -1,8 +1,8 @@ -import { Icon } from '@iconify/react' import clsx from 'clsx' import { type CSSProperties, memo } from 'react' -import { Flex, Text, Transition } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Flex, Text, Transition } from '@/components/primitives' import { useInputFocused } from '../../contexts/InputFocusContext' import { diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts b/packages/ui/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts similarity index 79% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts rename to packages/ui/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts index 93fca6da3..74dca0208 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts +++ b/packages/ui/src/components/inputs/shared/components/InputWrapper/InputWrapper.css.ts @@ -1,16 +1,16 @@ import { style } from '@vanilla-extract/css' import { recipe } from '@vanilla-extract/recipes' -import { bg, custom, vars, withOpacity } from '@/system' +import { COLORS, vars, withOpacity } from '@/system' export const inputWrapperRecipe = recipe({ base: { transition: 'all 0.2s', - backgroundColor: withOpacity(bg[200], 0.5), + backgroundColor: withOpacity(COLORS['bg-200'], 0.5), selectors: { - '.dark &': { backgroundColor: withOpacity(bg[800], 0.7) }, - '&:hover': { backgroundColor: bg[200] }, - '.dark &:hover': { backgroundColor: bg[800] } + '.dark &': { backgroundColor: withOpacity(COLORS['bg-800'], 0.7) }, + '&:hover': { backgroundColor: COLORS['bg-200'] }, + '.dark &:hover': { backgroundColor: COLORS['bg-800'] } } }, variants: { @@ -47,13 +47,13 @@ export const inputWrapperRecipe = recipe({ } }, false: { - borderColor: bg[500], + borderColor: COLORS['bg-500'], selectors: { '&:focus-within': { - borderColor: custom[500] + borderColor: COLORS['custom-500'] }, '.bordered &': { - borderColor: withOpacity(bg[500], 0.2) + borderColor: withOpacity(COLORS['bg-500'], 0.2) } } } diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/InputWrapper/index.tsx b/packages/ui/src/components/inputs/shared/components/InputWrapper/index.tsx similarity index 76% rename from packages/lifeforge-ui/src/components/inputs/shared/components/InputWrapper/index.tsx rename to packages/ui/src/components/inputs/shared/components/InputWrapper/index.tsx index e54285a1b..c40fa1dd3 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/InputWrapper/index.tsx +++ b/packages/ui/src/components/inputs/shared/components/InputWrapper/index.tsx @@ -1,9 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { Icon } from '@iconify/react' import clsx from 'clsx' import { useCallback } from 'react' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Icon, Text } from '@/components/primitives' import { InputFocusProvider } from '../../contexts/InputFocusContext' import type { InputSize, InputVariant } from '../../types' @@ -85,25 +84,25 @@ export function InputWrapper({ style={disabled ? { opacity: 0.5 } : undefined} width="100%" > - + {children} {errorMsg && ( - + )} @@ -135,4 +129,3 @@ export function InputWrapper({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts b/packages/ui/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts similarity index 72% rename from packages/lifeforge-ui/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts rename to packages/ui/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts index 652395453..d01deb1dc 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts +++ b/packages/ui/src/components/inputs/shared/components/Placeholder/Placeholder.css.ts @@ -1,6 +1,6 @@ import { recipe } from '@vanilla-extract/recipes' -import { bg } from '@/system' +import { COLORS } from '@/system' export const placeholderRecipe = recipe({ variants: { @@ -9,7 +9,7 @@ export const placeholderRecipe = recipe({ selectors: { '&::placeholder': { color: 'transparent' } } }, default: { - selectors: { '&::placeholder': { color: bg[500] } } + selectors: { '&::placeholder': { color: COLORS['bg-500'] } } } }, focusColor: { @@ -17,7 +17,7 @@ export const placeholderRecipe = recipe({ selectors: { '&:focus::placeholder': { color: 'transparent' } } }, default: { - selectors: { '&:focus::placeholder': { color: bg[500] } } + selectors: { '&:focus::placeholder': { color: COLORS['bg-500'] } } } } }, diff --git a/packages/lifeforge-ui/src/components/inputs/shared/components/Placeholder/index.tsx b/packages/ui/src/components/inputs/shared/components/Placeholder/index.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/inputs/shared/components/Placeholder/index.tsx rename to packages/ui/src/components/inputs/shared/components/Placeholder/index.tsx index 2867967ea..ce320ab04 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/components/Placeholder/index.tsx +++ b/packages/ui/src/components/inputs/shared/components/Placeholder/index.tsx @@ -1,7 +1,7 @@ import { clsx } from 'clsx' import { type CSSProperties, type ReactNode } from 'react' -import { Slot } from '@components/primitives' +import { Slot } from '@/components/primitives' import { placeholderRecipe } from './Placeholder.css' @@ -29,4 +29,3 @@ export function Placeholder({ ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/shared/contexts/InputFocusContext.tsx b/packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx similarity index 68% rename from packages/lifeforge-ui/src/components/inputs/shared/contexts/InputFocusContext.tsx rename to packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx index 2837afac5..37d91a2b7 100644 --- a/packages/lifeforge-ui/src/components/inputs/shared/contexts/InputFocusContext.tsx +++ b/packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx @@ -1,10 +1,4 @@ -import { - createContext, - useCallback, - useContext, - useRef, - useState -} from 'react' +import { createContext, useCallback, useContext, useRef, useState } from 'react' type FocusableElement = HTMLElement & { contains?(node: Node | null): boolean @@ -29,18 +23,15 @@ export function InputFocusProvider({ setIsFocused(true) }, []) - const handleBlur = useCallback( - (e: React.FocusEvent) => { - if ( - containerRef.current?.contains - ? !containerRef.current.contains(e.relatedTarget as Node | null) - : true - ) { - setIsFocused(false) - } - }, - [] - ) + const handleBlur = useCallback((e: React.FocusEvent) => { + if ( + containerRef.current?.contains + ? !containerRef.current.contains(e.relatedTarget as Node | null) + : true + ) { + setIsFocused(false) + } + }, []) return ( ) } - diff --git a/packages/lifeforge-ui/src/components/inputs/shared/hooks/useInputLabel.ts b/packages/ui/src/components/inputs/shared/hooks/useInputLabel.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/shared/hooks/useInputLabel.ts rename to packages/ui/src/components/inputs/shared/hooks/useInputLabel.ts diff --git a/packages/lifeforge-ui/src/components/inputs/shared/types.ts b/packages/ui/src/components/inputs/shared/types.ts similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/shared/types.ts rename to packages/ui/src/components/inputs/shared/types.ts diff --git a/packages/lifeforge-ui/src/components/inputs/shared/utils/autoFocusableRef.tsx b/packages/ui/src/components/inputs/shared/utils/autoFocusableRef.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/inputs/shared/utils/autoFocusableRef.tsx rename to packages/ui/src/components/inputs/shared/utils/autoFocusableRef.tsx diff --git a/packages/lifeforge-ui/src/components/layout/Card/Card.stories.tsx b/packages/ui/src/components/layout/Card/Card.stories.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/layout/Card/Card.stories.tsx rename to packages/ui/src/components/layout/Card/Card.stories.tsx index f4dc9e089..69a114760 100644 --- a/packages/lifeforge-ui/src/components/layout/Card/Card.stories.tsx +++ b/packages/ui/src/components/layout/Card/Card.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Button } from '@components/inputs' -import { Box, Flex, Grid, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Box, Flex, Grid, Text } from '@/components/primitives' import { Card } from '../Card' @@ -97,7 +97,7 @@ export const MultipleItems: Story = { children: <> }, render: () => ( - + Item 1 diff --git a/packages/lifeforge-ui/src/components/layout/Card/index.tsx b/packages/ui/src/components/layout/Card/index.tsx similarity index 99% rename from packages/lifeforge-ui/src/components/layout/Card/index.tsx rename to packages/ui/src/components/layout/Card/index.tsx index eb09924be..fce6620af 100644 --- a/packages/lifeforge-ui/src/components/layout/Card/index.tsx +++ b/packages/ui/src/components/layout/Card/index.tsx @@ -36,4 +36,3 @@ export function Card({ /> ) } - diff --git a/packages/lifeforge-ui/src/components/layout/ContentWrapperWithSidebar/index.tsx b/packages/ui/src/components/layout/ContentWrapperWithSidebar/index.tsx similarity index 85% rename from packages/lifeforge-ui/src/components/layout/ContentWrapperWithSidebar/index.tsx rename to packages/ui/src/components/layout/ContentWrapperWithSidebar/index.tsx index 366921414..75e7fca8f 100644 --- a/packages/lifeforge-ui/src/components/layout/ContentWrapperWithSidebar/index.tsx +++ b/packages/ui/src/components/layout/ContentWrapperWithSidebar/index.tsx @@ -1,4 +1,4 @@ -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' export function ContentWrapperWithSidebar({ children diff --git a/packages/lifeforge-ui/src/components/layout/LayoutWithSidebar/index.tsx b/packages/ui/src/components/layout/LayoutWithSidebar/index.tsx similarity index 81% rename from packages/lifeforge-ui/src/components/layout/LayoutWithSidebar/index.tsx rename to packages/ui/src/components/layout/LayoutWithSidebar/index.tsx index 8e142af4a..35c8354ec 100644 --- a/packages/lifeforge-ui/src/components/layout/LayoutWithSidebar/index.tsx +++ b/packages/ui/src/components/layout/LayoutWithSidebar/index.tsx @@ -1,4 +1,4 @@ -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' export function LayoutWithSidebar({ children }: { children: React.ReactNode }) { return ( @@ -7,4 +7,3 @@ export function LayoutWithSidebar({ children }: { children: React.ReactNode }) { ) } - diff --git a/packages/lifeforge-ui/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx b/packages/ui/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx rename to packages/ui/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx index 778a205a5..46af1a93e 100644 --- a/packages/lifeforge-ui/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx +++ b/packages/ui/src/components/layout/ModuleHeader/ModuleHeader.stories.tsx @@ -1,9 +1,9 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Button } from '@components/inputs' -import { ModuleWrapper } from '@components/layout' -import { ContextMenuItem } from '@components/overlays' -import { Box, Flex, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { ModuleWrapper } from '@/components/layout' +import { ContextMenuItem } from '@/components/overlays' +import { Box, Flex, Text } from '@/components/primitives' import { ModuleHeader } from './index' @@ -50,7 +50,7 @@ function StoryShell({ children }: { children: React.ReactNode }) { /** * With no props, `ModuleHeader` reads `title` and `icon` from the nearest - * `ModuleWrapper` context — the typical usage inside a module page. + * `ModuleWrapper` context - the typical usage inside a module page. */ export const Default: Story = { args: {}, @@ -79,7 +79,7 @@ export const ExplicitTitleAndIcon: Story = { } /** - * `totalItems` appends a muted item count next to the title — commonly used + * `totalItems` appends a muted item count next to the title - commonly used * in list modules to show the total number of records at a glance. */ export const WithTotalItems: Story = { @@ -114,7 +114,7 @@ export const WithActionButton: Story = { } /** - * `customElement` places arbitrary content after the action button — useful + * `customElement` places arbitrary content after the action button - useful * for secondary controls such as view-toggle buttons or filter chips. */ export const WithCustomElement: Story = { @@ -220,7 +220,7 @@ export const WithContextMenu: Story = { } /** - * All optional slots filled at once — a representative "kitchen sink" view + * All optional slots filled at once - a representative "kitchen sink" view * showing how every prop composes together. */ export const FullyLoaded: Story = { diff --git a/packages/lifeforge-ui/src/components/layout/ModuleHeader/index.tsx b/packages/ui/src/components/layout/ModuleHeader/index.tsx similarity index 60% rename from packages/lifeforge-ui/src/components/layout/ModuleHeader/index.tsx rename to packages/ui/src/components/layout/ModuleHeader/index.tsx index 06b52a7e9..c18414f65 100644 --- a/packages/lifeforge-ui/src/components/layout/ModuleHeader/index.tsx +++ b/packages/ui/src/components/layout/ModuleHeader/index.tsx @@ -1,14 +1,14 @@ import { Menu, MenuButton, MenuItems } from '@headlessui/react' -import { Icon } from '@iconify/react' import { useTranslation } from 'react-i18next' -import { useMainSidebarState } from 'shared' -import { useModuleHeaderState } from 'shared' -import { Button } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { useMainSidebarState, useModuleHeaderState } from '@lifeforge/shared' + +import { Button } from '@/components/inputs' +import { Box, Flex, Icon, Text, Transition } from '@/components/primitives' + +import { COLORS, withOpacity } from '@/system' import { ContextMenu } from '../../overlays/ContextMenu' -import * as styles from './ModuleHeader.css' interface ModuleHeaderProps { icon?: string @@ -75,11 +75,22 @@ export function ModuleHeader({ {icon !== undefined && ( - + )} @@ -146,40 +157,64 @@ export function ModuleHeader({ - - - - - - - - - - - {typeof tips === 'string' - ? t('common.misc:tipsAndTricks') - : tips.title} + + + + + + + + + + + + + + + + + {typeof tips === 'string' + ? t('common.misc:tipsAndTricks') + : tips.title} + + - - - - {typeof tips === 'string' ? tips : tips.content} - - + + {typeof tips === 'string' ? tips : tips.content} + + + + )} @@ -189,4 +224,3 @@ export function ModuleHeader({ ) } - diff --git a/packages/lifeforge-ui/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx b/packages/ui/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx similarity index 94% rename from packages/lifeforge-ui/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx rename to packages/ui/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx index 2089b46b3..e79d9254a 100644 --- a/packages/lifeforge-ui/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx +++ b/packages/ui/src/components/layout/ModuleWrapper/ModuleWrapper.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { ModuleHeader } from '@components/layout' -import { Box, Flex, Grid, Text } from '@components/primitives' +import { ModuleHeader } from '@/components/layout' +import { Box, Flex, Grid, Text } from '@/components/primitives' import { ModuleWrapper } from './index' @@ -66,7 +66,7 @@ export const Default: Story = { ) } - diff --git a/packages/lifeforge-ui/src/components/layout/index.ts b/packages/ui/src/components/layout/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/layout/index.ts rename to packages/ui/src/components/layout/index.ts diff --git a/packages/lifeforge-ui/src/components/navigation/GoBackButton/GoBackButton.stories.tsx b/packages/ui/src/components/navigation/GoBackButton/GoBackButton.stories.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/navigation/GoBackButton/GoBackButton.stories.tsx rename to packages/ui/src/components/navigation/GoBackButton/GoBackButton.stories.tsx diff --git a/packages/lifeforge-ui/src/components/navigation/GoBackButton/index.tsx b/packages/ui/src/components/navigation/GoBackButton/index.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/navigation/GoBackButton/index.tsx rename to packages/ui/src/components/navigation/GoBackButton/index.tsx index 042800131..78386cef6 100644 --- a/packages/lifeforge-ui/src/components/navigation/GoBackButton/index.tsx +++ b/packages/ui/src/components/navigation/GoBackButton/index.tsx @@ -1,4 +1,4 @@ -import { Button } from '@components/inputs' +import { Button } from '@/components/inputs' /** * Nothing too fancy either, just a button saying 'Go Back' diff --git a/packages/lifeforge-ui/src/components/navigation/Pagination/Pagination.stories.tsx b/packages/ui/src/components/navigation/Pagination/Pagination.stories.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/navigation/Pagination/Pagination.stories.tsx rename to packages/ui/src/components/navigation/Pagination/Pagination.stories.tsx diff --git a/packages/lifeforge-ui/src/components/navigation/Pagination/components/EllipsisIcon.tsx b/packages/ui/src/components/navigation/Pagination/components/EllipsisIcon.tsx similarity index 73% rename from packages/lifeforge-ui/src/components/navigation/Pagination/components/EllipsisIcon.tsx rename to packages/ui/src/components/navigation/Pagination/components/EllipsisIcon.tsx index cbd37ee3c..5b33fce09 100644 --- a/packages/lifeforge-ui/src/components/navigation/Pagination/components/EllipsisIcon.tsx +++ b/packages/ui/src/components/navigation/Pagination/components/EllipsisIcon.tsx @@ -1,7 +1,7 @@ -import { Icon } from '@iconify/react' import React from 'react' -import { Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Text } from '@/components/primitives' export function EllipsisIcon() { return ( @@ -18,4 +18,3 @@ export function EllipsisIcon() { ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/Pagination/components/NavButton.tsx b/packages/ui/src/components/navigation/Pagination/components/NavButton.tsx similarity index 91% rename from packages/lifeforge-ui/src/components/navigation/Pagination/components/NavButton.tsx rename to packages/ui/src/components/navigation/Pagination/components/NavButton.tsx index 25763ff37..aa85d6506 100644 --- a/packages/lifeforge-ui/src/components/navigation/Pagination/components/NavButton.tsx +++ b/packages/ui/src/components/navigation/Pagination/components/NavButton.tsx @@ -1,5 +1,5 @@ -import { Button } from '@components/inputs' -import { Box, Flex } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Box, Flex } from '@/components/primitives' export function NavButton({ direction, diff --git a/packages/lifeforge-ui/src/components/navigation/Pagination/components/PageNumButton.tsx b/packages/ui/src/components/navigation/Pagination/components/PageNumButton.tsx similarity index 86% rename from packages/lifeforge-ui/src/components/navigation/Pagination/components/PageNumButton.tsx rename to packages/ui/src/components/navigation/Pagination/components/PageNumButton.tsx index 1b59956e9..b82303549 100644 --- a/packages/lifeforge-ui/src/components/navigation/Pagination/components/PageNumButton.tsx +++ b/packages/ui/src/components/navigation/Pagination/components/PageNumButton.tsx @@ -1,5 +1,5 @@ -import { Button } from '@components/inputs' -import { Box, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Box, Text } from '@/components/primitives' export function PageNumButton({ number, @@ -37,4 +37,3 @@ export function PageNumButton({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/Pagination/components/PageNumbers.tsx b/packages/ui/src/components/navigation/Pagination/components/PageNumbers.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/navigation/Pagination/components/PageNumbers.tsx rename to packages/ui/src/components/navigation/Pagination/components/PageNumbers.tsx index 4f56f0cfe..47487938b 100644 --- a/packages/lifeforge-ui/src/components/navigation/Pagination/components/PageNumbers.tsx +++ b/packages/ui/src/components/navigation/Pagination/components/PageNumbers.tsx @@ -1,6 +1,6 @@ import React from 'react' -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' import { EllipsisIcon } from './EllipsisIcon' import { PageNumButton } from './PageNumButton' @@ -75,4 +75,3 @@ export function PageNumbers({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/Pagination/index.tsx b/packages/ui/src/components/navigation/Pagination/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/navigation/Pagination/index.tsx rename to packages/ui/src/components/navigation/Pagination/index.tsx index b4163dff6..d52c255ff 100644 --- a/packages/lifeforge-ui/src/components/navigation/Pagination/index.tsx +++ b/packages/ui/src/components/navigation/Pagination/index.tsx @@ -1,4 +1,4 @@ -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' import { NavButton } from './components/NavButton' import { PageNumbers } from './components/PageNumbers' @@ -60,4 +60,3 @@ export function Pagination({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/Tabs/Tabs.stories.tsx b/packages/ui/src/components/navigation/Tabs/Tabs.stories.tsx similarity index 94% rename from packages/lifeforge-ui/src/components/navigation/Tabs/Tabs.stories.tsx rename to packages/ui/src/components/navigation/Tabs/Tabs.stories.tsx index 29765a54b..14a7efe66 100644 --- a/packages/lifeforge-ui/src/components/navigation/Tabs/Tabs.stories.tsx +++ b/packages/ui/src/components/navigation/Tabs/Tabs.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' + +import { TAILWIND_PALETTE } from '@/system' import { Tabs } from '../Tabs' -import { TAILWIND_PALETTE } from '@/system' const meta = { argTypes: { @@ -97,14 +98,24 @@ export const WithAmounts: Story = { } const COLORED_TABS = [ - { color: TAILWIND_PALETTE.red[500], icon: 'tabler:palette', id: 'red', name: 'Red' }, + { + color: TAILWIND_PALETTE.red[500], + icon: 'tabler:palette', + id: 'red', + name: 'Red' + }, { color: TAILWIND_PALETTE.green[500], icon: 'tabler:palette', id: 'green', name: 'Green' }, - { color: TAILWIND_PALETTE.blue[500], icon: 'tabler:palette', id: 'blue', name: 'Blue' } + { + color: TAILWIND_PALETTE.blue[500], + icon: 'tabler:palette', + id: 'blue', + name: 'Blue' + } ] as const /** diff --git a/packages/ui/src/components/navigation/Tabs/index.tsx b/packages/ui/src/components/navigation/Tabs/index.tsx new file mode 100644 index 000000000..9b6e53451 --- /dev/null +++ b/packages/ui/src/components/navigation/Tabs/index.tsx @@ -0,0 +1,122 @@ +import { Bordered, Flex, Icon, Text, Transition } from '@/components/primitives' + +interface TabsProps< + T, + TKey = T extends ReadonlyArray<{ readonly id: infer U }> ? U : never +> { + /** List of tab items to display. */ + items: T + /** List of enabled tab IDs. */ + enabled: readonly TKey[] + /** Currently active tab ID. */ + currentTab: TKey + /** Callback function to handle tab selection. */ + onTabChange: (id: TKey) => void + /** Additional CSS classes to apply to the tabs container. */ + className?: string +} + +/** + * A tab component that displays a list of tabs and allows switching between them. + */ +export function Tabs< + T extends ReadonlyArray<{ + readonly id: string + readonly name: string + readonly color?: string + readonly icon?: string + readonly amount?: number + }>, + TKey = T extends ReadonlyArray<{ readonly id: infer U }> ? U : never +>({ items, enabled, currentTab, onTabChange, className }: TabsProps) { + return ( + + {items + .filter(({ id }) => enabled.includes(id as TKey)) + .map(({ name, icon, id, color }) => ( + + + + { + onTabChange(id as TKey) + }} + > + {icon && ( + + )} + + {name} + + {items.find(item => item.name === name)?.amount !== + undefined && ( + + ({items.find(item => item.name === name)?.amount}) + + )} + + + + + ))} + + ) +} diff --git a/packages/lifeforge-ui/src/components/navigation/index.ts b/packages/ui/src/components/navigation/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/navigation/index.ts rename to packages/ui/src/components/navigation/index.ts diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx b/packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx rename to packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx index 90b12a297..a74f662fd 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx @@ -1,5 +1,6 @@ import { useCallback, useState } from 'react' -import { useNavigate } from 'shared' + +import { useNavigate } from '@lifeforge/shared' import { SidebarItemContent } from '../SidebarItem/components/SidebarItemContent' import { SidebarItemIcon } from '../SidebarItem/components/SidebarItemIcon' @@ -104,4 +105,3 @@ export function MainSidebarItem({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx b/packages/ui/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx index 6c91450a0..7f91d2243 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarDivider/SidebarDivider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { BrowserRouter } from 'react-router' -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' import { SidebarItem } from '../SidebarItem' import { SidebarWrapper } from '../SidebarWrapper' diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarDivider/index.tsx b/packages/ui/src/components/navigation/sidebar/SidebarDivider/index.tsx similarity index 87% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarDivider/index.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarDivider/index.tsx index 72c149f56..7475bf695 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarDivider/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarDivider/index.tsx @@ -1,4 +1,4 @@ -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' /** * A divider component used to separate sections within the sidebar. @@ -16,4 +16,3 @@ export function SidebarDivider({ noMargin = false }: { noMargin?: boolean }) { /> ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx similarity index 99% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx index bf9291da9..6e88cad15 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/SidebarItem.stories.tsx @@ -2,12 +2,13 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { useState } from 'react' import { BrowserRouter } from 'react-router' -import { ContextMenuItem } from '@components/overlays' -import { Flex, Text } from '@components/primitives' +import { ContextMenuItem } from '@/components/overlays' +import { Flex, Text } from '@/components/primitives' + +import { TAILWIND_PALETTE } from '@/system' import { SidebarWrapper } from '../SidebarWrapper' import { SidebarItem } from './index' -import { TAILWIND_PALETTE } from '@/system' const meta = { argTypes: { diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.css.ts new file mode 100644 index 000000000..6b7254369 --- /dev/null +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.css.ts @@ -0,0 +1,17 @@ +import { style } from '@vanilla-extract/css' + +import { COLORS, withOpacity } from '@/system' + +export const actionButton = style({ + overscrollBehavior: 'contain', + selectors: { + '&:hover': { + backgroundColor: withOpacity(COLORS['bg-200'], 0.5), + color: COLORS['bg-800'] + }, + '.dark &:hover': { + backgroundColor: withOpacity(COLORS['bg-700'], 0.5), + color: COLORS['bg-50'] + } + } +}) diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx similarity index 80% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx index 627e1558d..885ef93e6 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarActionButton.tsx @@ -1,7 +1,7 @@ -import { Icon } from '@iconify/react' -import { useModuleSidebarState } from 'shared' +import { useModuleSidebarState } from '@lifeforge/shared' -import { Box, Transition } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Transition } from '@/components/primitives' import * as styles from './SidebarActionButton.css' @@ -31,4 +31,3 @@ export function SidebarActionButton({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx similarity index 81% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx index 745659321..d4f2f17e9 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarCancelButton.tsx @@ -1,7 +1,7 @@ -import { Icon } from '@iconify/react' -import { useModuleSidebarState } from 'shared' +import { useModuleSidebarState } from '@lifeforge/shared' -import { Box, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Text } from '@/components/primitives' export function SidebarCancelButton({ onClick }: { onClick: () => void }) { const { setIsSidebarOpen } = useModuleSidebarState() @@ -33,4 +33,3 @@ export function SidebarCancelButton({ onClick }: { onClick: () => void }) { ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.css.ts rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.css.ts diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx index 166ad4f5d..366001c19 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx @@ -2,8 +2,8 @@ import _ from 'lodash' import { useState } from 'react' import { useTranslation } from 'react-i18next' -import { ContextMenu } from '@components/overlays' -import { Box, Flex, Text } from '@components/primitives' +import { ContextMenu } from '@/components/overlays' +import { Box, Flex, Text } from '@/components/primitives' import { SidebarActionButton } from './SidebarActionButton' import * as styles from './SidebarItemContent.css' @@ -136,4 +136,3 @@ export function SidebarItemContent({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx similarity index 92% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx index 1fe6fcdc1..405058203 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemIcon.tsx @@ -1,6 +1,5 @@ -import { Icon } from '@iconify/react' - -import { Bordered, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Bordered, Text } from '@/components/primitives' export function SidebarItemIcon({ icon, @@ -66,4 +65,3 @@ export function SidebarItemIcon({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts similarity index 68% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts index 13cfedbe2..5cca306d3 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.css.ts @@ -1,6 +1,6 @@ import { style } from '@vanilla-extract/css' -import { bg, vars, withOpacity } from '@/system' +import { COLORS, vars, withOpacity } from '@/system' export const subsectionExpanded = style({ maxHeight: '1000px', @@ -15,8 +15,8 @@ export const subsectionCollapsed = style({ }) export const subsectionListBg = style({ - backgroundColor: bg[100], + backgroundColor: COLORS['bg-100'], selectors: { - '.dark &': { backgroundColor: withOpacity(bg[800], 0.3) } + '.dark &': { backgroundColor: withOpacity(COLORS['bg-800'], 0.3) } } }) diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx index 664f33135..435af543e 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsection.tsx @@ -1,7 +1,8 @@ import clsx from 'clsx' -import { useMainSidebarState } from 'shared' -import { Flex, Transition } from '@components/primitives' +import { useMainSidebarState } from '@lifeforge/shared' + +import { Flex, Transition } from '@/components/primitives' import * as styles from './SidebarItemSubsection.css' import { SidebarSubsectionItemLink } from './SidebarSubsectionItemLink' @@ -86,4 +87,3 @@ export function SidebarItemSubsection({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx similarity index 89% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx index a8513c675..f9ee37305 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemSubsectionExpandIcon.tsx @@ -1,6 +1,5 @@ -import { Icon } from '@iconify/react' - -import { Box, Text, Transition } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Text, Transition } from '@/components/primitives' export function SidebarItemSubsectionExpandIcon({ toggleSubsection, @@ -45,4 +44,3 @@ export function SidebarItemSubsectionExpandIcon({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts similarity index 66% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts index f49d95d4e..732dc49c0 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.css.ts @@ -1,6 +1,6 @@ import { style } from '@vanilla-extract/css' -import { bg, custom, vars, withOpacity } from '@/system' +import { COLORS, vars, withOpacity } from '@/system' export const listItemBase = style({ isolation: 'isolate', @@ -18,7 +18,7 @@ export const listItemActiveIndicator = style({ width: '0.25rem', transform: 'translateY(-50%)', borderRadius: vars.radii.full, - backgroundColor: custom[500] + backgroundColor: COLORS['custom-500'] } } }) @@ -31,18 +31,18 @@ export const innerButtonInteractive = style({ }) export const innerButtonActive = style({ - backgroundColor: withOpacity(bg[200], 0.5), + backgroundColor: withOpacity(COLORS['bg-200'], 0.5), boxShadow: 'var(--custom-shadow)', - borderColor: withOpacity(bg[500], 0.2), + borderColor: withOpacity(COLORS['bg-500'], 0.2), selectors: { - '.dark &': { backgroundColor: bg[800] }, + '.dark &': { backgroundColor: COLORS['bg-800'] }, '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } } }) export const innerButtonInactive = style({ selectors: { - '&:hover': { backgroundColor: withOpacity(bg[200], 0.3) }, - '.dark &:hover': { backgroundColor: withOpacity(bg[800], 0.3) } + '&:hover': { backgroundColor: withOpacity(COLORS['bg-200'], 0.3) }, + '.dark &:hover': { backgroundColor: withOpacity(COLORS['bg-800'], 0.3) } } }) diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx index 1692efd37..553db4797 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemWrapper.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx' -import { Flex, Text } from '@components/primitives' +import { Flex, Text } from '@/components/primitives' import * as styles from './SidebarItemWrapper.css' @@ -66,4 +66,3 @@ export function SidebarItemWrapper({ ) } - diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.css.ts new file mode 100644 index 000000000..546dc3690 --- /dev/null +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.css.ts @@ -0,0 +1,31 @@ +import { style } from '@vanilla-extract/css' + +import { COLORS, vars, withOpacity } from '@/system' + +export const link = style({ + transition: 'all 0.2s', + selectors: { + '&:hover': { backgroundColor: withOpacity(COLORS['bg-200'], 0.3) }, + '.dark &:hover': { backgroundColor: withOpacity(COLORS['bg-800'], 0.3) } + } +}) + +export const linkCollapsed = style({ + justifyContent: 'center', + paddingLeft: vars.space.sm, + paddingRight: vars.space.sm +}) + +export const linkExpanded = style({ + paddingLeft: '3rem' +}) + +export const linkActive = style({ + backgroundColor: withOpacity(COLORS['bg-200'], 0.5), + boxShadow: 'var(--custom-shadow)', + selectors: { + '.dark &': { backgroundColor: COLORS['bg-800'] }, + '&:hover': { backgroundColor: withOpacity(COLORS['bg-200'], 0.5) }, + '.dark &:hover': { backgroundColor: COLORS['bg-800'] } + } +}) diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx similarity index 90% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx index b5a2ea71a..8a7df3a39 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx @@ -1,12 +1,13 @@ -import { Icon } from '@iconify/react' import clsx from 'clsx' import _ from 'lodash' import { useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' -import { Link, useLocation } from 'shared' -import { useMainSidebarState } from 'shared' -import { Flex, Text } from '@components/primitives' +import { Link, useLocation } from '@lifeforge/shared' +import { useMainSidebarState } from '@lifeforge/shared' + +import { Icon } from '@/components/primitives' +import { Flex, Text } from '@/components/primitives' import * as styles from './SidebarSubsectionItemLink.css' @@ -85,4 +86,3 @@ export function SidebarSubsectionItemLink({ ) } - diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.css.ts new file mode 100644 index 000000000..d4156be42 --- /dev/null +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.css.ts @@ -0,0 +1,21 @@ +import { style } from '@vanilla-extract/css' + +import { COLORS, withOpacity } from '@/system' + +export const button = style({ + textAlign: 'left', + transition: 'all 0.2s', + selectors: { + '&:hover': { backgroundColor: withOpacity(COLORS['bg-200'], 0.3) }, + '.dark &:hover': { backgroundColor: withOpacity(COLORS['bg-800'], 0.3) } + } +}) + +export const buttonActive = style({ + backgroundColor: withOpacity(COLORS['bg-200'], 0.5), + selectors: { + '.dark &': { backgroundColor: COLORS['bg-800'] }, + '&:hover': { backgroundColor: withOpacity(COLORS['bg-200'], 0.5) }, + '.dark &:hover': { backgroundColor: COLORS['bg-800'] } + } +}) diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx index b4ad10ae3..2def5740d 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx @@ -1,11 +1,12 @@ -import { Icon } from '@iconify/react' import clsx from 'clsx' import _ from 'lodash' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' -import { useModuleSidebarState } from 'shared' -import { Flex, Text } from '@components/primitives' +import { useModuleSidebarState } from '@lifeforge/shared' + +import { Icon } from '@/components/primitives' +import { Flex, Text } from '@/components/primitives' import * as styles from './SidebarSubsectionItemWithOnClick.css' @@ -93,4 +94,3 @@ export function SidebarSubsectionItemWithOnClick({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/index.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx similarity index 98% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/index.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx index d69d534eb..569107a55 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarItem/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx @@ -1,7 +1,8 @@ import { useCallback, useState } from 'react' -import { useModuleSidebarState } from 'shared' -import { Box } from '@components/primitives' +import { useModuleSidebarState } from '@lifeforge/shared' + +import { Box } from '@/components/primitives' import { SidebarCancelButton } from './components/SidebarCancelButton' import { SidebarItemContent } from './components/SidebarItemContent' @@ -170,4 +171,3 @@ export function SidebarItem({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.css.ts b/packages/ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.css.ts rename to packages/ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.css.ts diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx b/packages/ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx index 19f5dfe62..793763a02 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarTitle/SidebarTitle.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' import { BrowserRouter } from 'react-router' -import { Flex } from '@components/primitives' +import { Flex } from '@/components/primitives' import { SidebarDivider } from '../SidebarDivider' import { SidebarItem } from '../SidebarItem' diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/index.tsx b/packages/ui/src/components/navigation/sidebar/SidebarTitle/index.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/index.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarTitle/index.tsx index 116860525..ee6cb7fbe 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarTitle/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarTitle/index.tsx @@ -2,8 +2,8 @@ import clsx from 'clsx' import _ from 'lodash' import { useTranslation } from 'react-i18next' -import { Button } from '@components/inputs' -import { Flex, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Flex, Text } from '@/components/primitives' import * as styles from './SidebarTitle.css' @@ -83,4 +83,3 @@ export function SidebarTitle({ ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarWrapper/index.tsx b/packages/ui/src/components/navigation/sidebar/SidebarWrapper/index.tsx similarity index 88% rename from packages/lifeforge-ui/src/components/navigation/sidebar/SidebarWrapper/index.tsx rename to packages/ui/src/components/navigation/sidebar/SidebarWrapper/index.tsx index 485d20060..a43884d94 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/SidebarWrapper/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarWrapper/index.tsx @@ -1,7 +1,7 @@ -import { useModuleSidebarState } from 'shared' +import { useModuleSidebarState } from '@lifeforge/shared' -import { Box, Flex } from '@components/primitives' -import { Scrollbar } from '@components/utilities' +import { Box, Flex } from '@/components/primitives' +import { Scrollbar } from '@/components/utilities' import { GoBackButton } from '../../GoBackButton' @@ -49,4 +49,3 @@ export function SidebarWrapper({ children }: { children: React.ReactNode }) { ) } - diff --git a/packages/lifeforge-ui/src/components/navigation/sidebar/index.ts b/packages/ui/src/components/navigation/sidebar/index.ts similarity index 80% rename from packages/lifeforge-ui/src/components/navigation/sidebar/index.ts rename to packages/ui/src/components/navigation/sidebar/index.ts index 74b287a07..6fa0a9a37 100644 --- a/packages/lifeforge-ui/src/components/navigation/sidebar/index.ts +++ b/packages/ui/src/components/navigation/sidebar/index.ts @@ -8,4 +8,4 @@ export { SidebarWrapper } from './SidebarWrapper' export { MainSidebarItem } from './MainSidebarItem' -export { useModuleSidebarState } from 'shared' +export { useModuleSidebarState } from '@lifeforge/shared' diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/ContextMenu.stories.tsx b/packages/ui/src/components/overlays/ContextMenu/ContextMenu.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/ContextMenu.stories.tsx rename to packages/ui/src/components/overlays/ContextMenu/ContextMenu.stories.tsx index 9f5a8d068..8c8f2cc55 100644 --- a/packages/lifeforge-ui/src/components/overlays/ContextMenu/ContextMenu.stories.tsx +++ b/packages/ui/src/components/overlays/ContextMenu/ContextMenu.stories.tsx @@ -1,11 +1,10 @@ -import { Icon } from '@iconify/react' import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box, Flex, Text } from '@components/primitives' +import { Box, Flex, Icon, Text } from '@/components/primitives' -import { ContextMenu } from './index' import { ContextMenuGroup } from './components/ContextMenuGroup' import { ContextMenuItem } from './components/ContextMenuItem' +import { ContextMenu } from './index' const meta = { argTypes: { diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts similarity index 51% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts rename to packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts index b2f810c54..775d7011e 100644 --- a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts +++ b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.css.ts @@ -1,20 +1,20 @@ import { globalStyle, style } from '@vanilla-extract/css' -import { bg, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const groupContainer = style({ - backgroundColor: withOpacity(bg[200], 0.3), + backgroundColor: withOpacity(COLORS['bg-200'], 0.3), selectors: { - '.dark &': { backgroundColor: withOpacity(bg[700], 0.5) } + '.dark &': { backgroundColor: withOpacity(COLORS['bg-700'], 0.5) } } }) globalStyle(`${groupContainer} > * + *`, { borderTopWidth: '1px', borderTopStyle: 'solid', - borderTopColor: withOpacity(bg[200], 0.8) + borderTopColor: withOpacity(COLORS['bg-200'], 0.8) }) globalStyle(`.dark ${groupContainer} > * + *`, { - borderTopColor: bg[700] + borderTopColor: COLORS['bg-700'] }) diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.stories.tsx b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.stories.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.stories.tsx rename to packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.stories.tsx diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx rename to packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx index f0b8c4de5..b252656f2 100644 --- a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx +++ b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuGroup.tsx @@ -1,7 +1,7 @@ -import { Icon } from '@iconify/react' import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' -import { Box, Flex, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import * as styles from './ContextMenuGroup.css' @@ -49,4 +49,3 @@ export function ContextMenuGroup({ ) } - diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts similarity index 74% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts rename to packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts index 55b711226..8f9a80dc4 100644 --- a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts +++ b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.css.ts @@ -1,9 +1,14 @@ import { style } from '@vanilla-extract/css' import { createSprinkles } from '@vanilla-extract/sprinkles' -import { bg, themeColorProperties, vars, withOpacity } from '@/system' +import { + COLORS, + tokenizedThemeColorProperties, + vars, + withOpacity +} from '@/system' -export const sprinkles = createSprinkles(themeColorProperties) +export const sprinkles = createSprinkles(tokenizedThemeColorProperties) export const item = style({ cursor: 'default', @@ -15,8 +20,8 @@ export const item = style({ export const itemHoverable = style({ selectors: { - '&:hover': { backgroundColor: bg[200] }, - '.dark &:hover': { backgroundColor: withOpacity(bg[700], 0.5) } + '&:hover': { backgroundColor: COLORS['bg-200'] }, + '.dark &:hover': { backgroundColor: withOpacity(COLORS['bg-700'], 0.5) } } }) @@ -41,8 +46,8 @@ export const itemActiveDangerous = style({ fontWeight: vars.fontWeight.medium, color: 'var(--color-dangerous)', selectors: { - '&:hover': { color: bg[800] }, - '.dark &:hover': { color: bg[50] } + '&:hover': { color: COLORS['bg-800'] }, + '.dark &:hover': { color: COLORS['bg-50'] } } }) diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.stories.tsx b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.stories.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.stories.tsx rename to packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.stories.tsx diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx rename to packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx index b8dd44fc0..e73c58570 100644 --- a/packages/lifeforge-ui/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx +++ b/packages/ui/src/components/overlays/ContextMenu/components/ContextMenuItem.tsx @@ -1,10 +1,9 @@ -import { Icon } from '@iconify/react' import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' import clsx from 'clsx' import _ from 'lodash' import { useTranslation } from 'react-i18next' -import { Flex, Text } from '@components/primitives' +import { Flex, Icon, Text } from '@/components/primitives' import { vars } from '@/system' @@ -139,4 +138,3 @@ export function ContextMenuItem({ ) } - diff --git a/packages/lifeforge-ui/src/components/overlays/ContextMenu/index.tsx b/packages/ui/src/components/overlays/ContextMenu/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/overlays/ContextMenu/index.tsx rename to packages/ui/src/components/overlays/ContextMenu/index.tsx index b6e8d607f..14fee2f56 100644 --- a/packages/lifeforge-ui/src/components/overlays/ContextMenu/index.tsx +++ b/packages/ui/src/components/overlays/ContextMenu/index.tsx @@ -1,7 +1,7 @@ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' -import { Button } from '@components/inputs' -import { Bordered, Box } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Bordered, Box } from '@/components/primitives' interface MenuProps { /** The content to be displayed inside the menu. Typically one or more `` components. */ diff --git a/packages/lifeforge-ui/src/components/overlays/index.ts b/packages/ui/src/components/overlays/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/overlays/index.ts rename to packages/ui/src/components/overlays/index.ts diff --git a/packages/lifeforge-ui/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx b/packages/ui/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx rename to packages/ui/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx index b2a1bb3e2..5ba3b69a5 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx +++ b/packages/ui/src/components/overlays/modals/core/ModalManager/ModalManager.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { useModalStore } from 'shared' -import { Button } from '@components/inputs' -import { Box, Flex, Text } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' +import { useModalStore } from '@/providers' import { ModalManager } from './index' @@ -174,7 +174,7 @@ export const MultipleInstances: Story = { variant="secondary" onClick={() => open(SimpleModal, { - body: 'This was opened second — it sits on top of the first.', + body: 'This was opened second - it sits on top of the first.', title: 'Second Modal' }) } diff --git a/packages/lifeforge-ui/src/components/overlays/modals/core/ModalManager/index.tsx b/packages/ui/src/components/overlays/modals/core/ModalManager/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/overlays/modals/core/ModalManager/index.tsx rename to packages/ui/src/components/overlays/modals/core/ModalManager/index.tsx index 27c22cae6..1cfc7e8c3 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/core/ModalManager/index.tsx +++ b/packages/ui/src/components/overlays/modals/core/ModalManager/index.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from 'react' -import { useModalStore } from 'shared' + +import { useModalStore } from '@/providers' import { ModalWrapper } from '../components/ModalWrapper' diff --git a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalHeader.stories.tsx b/packages/ui/src/components/overlays/modals/core/components/ModalHeader.stories.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalHeader.stories.tsx rename to packages/ui/src/components/overlays/modals/core/components/ModalHeader.stories.tsx index 59d76ffc7..19b4b88ea 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalHeader.stories.tsx +++ b/packages/ui/src/components/overlays/modals/core/components/ModalHeader.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box } from '@components/primitives' +import { Box } from '@/components/primitives' import { ModalHeader } from './ModalHeader' @@ -44,7 +44,7 @@ function Shell({ children }: { children: React.ReactNode }) { // ─── Stories ────────────────────────────────────────────────────────────────── /** - * The standard header — icon, translated title, and a close button. + * The standard header - icon, translated title, and a close button. */ export const Default: Story = { args: { @@ -97,7 +97,7 @@ export const WithAIBadge: Story = { /** * `appendTitle` renders arbitrary React content immediately after the title - * text — useful for status badges, version chips, or item counts. + * text - useful for status badges, version chips, or item counts. */ export const WithAppendTitle: Story = { args: { @@ -172,8 +172,8 @@ export const WithActionButtonVariant: Story = { } /** - * All optional features active simultaneously — AI badge, appendTitle, and an - * action button — to confirm they compose without layout issues. + * All optional features active simultaneously - AI badge, appendTitle, and an + * action button - to confirm they compose without layout issues. */ export const KitchenSink: Story = { args: { @@ -211,7 +211,7 @@ export const KitchenSink: Story = { /** * When `title` is a React node instead of a string, it is rendered directly - * without i18n lookup — useful for rich or dynamic headings. + * without i18n lookup - useful for rich or dynamic headings. */ export const ReactNodeTitle: Story = { args: { diff --git a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalHeader.tsx b/packages/ui/src/components/overlays/modals/core/components/ModalHeader.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalHeader.tsx rename to packages/ui/src/components/overlays/modals/core/components/ModalHeader.tsx index 0a5535d93..7266ac0b1 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalHeader.tsx +++ b/packages/ui/src/components/overlays/modals/core/components/ModalHeader.tsx @@ -1,10 +1,10 @@ -import { Icon } from '@iconify/react' import { useDebounce } from '@uidotdev/usehooks' import _ from 'lodash' import { memo } from 'react' import { useTranslation } from 'react-i18next' -import { Box, Flex, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import { Button } from '../../../../inputs/Button' diff --git a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalWrapper.css.ts b/packages/ui/src/components/overlays/modals/core/components/ModalWrapper.css.ts similarity index 73% rename from packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalWrapper.css.ts rename to packages/ui/src/components/overlays/modals/core/components/ModalWrapper.css.ts index d562744c3..4144142a9 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalWrapper.css.ts +++ b/packages/ui/src/components/overlays/modals/core/components/ModalWrapper.css.ts @@ -1,12 +1,12 @@ import { style } from '@vanilla-extract/css' import { recipe } from '@vanilla-extract/recipes' -import { bg, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' export const overlay = recipe({ base: { overscrollBehavior: 'contain', - transition: 'opacity 200ms ease-out', + transition: 'opacity 200ms ease-out' }, variants: { open: { @@ -22,7 +22,7 @@ export const overlay = recipe({ backgroundColor: 'rgba(0, 0, 0, 0.1)', willChange: 'opacity, backdrop-filter', selectors: { - '.dark &': { backgroundColor: withOpacity(bg[950], 0.4) } + '.dark &': { backgroundColor: withOpacity(COLORS['bg-950'], 0.4) } } }, false: { @@ -33,7 +33,7 @@ export const overlay = recipe({ }) export const dialog = style({ - borderColor: withOpacity(bg[500], 0.2), + borderColor: withOpacity(COLORS['bg-500'], 0.2), boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)', maxWidth: 'calc(100vw - 4rem)', transition: 'transform 200ms ease-out', @@ -41,9 +41,9 @@ export const dialog = style({ willChange: 'transform', '@media': { '(min-width: 640px)': { maxWidth: 'calc(100vw - 8rem)' }, - '(min-width: 1024px)': { width: 'auto' }, + '(min-width: 1024px)': { width: 'auto' } }, selectors: { - '.bordered &': { borderWidth: '2px', borderStyle: 'solid' }, - }, + '.bordered &': { borderWidth: '2px', borderStyle: 'solid' } + } }) diff --git a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalWrapper.tsx b/packages/ui/src/components/overlays/modals/core/components/ModalWrapper.tsx similarity index 95% rename from packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalWrapper.tsx rename to packages/ui/src/components/overlays/modals/core/components/ModalWrapper.tsx index d481007c3..1618797c2 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/core/components/ModalWrapper.tsx +++ b/packages/ui/src/components/overlays/modals/core/components/ModalWrapper.tsx @@ -1,7 +1,7 @@ import { createPortal } from 'react-dom' -import { Box, Flex } from '@components/primitives' -import { Transition } from '@components/primitives/Transition' +import { Box, Flex } from '@/components/primitives' +import { Transition } from '@/components/primitives/Transition' import * as styles from './ModalWrapper.css' diff --git a/packages/lifeforge-ui/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx b/packages/ui/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx rename to packages/ui/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx index b5391e2c9..a4e235ae7 100644 --- a/packages/lifeforge-ui/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx +++ b/packages/ui/src/components/overlays/modals/features/ConfirmationModal/ConfirmationModal.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { useModalStore } from 'shared' -import { Button } from '@components/inputs' -import { Grid } from '@components/primitives' +import { Button } from '@/components/inputs' +import { Grid } from '@/components/primitives' +import { useModalStore } from '@/providers' import { ConfirmationModal } from './index' @@ -97,12 +97,12 @@ export const WithCustomConfirmationButtons: Story = { 'Are you sure you want to perform this cool action? This is an absolutely cool action that you probably want to do.', renderChildren: onClose => ( - Scrollable content area. Lorem ipsum dolor sit amet, consectetur @@ -387,14 +401,12 @@ export const ColumnLayout: Story = { ut labore et dolore magna aliqua. Ut enim ad minim veniam. - Footer @@ -476,7 +488,12 @@ export const PolymorphicElement: Story = { width="100%" > {['Home', 'About', 'Work', 'Contact'].map(item => ( - + ))} @@ -485,54 +502,51 @@ export const PolymorphicElement: Story = { } /** - * `asChild` merges all Flex classes onto the single child element — + * `asChild` merges all Flex classes onto the single child element - * no extra DOM node is added. */ export const AsChild: Story = { args: {}, render: () => ( - + + + Open the browser dev tools to inspect the DOM structure of the given + examples. + - - Open the browser dev tools to inspect the DOM structure of the given - examples. - - -
    - - - - - - - - - -
    -
    +
    + + + + + + + + + +
    ) diff --git a/packages/ui/src/components/primitives/Flex/index.tsx b/packages/ui/src/components/primitives/Flex/index.tsx new file mode 100644 index 000000000..8793fb777 --- /dev/null +++ b/packages/ui/src/components/primitives/Flex/index.tsx @@ -0,0 +1,203 @@ +import { clsx } from 'clsx' +import { + type CSSProperties, + type ComponentPropsWithRef, + type ElementType, + type ReactNode, + type Ref +} from 'react' + +import { + type ArbitraryProps, + type ColorToken, + type RadiusToken, + type ResponsiveProp, + type SpaceToken, + type TokenizedCommonProps, + normalizeGridSpan, + normalizeResponsiveProp, + resolveCommonSprinkleProps, + resolveStyles, + shadowClass +} from '@/system' +import type { ThemeConditionProp } from '@/system/themes' + +import { Slot } from '../Slot' +import { flexBase, flexSprinkles } from './Flex.css' + +type FlexDisplayValue = 'none' | 'flex' | 'inline-flex' + +type DirectionValue = 'row' | 'column' | 'row-reverse' | 'column-reverse' + +type AlignValue = 'stretch' | 'center' | 'start' | 'end' | 'baseline' + +type JustifyValue = 'start' | 'center' | 'between' | 'around' | 'evenly' | 'end' + +type WrapValue = 'nowrap' | 'wrap' | 'wrap-reverse' + +interface FlexOwnProps + extends TokenizedCommonProps, ArbitraryProps { + as?: T + asChild?: boolean + ref?: Ref + display?: ResponsiveProp + centered?: boolean + direction?: ResponsiveProp + gap?: ResponsiveProp + gapX?: ResponsiveProp + gapY?: ResponsiveProp + align?: ResponsiveProp + justify?: ResponsiveProp + wrap?: ResponsiveProp + bg?: ThemeConditionProp + rounded?: ResponsiveProp + shadow?: boolean + className?: string + style?: CSSProperties + children?: ReactNode +} + +export type FlexProps = FlexOwnProps & + Omit, keyof FlexOwnProps> + +const alignMap = { + stretch: 'stretch', + center: 'center', + start: 'flex-start', + end: 'flex-end', + baseline: 'baseline' +} as const satisfies Record + +const justifyMap = { + start: 'flex-start', + center: 'center', + between: 'space-between', + around: 'space-around', + evenly: 'space-evenly', + end: 'flex-end' +} as const satisfies Record + +export function Flex({ + as, + asChild = false, + ref, + display = 'flex', + centered, + direction, + gap, + gapX, + gapY, + align: alignProp, + justify: justifyProp, + wrap, + bg, + rounded, + shadow, + // Layout props (CSS string - responsive) + width, + minWidth, + maxWidth, + height, + minHeight, + maxHeight, + zIndex, + position, + inset, + top, + right, + bottom, + left, + overflow, + overflowX, + overflowY, + flex, + flexBasis, + flexGrow, + flexShrink, + gridArea, + gridColumnSpan, + gridRowSpan, + // Padding + p, + px, + py, + pt, + pr, + pb, + pl, + // Margin + m, + mx, + my, + mt, + mr, + mb, + ml, + className, + style, + children, + ...rest +}: FlexProps) { + const align = centered ? 'center' : alignProp + + const justify = centered ? 'center' : justifyProp + + const Component = asChild ? Slot : (as ?? 'div') + + const final = resolveStyles({ + sprinkles: flexSprinkles, + sprinkleProps: { + display: normalizeResponsiveProp(display), + backgroundColor: bg, + borderRadius: normalizeResponsiveProp(rounded), + flexDirection: normalizeResponsiveProp(direction), + gap: normalizeResponsiveProp(gap), + rowGap: normalizeResponsiveProp(gapY), + columnGap: normalizeResponsiveProp(gapX), + alignItems: normalizeResponsiveProp(align, v => alignMap[v]), + justifyContent: normalizeResponsiveProp(justify, v => justifyMap[v]), + flexWrap: normalizeResponsiveProp(wrap), + ...resolveCommonSprinkleProps( + { p, px, py, pt, pr, pb, pl, m, mx, my, mt, mr, mb, ml }, + { + position, + overflow, + overflowX, + overflowY + } + ) + }, + arbitraryProps: { + width, + minWidth, + maxWidth, + height, + minHeight, + maxHeight, + zIndex, + inset, + top, + right, + bottom, + left, + flex, + flexBasis, + flexGrow, + flexShrink, + gridArea, + gridColumnSpan: normalizeResponsiveProp( + gridColumnSpan, + normalizeGridSpan + ), + gridRowSpan: normalizeResponsiveProp(gridRowSpan, normalizeGridSpan) + }, + className: clsx(flexBase(), className, shadow && shadowClass), + style + }) + + return ( + } {...final} {...rest}> + {children} + + ) +} diff --git a/packages/lifeforge-ui/src/components/primitives/Grid/Grid.css.ts b/packages/ui/src/components/primitives/Grid/Grid.css.ts similarity index 75% rename from packages/lifeforge-ui/src/components/primitives/Grid/Grid.css.ts rename to packages/ui/src/components/primitives/Grid/Grid.css.ts index 405e2fced..79bf172b7 100644 --- a/packages/lifeforge-ui/src/components/primitives/Grid/Grid.css.ts +++ b/packages/ui/src/components/primitives/Grid/Grid.css.ts @@ -1,8 +1,13 @@ import { recipe } from '@vanilla-extract/recipes' import { createSprinkles, defineProperties } from '@vanilla-extract/sprinkles' -import { commonProperties, responsiveConditions, vars } from '@/system' -import { themeColorProperties } from '@/system' +import { + RESPONSIVE_CONDITIONS, + tokenizedLayoutProperties, + tokenizedSpacingProperties, + tokenizedThemeColorProperties, + vars +} from '@/system' export const gridBase = recipe({ base: { @@ -11,7 +16,7 @@ export const gridBase = recipe({ }) const gridProperties = defineProperties({ - conditions: responsiveConditions, + conditions: RESPONSIVE_CONDITIONS, defaultCondition: 'base', properties: { display: ['grid', 'inline-grid', 'none'], @@ -34,8 +39,9 @@ const gridProperties = defineProperties({ export const gridSprinkles = createSprinkles( gridProperties, - themeColorProperties, - commonProperties + tokenizedLayoutProperties, + tokenizedSpacingProperties, + tokenizedThemeColorProperties ) export type GridSprinkles = Parameters[0] diff --git a/packages/lifeforge-ui/src/components/primitives/Grid/Grid.stories.tsx b/packages/ui/src/components/primitives/Grid/Grid.stories.tsx similarity index 87% rename from packages/lifeforge-ui/src/components/primitives/Grid/Grid.stories.tsx rename to packages/ui/src/components/primitives/Grid/Grid.stories.tsx index 1ebbdac07..35b86855a 100644 --- a/packages/lifeforge-ui/src/components/primitives/Grid/Grid.stories.tsx +++ b/packages/ui/src/components/primitives/Grid/Grid.stories.tsx @@ -1,8 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Alert } from '@components/feedback' -import { Box, Flex, type FlexProps, Grid, Text } from '@components/primitives' - +import { Alert } from '@/components/feedback' +import { Box, Flex, type FlexProps, Grid, Text } from '@/components/primitives' import { ScrollableStory } from '@/storybook/ScrollableStory' import { VariantContainer } from '@/storybook/VariantContainer' @@ -100,8 +99,8 @@ export const Default: Story = { {...args} shadow bg={{ base: 'bg-50', dark: 'bg-900' }} - columns={3} rounded="lg" + templateCols={3} width="100%" > @@ -117,7 +116,7 @@ export const Default: Story = { /** * `columns` sets `grid-template-columns` as a CSS string. Use any valid - * CSS value — fixed widths, `fr` fractions, `minmax()`, `auto`, or `repeat()`. + * CSS value - fixed widths, `fr` fractions, `minmax()`, `auto`, or `repeat()`. */ export const Columns: Story = { args: {}, @@ -133,13 +132,13 @@ export const Columns: Story = { label: 'auto-fill minmax(8rem, 1fr)' } ].map(({ columns, label }) => ( - + {['A', 'B', 'C', 'D', 'E', 'F'].map(c => ( @@ -161,11 +160,11 @@ export const Rows: Story = { @@ -195,10 +194,10 @@ export const Gap: Story = { {['A', 'B', 'C', 'D'].map(c => ( @@ -221,11 +220,11 @@ export const IndependentGap: Story = { {['A', 'B', 'C', 'D', 'E', 'F'].map(c => ( @@ -250,11 +249,11 @@ export const Align: Story = { {['Short', 'Tall', 'Short'].map((label, i) => ( ( - - - {[ - { title: 'Revenue', value: '$12,400' }, - { title: 'Users', value: '3,210' }, - { title: 'Orders', value: '842' } - ].map(({ title, value }) => ( - - - {title} - - - {value} - - - ))} - - + + {[ + { title: 'Revenue', value: '$12,400' }, + { title: 'Users', value: '3,210' }, + { title: 'Orders', value: '842' } + ].map(({ title, value }) => ( + + + {title} + + + {value} + + + ))} + ) } @@ -405,17 +402,17 @@ export const NumericColumns: Story = { render: () => ( {[ - { columns: 2, label: 'columns={2}' }, - { columns: 3, label: 'columns={3}' }, - { columns: 4, label: 'columns={4}' } + { columns: 2, label: 'templateCols={2}' }, + { columns: 3, label: 'templateCols={3}' }, + { columns: 4, label: 'templateCols={4}' } ].map(({ columns, label }) => ( {['A', 'B', 'C', 'D', 'E', 'F'].map(c => ( @@ -437,14 +434,14 @@ export const ResponsiveColumns: Story = { {['A', 'B', 'C', 'D', 'E', 'F'].map(c => ( @@ -471,10 +468,10 @@ export const AsChild: Story = {
      diff --git a/packages/ui/src/components/primitives/Grid/index.tsx b/packages/ui/src/components/primitives/Grid/index.tsx new file mode 100644 index 000000000..55d43e889 --- /dev/null +++ b/packages/ui/src/components/primitives/Grid/index.tsx @@ -0,0 +1,204 @@ +import { clsx } from 'clsx' +import { + type CSSProperties, + type ComponentPropsWithRef, + type ElementType, + type ReactNode, + type Ref +} from 'react' + +import { + type ArbitraryProps, + type ColorToken, + type RadiusToken, + type ResponsiveProp, + type SpaceToken, + type TokenizedCommonProps, + normalizeGridSpan, + normalizeGridTrack, + normalizeResponsiveProp, + resolveCommonSprinkleProps, + resolveStyles +} from '@/system' +import type { ThemeConditionProp } from '@/system/themes' +import { shadowClass } from '@/system/vars.css' + +import { Slot } from '../Slot' +import { gridBase, gridSprinkles } from './Grid.css' + +type AlignValue = 'stretch' | 'center' | 'start' | 'end' | 'baseline' + +type JustifyValue = 'start' | 'center' | 'end' | 'between' + +type FlowValue = 'row' | 'column' | 'dense' | 'row dense' | 'column dense' + +type GridDisplayValue = 'none' | 'grid' | 'inline-grid' + +interface GridOwnProps + extends TokenizedCommonProps, ArbitraryProps { + as?: T + asChild?: boolean + ref?: Ref + display?: ResponsiveProp + templateRows?: ResponsiveProp + templateCols?: ResponsiveProp + flow?: ResponsiveProp + align?: ResponsiveProp + justify?: ResponsiveProp + gap?: ResponsiveProp + gapX?: ResponsiveProp + gapY?: ResponsiveProp + bg?: ThemeConditionProp + rounded?: ResponsiveProp + shadow?: boolean + className?: string + style?: CSSProperties + children?: ReactNode +} + +export type GridProps = GridOwnProps & + Omit, keyof GridOwnProps> + +const justifyMap = { + start: 'start', + center: 'center', + end: 'end', + between: 'space-between' +} as const satisfies Record + +export function Grid({ + as, + asChild = false, + ref, + display = 'grid', + templateCols, + templateRows, + flow, + gap, + gapX, + gapY, + bg, + rounded, + shadow, + align, + justify, + // Layout props (CSS string - responsive) + width, + minWidth, + maxWidth, + height, + minHeight, + maxHeight, + zIndex, + position, + inset, + top, + right, + bottom, + left, + overflow, + overflowX, + overflowY, + flex, + flexBasis, + flexGrow, + flexShrink, + gridArea, + + gridColumnSpan, + gridRowSpan, + // Padding + p, + px, + py, + pt, + pr, + pb, + pl, + // Margin + m, + mx, + my, + mt, + mr, + mb, + ml, + className, + style, + children, + ...rest +}: GridProps) { + const Component = asChild ? Slot : (as ?? 'div') + + const styles = resolveStyles< + typeof gridSprinkles, + { + gridTemplateColumns: Pick['templateCols'] + gridTemplateRows: Pick['templateCols'] + } + >({ + sprinkles: gridSprinkles, + sprinkleProps: { + display: normalizeResponsiveProp(display), + backgroundColor: bg, + borderRadius: normalizeResponsiveProp(rounded), + gap: normalizeResponsiveProp(gap), + rowGap: normalizeResponsiveProp(gapY), + columnGap: normalizeResponsiveProp(gapX), + alignItems: normalizeResponsiveProp(align), + justifyContent: normalizeResponsiveProp(justify, v => justifyMap[v]), + gridAutoFlow: normalizeResponsiveProp(flow), + ...resolveCommonSprinkleProps( + { p, px, py, pt, pr, pb, pl, m, mx, my, mt, mr, mb, ml }, + { + position, + overflow, + overflowX, + overflowY + } + ) + }, + arbitraryProps: { + width, + minWidth, + maxWidth, + height, + minHeight, + maxHeight, + zIndex, + inset, + top, + right, + bottom, + left, + flex, + flexBasis, + flexGrow, + flexShrink, + gridArea, + gridColumnSpan: normalizeResponsiveProp( + gridColumnSpan, + normalizeGridSpan + ), + gridRowSpan: normalizeResponsiveProp(gridRowSpan, normalizeGridSpan) + }, + componentArbitraryProps: { + gridTemplateColumns: normalizeResponsiveProp( + templateCols, + normalizeGridTrack + ), + gridTemplateRows: normalizeResponsiveProp( + templateRows, + normalizeGridTrack + ) + }, + className: clsx(gridBase(), className, shadow && shadowClass), + style + }) + + return ( + } {...styles} {...rest}> + {children} + + ) +} diff --git a/packages/ui/src/components/primitives/Icon/Icon.stories.tsx b/packages/ui/src/components/primitives/Icon/Icon.stories.tsx new file mode 100644 index 000000000..e4615bc52 --- /dev/null +++ b/packages/ui/src/components/primitives/Icon/Icon.stories.tsx @@ -0,0 +1,193 @@ +import type { Meta, StoryObj } from '@storybook/react-vite' + +import { Alert } from '@/components/feedback' +import { Flex, Grid, Text, Transition } from '@/components/primitives' + +import { Icon } from './index' + +const meta = { + argTypes: { + color: { control: false }, + icon: { + control: { type: 'text' } + }, + size: { control: { type: 'text' } } + }, + component: Icon +} satisfies Meta + +export default meta + +type Story = StoryObj + +export const Default: Story = { + args: { + icon: 'tabler:home' + } +} + +export const IconSet: Story = { + args: { + icon: 'tabler:star' + }, + render: () => ( + + {[ + { icon: 'tabler:home', label: 'home' }, + { icon: 'tabler:user', label: 'user' }, + { icon: 'tabler:settings', label: 'settings' }, + { icon: 'tabler:bell', label: 'bell' }, + { icon: 'tabler:mail', label: 'mail' }, + { icon: 'tabler:calendar', label: 'calendar' }, + { icon: 'tabler:search', label: 'search' }, + { icon: 'tabler:heart', label: 'heart' }, + { icon: 'tabler:star', label: 'star' }, + { icon: 'tabler:plus', label: 'plus' }, + { icon: 'tabler:x', label: 'close' }, + { icon: 'tabler:chevron-down', label: 'chevron' }, + { icon: 'tabler:trash', label: 'delete' }, + { icon: 'tabler:pencil', label: 'edit' }, + { icon: 'tabler:download', label: 'download' } + ].map(({ icon, label }) => ( + + + + {label} + + + ))} + + ) +} + +export const Size: Story = { + args: { + icon: 'tabler:star', + size: '1.25em' + }, + render: () => ( + + {(['1em', '1.25em', '1.5em', '2em', '3em', '4em', '6em'] as const).map( + size => ( + + + + {size} + + + ) + )} + + ) +} + +export const Color: Story = { + args: { + color: 'custom-500', + icon: 'tabler:heart', + size: '2rem' + }, + render: () => ( + + {( + [ + { color: 'custom-500', label: 'custom-500' }, + { + color: 'muted', + label: 'muted' + }, + { + color: { base: 'bg-800', dark: 'bg-100' }, + label: 'adaptive' + } + ] as const + ).map(({ color, label }) => ( + + + + {label} + + + ))} + + ) +} + +export const WithText: Story = { + args: { + icon: 'tabler:mail' + }, + render: () => ( + + + + hello@example.com + + + + + Notifications + + + + + Last updated 2 hours ago + + + ) +} + +export const Interactive: Story = { + args: { + icon: 'tabler:thumb-up', + size: '1.75rem' + }, + render: () => ( + + + Hover over the icons below to see the color change. + + + {( + [ + { icon: 'tabler:thumb-up', label: 'Like' }, + { icon: 'tabler:bookmark', label: 'Save' }, + { icon: 'tabler:share', label: 'Share' }, + { icon: 'tabler:flag', label: 'Report' } + ] as const + ).map(({ icon, label }) => ( + + + + + + {label} + + + ))} + + + ) +} diff --git a/packages/ui/src/components/primitives/Icon/index.tsx b/packages/ui/src/components/primitives/Icon/index.tsx new file mode 100644 index 000000000..08689e1bb --- /dev/null +++ b/packages/ui/src/components/primitives/Icon/index.tsx @@ -0,0 +1,23 @@ +import { Icon as IconifyIcon } from '@iconify/react' + +import { Text, type TextProps } from '../Text' + +export type IconProps = TextProps & { + icon: string + size?: number | string +} + +export function Icon({ icon, size = '1.25em', color, ...rest }: IconProps) { + return ( + + + + ) +} diff --git a/packages/ui/src/components/primitives/Prose/Prose.css.ts b/packages/ui/src/components/primitives/Prose/Prose.css.ts new file mode 100644 index 000000000..01f3f12d5 --- /dev/null +++ b/packages/ui/src/components/primitives/Prose/Prose.css.ts @@ -0,0 +1,434 @@ +import { globalStyle, style } from '@vanilla-extract/css' + +import { COLORS, vars, withOpacity } from '@/system' + +export const root = style({}) + +/* ---- Base body/reset ---- */ + +globalStyle(`${root} *`, { + color: COLORS['bg-600'], + marginTop: 0, + marginBottom: 0, + lineHeight: 'normal', + WebkitUserSelect: 'text', + userSelect: 'text' +}) + +globalStyle(`.dark ${root} *`, { + color: COLORS['bg-400'] +}) + +/* ---- Font size / line-height scale ---- */ + +globalStyle(`${root}`, { + fontSize: vars.fontSize.base, + lineHeight: vars.lineHeight.base, + maxWidth: '65ch' +}) + +/* ---- Headings ---- */ + +globalStyle(`${root} :is(h1, h2, h3, h4, h5, h6)`, { + color: COLORS['bg-800'], + fontWeight: vars.fontWeight.bold, + marginBottom: '0.5em' +}) + +globalStyle(`.dark ${root} :is(h1, h2, h3, h4, h5, h6)`, { + color: COLORS['bg-50'] +}) + +globalStyle(`${root} h1`, { + fontSize: vars.fontSize['4xl'], + lineHeight: vars.lineHeight['4xl'], + fontWeight: '800', + marginTop: '1.5em', + marginBottom: '0.5em' +}) + +globalStyle(`${root} h2`, { + fontSize: vars.fontSize['2xl'], + lineHeight: vars.lineHeight['2xl'], + fontWeight: vars.fontWeight.bold, + marginTop: '1.75em', + marginBottom: '0.5em' +}) + +globalStyle(`${root} h3`, { + fontSize: vars.fontSize.xl, + lineHeight: vars.lineHeight.xl, + fontWeight: vars.fontWeight.semibold, + marginTop: '1.5em', + marginBottom: '0.4em' +}) + +globalStyle(`${root} h4`, { + fontSize: vars.fontSize.lg, + lineHeight: vars.lineHeight.lg, + fontWeight: vars.fontWeight.semibold, + marginTop: '1.25em', + marginBottom: '0.3em' +}) + +/* ---- Paragraphs ---- */ + +globalStyle(`${root} p`, { + marginBottom: '0.75em' +}) + +/* ---- Links ---- */ + +globalStyle(`${root} a`, { + color: COLORS['custom-500'], + textDecoration: 'underline', + textDecorationThickness: '1.5px', + textUnderlineOffset: '2px', + fontWeight: vars.fontWeight.medium +}) + +globalStyle(`${root} a:hover`, { + color: COLORS['custom-600'] +}) + +/* ---- Bold / Strong ---- */ + +globalStyle(`${root} strong`, { + color: COLORS['bg-800'], + fontWeight: vars.fontWeight.semibold +}) + +globalStyle(`.dark ${root} strong`, { + color: COLORS['bg-50'] +}) + +globalStyle( + `${root} :is(a strong, h1 strong, h2 strong, h3 strong, h4 strong, h5 strong, h6 strong)`, + { + color: 'inherit' + } +) + +/* ---- Horizontal rule ---- */ + +globalStyle(`${root} hr`, { + borderColor: COLORS['bg-300'], + borderTopWidth: '1px', + marginTop: '1.75em', + marginBottom: '1.75em' +}) + +globalStyle(`.dark ${root} hr`, { + borderColor: COLORS['bg-700'] +}) + +/* ---- Lists ---- */ + +globalStyle(`${root} ul`, { + listStyleType: 'disc', + marginLeft: '1.5em', + marginBottom: '0.75em' +}) + +globalStyle(`${root} ol`, { + listStyleType: 'decimal', + marginLeft: '1.5em', + marginBottom: '0.75em' +}) + +globalStyle(`${root} li`, { + marginTop: '0.25em', + marginBottom: '0.25em', + paddingInlineStart: '0.375em' +}) + +globalStyle(`${root} li::marker`, { + color: COLORS['bg-400'] +}) + +globalStyle(`${root} :is(ul ul, ul ol, ol ul, ol ol)`, { + marginTop: '0.25em', + marginBottom: '0.25em' +}) + +globalStyle(`${root} :is(ul > li > p, ol > li > p)`, { + marginTop: '0.25em', + marginBottom: '0.25em' +}) + +/* ---- Blockquote ---- */ + +globalStyle(`${root} blockquote`, { + borderColor: COLORS['bg-300'], + backgroundColor: COLORS['bg-200'], + borderLeftWidth: '4px', + borderRadius: `0 ${vars.radii.sm} ${vars.radii.sm} 0`, + padding: '0.75em 1em', + marginTop: '1em', + marginBottom: '1em', + color: COLORS['bg-700'], + quotes: '"\\201C""\\201D""\\2018""\\2019"' +}) + +globalStyle(`.dark ${root} blockquote`, { + borderColor: COLORS['bg-700'], + backgroundColor: COLORS['bg-900'], + color: COLORS['bg-500'] +}) + +globalStyle(`${root} blockquote p:first-of-type::before`, { + content: 'open-quote' +}) + +globalStyle(`${root} blockquote p:last-of-type::after`, { + content: 'close-quote' +}) + +/* ---- Code (inline) ---- */ + +globalStyle(`${root} code:not(pre > code)`, { + backgroundColor: COLORS['bg-200'], + color: COLORS['bg-800'], + borderRadius: vars.radii.sm, + border: 0, + paddingLeft: '0.375em', + paddingRight: '0.375em', + paddingTop: '0.125em', + paddingBottom: '0.125em', + fontSize: '0.875em', + fontWeight: vars.fontWeight.semibold, + boxShadow: '0 1px 0 0 var(--color-bg-300)' +}) + +globalStyle(`.dark ${root} code:not(pre > code)`, { + backgroundColor: COLORS['bg-800'], + boxShadow: `0 1px 0 0 ${withOpacity(COLORS['bg-500'], 0.2)}`, + color: COLORS['bg-50'] +}) + +globalStyle(`${root} :is(h1 code, h2 code, h3 code, h4 code, a code)`, { + color: 'inherit' +}) + +/* ---- Pre (code blocks) ---- */ + +globalStyle(`${root} pre`, { + backgroundColor: COLORS['bg-50'], + padding: '1em 1.25em', + marginTop: '1.25em', + marginBottom: '1.25em', + borderRadius: vars.radii.lg, + boxShadow: 'var(--custom-shadow)', + overflowX: 'auto', + fontSize: '0.875em', + lineHeight: 1.7, + fontFamily: + 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace' +}) + +globalStyle(`.dark ${root} pre`, { + backgroundColor: COLORS['bg-900'] +}) + +globalStyle(`${root} pre code`, { + backgroundColor: 'transparent', + borderWidth: 0, + borderRadius: 0, + padding: 0, + fontWeight: vars.fontWeight.normal, + color: 'inherit', + fontSize: 'inherit', + fontFamily: 'inherit', + lineHeight: 'inherit' +}) + +/* ---- Kbd ---- */ + +globalStyle(`${root} kbd`, { + fontFamily: 'inherit', + fontWeight: vars.fontWeight.medium, + color: COLORS['bg-800'], + backgroundColor: COLORS['bg-200'], + borderRadius: vars.radii.sm, + padding: '0.125em 0.375em', + fontSize: '0.875em', + boxShadow: '0 1px 0 0 var(--color-bg-300)' +}) + +globalStyle(`.dark ${root} kbd`, { + color: COLORS['bg-50'], + backgroundColor: COLORS['bg-800'], + boxShadow: `0 1px 0 0 ${withOpacity(COLORS['bg-500'], 0.2)}` +}) + +/* ---- Tables ---- */ + +globalStyle(`${root} table`, { + width: '100%', + tableLayout: 'auto', + marginTop: '1.25em', + marginBottom: '1.25em', + fontSize: vars.fontSize.sm, + borderCollapse: 'collapse' +}) + +globalStyle(`${root} thead`, { + borderBottomWidth: '1px', + borderBottomColor: COLORS['bg-300'] +}) + +globalStyle(`.dark ${root} thead`, { + borderBottomColor: COLORS['bg-700'] +}) + +globalStyle(`${root} thead th`, { + color: COLORS['bg-800'], + fontWeight: vars.fontWeight.semibold, + verticalAlign: 'bottom', + paddingTop: '0.5em', + paddingBottom: '0.5em', + paddingLeft: '0.75em', + paddingRight: '0.75em', + textAlign: 'start' +}) + +globalStyle(`${root} thead th:first-child`, { + paddingLeft: 0 +}) + +globalStyle(`${root} thead th:last-child`, { + paddingRight: 0 +}) + +globalStyle(`.dark ${root} thead th`, { + color: COLORS['bg-50'] +}) + +globalStyle(`${root} tbody tr`, { + borderBottomWidth: '1px', + borderBottomColor: COLORS['bg-200'] +}) + +globalStyle(`.dark ${root} tbody tr`, { + borderBottomColor: COLORS['bg-700'] +}) + +globalStyle(`${root} tbody tr:last-child`, { + borderBottomWidth: 0 +}) + +globalStyle(`${root} :is(tbody td, tfoot td)`, { + verticalAlign: 'baseline', + paddingTop: '0.5em', + paddingBottom: '0.5em', + paddingLeft: '0.75em', + paddingRight: '0.75em', + textAlign: 'start' +}) + +globalStyle(`${root} :is(tbody td:first-child, tfoot td:first-child)`, { + paddingLeft: 0 +}) + +globalStyle(`${root} :is(tbody td:last-child, tfoot td:last-child)`, { + paddingRight: 0 +}) + +globalStyle(`${root} tfoot`, { + borderTopWidth: '1px', + borderTopColor: COLORS['bg-300'] +}) + +globalStyle(`.dark ${root} tfoot`, { + borderTopColor: COLORS['bg-700'] +}) + +/* ---- Definition list ---- */ + +globalStyle(`${root} dl`, { + marginTop: '1em', + marginBottom: '1em' +}) + +globalStyle(`${root} dt`, { + color: COLORS['bg-800'], + fontWeight: vars.fontWeight.semibold, + marginTop: '1em' +}) + +globalStyle(`.dark ${root} dt`, { + color: COLORS['bg-50'] +}) + +globalStyle(`${root} dd`, { + marginTop: '0.25em', + paddingInlineStart: '1.5em' +}) + +/* ---- Figure / Figcaption ---- */ + +globalStyle(`${root} figure`, { + marginTop: '1.5em', + marginBottom: '1.5em' +}) + +globalStyle(`${root} figure > *`, { + marginTop: 0, + marginBottom: 0 +}) + +globalStyle(`${root} figcaption`, { + color: COLORS['bg-500'], + fontSize: vars.fontSize.sm, + lineHeight: 1.4, + marginTop: '0.5em', + textAlign: 'center' +}) + +/* ---- Images / Video / Picture ---- */ + +globalStyle(`${root} img`, { + marginTop: '1.5em', + marginBottom: '1.5em', + borderRadius: vars.radii.lg, + maxWidth: '100%', + height: 'auto' +}) + +globalStyle(`${root} video`, { + marginTop: '1.5em', + marginBottom: '1.5em', + borderRadius: vars.radii.lg, + maxWidth: '100%' +}) + +globalStyle(`${root} picture`, { + display: 'block', + marginTop: '1.5em', + marginBottom: '1.5em' +}) + +globalStyle(`${root} picture > img`, { + marginTop: 0, + marginBottom: 0 +}) + +/* ---- First / last child margin reset ---- */ + +globalStyle(`${root} > :first-child`, { + marginTop: 0 +}) + +globalStyle(`${root} > :last-child`, { + marginBottom: 0 +}) + +/* ---- Heading + sibling reset ---- */ + +globalStyle(`${root} :is(h1 + *, h2 + *, h3 + *, h4 + *, h5 + *, h6 + *)`, { + marginTop: 0 +}) + +globalStyle(`${root} hr + *`, { + marginTop: 0 +}) diff --git a/packages/ui/src/components/primitives/Prose/Prose.stories.tsx b/packages/ui/src/components/primitives/Prose/Prose.stories.tsx new file mode 100644 index 000000000..69970eda7 --- /dev/null +++ b/packages/ui/src/components/primitives/Prose/Prose.stories.tsx @@ -0,0 +1,137 @@ +import type { Meta, StoryObj } from '@storybook/react-vite' + +import { ScrollableStory } from '@/storybook/ScrollableStory' + +import { Prose } from './index' + +const meta = { + component: Prose +} satisfies Meta + +export default meta + +type Story = StoryObj + +export const Default: Story = { + args: {}, + render: () => ( + + +

      The Joke Tax Chronicles

      +

      + Once upon a time, in a far-off land, there was a king who loved jokes. + He had a special tax - the Joke Tax - which required + everyone to tell a joke or pay a fine so the royal coffers could grow. +

      +

      The King's Plan

      +

      + One day, the king asked his court mathematician to + calculate how many jokes were needed to fund the annual royal feast. + The mathematician said: +

      +
      + If each subject tells exactly one joke per week, and the royal + treasury gains 5 gold coins per joke, then the kingdom + will have enough to throw a feast every fortnight. +
      +

      + The king grinned. “Brilliant!” he exclaimed. But + he also wanted a list of the top categories. +

      +

      Top Categories

      +
        +
      1. Puns about food
      2. +
      3. + Knock-knock jokes +
          +
        • Standard knock-knock
        • +
        • Reverse knock-knock
        • +
        +
      4. +
      5. Programming one-liners
      6. +
      +

      Sample Code

      +

      + The court scribe wrote a Python script to track the joke inventory: +

      +
      +          {`def count_jokes(subjects):
      +    total = 0
      +    for s in subjects:
      +        total += s.jokes_per_week
      +    return total`}
      +        
      +

      + Inside the code, a variable like total stores the running + count. The king admired the logic. +

      +

      Edge Cases

      +

      + What happens when a subject tells the same joke twice? The + mathematician recommended tracking duplicates with a Ctrl+Z{' '} + - or rather, a rollback function. +

      +

      Table of Royal Expenses

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      ItemCost (gold)Quantity
      Roasted boar5010
      Barrels of mead3020
      Jester hat51
      Total--
      +

      Glossary of Terms

      +
      +
      Joke Tax
      +
      A levy collected in the form of humour rather than coin.
      +
      Fortnight
      +
      A period of fourteen days - also known as two weeks.
      +
      Rollback
      +
      To undo the last action, like a wise programmer would.
      +
      +
      + + The royal court laughing + +
      + The royal court enjoying a particularly good pun. +
      +
      +
      +

      + And so, the kingdom thrived - one joke at a time (provided they were + original and not just a `console.log`). +

      +
      +
      + ) +} diff --git a/packages/lifeforge-ui/src/components/primitives/Prose/index.tsx b/packages/ui/src/components/primitives/Prose/index.tsx similarity index 99% rename from packages/lifeforge-ui/src/components/primitives/Prose/index.tsx rename to packages/ui/src/components/primitives/Prose/index.tsx index f22bab6c6..65eb7e2e9 100644 --- a/packages/lifeforge-ui/src/components/primitives/Prose/index.tsx +++ b/packages/ui/src/components/primitives/Prose/index.tsx @@ -1,6 +1,5 @@ -import { type CSSProperties, type ReactNode } from 'react' - import { clsx } from 'clsx' +import { type CSSProperties, type ReactNode } from 'react' import * as styles from './Prose.css' diff --git a/packages/lifeforge-ui/src/components/primitives/Slot/Slot.stories.tsx b/packages/ui/src/components/primitives/Slot/Slot.stories.tsx similarity index 51% rename from packages/lifeforge-ui/src/components/primitives/Slot/Slot.stories.tsx rename to packages/ui/src/components/primitives/Slot/Slot.stories.tsx index cadb01994..ac3a4d996 100644 --- a/packages/lifeforge-ui/src/components/primitives/Slot/Slot.stories.tsx +++ b/packages/ui/src/components/primitives/Slot/Slot.stories.tsx @@ -1,7 +1,9 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Alert } from '@components/feedback' -import { Box, Flex, Text } from '@components/primitives' +import { Alert } from '@/components/feedback' +import { Box, Flex, Text } from '@/components/primitives' +import { VariantContainer } from '@/storybook/VariantContainer' +import { COLORS, withOpacity } from '@/system' import { Slot } from './index' @@ -32,44 +34,37 @@ export const Default: Story = { children: <> }, render: () => ( - - - - Slot receives props and forwards them - onto its single child — no extra DOM node is added. - + + + Slot receives props and forwards them + onto its single child - no extra DOM node is added. + - - + + - - - + + I am a <button> + + + Slot forwarded a dashed outline style and an extra className onto + this button element directly. + + + + ) } @@ -79,7 +74,7 @@ export const Default: Story = { * `Slot` internally, applying all its sprinkle classes and layout styles to * the child. The result is semantically correct HTML with no extra wrapper. * - * Compare the two boxes below — both look identical but the right one has + * Compare the two boxes below - both look identical but the right one has * no extra `
      ` in the DOM. */ export const AsChildPattern: Story = { @@ -87,23 +82,12 @@ export const AsChildPattern: Story = { children: <> }, render: () => ( - + Open the browser dev tools to inspect the DOM structure of the given examples. - - - Without asChild — extra <div> wrapper: - +
      Box wraps <article> @@ -112,16 +96,8 @@ export const AsChildPattern: Story = {
      -
      - - - - With asChild — styles applied directly to <article>: - + + - +
      ) } @@ -159,28 +135,27 @@ export const ClassNameMerging: Story = { Open the browser dev tools to inspect the DOM structure of the given examples. - - Both classes are applied — inspect the element to verify: - - - - className="from-slot from-child" - - + + + + className="from-slot from-child" + + +
      ) } /** - * `Slot` merges `style` objects — properties from Slot and the child are + * `Slot` merges `style` objects - properties from Slot and the child are * merged, with the child's values taking precedence on collision. */ export const StyleMerging: Story = { @@ -197,24 +172,23 @@ export const StyleMerging: Story = { Open the browser dev tools to inspect the DOM structure of the given examples. - - Slot sets padding + outline; child sets background. Both are applied: - - -
      + - Slot style + child style merged -
      -
      +
      + Slot style + child style merged +
      + + ) } diff --git a/packages/lifeforge-ui/src/components/primitives/Slot/index.tsx b/packages/ui/src/components/primitives/Slot/index.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/primitives/Slot/index.tsx rename to packages/ui/src/components/primitives/Slot/index.tsx diff --git a/packages/lifeforge-ui/src/components/primitives/Text/Text.css.ts b/packages/ui/src/components/primitives/Text/Text.css.ts similarity index 77% rename from packages/lifeforge-ui/src/components/primitives/Text/Text.css.ts rename to packages/ui/src/components/primitives/Text/Text.css.ts index bf2b6c323..ad41acff7 100644 --- a/packages/lifeforge-ui/src/components/primitives/Text/Text.css.ts +++ b/packages/ui/src/components/primitives/Text/Text.css.ts @@ -1,22 +1,27 @@ import { recipe } from '@vanilla-extract/recipes' import { createSprinkles, defineProperties } from '@vanilla-extract/sprinkles' -import { colors, responsiveConditions, vars } from '@/system' +import { + COLORS, + RESPONSIVE_CONDITIONS, + tokenizedSpacingProperties, + vars +} from '@/system' export const textBase = recipe({ base: {} }) const textColorValues = { - ...colors, + ...COLORS, inherit: 'inherit', default: 'var(--color-bg-900)', muted: 'var(--color-bg-500)', primary: 'var(--color-custom-500)', - dangerous: colors.dangerous + dangerous: COLORS.dangerous } as const -/** Theme-aware color/backgroundColor for Text — supports dark/hover/hasBgImage conditions. */ +/** Theme-aware color/backgroundColor for Text - supports dark/hover/hasBgImage conditions. */ const textColorProperties = defineProperties({ conditions: { base: {}, @@ -29,12 +34,12 @@ const textColorProperties = defineProperties({ defaultCondition: 'base', properties: { color: textColorValues, - backgroundColor: colors + backgroundColor: COLORS } }) const textProperties = defineProperties({ - conditions: responsiveConditions, + conditions: RESPONSIVE_CONDITIONS, defaultCondition: 'base', properties: { fontSize: vars.fontSize, @@ -80,24 +85,14 @@ const textProperties = defineProperties({ 'none', 'contents' ], - // Margin props for Text - margin: vars.space, - marginTop: vars.space, - marginBottom: vars.space, - marginLeft: vars.space, - marginRight: vars.space, - // Padding props for Text - padding: vars.space, - paddingTop: vars.space, - paddingBottom: vars.space, - paddingLeft: vars.space, - paddingRight: vars.space + trim: ['normal', 'start', 'end', 'both'] } }) export const textSprinkles = createSprinkles( textColorProperties, - textProperties + textProperties, + tokenizedSpacingProperties ) export type TextSprinkles = Parameters[0] diff --git a/packages/lifeforge-ui/src/components/primitives/Text/Text.stories.tsx b/packages/ui/src/components/primitives/Text/Text.stories.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/primitives/Text/Text.stories.tsx rename to packages/ui/src/components/primitives/Text/Text.stories.tsx index 810498667..de9b58ebe 100644 --- a/packages/lifeforge-ui/src/components/primitives/Text/Text.stories.tsx +++ b/packages/ui/src/components/primitives/Text/Text.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Alert } from '@components/feedback' -import { Box, Flex, Grid, Text } from '@components/primitives' +import { Alert } from '@/components/feedback' +import { Box, Flex, Grid, Text } from '@/components/primitives' import { ScrollableStory } from '@/storybook/ScrollableStory' @@ -86,7 +86,7 @@ type Story = StoryObj /** * The default `Text` renders an inline `` in the base body size - * without any explicit color — it inherits from the surrounding context. + * without any explicit color - it inherits from the surrounding context. */ export const Default: Story = { args: { @@ -248,7 +248,7 @@ export const TextAlign: Story = { width="100%" > - align="{align}" — The quick brown fox jumps + align="{align}" - The quick brown fox jumps over the lazy dog. @@ -267,7 +267,7 @@ export const TextDecoration: Story = { {(['underline', 'line-through', 'none'] as const).map(decoration => ( - decoration="{decoration}" — The quick brown fox + decoration="{decoration}" - The quick brown fox ))} @@ -284,7 +284,7 @@ export const TextTransform: Story = { {(['uppercase', 'lowercase', 'capitalize', 'none'] as const).map( transform => ( - transform="{transform}" — the quick brown fox + transform="{transform}" - the quick brown fox ) )} @@ -474,7 +474,7 @@ export const PolymorphicElement: Story = { ] as const ).map(({ as: tag, size, weight }) => ( - <{tag}> — size="{size}" weight="{weight}" + <{tag}> - size="{size}" weight="{weight}" ))} @@ -489,7 +489,7 @@ export const Composition: Story = { args: {}, render: () => ( - + {[ { tag: 'UI Kit', title: 'Design System', value: '128 components' }, { tag: 'Backend', title: 'API Coverage', value: '97%' } diff --git a/packages/lifeforge-ui/src/components/primitives/Text/index.tsx b/packages/ui/src/components/primitives/Text/index.tsx similarity index 52% rename from packages/lifeforge-ui/src/components/primitives/Text/index.tsx rename to packages/ui/src/components/primitives/Text/index.tsx index 309ac4824..0ebad4102 100644 --- a/packages/lifeforge-ui/src/components/primitives/Text/index.tsx +++ b/packages/ui/src/components/primitives/Text/index.tsx @@ -8,12 +8,14 @@ import { } from 'react' import { - type MarginProps, - type PaddingProps, + type ColorToken, type ResponsiveProp, - type ThemeConditionProp, - normalizeResponsiveProp + type TokenizedSpacingProps, + normalizeResponsiveProp, + resolveSpacingSprinklesProps, + resolveStyles } from '@/system' +import type { ThemeConditionProp } from '@/system/themes' import { Slot } from '../Slot' import { @@ -65,14 +67,15 @@ type TextOverflowWrap = 'normal' | 'break-word' | 'anywhere' type TextTrim = 'normal' | 'start' | 'end' | 'both' -interface TextOwnProps - extends MarginProps, PaddingProps { +interface TextOwnProps< + T extends ElementType = 'span' +> extends TokenizedSpacingProps { as?: T asChild?: boolean ref?: Ref size?: ResponsiveProp color?: ThemeConditionProp - bg?: ThemeConditionProp + bg?: ThemeConditionProp weight?: ResponsiveProp align?: ResponsiveProp decoration?: ResponsiveProp @@ -102,13 +105,12 @@ interface TextOwnProps export type TextProps = TextOwnProps & Omit, keyof TextOwnProps> -// Trim support - using CSS text-box-trim (experimental, use className for fallback) -const trimClassMap: Record = { +const trimMap = { normal: '', start: 'trim-start', end: 'trim-end', both: 'trim-both' -} +} as const satisfies Record export function Text({ as, @@ -152,59 +154,6 @@ export function Text({ children, ...rest }: TextProps & { style?: CSSProperties }) { - const sprinklesClassName = textSprinkles({ - fontSize: normalizeResponsiveProp(size) as TextSprinkles['fontSize'], - lineHeight: normalizeResponsiveProp( - leading ?? size - ) as TextSprinkles['lineHeight'], - color: color as TextSprinkles['color'], - backgroundColor: bg as TextSprinkles['backgroundColor'], - fontWeight: normalizeResponsiveProp(weight) as TextSprinkles['fontWeight'], - textAlign: normalizeResponsiveProp(align) as TextSprinkles['textAlign'], - display: normalizeResponsiveProp(display) as TextSprinkles['display'], - textDecoration: normalizeResponsiveProp( - decoration - ) as TextSprinkles['textDecoration'], - textTransform: normalizeResponsiveProp( - transform - ) as TextSprinkles['textTransform'], - textWrap: normalizeResponsiveProp(wrap) as TextSprinkles['textWrap'], - whiteSpace: normalizeResponsiveProp( - whiteSpace - ) as TextSprinkles['whiteSpace'], - wordBreak: normalizeResponsiveProp(wordBreak) as TextSprinkles['wordBreak'], - overflowWrap: normalizeResponsiveProp( - overflowWrap - ) as TextSprinkles['overflowWrap'], - letterSpacing: normalizeResponsiveProp( - tracking - ) as TextSprinkles['letterSpacing'], - margin: normalizeResponsiveProp(m) as TextSprinkles['margin'], - marginTop: normalizeResponsiveProp(mt ?? my) as TextSprinkles['marginTop'], - marginBottom: normalizeResponsiveProp( - mb ?? my - ) as TextSprinkles['marginBottom'], - marginLeft: normalizeResponsiveProp( - ml ?? mx - ) as TextSprinkles['marginLeft'], - marginRight: normalizeResponsiveProp( - mr ?? mx - ) as TextSprinkles['marginRight'], - padding: normalizeResponsiveProp(p) as TextSprinkles['padding'], - paddingTop: normalizeResponsiveProp( - pt ?? py - ) as TextSprinkles['paddingTop'], - paddingBottom: normalizeResponsiveProp( - pb ?? py - ) as TextSprinkles['paddingBottom'], - paddingLeft: normalizeResponsiveProp( - pl ?? px - ) as TextSprinkles['paddingLeft'], - paddingRight: normalizeResponsiveProp( - pr ?? px - ) as TextSprinkles['paddingRight'] - }) - const truncateStyle: CSSProperties | undefined = truncate ? { overflow: 'hidden', @@ -222,25 +171,67 @@ export function Text({ } : undefined - // Trim class - const trimValue = typeof trim === 'object' ? trim.base : trim - - const trimClass = trimValue ? trimClassMap[trimValue] : '' - - const mergedStyle = - truncateStyle || lineClampStyle - ? { ...style, ...truncateStyle, ...lineClampStyle } - : style - const Component = asChild ? Slot : (as ?? 'span') + const styles = resolveStyles({ + sprinkles: textSprinkles, + sprinkleProps: { + fontSize: normalizeResponsiveProp(size) as TextSprinkles['fontSize'], + lineHeight: normalizeResponsiveProp(leading ?? size), + trim: normalizeResponsiveProp(trim, v => trimMap[v]), + color: color, + backgroundColor: bg, + fontWeight: normalizeResponsiveProp( + weight + ) as TextSprinkles['fontWeight'], + textAlign: normalizeResponsiveProp(align) as TextSprinkles['textAlign'], + display: normalizeResponsiveProp(display) as TextSprinkles['display'], + textDecoration: normalizeResponsiveProp( + decoration + ) as TextSprinkles['textDecoration'], + textTransform: normalizeResponsiveProp( + transform + ) as TextSprinkles['textTransform'], + textWrap: normalizeResponsiveProp(wrap) as TextSprinkles['textWrap'], + whiteSpace: normalizeResponsiveProp( + whiteSpace + ) as TextSprinkles['whiteSpace'], + wordBreak: normalizeResponsiveProp( + wordBreak + ) as TextSprinkles['wordBreak'], + overflowWrap: normalizeResponsiveProp( + overflowWrap + ) as TextSprinkles['overflowWrap'], + letterSpacing: normalizeResponsiveProp( + tracking + ) as TextSprinkles['letterSpacing'], + ...resolveSpacingSprinklesProps({ + p, + px, + py, + pt, + pr, + pb, + pl, + m, + mx, + my, + mt, + mr, + mb, + ml + }) + }, + style: { + ...style, + ...truncateStyle, + ...lineClampStyle + }, + className: clsx(textBase(), className) + }) + return ( - } - className={clsx(textBase(), sprinklesClassName, trimClass, className)} - style={mergedStyle} - {...rest} - > + } {...styles} {...rest}> {children} ) diff --git a/packages/ui/src/components/primitives/Transition/Transition.stories.tsx b/packages/ui/src/components/primitives/Transition/Transition.stories.tsx new file mode 100644 index 000000000..273e087bf --- /dev/null +++ b/packages/ui/src/components/primitives/Transition/Transition.stories.tsx @@ -0,0 +1,342 @@ +import type { Meta, StoryObj } from '@storybook/react-vite' +import { type ReactNode, useState } from 'react' + +import { Alert } from '@/components/feedback' +import { Switch } from '@/components/inputs' +import { Box, Flex, Text } from '@/components/primitives' +import { ScrollableStory } from '@/storybook/ScrollableStory' +import { VariantContainer } from '@/storybook/VariantContainer' +import { COLORS } from '@/system' + +import { Transition } from './index' + +const meta = { + argTypes: { + children: { control: false } + }, + component: Transition +} satisfies Meta + +export default meta + +type Story = StoryObj + +function Demo({ + children, + label +}: { + label: string + children: (on: boolean) => ReactNode +}) { + const [on, setOn] = useState(false) + + return ( + + + + Toggle animation + + + {children(on)} + + + ) +} + +/** + * Applies a transition to the `opacity` property. Toggle the switch to see the + * box fade in and out. + */ +export const Opacity: Story = { + args: { children: null }, + render: () => ( + + + Open the browser dev tools to inspect the transition{' '} + property applied to the wrapper element. + + + {on => ( + + + + Fading box + + + + )} + + + {on => ( + + + + Scaling box + + + + )} + + + {on => ( + + + + Background changes color + + + + )} + + + {on => ( + + + + Shadow grows on toggle + + + + )} + + + ) +} + +/** + * Demonstrates transitioning multiple properties simultaneously. + */ +export const MultiProperty: Story = { + args: { children: null }, + render: () => ( + + + {on => ( + + + + Moves and fades at the same time + + + + )} + + + + {on => ( + + + + Box expands + + + + )} + + + ) +} + +/** + * Demonstrates per-property overrides via `TransitionEntry` objects. + * Each property can have its own duration, easing, and delay. + */ +export const PerPropertyOverrides: Story = { + args: { children: null }, + render: () => ( + + + {on => ( + + + + Opacity fades fast; rotation takes longer with a delay + + + + )} + + + + {on => ( + + + + Background takes 1s, text color is instant + + + + )} + + + ) +} + +/** + * Demonstrates a transition triggered by hover. Uses mouse events to toggle + * state, driving inline styles — showing how `Transition` powers interactive + * UI without framework-level animation libraries. + */ +export const HoverTriggered: Story = { + args: { children: null }, + render: () => { + return ( + + + + + Hover me — background color transitions + + + + + ) + } +} + +/** + * Demonstrates a single property using a `TransitionEntry` object (shorthand + * for when you want to tune one property without using an array). + */ +export const SingleEntryObject: Story = { + args: { children: null }, + render: () => { + return ( + + {on => ( + + + + Border color transitions with a 200ms delay + + + + )} + + ) + } +} diff --git a/packages/lifeforge-ui/src/components/primitives/Transition/index.tsx b/packages/ui/src/components/primitives/Transition/index.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/primitives/Transition/index.tsx rename to packages/ui/src/components/primitives/Transition/index.tsx diff --git a/packages/lifeforge-ui/src/components/primitives/WithDivide/WithDivide.css.ts b/packages/ui/src/components/primitives/WithDivide/WithDivide.css.ts similarity index 100% rename from packages/lifeforge-ui/src/components/primitives/WithDivide/WithDivide.css.ts rename to packages/ui/src/components/primitives/WithDivide/WithDivide.css.ts diff --git a/packages/ui/src/components/primitives/WithDivide/WithDivide.stories.tsx b/packages/ui/src/components/primitives/WithDivide/WithDivide.stories.tsx new file mode 100644 index 000000000..83b7e4f31 --- /dev/null +++ b/packages/ui/src/components/primitives/WithDivide/WithDivide.stories.tsx @@ -0,0 +1,136 @@ +import type { Meta, StoryObj } from '@storybook/react-vite' + +import { Card } from '@/components/layout' +import { Box, Flex, Text } from '@/components/primitives' +import { COLORS } from '@/system' + +import { WithDivide } from './index' + +const meta = { + argTypes: { + children: { control: false }, + color: { control: 'color' }, + darkColor: { control: 'color' } + }, + component: WithDivide +} satisfies Meta + +export default meta + +type Story = StoryObj + +const items = [ + { id: 1, subtitle: 'Last updated 2 days ago', title: 'Project Alpha' }, + { id: 2, subtitle: 'Last updated 5 hours ago', title: 'Project Beta' }, + { id: 3, subtitle: 'Last updated yesterday', title: 'Project Gamma' }, + { id: 4, subtitle: 'Last updated 1 week ago', title: 'Project Delta' }, + { id: 5, subtitle: 'Last updated 3 days ago', title: 'Project Epsilon' } +] + +export const Default: Story = { + args: { + children: null + }, + render: () => ( + + {items.map(item => ( + + + + {item.title} + + {item.subtitle} + + + ))} + + ) +} + +export const CustomColor: Story = { + args: { + children: null, + color: COLORS['custom-500'] + }, + render: args => ( + + {items.map(item => ( + + + + {item.title} + + {item.subtitle} + + + ))} + + ) +} + +export const Nested: Story = { + args: { + children: null + }, + render: () => ( + + + + + Active + + {[ + { id: 1, label: 'Task A' }, + { id: 2, label: 'Task B' } + ].map(item => ( + + + + {item.label} + + + + ))} + + + + + + Completed + + {[ + { id: 3, label: 'Task C' }, + { id: 4, label: 'Task D' }, + { id: 5, label: 'Task E' } + ].map(item => ( + + + + {item.label} + + + + ))} + + + + ) +} diff --git a/packages/lifeforge-ui/src/components/primitives/WithDivide/index.tsx b/packages/ui/src/components/primitives/WithDivide/index.tsx similarity index 93% rename from packages/lifeforge-ui/src/components/primitives/WithDivide/index.tsx rename to packages/ui/src/components/primitives/WithDivide/index.tsx index b8ce9c33c..5b1105012 100644 --- a/packages/lifeforge-ui/src/components/primitives/WithDivide/index.tsx +++ b/packages/ui/src/components/primitives/WithDivide/index.tsx @@ -1,6 +1,6 @@ import { type CSSProperties, type ReactNode, type Ref } from 'react' -import { bg, withOpacity } from '@/system' +import { COLORS, withOpacity } from '@/system' import { Slot } from '../Slot' import { divideBase } from './WithDivide.css' @@ -44,8 +44,8 @@ interface WithDivideProps { */ export function WithDivide({ ref, - color = bg[200], - darkColor = withOpacity(bg[700], 0.5), + color = COLORS['bg-200'], + darkColor = withOpacity(COLORS['bg-700'], 0.5), children }: WithDivideProps) { return ( diff --git a/packages/lifeforge-ui/src/components/primitives/index.ts b/packages/ui/src/components/primitives/index.ts similarity index 90% rename from packages/lifeforge-ui/src/components/primitives/index.ts rename to packages/ui/src/components/primitives/index.ts index 0c23951ca..3ec8ad78f 100644 --- a/packages/lifeforge-ui/src/components/primitives/index.ts +++ b/packages/ui/src/components/primitives/index.ts @@ -15,3 +15,5 @@ export * from './Transition' export * from './Prose' export * from './WithDivide' + +export * from './Icon' diff --git a/packages/lifeforge-ui/src/components/utilities/APIOnlineStatusWrapper/index.tsx b/packages/ui/src/components/utilities/APIOnlineStatusWrapper/index.tsx similarity index 85% rename from packages/lifeforge-ui/src/components/utilities/APIOnlineStatusWrapper/index.tsx rename to packages/ui/src/components/utilities/APIOnlineStatusWrapper/index.tsx index e7fd5889d..890ce2df0 100644 --- a/packages/lifeforge-ui/src/components/utilities/APIOnlineStatusWrapper/index.tsx +++ b/packages/ui/src/components/utilities/APIOnlineStatusWrapper/index.tsx @@ -1,6 +1,6 @@ -import { useAPIOnlineStatus } from 'shared' +import { useAPIOnlineStatus } from '@lifeforge/shared' -import { EmptyStateScreen, LoadingScreen } from '@components/feedback' +import { EmptyStateScreen, LoadingScreen } from '@/components/feedback' export function APIOnlineStatusWrapper({ children diff --git a/packages/lifeforge-ui/src/components/utilities/EncryptionWrapper/index.tsx b/packages/ui/src/components/utilities/EncryptionWrapper/index.tsx similarity index 70% rename from packages/lifeforge-ui/src/components/utilities/EncryptionWrapper/index.tsx rename to packages/ui/src/components/utilities/EncryptionWrapper/index.tsx index 23d8ef004..bb5e62be8 100644 --- a/packages/lifeforge-ui/src/components/utilities/EncryptionWrapper/index.tsx +++ b/packages/ui/src/components/utilities/EncryptionWrapper/index.tsx @@ -1,12 +1,8 @@ -import { useEncryption } from 'shared' +import { useEncryption } from '@lifeforge/shared' -import { EmptyStateScreen, LoadingScreen } from '@components/feedback' +import { EmptyStateScreen, LoadingScreen } from '@/components/feedback' -export function EncryptionWrapper({ - children -}: { - children: React.ReactNode -}) { +export function EncryptionWrapper({ children }: { children: React.ReactNode }) { const { ready, error } = useEncryption() if (!ready) { diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbar/Scrollbar.stories.tsx b/packages/ui/src/components/utilities/Scrollbar/Scrollbar.stories.tsx similarity index 94% rename from packages/lifeforge-ui/src/components/utilities/Scrollbar/Scrollbar.stories.tsx rename to packages/ui/src/components/utilities/Scrollbar/Scrollbar.stories.tsx index 27fcd3c73..bc097675d 100644 --- a/packages/lifeforge-ui/src/components/utilities/Scrollbar/Scrollbar.stories.tsx +++ b/packages/ui/src/components/utilities/Scrollbar/Scrollbar.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite' -import { Card } from '@components/layout' -import { Box, Flex } from '@components/primitives' +import { Card } from '@/components/layout' +import { Box, Flex } from '@/components/primitives' import { Scrollbar } from './index' diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbar/index.tsx b/packages/ui/src/components/utilities/Scrollbar/index.tsx similarity index 96% rename from packages/lifeforge-ui/src/components/utilities/Scrollbar/index.tsx rename to packages/ui/src/components/utilities/Scrollbar/index.tsx index 5b9f159b4..060d10ee8 100644 --- a/packages/lifeforge-ui/src/components/utilities/Scrollbar/index.tsx +++ b/packages/ui/src/components/utilities/Scrollbar/index.tsx @@ -1,4 +1,4 @@ -import { Box, Flex } from '@components/primitives' +import { Box, Flex } from '@/components/primitives' import { Scrollbars, type ScrollbarsProps } from '../Scrollbars' diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/defaultRenderElements.tsx b/packages/ui/src/components/utilities/Scrollbars/defaultRenderElements.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/defaultRenderElements.tsx rename to packages/ui/src/components/utilities/Scrollbars/defaultRenderElements.tsx diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/index.tsx b/packages/ui/src/components/utilities/Scrollbars/index.tsx similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/index.tsx rename to packages/ui/src/components/utilities/Scrollbars/index.tsx diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/styles.ts b/packages/ui/src/components/utilities/Scrollbars/styles.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/styles.ts rename to packages/ui/src/components/utilities/Scrollbars/styles.ts diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/getInnerHeight.ts b/packages/ui/src/components/utilities/Scrollbars/utils/getInnerHeight.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/getInnerHeight.ts rename to packages/ui/src/components/utilities/Scrollbars/utils/getInnerHeight.ts diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/getInnerWidth.ts b/packages/ui/src/components/utilities/Scrollbars/utils/getInnerWidth.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/getInnerWidth.ts rename to packages/ui/src/components/utilities/Scrollbars/utils/getInnerWidth.ts diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/getScrollbarWidth.ts b/packages/ui/src/components/utilities/Scrollbars/utils/getScrollbarWidth.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/getScrollbarWidth.ts rename to packages/ui/src/components/utilities/Scrollbars/utils/getScrollbarWidth.ts diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/isString.ts b/packages/ui/src/components/utilities/Scrollbars/utils/isString.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/isString.ts rename to packages/ui/src/components/utilities/Scrollbars/utils/isString.ts diff --git a/packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/returnFalse.ts b/packages/ui/src/components/utilities/Scrollbars/utils/returnFalse.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/Scrollbars/utils/returnFalse.ts rename to packages/ui/src/components/utilities/Scrollbars/utils/returnFalse.ts diff --git a/packages/lifeforge-ui/src/components/utilities/Tooltip/Tooltip.stories.tsx b/packages/ui/src/components/utilities/Tooltip/Tooltip.stories.tsx similarity index 97% rename from packages/lifeforge-ui/src/components/utilities/Tooltip/Tooltip.stories.tsx rename to packages/ui/src/components/utilities/Tooltip/Tooltip.stories.tsx index 1342f2eb5..b839ba74a 100644 --- a/packages/lifeforge-ui/src/components/utilities/Tooltip/Tooltip.stories.tsx +++ b/packages/ui/src/components/utilities/Tooltip/Tooltip.stories.tsx @@ -1,7 +1,7 @@ -import { Icon } from '@iconify/react' import type { Meta, StoryObj } from '@storybook/react-vite' -import { Box, Flex, Text } from '@components/primitives' +import { Icon } from '@/components/primitives' +import { Box, Flex, Text } from '@/components/primitives' import { Tooltip } from './index' diff --git a/packages/lifeforge-ui/src/components/utilities/Tooltip/index.tsx b/packages/ui/src/components/utilities/Tooltip/index.tsx similarity index 85% rename from packages/lifeforge-ui/src/components/utilities/Tooltip/index.tsx rename to packages/ui/src/components/utilities/Tooltip/index.tsx index 8761b7b7b..42b114cea 100644 --- a/packages/lifeforge-ui/src/components/utilities/Tooltip/index.tsx +++ b/packages/ui/src/components/utilities/Tooltip/index.tsx @@ -1,10 +1,10 @@ -import { Icon } from '@iconify/react' import _ from 'lodash' import { Tooltip as ReactTooltip } from 'react-tooltip' -import { usePersonalization } from 'shared' import tinycolor from 'tinycolor2' -import { Box, Text } from '@components/primitives' +import { usePersonalization } from '@lifeforge/shared' + +import { Box, Icon, Text } from '@/components/primitives' /** * A tooltip component that displays informational content when hovering over an icon. @@ -32,13 +32,7 @@ export function Tooltip({ return ( <> - + ({ query, diff --git a/packages/lifeforge-ui/src/components/utilities/WithQueryData/index.tsx b/packages/ui/src/components/utilities/WithQueryData/index.tsx similarity index 88% rename from packages/lifeforge-ui/src/components/utilities/WithQueryData/index.tsx rename to packages/ui/src/components/utilities/WithQueryData/index.tsx index 5349a660d..e0d6816b0 100644 --- a/packages/lifeforge-ui/src/components/utilities/WithQueryData/index.tsx +++ b/packages/ui/src/components/utilities/WithQueryData/index.tsx @@ -1,7 +1,8 @@ import { type UseQueryOptions, useQuery } from '@tanstack/react-query' -import type { ForgeEndpoint, InferOutput } from 'shared' -import { ErrorScreen, LoadingScreen } from '@components/feedback' +import type { ForgeEndpoint, InferOutput } from '@lifeforge/shared' + +import { ErrorScreen, LoadingScreen } from '@/components/feedback' export function WithQueryData({ controller, diff --git a/packages/lifeforge-ui/src/components/utilities/index.ts b/packages/ui/src/components/utilities/index.ts similarity index 100% rename from packages/lifeforge-ui/src/components/utilities/index.ts rename to packages/ui/src/components/utilities/index.ts diff --git a/packages/lifeforge-ui/src/index.ts b/packages/ui/src/index.ts similarity index 73% rename from packages/lifeforge-ui/src/index.ts rename to packages/ui/src/index.ts index 428ae9793..559fa5558 100644 --- a/packages/lifeforge-ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -25,4 +25,8 @@ export * from './components/overlays' export * from './components/utilities' // Theme tokens - typed CSS variable references -export { bg, custom, withOpacity, TAILWIND_PALETTE } from './system' +export { withOpacity, TAILWIND_PALETTE, COLORS } from './system' + +export { ModalProvider, useModalStore } from './providers/ModalProvider' + +export type { ModalComponent } from './providers/ModalProvider' diff --git a/packages/ui/src/providers/ModalProvider.tsx b/packages/ui/src/providers/ModalProvider.tsx new file mode 100644 index 000000000..17207850b --- /dev/null +++ b/packages/ui/src/providers/ModalProvider.tsx @@ -0,0 +1,77 @@ +import { + type FC, + type ReactNode, + createContext, + useContext, + useMemo, + useState +} from 'react' + +export type ModalComponent

      = FC<{ + data: P + onClose: () => void +}> + +type ModalInstance

      = { + component: ModalComponent

      + data: P + isClosing: boolean +} + +interface ModalState { + stack: ModalInstance[] + open:

      (component: ModalComponent

      , data: P) => void + close: () => void + remove: (index: number) => void +} + +const ModalContext = createContext(null) + +export function ModalProvider({ children }: { children: ReactNode }) { + const [stack, setStack] = useState([]) + + const open: ModalState['open'] = (component, data) => { + setStack(prev => [...prev, { component, data, isClosing: false }]) + } + + const close: ModalState['close'] = () => { + setStack(prev => { + if (prev.length === 0) return prev + + const next = [...prev] + + const lastIndex = next.length - 1 + + next[lastIndex] = { ...next[lastIndex], isClosing: true } as any + + return next + }) + } + + const remove: ModalState['remove'] = index => { + setStack(prev => { + const next = [...prev] + + next.splice(index, 1) + + return next + }) + } + + const value = useMemo( + () => ({ stack, open, close, remove }), + [stack] + ) + + return {children} +} + +export function useModalStore(): ModalState { + const ctx = useContext(ModalContext) + + if (!ctx) { + throw new Error('ModalProvider is missing in the component tree') + } + + return ctx +} diff --git a/packages/ui/src/providers/index.ts b/packages/ui/src/providers/index.ts new file mode 100644 index 000000000..1b8ffe05a --- /dev/null +++ b/packages/ui/src/providers/index.ts @@ -0,0 +1 @@ +export * from './ModalProvider' diff --git a/packages/lifeforge-ui/src/storybook/PreviewWrapper.tsx b/packages/ui/src/storybook/PreviewWrapper.tsx similarity index 86% rename from packages/lifeforge-ui/src/storybook/PreviewWrapper.tsx rename to packages/ui/src/storybook/PreviewWrapper.tsx index 75a501b76..a283212a0 100644 --- a/packages/lifeforge-ui/src/storybook/PreviewWrapper.tsx +++ b/packages/ui/src/storybook/PreviewWrapper.tsx @@ -1,11 +1,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { APIEndpointProvider, ToastProvider } from 'shared' -import ModalProvider from 'shared/dist/providers/ModalStoreProvider' +import { APIEndpointProvider, ToastProvider } from '@lifeforge/shared' -import { ModalManager } from '@components/overlays' -import { Flex } from '@components/primitives' +import { ModalManager } from '@/components/overlays' +import { Flex } from '@/components/primitives' +import { ModalProvider } from '@/providers' import { SBThemeProvider } from './SBThemeProvider' @@ -52,4 +52,3 @@ export function PreviewWrapper(Story: any, context: any) { ) } - diff --git a/packages/lifeforge-ui/src/storybook/QCProvider.tsx b/packages/ui/src/storybook/QCProvider.tsx similarity index 99% rename from packages/lifeforge-ui/src/storybook/QCProvider.tsx rename to packages/ui/src/storybook/QCProvider.tsx index f3a9a9def..4981b319c 100644 --- a/packages/lifeforge-ui/src/storybook/QCProvider.tsx +++ b/packages/ui/src/storybook/QCProvider.tsx @@ -7,4 +7,3 @@ export function QCProvider({ children }: { children: React.ReactNode }) { {children} ) } - diff --git a/packages/lifeforge-ui/src/storybook/SBThemeProvider.tsx b/packages/ui/src/storybook/SBThemeProvider.tsx similarity index 95% rename from packages/lifeforge-ui/src/storybook/SBThemeProvider.tsx rename to packages/ui/src/storybook/SBThemeProvider.tsx index 88ec1c4ef..d5ae49e7a 100644 --- a/packages/lifeforge-ui/src/storybook/SBThemeProvider.tsx +++ b/packages/ui/src/storybook/SBThemeProvider.tsx @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { type ReactNode, useMemo } from 'react' -import { PersonalizationProvider } from 'shared' + +import { PersonalizationProvider } from '@lifeforge/shared' import { forgeAPI } from '@/utils/forgeAPI' diff --git a/packages/ui/src/storybook/ScrollableStory.tsx b/packages/ui/src/storybook/ScrollableStory.tsx new file mode 100644 index 000000000..25c4c838f --- /dev/null +++ b/packages/ui/src/storybook/ScrollableStory.tsx @@ -0,0 +1,14 @@ +import { Box, Flex } from '@/components/primitives' +import { Scrollbar } from '@/components/utilities' + +export function ScrollableStory({ children }: { children: React.ReactNode }) { + return ( + + + + {children} + + + + ) +} diff --git a/packages/lifeforge-ui/src/storybook/VariantContainer.tsx b/packages/ui/src/storybook/VariantContainer.tsx similarity index 85% rename from packages/lifeforge-ui/src/storybook/VariantContainer.tsx rename to packages/ui/src/storybook/VariantContainer.tsx index 3b89db9cb..99e3b0a43 100644 --- a/packages/lifeforge-ui/src/storybook/VariantContainer.tsx +++ b/packages/ui/src/storybook/VariantContainer.tsx @@ -1,4 +1,4 @@ -import { Box, Text } from '@components/primitives' +import { Box, Text } from '@/components/primitives' export function VariantContainer({ title, diff --git a/packages/lifeforge-ui/src/storybook/mockController.ts b/packages/ui/src/storybook/mockController.ts similarity index 100% rename from packages/lifeforge-ui/src/storybook/mockController.ts rename to packages/ui/src/storybook/mockController.ts diff --git a/packages/lifeforge-ui/src/storybook/toolbars/bgTemp.ts b/packages/ui/src/storybook/toolbars/bgTemp.ts similarity index 99% rename from packages/lifeforge-ui/src/storybook/toolbars/bgTemp.ts rename to packages/ui/src/storybook/toolbars/bgTemp.ts index f6f9b5a13..9fe1e615c 100644 --- a/packages/lifeforge-ui/src/storybook/toolbars/bgTemp.ts +++ b/packages/ui/src/storybook/toolbars/bgTemp.ts @@ -15,4 +15,3 @@ export const BG_TEMP_TOOLBAR_CONFIG = { dynamicTitle: true } } - diff --git a/packages/lifeforge-ui/src/storybook/toolbars/fontScale.ts b/packages/ui/src/storybook/toolbars/fontScale.ts similarity index 99% rename from packages/lifeforge-ui/src/storybook/toolbars/fontScale.ts rename to packages/ui/src/storybook/toolbars/fontScale.ts index 728d14d34..fa1e42370 100644 --- a/packages/lifeforge-ui/src/storybook/toolbars/fontScale.ts +++ b/packages/ui/src/storybook/toolbars/fontScale.ts @@ -14,4 +14,3 @@ export const FONT_SCALE_TOOLBAR_CONFIG = { dynamicTitle: true } } - diff --git a/packages/lifeforge-ui/src/storybook/toolbars/theme.ts b/packages/ui/src/storybook/toolbars/theme.ts similarity index 99% rename from packages/lifeforge-ui/src/storybook/toolbars/theme.ts rename to packages/ui/src/storybook/toolbars/theme.ts index 6106db7e2..4cf83e252 100644 --- a/packages/lifeforge-ui/src/storybook/toolbars/theme.ts +++ b/packages/ui/src/storybook/toolbars/theme.ts @@ -20,4 +20,3 @@ export const THEME_TOOLBAR_CONFIG = { dynamicTitle: true } } - diff --git a/packages/lifeforge-ui/src/storybook/toolbars/themeColor.ts b/packages/ui/src/storybook/toolbars/themeColor.ts similarity index 99% rename from packages/lifeforge-ui/src/storybook/toolbars/themeColor.ts rename to packages/ui/src/storybook/toolbars/themeColor.ts index 0c57feb61..012b5cc24 100644 --- a/packages/lifeforge-ui/src/storybook/toolbars/themeColor.ts +++ b/packages/ui/src/storybook/toolbars/themeColor.ts @@ -29,4 +29,3 @@ export const THEME_COLOR_TOOLBAR_CONFIG = { dynamicTitle: true } } - diff --git a/packages/lifeforge-ui/src/storybook/useSBTheme.tsx b/packages/ui/src/storybook/useSBTheme.tsx similarity index 100% rename from packages/lifeforge-ui/src/storybook/useSBTheme.tsx rename to packages/ui/src/storybook/useSBTheme.tsx diff --git a/packages/lifeforge-ui/src/styles/autofill.css b/packages/ui/src/styles/autofill.css similarity index 100% rename from packages/lifeforge-ui/src/styles/autofill.css rename to packages/ui/src/styles/autofill.css diff --git a/packages/lifeforge-ui/src/styles/global.css b/packages/ui/src/styles/global.css similarity index 100% rename from packages/lifeforge-ui/src/styles/global.css rename to packages/ui/src/styles/global.css diff --git a/packages/lifeforge-ui/src/styles/index.css b/packages/ui/src/styles/index.css similarity index 100% rename from packages/lifeforge-ui/src/styles/index.css rename to packages/ui/src/styles/index.css diff --git a/packages/lifeforge-ui/src/styles/preflight.css b/packages/ui/src/styles/preflight.css similarity index 97% rename from packages/lifeforge-ui/src/styles/preflight.css rename to packages/ui/src/styles/preflight.css index 6ff036315..9fe097e0e 100644 --- a/packages/lifeforge-ui/src/styles/preflight.css +++ b/packages/ui/src/styles/preflight.css @@ -1,4 +1,4 @@ -/* Tailwind CSS Preflight — adapted for vanilla-extract use */ +/* Tailwind CSS Preflight - adapted for vanilla-extract use */ /* Source: https://github.com/tailwindlabs/tailwindcss/blob/master/packages/tailwindcss/preflight.css 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) @@ -105,7 +105,9 @@ code, kbd, samp, pre { - font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; /* 1 */ + font-family: + 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, + 'Liberation Mono', 'Courier New', monospace; /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ diff --git a/packages/lifeforge-ui/src/styles/themes/background.css b/packages/ui/src/styles/themes/background.css similarity index 100% rename from packages/lifeforge-ui/src/styles/themes/background.css rename to packages/ui/src/styles/themes/background.css diff --git a/packages/lifeforge-ui/src/styles/themes/foreground.css b/packages/ui/src/styles/themes/foreground.css similarity index 100% rename from packages/lifeforge-ui/src/styles/themes/foreground.css rename to packages/ui/src/styles/themes/foreground.css diff --git a/packages/lifeforge-ui/src/styles/themes/index.css b/packages/ui/src/styles/themes/index.css similarity index 100% rename from packages/lifeforge-ui/src/styles/themes/index.css rename to packages/ui/src/styles/themes/index.css diff --git a/packages/lifeforge-ui/src/styles/utils.css b/packages/ui/src/styles/utils.css similarity index 100% rename from packages/lifeforge-ui/src/styles/utils.css rename to packages/ui/src/styles/utils.css diff --git a/packages/ui/src/system/arbitrary.ts b/packages/ui/src/system/arbitrary.ts new file mode 100644 index 000000000..bb5540949 --- /dev/null +++ b/packages/ui/src/system/arbitrary.ts @@ -0,0 +1,39 @@ +import type { ResponsiveProp } from './responsive' + +export interface ArbitrarySizeProps { + width?: ResponsiveProp + minWidth?: ResponsiveProp + maxWidth?: ResponsiveProp + height?: ResponsiveProp + minHeight?: ResponsiveProp + maxHeight?: ResponsiveProp +} + +export interface ArbitraryPositionProps { + zIndex?: ResponsiveProp + inset?: ResponsiveProp + top?: ResponsiveProp + right?: ResponsiveProp + bottom?: ResponsiveProp + left?: ResponsiveProp +} + +export interface ArbitraryFlexChildProps { + flex?: ResponsiveProp + flexBasis?: ResponsiveProp + flexGrow?: ResponsiveProp + flexShrink?: ResponsiveProp +} + +export interface ArbitraryGridChildProps { + gridArea?: ResponsiveProp + gridColumnSpan?: ResponsiveProp + gridRowSpan?: ResponsiveProp +} + +export interface ArbitraryProps + extends + ArbitrarySizeProps, + ArbitraryPositionProps, + ArbitraryFlexChildProps, + ArbitraryGridChildProps {} diff --git a/packages/ui/src/system/colors/constants.ts b/packages/ui/src/system/colors/constants.ts new file mode 100644 index 000000000..4c6ad7c85 --- /dev/null +++ b/packages/ui/src/system/colors/constants.ts @@ -0,0 +1,31 @@ +/** + * Flat color map for use as a vanilla-extract sprinkles property value set. + * Includes bg-* and custom-* palette entries. + */ +export const COLORS = { + transparent: 'transparent', + 'bg-50': 'var(--color-bg-50)', + 'bg-100': 'var(--color-bg-100)', + 'bg-200': 'var(--color-bg-200)', + 'bg-300': 'var(--color-bg-300)', + 'bg-400': 'var(--color-bg-400)', + 'bg-500': 'var(--color-bg-500)', + 'bg-600': 'var(--color-bg-600)', + 'bg-700': 'var(--color-bg-700)', + 'bg-800': 'var(--color-bg-800)', + 'bg-900': 'var(--color-bg-900)', + 'bg-950': 'var(--color-bg-950)', + 'custom-50': 'var(--color-custom-50)', + 'custom-100': 'var(--color-custom-100)', + 'custom-200': 'var(--color-custom-200)', + 'custom-300': 'var(--color-custom-300)', + 'custom-400': 'var(--color-custom-400)', + 'custom-500': 'var(--color-custom-500)', + 'custom-600': 'var(--color-custom-600)', + 'custom-700': 'var(--color-custom-700)', + 'custom-800': 'var(--color-custom-800)', + 'custom-900': 'var(--color-custom-900)', + dangerous: 'var(--color-dangerous)' +} as const + +export type ColorToken = keyof typeof COLORS diff --git a/packages/ui/src/system/colors/index.ts b/packages/ui/src/system/colors/index.ts new file mode 100644 index 000000000..4a8e4b8b9 --- /dev/null +++ b/packages/ui/src/system/colors/index.ts @@ -0,0 +1,3 @@ +export * from './constants' + +export * from './utils' diff --git a/packages/ui/src/system/colors/utils.ts b/packages/ui/src/system/colors/utils.ts new file mode 100644 index 000000000..4124349e3 --- /dev/null +++ b/packages/ui/src/system/colors/utils.ts @@ -0,0 +1,15 @@ +/** + * Mixes a colour with transparency using `color-mix`. + * + * @param color Any CSS color value (e.g. `bg[500]`, `'#hexValue'`, `'rgb(…)'`) + * @param alpha Opacity factor in [0, 1] + * @returns `color-mix(in srgb, , transparent)` + * + * @example + * borderColor: withOpacity(bg[500], 0.2) // 20% opaque bg-500 + */ +export function withOpacity(color: string, alpha: number): string { + const a = Math.max(0, Math.min(1, alpha)) + + return `color-mix(in srgb, ${color} ${a * 100}%, transparent)` +} diff --git a/packages/ui/src/system/grid-utils.ts b/packages/ui/src/system/grid-utils.ts new file mode 100644 index 000000000..807777251 --- /dev/null +++ b/packages/ui/src/system/grid-utils.ts @@ -0,0 +1,15 @@ +export function normalizeGridTrack(value: number | string): string { + if (typeof value === 'number') { + return `repeat(${value}, 1fr)` + } + + return value +} + +export function normalizeGridSpan(value: number | string): string { + if (typeof value === 'number') { + return `span ${value}` + } + + return value +} diff --git a/packages/ui/src/system/index.ts b/packages/ui/src/system/index.ts new file mode 100644 index 000000000..78aa37bd6 --- /dev/null +++ b/packages/ui/src/system/index.ts @@ -0,0 +1,19 @@ +// Internal system exports - not for public consumption + +export * from './vars.css' + +export * from './colors' + +export * from './responsive' + +export * from './arbitrary' + +export * from './grid-utils' + +export * from './tailwind-palette' + +export * from './vars.css' + +export * from './tokens' + +export * from './props-resolver' diff --git a/packages/ui/src/system/props-resolver.ts b/packages/ui/src/system/props-resolver.ts new file mode 100644 index 000000000..fcb1843d9 --- /dev/null +++ b/packages/ui/src/system/props-resolver.ts @@ -0,0 +1,86 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { CSSProperties } from '@vanilla-extract/css' +import clsx from 'clsx' + +import type { ArbitraryProps } from './arbitrary' +import type { ResponsiveProp } from './responsive' +import { getResponsiveLayoutStyles } from './responsive/utils/getResponsiveLayoutStyles' + +// ======================================== +// SPRINKLES +// ======================================== + +type AnySprinklesFn = { + (props: any): string + properties: Set +} + +type SprinklesProps = Parameters[0] + +// ======================================== +// RESPONSIVE OUTPUTS +// ======================================== + +type ResolveResponsiveOutputs = { + [K in keyof T]: NonNullable extends ResponsiveProp< + infer TInput, + infer TOutput, + any + > + ? ResponsiveProp + : T[K] +} + +// ======================================== +// OPTIONS +// ======================================== + +type ResolveStylesOptions< + T extends AnySprinklesFn, + TComponentArbitraryProps extends object = {} +> = { + sprinkles: T + + sprinkleProps: Partial> + + arbitraryProps?: Partial> + + componentArbitraryProps?: Partial< + ResolveResponsiveOutputs + > + + style?: CSSProperties + + className?: string +} + +// ======================================== +// RESOLVER +// ======================================== + +export function resolveStyles< + T extends AnySprinklesFn, + TComponentArbitraryProps extends object = {} +>({ + sprinkles, + sprinkleProps, + arbitraryProps, + componentArbitraryProps, + style, + className +}: ResolveStylesOptions) { + const sprinklesClassName = sprinkles(sprinkleProps as SprinklesProps) + + const responsiveStyles = getResponsiveLayoutStyles({ + ...arbitraryProps, + ...componentArbitraryProps + }) + + return { + className: clsx(sprinklesClassName, responsiveStyles.className, className), + style: { + ...responsiveStyles.style, + ...style + } as CSSProperties + } +} diff --git a/packages/ui/src/system/responsive/constant.ts b/packages/ui/src/system/responsive/constant.ts new file mode 100644 index 000000000..6c029cdc3 --- /dev/null +++ b/packages/ui/src/system/responsive/constant.ts @@ -0,0 +1,100 @@ +import type { Breakpoint, PropDef } from './types' + +export const RESPONSIVE_CONDITIONS = { + base: {}, + sm: { '@media': '(min-width: 640px)' }, + md: { '@media': '(min-width: 768px)' }, + lg: { '@media': '(min-width: 1024px)' }, + xl: { '@media': '(min-width: 1280px)' }, + '2xl': { '@media': '(min-width: 1536px)' } +} as const satisfies Record + +export const LAYOUT_PROP_DEFS = { + width: { + className: 'lf-w', + customProperties: ['--lf-w'] + }, + minWidth: { + className: 'lf-min-w', + customProperties: ['--lf-min-w'] + }, + maxWidth: { + className: 'lf-max-w', + customProperties: ['--lf-max-w'] + }, + height: { + className: 'lf-h', + customProperties: ['--lf-h'] + }, + minHeight: { + className: 'lf-min-h', + customProperties: ['--lf-min-h'] + }, + maxHeight: { + className: 'lf-max-h', + customProperties: ['--lf-max-h'] + }, + inset: { + className: 'lf-inset', + customProperties: ['--lf-inset'] + }, + top: { + className: 'lf-t', + customProperties: ['--lf-t'] + }, + right: { + className: 'lf-r', + customProperties: ['--lf-r'] + }, + bottom: { + className: 'lf-b', + customProperties: ['--lf-b'] + }, + left: { + className: 'lf-l', + customProperties: ['--lf-l'] + }, + flex: { + className: 'lf-fl', + customProperties: ['--lf-fl'] + }, + flexBasis: { + className: 'lf-fb', + customProperties: ['--lf-fb'] + }, + flexGrow: { + className: 'lf-fg', + customProperties: ['--lf-fg'] + }, + flexShrink: { + className: 'lf-fs', + customProperties: ['--lf-fs'] + }, + gridArea: { + className: 'lf-ga', + customProperties: ['--lf-ga'] + }, + gridColumnSpan: { + className: 'lf-gcsp', + customProperties: ['--lf-gcsp'] + }, + gridRowSpan: { + className: 'lf-grsp', + customProperties: ['--lf-grsp'] + }, + // Grid container props + gridTemplateColumns: { + className: 'lf-gtc', + customProperties: ['--lf-gtc'] + }, + gridTemplateRows: { + className: 'lf-gtr', + customProperties: ['--lf-gtr'] + }, + zIndex: { + className: 'lf-zi', + customProperties: ['--lf-zi'] + } +} as const satisfies Record + +export type LayoutPropDefsKey = keyof typeof LAYOUT_PROP_DEFS diff --git a/packages/lifeforge-ui/src/system/custom-props.css.ts b/packages/ui/src/system/responsive/index.css.ts similarity index 64% rename from packages/lifeforge-ui/src/system/custom-props.css.ts rename to packages/ui/src/system/responsive/index.css.ts index 31cb78f34..e1bc341de 100644 --- a/packages/lifeforge-ui/src/system/custom-props.css.ts +++ b/packages/ui/src/system/responsive/index.css.ts @@ -1,20 +1,8 @@ import { globalStyle } from '@vanilla-extract/css' -// ============================================================================ -// CSS Custom-Property Layout Classes -// ============================================================================ -// This file generates static CSS classes that read their value from a CSS -// custom property at runtime, enabling responsive layout props in primitives. -// -// Pattern: -// Component sets: style="--lf-w: 100px; --lf-w-md: 200px" -// Component adds: className="lf-w md:lf-w" -// CSS generates: .lf-w { width: var(--lf-w) } -// @media (min-width: 768px) { .md\:lf-w { width: var(--lf-w-md) } } -// -// This file has no exports — it is imported for its side effects only. +import { escapeCssClassName } from './utils/escapeCssClassName' -export const responsiveProps = [ +const RESPONSIVE_PROPS = [ { className: 'lf-w', property: 'width', customProp: '--lf-w' }, { className: 'lf-min-w', property: 'minWidth', customProp: '--lf-min-w' }, { className: 'lf-max-w', property: 'maxWidth', customProp: '--lf-max-w' }, @@ -51,28 +39,18 @@ const breakpointMediaQueries = { '2xl': '(min-width: 1536px)' } as const -type BreakpointKey = keyof typeof breakpointMediaQueries - -// CSS class name escaping for selectors starting with digits -// CSS spec requires escaping digits at start: 2xl -> \32 xl -function escapeCssClassName(name: string): string { - if (/^\d/.test(name)) { - return `\\3${name[0]} ${name.slice(1)}` - } - - return name -} - // Generate base styles (no breakpoint = base/mobile) -for (const { className, property, customProp } of responsiveProps) { +for (const { className, property, customProp } of RESPONSIVE_PROPS) { globalStyle(`.${className}`, { [property]: `var(${customProp})` }) } // Generate breakpoint-specific styles -for (const { className, property, customProp } of responsiveProps) { - for (const bp of Object.keys(breakpointMediaQueries) as BreakpointKey[]) { +for (const { className, property, customProp } of RESPONSIVE_PROPS) { + for (const bp of Object.keys( + breakpointMediaQueries + ) as (keyof typeof breakpointMediaQueries)[]) { const escapedBp = escapeCssClassName(bp) const bpClassName = `${escapedBp}\\:${className}` diff --git a/packages/ui/src/system/responsive/index.ts b/packages/ui/src/system/responsive/index.ts new file mode 100644 index 000000000..1b3e0f524 --- /dev/null +++ b/packages/ui/src/system/responsive/index.ts @@ -0,0 +1,7 @@ +import './index.css' + +export { normalizeResponsiveProp } from './utils/normalizeResponsiveProps' + +export { RESPONSIVE_CONDITIONS } from './constant' + +export type { ResponsiveProp } from './types' diff --git a/packages/ui/src/system/responsive/types.ts b/packages/ui/src/system/responsive/types.ts new file mode 100644 index 000000000..c64a73535 --- /dev/null +++ b/packages/ui/src/system/responsive/types.ts @@ -0,0 +1,25 @@ +export type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' + +export interface PropDef { + className: string + customProperties: `--${string}`[] +} + +declare const __responsive_meta__: unique symbol + +type ResponsiveObject = { + [K in Breakpoint]?: TValue +} & { + readonly [__responsive_meta__]?: { + input: TInput + output: TOutput + } +} + +export type ResponsiveProp< + TInput, + TOutput = TInput, + Mode extends 'input' | 'output' = 'input' +> = + | (Mode extends 'output' ? TOutput : TInput) + | ResponsiveObject diff --git a/packages/ui/src/system/responsive/utils/escapeCssClassName.ts b/packages/ui/src/system/responsive/utils/escapeCssClassName.ts new file mode 100644 index 000000000..7bebc1013 --- /dev/null +++ b/packages/ui/src/system/responsive/utils/escapeCssClassName.ts @@ -0,0 +1,7 @@ +export function escapeCssClassName(name: string): string { + if (/^\d/.test(name)) { + return `\\3${name[0]} ${name.slice(1)}` + } + + return name +} diff --git a/packages/ui/src/system/responsive/utils/getResponsiveLayoutStyles.ts b/packages/ui/src/system/responsive/utils/getResponsiveLayoutStyles.ts new file mode 100644 index 000000000..eaff1b2d6 --- /dev/null +++ b/packages/ui/src/system/responsive/utils/getResponsiveLayoutStyles.ts @@ -0,0 +1,81 @@ +import type { ResponsiveProp } from '@/system' + +import { LAYOUT_PROP_DEFS, type LayoutPropDefsKey } from '../constant' +import type { Breakpoint, PropDef } from '../types' + +interface ResponsiveStyleResult { + className: string + style: Record +} + +function isResponsiveObject( + value: ResponsiveProp +): value is Exclude, T> { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + +function getResponsiveStyles( + propDef: PropDef, + value: ResponsiveProp | undefined +): ResponsiveStyleResult | undefined { + if (value === undefined) return undefined + + const classNames: string[] = [] + + const style: Record = {} + + const baseProp = propDef.customProperties[0] + + if (typeof value === 'string' || typeof value === 'number') { + classNames.push(propDef.className) + style[baseProp] = value.toString() + } else if (isResponsiveObject(value)) { + for (const [bp, val] of Object.entries(value) as [ + Breakpoint, + string | undefined + ][]) { + if (val === undefined) continue + + const bpClass = + bp === 'base' ? propDef.className : `${bp}:${propDef.className}` + + const bpVar = bp === 'base' ? baseProp : `${baseProp}-${bp}` + + classNames.push(bpClass) + style[bpVar] = val + } + } + + if (classNames.length === 0) return undefined + + return { + className: classNames.join(' '), + style + } +} + +export function getResponsiveLayoutStyles( + props: Partial>> +): ResponsiveStyleResult { + const classNames: string[] = [] + + const style: Record = {} + + for (const [key, value] of Object.entries(props)) { + const propDef = LAYOUT_PROP_DEFS[key as LayoutPropDefsKey] + + if (!propDef || value === undefined) continue + + const result = getResponsiveStyles(propDef, value) + + if (result) { + classNames.push(result.className) + Object.assign(style, result.style) + } + } + + return { + className: classNames.join(' '), + style + } +} diff --git a/packages/ui/src/system/responsive/utils/normalizeResponsiveProps.ts b/packages/ui/src/system/responsive/utils/normalizeResponsiveProps.ts new file mode 100644 index 000000000..4f69661eb --- /dev/null +++ b/packages/ui/src/system/responsive/utils/normalizeResponsiveProps.ts @@ -0,0 +1,45 @@ +import type { ResponsiveProp } from '..' +import type { Breakpoint } from '../types' + +/** + * Normalizes a responsive prop to the sprinkles format. + * Handles both single values and responsive objects with breakpoint keys. + * + * @param prop - The prop value (single or responsive object) + * @param mapper - Optional function to transform values + * @returns Normalized value compatible with sprinkles + * + * @example + * // Single value + * normalizeResponsiveProp('sm') // => 'sm' + * + * // Responsive object + * normalizeResponsiveProp({ base: 'sm', lg: 'md' }) // => { base: 'sm', lg: 'md' } + * + * // With mapper + * normalizeResponsiveProp('start', v => alignMap[v]) // => 'flex-start' + */ +export function normalizeResponsiveProp( + prop: ResponsiveProp | undefined, + mapper?: (value: TInput) => TOutput +): ResponsiveProp | undefined { + if (prop == undefined) { + return undefined + } + + if (typeof prop === 'object') { + const result: { + [K in Breakpoint]?: TOutput + } = {} + + for (const [key, value] of Object.entries(prop) as [Breakpoint, TInput][]) { + if (value !== undefined) { + result[key] = mapper ? mapper(value) : (value as unknown as TOutput) + } + } + + return result + } + + return mapper ? mapper(prop) : prop +} diff --git a/packages/lifeforge-ui/src/system/tailwind-palette.ts b/packages/ui/src/system/tailwind-palette.ts similarity index 100% rename from packages/lifeforge-ui/src/system/tailwind-palette.ts rename to packages/ui/src/system/tailwind-palette.ts diff --git a/packages/ui/src/system/themes.ts b/packages/ui/src/system/themes.ts new file mode 100644 index 000000000..6efeb5d3a --- /dev/null +++ b/packages/ui/src/system/themes.ts @@ -0,0 +1,11 @@ +/** The condition keys used in sprinkles for theme-adaptive props. */ +export type ThemeCondition = 'base' | 'dark' | 'hover' | 'darkHover' + +/** + * A prop that accepts either a plain value or a map of per-condition values. + * Mirrors the vanilla-extract sprinkles condition syntax. + * + * @example + * bg={{ base: 'bg-50', dark: 'bg-900' }} + */ +export type ThemeConditionProp = T | Partial> diff --git a/packages/ui/src/system/tokens/index.ts b/packages/ui/src/system/tokens/index.ts new file mode 100644 index 000000000..db53419f1 --- /dev/null +++ b/packages/ui/src/system/tokens/index.ts @@ -0,0 +1,7 @@ +export * from './layout-props.css' + +export * from './spacing-props.css' + +export * from './theme-props.css' + +export * from './resolvers' diff --git a/packages/ui/src/system/tokens/layout-props.css.ts b/packages/ui/src/system/tokens/layout-props.css.ts new file mode 100644 index 000000000..398b0b496 --- /dev/null +++ b/packages/ui/src/system/tokens/layout-props.css.ts @@ -0,0 +1,34 @@ +import { defineProperties } from '@vanilla-extract/sprinkles' + +import { + RESPONSIVE_CONDITIONS, + type ResponsiveProp, + normalizeResponsiveProp +} from '..' + +export type PositionValue = + | 'static' + | 'relative' + | 'absolute' + | 'fixed' + | 'sticky' + +export type OverflowValue = 'visible' | 'hidden' | 'scroll' | 'auto' + +export interface TokenizedLayoutProps { + overflow?: ResponsiveProp + overflowX?: ResponsiveProp + overflowY?: ResponsiveProp + position?: ResponsiveProp +} + +export const tokenizedLayoutProperties = defineProperties({ + conditions: RESPONSIVE_CONDITIONS, + defaultCondition: 'base', + properties: { + position: ['static', 'relative', 'absolute', 'fixed', 'sticky'], + overflow: ['visible', 'hidden', 'scroll', 'auto'], + overflowX: ['visible', 'hidden', 'scroll', 'auto'], + overflowY: ['visible', 'hidden', 'scroll', 'auto'] + } +}) diff --git a/packages/ui/src/system/tokens/resolvers/common-props-resolver.ts b/packages/ui/src/system/tokens/resolvers/common-props-resolver.ts new file mode 100644 index 000000000..7c8f66cc0 --- /dev/null +++ b/packages/ui/src/system/tokens/resolvers/common-props-resolver.ts @@ -0,0 +1,17 @@ +import type { TokenizedLayoutProps } from '../layout-props.css' +import type { TokenizedSpacingProps } from '../spacing-props.css' +import { resolveLayoutSprinklesProps } from './layout-props-resolvers' +import { resolveSpacingSprinklesProps } from './spacing-props-resolvers' + +export interface TokenizedCommonProps + extends TokenizedLayoutProps, TokenizedSpacingProps {} + +export function resolveCommonSprinkleProps( + spacing: TokenizedSpacingProps, + layout: TokenizedLayoutProps +) { + return { + ...resolveSpacingSprinklesProps(spacing), + ...resolveLayoutSprinklesProps(layout) + } +} diff --git a/packages/ui/src/system/tokens/resolvers/index.ts b/packages/ui/src/system/tokens/resolvers/index.ts new file mode 100644 index 000000000..692a6ea77 --- /dev/null +++ b/packages/ui/src/system/tokens/resolvers/index.ts @@ -0,0 +1,5 @@ +export * from './common-props-resolver' + +export * from './spacing-props-resolvers' + +export * from './layout-props-resolvers' diff --git a/packages/ui/src/system/tokens/resolvers/layout-props-resolvers.ts b/packages/ui/src/system/tokens/resolvers/layout-props-resolvers.ts new file mode 100644 index 000000000..d3ca87647 --- /dev/null +++ b/packages/ui/src/system/tokens/resolvers/layout-props-resolvers.ts @@ -0,0 +1,17 @@ +import { normalizeResponsiveProp } from '@/system/responsive' + +import type { TokenizedLayoutProps } from '../layout-props.css' + +export function resolveLayoutSprinklesProps({ + position, + overflow, + overflowX, + overflowY +}: TokenizedLayoutProps) { + return { + position: normalizeResponsiveProp(position), + overflow: normalizeResponsiveProp(overflow), + overflowX: normalizeResponsiveProp(overflowX), + overflowY: normalizeResponsiveProp(overflowY) + } +} diff --git a/packages/ui/src/system/tokens/resolvers/spacing-props-resolvers.ts b/packages/ui/src/system/tokens/resolvers/spacing-props-resolvers.ts new file mode 100644 index 000000000..8d5fc60cd --- /dev/null +++ b/packages/ui/src/system/tokens/resolvers/spacing-props-resolvers.ts @@ -0,0 +1,33 @@ +import { normalizeResponsiveProp } from '@/system/responsive' + +import type { TokenizedSpacingProps } from '../spacing-props.css' + +export function resolveSpacingSprinklesProps({ + p, + px, + py, + pt, + pr, + pb, + pl, + m, + mx, + my, + mt, + mr, + mb, + ml +}: TokenizedSpacingProps) { + return { + padding: normalizeResponsiveProp(p), + paddingTop: normalizeResponsiveProp(pt ?? py), + paddingBottom: normalizeResponsiveProp(pb ?? py), + paddingLeft: normalizeResponsiveProp(pl ?? px), + paddingRight: normalizeResponsiveProp(pr ?? px), + margin: normalizeResponsiveProp(m), + marginTop: normalizeResponsiveProp(mt ?? my), + marginBottom: normalizeResponsiveProp(mb ?? my), + marginLeft: normalizeResponsiveProp(ml ?? mx), + marginRight: normalizeResponsiveProp(mr ?? mx) + } +} diff --git a/packages/ui/src/system/tokens/spacing-props.css.ts b/packages/ui/src/system/tokens/spacing-props.css.ts new file mode 100644 index 000000000..7a699d993 --- /dev/null +++ b/packages/ui/src/system/tokens/spacing-props.css.ts @@ -0,0 +1,48 @@ +import { defineProperties } from '@vanilla-extract/sprinkles' + +import { + RESPONSIVE_CONDITIONS, + type ResponsiveProp, + type SpaceToken, + vars +} from '..' + +interface TokenizedPaddingProps { + p?: ResponsiveProp + px?: ResponsiveProp + py?: ResponsiveProp + pt?: ResponsiveProp + pr?: ResponsiveProp + pb?: ResponsiveProp + pl?: ResponsiveProp +} + +interface TokenizedMarginProps { + m?: ResponsiveProp + mx?: ResponsiveProp + my?: ResponsiveProp + mt?: ResponsiveProp + mr?: ResponsiveProp + mb?: ResponsiveProp + ml?: ResponsiveProp +} + +export interface TokenizedSpacingProps + extends TokenizedPaddingProps, TokenizedMarginProps {} + +export const tokenizedSpacingProperties = defineProperties({ + conditions: RESPONSIVE_CONDITIONS, + defaultCondition: 'base', + properties: { + padding: vars.space, + paddingTop: vars.space, + paddingBottom: vars.space, + paddingLeft: vars.space, + paddingRight: vars.space, + margin: vars.space, + marginTop: vars.space, + marginBottom: vars.space, + marginLeft: vars.space, + marginRight: vars.space + } +}) diff --git a/packages/ui/src/system/tokens/theme-props.css.ts b/packages/ui/src/system/tokens/theme-props.css.ts new file mode 100644 index 000000000..c4e27eae6 --- /dev/null +++ b/packages/ui/src/system/tokens/theme-props.css.ts @@ -0,0 +1,20 @@ +import { defineProperties } from '@vanilla-extract/sprinkles' + +import { COLORS } from '..' + +export const tokenizedThemeColorProperties = defineProperties({ + conditions: { + base: {}, + dark: { selector: '.dark &' }, + hover: { selector: '&:hover' }, + darkHover: { selector: '.dark &:hover' }, + hasBgImage: { selector: '.has-bg-image &' }, + darkHasBgImage: { selector: '.dark .has-bg-image &' } + }, + defaultCondition: 'base', + properties: { + backgroundColor: COLORS, + color: COLORS, + borderColor: COLORS + } +}) diff --git a/packages/lifeforge-ui/src/system/vars.css.ts b/packages/ui/src/system/vars.css.ts similarity index 93% rename from packages/lifeforge-ui/src/system/vars.css.ts rename to packages/ui/src/system/vars.css.ts index 401f23daf..ae7b801d3 100644 --- a/packages/lifeforge-ui/src/system/vars.css.ts +++ b/packages/ui/src/system/vars.css.ts @@ -1,4 +1,4 @@ -import { createGlobalTheme } from '@vanilla-extract/css' +import { createGlobalTheme, style } from '@vanilla-extract/css' /** * Design system CSS variable contract. @@ -72,3 +72,7 @@ export type RadiusToken = keyof typeof vars.radii export type FontSizeToken = keyof typeof vars.fontSize export type FontWeightToken = keyof typeof vars.fontWeight + +export const shadowClass = style({ + boxShadow: 'var(--custom-shadow)' +}) diff --git a/packages/ui/src/utils/forgeAPI.tsx b/packages/ui/src/utils/forgeAPI.tsx new file mode 100644 index 000000000..783f902c5 --- /dev/null +++ b/packages/ui/src/utils/forgeAPI.tsx @@ -0,0 +1,3 @@ +import { createForgeProxy } from '@lifeforge/shared' + +export const forgeAPI = createForgeProxy() diff --git a/packages/lifeforge-ui/tsconfig.json b/packages/ui/tsconfig.json similarity index 95% rename from packages/lifeforge-ui/tsconfig.json rename to packages/ui/tsconfig.json index 25acb7cd1..9fe09223a 100644 --- a/packages/lifeforge-ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -10,7 +10,7 @@ "esnext" ], "paths": { - "@components/*": [ + "@/components/*": [ "./src/components/*" ], "@/*": [ @@ -31,5 +31,5 @@ "include": [ "./src/**/*", "./.storybook/*" - ], + ] } \ No newline at end of file diff --git a/packages/lifeforge-ui/tsup.config.ts b/packages/ui/tsup.config.ts similarity index 100% rename from packages/lifeforge-ui/tsup.config.ts rename to packages/ui/tsup.config.ts diff --git a/packages/lifeforge-ui/vercel.json b/packages/ui/vercel.json similarity index 100% rename from packages/lifeforge-ui/vercel.json rename to packages/ui/vercel.json diff --git a/packages/lifeforge-ui/vite.config.ts b/packages/ui/vite.config.ts similarity index 91% rename from packages/lifeforge-ui/vite.config.ts rename to packages/ui/vite.config.ts index 318624227..4f79b5d20 100644 --- a/packages/lifeforge-ui/vite.config.ts +++ b/packages/ui/vite.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ ], resolve: { alias: { - '@components': resolve(__dirname, 'src/components'), + '@/components': resolve(__dirname, 'src/components'), '@': resolve(__dirname, 'src') } }, @@ -29,7 +29,7 @@ export default defineConfig({ 'react', 'react-dom', 'react/jsx-runtime', - 'shared', + '@lifeforge/shared', '@tanstack/react-query', /^react-router/, /^react-i18next/, diff --git a/readme/README.ms.md b/readme/README.ms.md index 169ad91b2..27e97750e 100644 --- a/readme/README.ms.md +++ b/readme/README.ms.md @@ -33,10 +33,10 @@ - [🖥 Tangkapan Skrin](#-screenshots) - [⌨️ Pemasangan](#️-setup) - [Sumbangan](#contributing) - - [Sumbangan kepada Teras](#contributing-to-core) - - [Mencipta Modul](#creating-modules) - - [Permintaan Ciri & Laporan Bug](#feature-requests--bug-reports) - - [Terjemahan](#translation) + - [Sumbangan kepada Teras](#contributing-to-core) + - [Mencipta Modul](#creating-modules) + - [Permintaan Ciri & Laporan Bug](#feature-requests--bug-reports) + - [Terjemahan](#translation) - [💡 Kredit](#-credits) - [📄 Lesen](#-license) @@ -46,7 +46,6 @@ Buy Me A Coffee - ## 🤔 Masalah Orang kini menggunakan banyak aplikasi untuk meningkatkan produktiviti, tetapi penggunaan terlalu banyak aplikasi boleh mengalih perhatian dan mengurangkan fokus (rujuk: https://theunfilteredreport.com/why-productivity-apps-are-making-people-less-productive/). @@ -55,11 +54,11 @@ Kebanyakan perkhidmatan SaaS memerlukan langganan bulanan (atau tahunan), yang b ## ✅ Penyelesaian -LifeForge ialah sistem pengurusan peribadi yang dihoskan sendiri untuk membantu anda mengatur kehidupan. Sama ada menjejak tugas, mengatur projek, menetapkan matlamat peribadi, atau mengurus kewangan — LifeForge membantu. +LifeForge ialah sistem pengurusan peribadi yang dihoskan sendiri untuk membantu anda mengatur kehidupan. Sama ada menjejak tugas, mengatur projek, menetapkan matlamat peribadi, atau mengurus kewangan - LifeForge membantu. Dengan seni bina modular, anda boleh menyesuaikan LifeForge mengikut keperluan. Hidupkan hanya modul yang anda perlukan untuk mengelakkan kekacauan ciri dan mencipta pengalaman yang ringkas dan diperibadikan. -Dibina dengan fokus privasi, data anda disimpan secara tempatan pada peranti anda (kami tidak akan menyediakan hosting), jadi anda mengekalkan kawalan penuh terhadap data sendiri. Tiada telemetri, tiada perlombongan data — privasi didahulukan. +Dibina dengan fokus privasi, data anda disimpan secara tempatan pada peranti anda (kami tidak akan menyediakan hosting), jadi anda mengekalkan kawalan penuh terhadap data sendiri. Tiada telemetri, tiada perlombongan data - privasi didahulukan. ## 🧱 Modul @@ -67,7 +66,7 @@ Sistem modul LifeForge menyediakan pelbagai modul yang tertumpu kepada aspek keh Sorotan utama modul termasuk: -- Alat Produktiviti: Senarai Tugasan, Projek, Idea Box, Pemasa Pomodoro — alat untuk mengurus tugas, berfikir idea dan kekal fokus. +- Alat Produktiviti: Senarai Tugasan, Projek, Idea Box, Pemasa Pomodoro - alat untuk mengurus tugas, berfikir idea dan kekal fokus. - Pengurusan Kewangan: Dompet, Wishlist, modul Belanjawan untuk mengesan perbelanjaan, penjimatan dan perancangan. - Peningkatan Gaya Hidup: Jurnal, Pencapaian dan penjejakan Senaman untuk refleksi dan tabiat sihat. - Bantuan Pembelajaran: Flashcards, Nota dan Algoritma CFOP untuk pelajar dan pembelajaran sepanjang hayat. @@ -102,8 +101,6 @@ Tangkapan skrin menunjukkan sekilas LifeForge. Terdapat lebih banyak yang boleh

      - - ## ⌨️ Pemasangan **LifeForge kini menyokong Docker untuk penyebaran mudah! 🐳 Anda boleh memulakan dengan beberapa arahan. Bagi yang memilih pemasangan manual, pilihan itu masih tersedia.** @@ -116,7 +113,6 @@ Lihat dokumentasi untuk arahan pemasangan dan konfigurasi: Kami mengalu-alukan sumbangan. Sila rujuk [Contributing Guidelines](https://docs.lifeforge.dev/developer-guide/contributing). - ### Sumbangan kepada Teras Disebabkan projek ini masih dalam peringkat awal, kami menggalakkan pembangun memulakan perbincangan di [GitHub Discussions](https://github.com/lifeforge-app/lifeforge/discussions) sebelum melakukan perubahan besar. diff --git a/readme/README.zh-CN.md b/readme/README.zh-CN.md index f497654a4..a483d0305 100644 --- a/readme/README.zh-CN.md +++ b/readme/README.zh-CN.md @@ -32,10 +32,10 @@ - [🖥 界面预览](#-界面预览) - [⌨️ 开始使用](#️-开始使用) - [🤝 参与贡献](#-参与贡献) - - [为核心代码做贡献](#为核心代码做贡献) - - [开发新模块](#开发新模块) - - [提交需求与反馈](#提交需求与反馈) - - [协助翻译](#协助翻译) + - [为核心代码做贡献](#为核心代码做贡献) + - [开发新模块](#开发新模块) + - [提交需求与反馈](#提交需求与反馈) + - [协助翻译](#协助翻译) - [💡 灵感与致谢](#-灵感与致谢) - [📄 开源许可](#-开源许可) @@ -67,13 +67,13 @@ LifeForge 的模块化架构提供了丰富的工具集,每个模块专注于 核心模块概览: -- **效率工具**:待办清单、项目管理、灵感收集箱、番茄钟等,助你厘清任务、捕捉灵感并保持专注。 -- **财务管理**:电子钱包、心愿单与预算模块,帮你轻松记录花销、规划储蓄和控制预算。 -- **生活记录**:通过日记与成就模块回顾成长,利用健身记录等功能保持健康生活节奏。 -- **学习助手**:闪卡、笔记与CFOP算法(魔方)模块,是学生和终身学习者的得力工具。 -- **数字收藏**:图书库、相册、吉他谱库等模块,帮你井井有条地管理各类数字资产。 -- **信息处理**:收件箱、专题信息(如樟宜机场指南)等模块,提升你的信息整理效率。 -- **个性化**:主题、布局等自定义模块,让你随心调整界面外观与交互方式。 +- **效率工具**:待办清单、项目管理、灵感收集箱、番茄钟等,助你厘清任务、捕捉灵感并保持专注。 +- **财务管理**:电子钱包、心愿单与预算模块,帮你轻松记录花销、规划储蓄和控制预算。 +- **生活记录**:通过日记与成就模块回顾成长,利用健身记录等功能保持健康生活节奏。 +- **学习助手**:闪卡、笔记与CFOP算法(魔方)模块,是学生和终身学习者的得力工具。 +- **数字收藏**:图书库、相册、吉他谱库等模块,帮你井井有条地管理各类数字资产。 +- **信息处理**:收件箱、专题信息(如樟宜机场指南)等模块,提升你的信息整理效率。 +- **个性化**:主题、布局等自定义模块,让你随心调整界面外观与交互方式。 这种模块化方式确保了极致的灵活性与扩展性。无论你是专业人士、在校学生还是兴趣爱好者,LifeForge 都能贴合你的需求。 @@ -106,6 +106,7 @@ LifeForge 的模块化架构提供了丰富的工具集,每个模块专注于 **🐳 LifeForge 现已支持 Docker 部署!只需几条命令即可快速运行。当然,你也可以选择按照文档进行手动安装。** 详细的安装与配置指南,请查阅官方文档: + - [https://docs.lifeforge.dev](https://docs.lifeforge.dev) ## 🤝 参与贡献 @@ -123,6 +124,7 @@ LifeForge 的模块化架构鼓励你创建自己的功能模块。如果你有 ### 提交需求与反馈 如果你有新功能建议或发现了程序错误,请在 GitHub Issues 中提交: + - 主仓库 Issues: https://github.com/lifeforge-app/lifeforge/issues 如果问题涉及特定模块,请前往对应模块的仓库提交。 @@ -141,4 +143,4 @@ LifeForge 的诞生,源于对一体化个人管理工具的渴望,并深受 ## 📄 开源许可 -

      LifeForgeMelvin Chia 创建,采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议

      \ No newline at end of file +

      LifeForgeMelvin Chia 创建,采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议

      diff --git a/readme/README.zh-TW.md b/readme/README.zh-TW.md index adf3f3efe..c8e98fcc8 100644 --- a/readme/README.zh-TW.md +++ b/readme/README.zh-TW.md @@ -32,10 +32,10 @@ - [🖥 界麵預覽](#-界麵預覽) - [⌨️ 開始使用](#️-開始使用) - [🤝 參與貢獻](#-參與貢獻) - - [為核心代碼做貢獻](#為核心代碼做貢獻) - - [開發新模塊](#開發新模塊) - - [提交需求與反饋](#提交需求與反饋) - - [協助翻譯](#協助翻譯) + - [為核心代碼做貢獻](#為核心代碼做貢獻) + - [開發新模塊](#開發新模塊) + - [提交需求與反饋](#提交需求與反饋) + - [協助翻譯](#協助翻譯) - [💡 靈感與緻謝](#-靈感與緻謝) - [📄 開源許可](#-開源許可) @@ -67,13 +67,13 @@ LifeForge 的模塊化架構提供了豐富的工具集,每個模塊專註於 核心模塊概覽: -- **效率工具**:待辦清單、項目管理、靈感收集箱、番茄鍾等,助你厘清任務、捕捉靈感並保持專註。 -- **財務管理**:電子錢包、心願單與預算模塊,幫你輕鬆記錄花銷、規劃儲蓄和控製預算。 -- **生活記錄**:通過日記與成就模塊回顧成長,利用健身記錄等功能保持健康生活節奏。 -- **學習助手**:閃卡、筆記與CFOP算法(魔方)模塊,是學生和終身學習者的得力工具。 -- **數字收藏**:圖書庫、相冊、吉他譜庫等模塊,幫你井井有條地管理各類數字資産。 -- **信息處理**:收件箱、專題信息(如樟宜機場指南)等模塊,提升你的信息整理效率。 -- **個性化**:主題、佈局等自定義模塊,讓你隨心調整界麵外觀與交互方式。 +- **效率工具**:待辦清單、項目管理、靈感收集箱、番茄鍾等,助你厘清任務、捕捉靈感並保持專註。 +- **財務管理**:電子錢包、心願單與預算模塊,幫你輕鬆記錄花銷、規劃儲蓄和控製預算。 +- **生活記錄**:通過日記與成就模塊回顧成長,利用健身記錄等功能保持健康生活節奏。 +- **學習助手**:閃卡、筆記與CFOP算法(魔方)模塊,是學生和終身學習者的得力工具。 +- **數字收藏**:圖書庫、相冊、吉他譜庫等模塊,幫你井井有條地管理各類數字資産。 +- **信息處理**:收件箱、專題信息(如樟宜機場指南)等模塊,提升你的信息整理效率。 +- **個性化**:主題、佈局等自定義模塊,讓你隨心調整界麵外觀與交互方式。 這種模塊化方式確保了極緻的靈活性與擴展性。無論你是專業人士、在校學生還是興趣愛好者,LifeForge 都能貼合你的需求。 @@ -106,6 +106,7 @@ LifeForge 的模塊化架構提供了豐富的工具集,每個模塊專註於 **🐳 LifeForge 現已支持 Docker 部署!隻需幾條命令即可快速運行。當然,你也可以選擇按照文檔進行手動安裝。** 詳細的安裝與配置指南,請查閱官方文檔: + - [https://docs.lifeforge.dev](https://docs.lifeforge.dev) ## 🤝 參與貢獻 @@ -123,6 +124,7 @@ LifeForge 的模塊化架構鼓勵你創建自己的功能模塊。如果你有 ### 提交需求與反饋 如果你有新功能建議或發現了程序錯誤,請在 GitHub Issues 中提交: + - 主倉庫 Issues: https://github.com/lifeforge-app/lifeforge/issues 如果問題涉及特定模塊,請前往對應模塊的倉庫提交。 @@ -141,4 +143,4 @@ LifeForge 的誕生,源於對一體化個人管理工具的渴望,並深受 ## 📄 開源許可 -

      LifeForgeMelvin Chia 創建,採用 知識共享 署名-非商業性使用-相同方式共享 4.0 國際 許可協議

      \ No newline at end of file +

      LifeForgeMelvin Chia 創建,採用 知識共享 署名-非商業性使用-相同方式共享 4.0 國際 許可協議

      diff --git a/server/package.json b/server/package.json index fce514d32..162fa086a 100755 --- a/server/package.json +++ b/server/package.json @@ -46,7 +46,7 @@ "pdf2pic": "^3.2.0", "pocketbase": "^0.26.2", "request": "^2.88.2", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "socket.io": "^4.8.1", "speakeasy": "^2.0.0", "tesseract.js": "^6.0.1", diff --git a/server/src/core/functions/auth/encryption.ts b/server/src/core/functions/auth/encryption.ts index 30013d678..f95abc5cf 100644 --- a/server/src/core/functions/auth/encryption.ts +++ b/server/src/core/functions/auth/encryption.ts @@ -1,7 +1,13 @@ -import { Decrypt2Func, DecryptFunc, Encrypt2Func, EncryptFunc } from '@lifeforge/server-utils' import crypto from 'crypto' import CryptoJS from 'crypto-js' +import { + Decrypt2Func, + DecryptFunc, + Encrypt2Func, + EncryptFunc +} from '@lifeforge/server-utils' + const ALGORITHM = 'aes-256-ctr' const encrypt: EncryptFunc = (buffer: Buffer, key: string) => { diff --git a/server/src/core/functions/database/PBService/index.ts b/server/src/core/functions/database/PBService/index.ts index bae4dc9a7..d94bcf934 100644 --- a/server/src/core/functions/database/PBService/index.ts +++ b/server/src/core/functions/database/PBService/index.ts @@ -1,6 +1,7 @@ -import { CleanedSchemas, IPBService } from '@lifeforge/server-utils' import PocketBase from 'pocketbase' +import { CleanedSchemas, IPBService } from '@lifeforge/server-utils' + import { createServiceLogger } from '@functions/logging' import create from './services/create' diff --git a/server/src/core/functions/database/PBService/services/create.ts b/server/src/core/functions/database/PBService/services/create.ts index 38f2dcdea..432c15cd4 100644 --- a/server/src/core/functions/database/PBService/services/create.ts +++ b/server/src/core/functions/database/PBService/services/create.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { CleanedSchemas, CollectionKey, @@ -7,8 +10,6 @@ import { ICreateData, ICreateFactory } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' @@ -164,7 +165,10 @@ const create = ( collection: >( collection: TCollectionKey ) => { - const finalCollectionName = toPocketBaseCollectionName(collection as string, module.id) + const finalCollectionName = toPocketBaseCollectionName( + collection as string, + module.id + ) return new Create( pb, diff --git a/server/src/core/functions/database/PBService/services/delete.ts b/server/src/core/functions/database/PBService/services/delete.ts index 1d7333d9d..d8447f472 100644 --- a/server/src/core/functions/database/PBService/services/delete.ts +++ b/server/src/core/functions/database/PBService/services/delete.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { CleanedSchemas, ClientError, @@ -5,8 +8,6 @@ import { IDelete, IDeleteFactory } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' diff --git a/server/src/core/functions/database/PBService/services/getFirstListItem.ts b/server/src/core/functions/database/PBService/services/getFirstListItem.ts index 59f84c07e..a8db6c1fa 100644 --- a/server/src/core/functions/database/PBService/services/getFirstListItem.ts +++ b/server/src/core/functions/database/PBService/services/getFirstListItem.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { AllPossibleFieldsForFilter, CleanedSchemas, @@ -8,8 +11,6 @@ import { IGetFirstListItem, IGetFirstListItemFactory } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' diff --git a/server/src/core/functions/database/PBService/services/getFullList.ts b/server/src/core/functions/database/PBService/services/getFullList.ts index cd91718ab..55de9076e 100644 --- a/server/src/core/functions/database/PBService/services/getFullList.ts +++ b/server/src/core/functions/database/PBService/services/getFullList.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { AllPossibleFieldsForFilter, CleanedSchemas, @@ -8,8 +11,6 @@ import { IGetFullList, IGetFullListFactory } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' diff --git a/server/src/core/functions/database/PBService/services/getList.ts b/server/src/core/functions/database/PBService/services/getList.ts index 0739375a1..38f0867ca 100644 --- a/server/src/core/functions/database/PBService/services/getList.ts +++ b/server/src/core/functions/database/PBService/services/getList.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { AllPossibleFieldsForFilter, CleanedSchemas, @@ -9,8 +12,6 @@ import { IGetListFactory, IGetListReturnType } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' diff --git a/server/src/core/functions/database/PBService/services/getOne.ts b/server/src/core/functions/database/PBService/services/getOne.ts index 47804a5c9..96d89e81e 100644 --- a/server/src/core/functions/database/PBService/services/getOne.ts +++ b/server/src/core/functions/database/PBService/services/getOne.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { CleanedSchemas, CollectionKey, @@ -6,8 +9,6 @@ import { IGetOne, IGetOneFactory } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' diff --git a/server/src/core/functions/database/PBService/services/update.ts b/server/src/core/functions/database/PBService/services/update.ts index 49ad83657..fe4b32266 100644 --- a/server/src/core/functions/database/PBService/services/update.ts +++ b/server/src/core/functions/database/PBService/services/update.ts @@ -1,3 +1,6 @@ +import chalk from 'chalk' +import PocketBase from 'pocketbase' + import { CleanedSchemas, CollectionKey, @@ -7,8 +10,6 @@ import { IUpdateData, IUpdateFactory } from '@lifeforge/server-utils' -import chalk from 'chalk' -import PocketBase from 'pocketbase' import { toPocketBaseCollectionName } from '@functions/database/dbUtils' diff --git a/server/src/core/functions/database/dbUtils.ts b/server/src/core/functions/database/dbUtils.ts index 849bfe4db..2d79c3639 100644 --- a/server/src/core/functions/database/dbUtils.ts +++ b/server/src/core/functions/database/dbUtils.ts @@ -1,5 +1,6 @@ import Pocketbase from 'pocketbase' -import { parseCollectionName } from 'shared' + +import { parseCollectionName } from '@lifeforge/shared' import { PBLogger } from './PBService' diff --git a/server/src/core/functions/database/getAPIKey.ts b/server/src/core/functions/database/getAPIKey.ts index 4e0b7218d..35229fb00 100644 --- a/server/src/core/functions/database/getAPIKey.ts +++ b/server/src/core/functions/database/getAPIKey.ts @@ -1,9 +1,10 @@ import { ROOT_DIR } from '@constants' -import { IPBService } from '@lifeforge/server-utils' import chalk from 'chalk' import fs from 'fs' import path from 'path' +import { IPBService } from '@lifeforge/server-utils' + import { decrypt2 } from '@functions/auth/encryption' import { createServiceLogger } from '@functions/logging' diff --git a/server/src/core/functions/encryption/functions/decryptPayload.ts b/server/src/core/functions/encryption/functions/decryptPayload.ts index 3e480d8ce..e3a48b48b 100644 --- a/server/src/core/functions/encryption/functions/decryptPayload.ts +++ b/server/src/core/functions/encryption/functions/decryptPayload.ts @@ -1,6 +1,7 @@ -import { ClientError } from '@lifeforge/server-utils' import crypto from 'crypto' +import { ClientError } from '@lifeforge/server-utils' + import { AES_ALGORITHM } from '../constants' import { EncryptedPayload } from '../types' import decryptAESKey from './decryptAESKey' diff --git a/server/src/core/functions/external/ai.ts b/server/src/core/functions/external/ai.ts index 6aee9bf5e..1546ca715 100644 --- a/server/src/core/functions/external/ai.ts +++ b/server/src/core/functions/external/ai.ts @@ -1,14 +1,15 @@ -import { - ClientError, - FetchAIFunc, - getCallerModuleId -} from '@lifeforge/server-utils' import chalk from 'chalk' import Groq from 'groq-sdk' import { ChatCompletionMessageParam as GroqChatCompletionMessageParam } from 'groq-sdk/resources/chat/completions.mjs' import OpenAI from 'openai' import { ResponseInputItem } from 'openai/resources/responses/responses.mjs' +import { + ClientError, + FetchAIFunc, + getCallerModuleId +} from '@lifeforge/server-utils' + import { getAPIKey } from '@functions/database' import { validateCallerAccess } from '@functions/database/getAPIKey' import { createServiceLogger } from '@functions/logging' diff --git a/server/src/core/functions/external/ocr.ts b/server/src/core/functions/external/ocr.ts index bc43c9fb5..6743a740c 100644 --- a/server/src/core/functions/external/ocr.ts +++ b/server/src/core/functions/external/ocr.ts @@ -1,6 +1,7 @@ -import { ParseOCRFunc } from '@lifeforge/server-utils' import { createWorker } from 'tesseract.js' +import { ParseOCRFunc } from '@lifeforge/server-utils' + const parseOCR: ParseOCRFunc = async imagePath => { const worker = await createWorker('eng', 3, { langPath: './src/core/models', diff --git a/server/src/core/functions/media/convertPDFToImage.ts b/server/src/core/functions/media/convertPDFToImage.ts index c46f86c87..fbb7b9d11 100644 --- a/server/src/core/functions/media/convertPDFToImage.ts +++ b/server/src/core/functions/media/convertPDFToImage.ts @@ -1,6 +1,7 @@ -import { ConvertPDFToImageFunc } from '@lifeforge/server-utils' import { fromPath } from 'pdf2pic' +import { ConvertPDFToImageFunc } from '@lifeforge/server-utils' + const convertPDFToImage: ConvertPDFToImageFunc = path => { return new Promise((resolve, reject) => { try { diff --git a/server/src/core/functions/media/retrieveMedia.ts b/server/src/core/functions/media/retrieveMedia.ts index 219e23a15..2e97769a0 100644 --- a/server/src/core/functions/media/retrieveMedia.ts +++ b/server/src/core/functions/media/retrieveMedia.ts @@ -1,6 +1,7 @@ -import { RetrieveMediaFunc } from '@lifeforge/server-utils' import fs from 'fs' +import { RetrieveMediaFunc } from '@lifeforge/server-utils' + const retrieveMedia: RetrieveMediaFunc = async (fieldName, media) => { if (media === 'keep') { return {} diff --git a/server/src/core/functions/routes/functions/controllerLogic.ts b/server/src/core/functions/routes/functions/controllerLogic.ts index efed66be4..6307502d9 100755 --- a/server/src/core/functions/routes/functions/controllerLogic.ts +++ b/server/src/core/functions/routes/functions/controllerLogic.ts @@ -13,6 +13,8 @@ * The main export is: * - `registerController`: Function to register a ForgeControllerBuilder with an Express router */ +import type { Request, Response, Router } from 'express' + import { BaseResponse, CleanedSchemas, @@ -21,7 +23,6 @@ import { Forge, MediaConfig } from '@lifeforge/server-utils' -import type { Request, Response, Router } from 'express' import { encryptResponse } from '@functions/encryption' import { coreLogger } from '@functions/logging' diff --git a/server/src/core/functions/routes/functions/forgeRouter.ts b/server/src/core/functions/routes/functions/forgeRouter.ts index 1e0cc015f..58a2253da 100644 --- a/server/src/core/functions/routes/functions/forgeRouter.ts +++ b/server/src/core/functions/routes/functions/forgeRouter.ts @@ -1,6 +1,7 @@ -import { Forge, ForgeRouter, RouterInput } from '@lifeforge/server-utils' import { Router } from 'express' +import { Forge, ForgeRouter, RouterInput } from '@lifeforge/server-utils' + import { registerController } from './controllerLogic' function isRouter(value: unknown): value is Router { diff --git a/server/src/core/functions/routes/utils/checkRecordExistence.ts b/server/src/core/functions/routes/utils/checkRecordExistence.ts index 1495d9642..6b900d306 100644 --- a/server/src/core/functions/routes/utils/checkRecordExistence.ts +++ b/server/src/core/functions/routes/utils/checkRecordExistence.ts @@ -1,7 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { ClientError } from '@lifeforge/server-utils' import { Request } from 'express' +import { ClientError } from '@lifeforge/server-utils' + import { PBService, checkExistence } from '@functions/database' async function check( diff --git a/server/src/core/functions/routes/utils/parsePayload.ts b/server/src/core/functions/routes/utils/parsePayload.ts index 89f1c6523..84ed49d94 100644 --- a/server/src/core/functions/routes/utils/parsePayload.ts +++ b/server/src/core/functions/routes/utils/parsePayload.ts @@ -1,7 +1,8 @@ -import { ClientError, ConvertMedia, MediaConfig } from '@lifeforge/server-utils' import { Request } from 'express' import z from 'zod' +import { ClientError, ConvertMedia, MediaConfig } from '@lifeforge/server-utils' + import { decryptPayload } from '@functions/encryption' import restoreFormDataType from './restoreDataType' diff --git a/server/src/core/functions/routes/utils/parseQuery.ts b/server/src/core/functions/routes/utils/parseQuery.ts index 28b84aa57..27b3bbd71 100644 --- a/server/src/core/functions/routes/utils/parseQuery.ts +++ b/server/src/core/functions/routes/utils/parseQuery.ts @@ -1,7 +1,8 @@ -import { ClientError } from '@lifeforge/server-utils' import { Request } from 'express' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + export default function parseQuery( req: Request, validator?: z.ZodTypeAny diff --git a/server/src/core/functions/routes/utils/response.ts b/server/src/core/functions/routes/utils/response.ts index 45fbc2eb6..11b5c3d6a 100644 --- a/server/src/core/functions/routes/utils/response.ts +++ b/server/src/core/functions/routes/utils/response.ts @@ -1,9 +1,10 @@ -import { createLogger } from '@lifeforge/log' -import { BaseResponse } from '@lifeforge/server-utils' import chalk from 'chalk' import { Response } from 'express' import fs from 'fs' +import { createLogger } from '@lifeforge/log' +import { BaseResponse } from '@lifeforge/server-utils' + export function clientError({ res, message = 'Bad Request', diff --git a/server/src/core/functions/routes/utils/splitMediaAndData.ts b/server/src/core/functions/routes/utils/splitMediaAndData.ts index 75a85cf9b..35260df10 100644 --- a/server/src/core/functions/routes/utils/splitMediaAndData.ts +++ b/server/src/core/functions/routes/utils/splitMediaAndData.ts @@ -1,6 +1,7 @@ -import { MediaConfig } from '@lifeforge/server-utils' import chalk from 'chalk' +import { MediaConfig } from '@lifeforge/server-utils' + import { coreLogger } from '@functions/logging' type MediaResponse = Record< diff --git a/server/src/core/functions/socketio/taskPool.ts b/server/src/core/functions/socketio/taskPool.ts index c6e914c29..f8d0ff118 100644 --- a/server/src/core/functions/socketio/taskPool.ts +++ b/server/src/core/functions/socketio/taskPool.ts @@ -1,9 +1,10 @@ +import { v4 } from 'uuid' + import { AddToTaskPoolFunc, GlobalTaskPool, UpdateTaskInPoolFunc } from '@lifeforge/server-utils' -import { v4 } from 'uuid' export const globalTaskPool: GlobalTaskPool = {} diff --git a/server/src/core/functions/utils/tempFileManager.ts b/server/src/core/functions/utils/tempFileManager.ts index fced477cc..0b2f76a25 100644 --- a/server/src/core/functions/utils/tempFileManager.ts +++ b/server/src/core/functions/utils/tempFileManager.ts @@ -1,7 +1,8 @@ -import { ITempFileManager } from '@lifeforge/server-utils' import fs from 'fs' import path from 'path' +import { ITempFileManager } from '@lifeforge/server-utils' + const TEMP_FILE_DIR = '.temp' // Ensure temp directory exists diff --git a/server/src/core/routes/core.routes.ts b/server/src/core/routes/core.routes.ts index 407de29c2..784405b80 100644 --- a/server/src/core/routes/core.routes.ts +++ b/server/src/core/routes/core.routes.ts @@ -1,9 +1,10 @@ import corsAnywhere from '@lib/corsAnywhere' -import { forgeRouter } from '@lifeforge/server-utils' import dayjs from 'dayjs' import request from 'request' import z from 'zod' +import { forgeRouter } from '@lifeforge/server-utils' + import { getPublicKey } from '@functions/encryption' import forge from './forge' diff --git a/server/src/core/routes/index.ts b/server/src/core/routes/index.ts index b8d153945..215371301 100644 --- a/server/src/core/routes/index.ts +++ b/server/src/core/routes/index.ts @@ -1,8 +1,9 @@ import { ROOT_DIR } from '@constants' -import { forgeRouter } from '@lifeforge/server-utils' import express from 'express' import path from 'path' +import { forgeRouter } from '@lifeforge/server-utils' + import traceRouteStack from '@functions/initialization/traceRouteStack' import { loadModuleRoutes } from '@functions/modules/loadModuleRoutes' import { registerRoutes } from '@functions/routes/functions/forgeRouter' diff --git a/server/src/lib/ai/routes/imageGeneration.ts b/server/src/lib/ai/routes/imageGeneration.ts index bd8bbf187..a76e944f4 100644 --- a/server/src/lib/ai/routes/imageGeneration.ts +++ b/server/src/lib/ai/routes/imageGeneration.ts @@ -1,7 +1,8 @@ -import { ClientError, createForge } from '@lifeforge/server-utils' import OpenAI from 'openai' import z from 'zod' +import { ClientError, createForge } from '@lifeforge/server-utils' + const forge = createForge({}, 'ai') export const generateImage = forge diff --git a/server/src/lib/apiKeys/routes/entries.ts b/server/src/lib/apiKeys/routes/entries.ts index a5de2cad5..7071c6377 100644 --- a/server/src/lib/apiKeys/routes/entries.ts +++ b/server/src/lib/apiKeys/routes/entries.ts @@ -1,6 +1,7 @@ -import { ClientError, forgeRouter } from '@lifeforge/server-utils' import z from 'zod' +import { ClientError, forgeRouter } from '@lifeforge/server-utils' + import { decrypt2, encrypt2 } from '@functions/auth/encryption' import forge from '../forge' diff --git a/server/src/lib/apiKeys/schema.ts b/server/src/lib/apiKeys/schema.ts index de2d00f04..8b722336f 100644 --- a/server/src/lib/apiKeys/schema.ts +++ b/server/src/lib/apiKeys/schema.ts @@ -1,4 +1,5 @@ import z from 'zod' + import { cleanSchemas } from '@lifeforge/server-utils' export const schemas = { diff --git a/server/src/lib/backups/index.ts b/server/src/lib/backups/index.ts index d921a5e90..ca1e29e38 100644 --- a/server/src/lib/backups/index.ts +++ b/server/src/lib/backups/index.ts @@ -1,7 +1,8 @@ -import { createForge, forgeRouter } from '@lifeforge/server-utils' import dayjs from 'dayjs' import z from 'zod' +import { createForge, forgeRouter } from '@lifeforge/server-utils' + import { connectToPocketBase, validateEnvironmentVariables diff --git a/server/src/lib/corsAnywhere/index.ts b/server/src/lib/corsAnywhere/index.ts index c7fe18043..2eeb6f911 100644 --- a/server/src/lib/corsAnywhere/index.ts +++ b/server/src/lib/corsAnywhere/index.ts @@ -1,6 +1,7 @@ -import { createForge } from '@lifeforge/server-utils' import z from 'zod' +import { createForge } from '@lifeforge/server-utils' + const forge = createForge({}, 'cors_anywhere') const corsAnywhere = forge diff --git a/server/src/lib/locales/index.ts b/server/src/lib/locales/index.ts index ae9d739bb..f09cbd3b6 100644 --- a/server/src/lib/locales/index.ts +++ b/server/src/lib/locales/index.ts @@ -1,11 +1,11 @@ import { ROOT_DIR } from '@constants' -import { ClientError, createForge, forgeRouter } from '@lifeforge/server-utils' import chalk from 'chalk' import fs from 'fs' import path from 'path' import z from 'zod' -import normalizeSubnamespace from 'shared/src/utils/normalizeSubnamespace' +import { ClientError, createForge, forgeRouter } from '@lifeforge/server-utils' +import { normalizeSubnamespace } from '@lifeforge/shared' import { ALLOWED_NAMESPACE, diff --git a/server/src/lib/locations/index.ts b/server/src/lib/locations/index.ts index c8791b731..f2b0fda2e 100644 --- a/server/src/lib/locations/index.ts +++ b/server/src/lib/locations/index.ts @@ -1,6 +1,7 @@ -import { ClientError, createForge, forgeRouter } from '@lifeforge/server-utils' import z from 'zod' +import { ClientError, createForge, forgeRouter } from '@lifeforge/server-utils' + import searchLocations from '@functions/external/location' const forge = createForge({}, 'locations') diff --git a/server/src/lib/modules/utils/scanFederatedModules.ts b/server/src/lib/modules/utils/scanFederatedModules.ts index ffd9b344b..20ec9b12a 100644 --- a/server/src/lib/modules/utils/scanFederatedModules.ts +++ b/server/src/lib/modules/utils/scanFederatedModules.ts @@ -1,6 +1,7 @@ import fs from 'fs' import path from 'path' -import { packageJSONSchema } from 'shared' + +import { packageJSONSchema } from '@lifeforge/shared' /** * Module manifest entry for federated modules diff --git a/server/src/lib/pixabay/index.ts b/server/src/lib/pixabay/index.ts index 79265cd16..cb79f3883 100644 --- a/server/src/lib/pixabay/index.ts +++ b/server/src/lib/pixabay/index.ts @@ -1,6 +1,7 @@ -import { ClientError, createForge, forgeRouter } from '@lifeforge/server-utils' import z from 'zod' +import { ClientError, createForge, forgeRouter } from '@lifeforge/server-utils' + const forge = createForge({}, 'pixabay') const searchImages = forge diff --git a/server/src/lib/user/routes/auth.ts b/server/src/lib/user/routes/auth.ts index 34000271e..fcd054ae0 100644 --- a/server/src/lib/user/routes/auth.ts +++ b/server/src/lib/user/routes/auth.ts @@ -1,9 +1,10 @@ -import { ClientError } from '@lifeforge/server-utils' import dayjs from 'dayjs' import PocketBase from 'pocketbase' import { v4 } from 'uuid' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + import { default as _validateOTP } from '@functions/auth/validateOTP' import { connectToPocketBase, @@ -11,8 +12,8 @@ import { } from '@functions/database/dbUtils' import { currentSession } from '..' -import { removeSensitiveData, updateNullData } from '../utils/auth' import forge from '../forge' +import { removeSensitiveData, updateNullData } from '../utils/auth' export const validateOTP = forge .mutation() diff --git a/server/src/lib/user/routes/customFonts.ts b/server/src/lib/user/routes/customFonts.ts index 3ff646a94..53e9a7bd2 100644 --- a/server/src/lib/user/routes/customFonts.ts +++ b/server/src/lib/user/routes/customFonts.ts @@ -1,6 +1,7 @@ -import { ClientError } from '@lifeforge/server-utils' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + import forge from '../forge' const VALID_FONT_EXTENSIONS = ['.ttf', '.otf', '.woff', '.woff2'] diff --git a/server/src/lib/user/routes/oauth.ts b/server/src/lib/user/routes/oauth.ts index 6a55a66c6..700a57d88 100644 --- a/server/src/lib/user/routes/oauth.ts +++ b/server/src/lib/user/routes/oauth.ts @@ -1,8 +1,9 @@ -import { ClientError } from '@lifeforge/server-utils' import dayjs from 'dayjs' import { v4 } from 'uuid' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + import { currentSession } from '..' import forge from '../forge' diff --git a/server/src/lib/user/routes/personalization.ts b/server/src/lib/user/routes/personalization.ts index 1f5233ef2..9db67afbb 100644 --- a/server/src/lib/user/routes/personalization.ts +++ b/server/src/lib/user/routes/personalization.ts @@ -1,6 +1,7 @@ -import { ClientError } from '@lifeforge/server-utils' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + import forge from '../forge' interface FontFamily { diff --git a/server/src/lib/user/routes/qrLogin.ts b/server/src/lib/user/routes/qrLogin.ts index d37a7445a..85766c92c 100644 --- a/server/src/lib/user/routes/qrLogin.ts +++ b/server/src/lib/user/routes/qrLogin.ts @@ -1,8 +1,9 @@ -import { ClientError } from '@lifeforge/server-utils' import dayjs from 'dayjs' import PocketBase from 'pocketbase' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + import forge from '../forge' import { removeSensitiveData, updateNullData } from '../utils/auth' diff --git a/server/src/lib/user/routes/twoFA.ts b/server/src/lib/user/routes/twoFA.ts index 75ea94e1d..d518df0c9 100644 --- a/server/src/lib/user/routes/twoFA.ts +++ b/server/src/lib/user/routes/twoFA.ts @@ -1,17 +1,18 @@ -import { ClientError } from '@lifeforge/server-utils' import dayjs from 'dayjs' import PocketBase from 'pocketbase' import speakeasy from 'speakeasy' import { v4 } from 'uuid' import z from 'zod' +import { ClientError } from '@lifeforge/server-utils' + import { decrypt2, encrypt, encrypt2 } from '@functions/auth/encryption' import { default as _validateOTP } from '@functions/auth/validateOTP' import { currentSession } from '..' +import forge from '../forge' import { removeSensitiveData, updateNullData } from '../utils/auth' import { verifyAppOTP, verifyEmailOTP } from '../utils/otp' -import forge from '../forge' let canDisable2FA = false let challenge = v4() diff --git a/server/src/lib/user/schema.ts b/server/src/lib/user/schema.ts index 2e2822605..4e2d8df4e 100644 --- a/server/src/lib/user/schema.ts +++ b/server/src/lib/user/schema.ts @@ -1,4 +1,5 @@ import z from 'zod' + import { cleanSchemas } from '@lifeforge/server-utils' export const schemas = { diff --git a/server/src/lib/user/utils/auth.ts b/server/src/lib/user/utils/auth.ts index fe9878a64..a7f2f0733 100644 --- a/server/src/lib/user/utils/auth.ts +++ b/server/src/lib/user/utils/auth.ts @@ -1,8 +1,9 @@ -import { SchemaWithPB } from '@lifeforge/server-utils' import _ from 'lodash' import Pocketbase from 'pocketbase' import z from 'zod' +import { SchemaWithPB } from '@lifeforge/server-utils' + import schema from '../schema' export function removeSensitiveData(userData: Record) { diff --git a/server/tsconfig.json b/server/tsconfig.json index 4a9e00bbd..722b89f7f 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -20,23 +20,11 @@ "emitDeclarationOnly": true, "rootDir": "../", "paths": { - "@constants": [ - "./src/core/constants" - ], - "@functions/*": [ - "./src/core/functions/*" - ], - "@schema": [ - "./src/core/schema" - ], - "@lib/*": [ - "./src/lib/*", - "../apps/*" - ] + "@constants": ["./src/core/constants"], + "@functions/*": ["./src/core/functions/*"], + "@schema": ["./src/core/schema"], + "@lib/*": ["./src/lib/*", "../apps/*"] } }, - "include": [ - "./src/**/*", - "../apps/**/server/**/*" - ] -} \ No newline at end of file + "include": ["./src/**/*", "../apps/**/server/**/*"] +} diff --git a/shared/package.json b/shared/package.json index a56deaafd..0502f0937 100644 --- a/shared/package.json +++ b/shared/package.json @@ -1,5 +1,5 @@ { - "name": "shared", + "name": "@lifeforge/shared", "version": "0.0.1", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/shared/src/api/core/createForgeProxy.ts b/shared/src/api/core/createForgeProxy.ts index 78711be19..2f0537848 100644 --- a/shared/src/api/core/createForgeProxy.ts +++ b/shared/src/api/core/createForgeProxy.ts @@ -107,7 +107,7 @@ export default function createForgeProxy( apply: () => { throw new Error( - `Invalid function call on path: ${path.join('.')}. — maybe you meant to use .input(), .queryOptions(), or .getMutationOptions()?` + `Invalid function call on path: ${path.join('.')}. - maybe you meant to use .input(), .queryOptions(), or .getMutationOptions()?` ) } }) as any diff --git a/shared/src/index.ts b/shared/src/index.ts index 353490d66..0535f65c1 100644 --- a/shared/src/index.ts +++ b/shared/src/index.ts @@ -17,7 +17,6 @@ export { useAPIEndpoint } from './providers/APIEndpointProvider' export { useAPIOnlineStatus } from './providers/APIOnlineStatusProvider' export { usePersonalization } from './providers/PersonalizationProvider' export { useMainSidebarState as useMainSidebarState } from './providers/SidebarStateProvider' -export { useModalStore } from './providers/ModalStoreProvider' export { useAuth } from './providers/AuthProvider' export { useModuleSidebarState } from './providers/ModuleSidebarStateProvider' export { useModuleHeaderState } from './providers/ModuleHeaderStateProvider' @@ -33,7 +32,6 @@ export { default as SSOAuthProvider } from './providers/SSOAuthProvider' export { default as SocketProvider } from './providers/SocketProvider' export { default as NuqsProvider } from './providers/NuqsProvider' export { default as EncryptionProvider } from './providers/EncryptionProvider' -export { default as ModalStoreProvider } from './providers/ModalStoreProvider' export { default as ModuleSidebarStateProvider } from './providers/ModuleSidebarStateProvider' export { default as ModuleHeaderStateProvider } from './providers/ModuleHeaderStateProvider' export { default as FederationProvider } from './providers/FederationProvider' @@ -81,6 +79,4 @@ export type { ModuleCategory } from './interfaces/module_config.types' export type { default as WidgetConfig } from './interfaces/widget_config.types' -export type { ModalComponent } from './providers/ModalStoreProvider' - export { SYSTEM_CATEGORIES } from './providers/FederationProvider' diff --git a/shared/src/utils/fetchAPI.ts b/shared/src/utils/fetchAPI.ts index ab099f878..3ea4e9728 100644 --- a/shared/src/utils/fetchAPI.ts +++ b/shared/src/utils/fetchAPI.ts @@ -59,7 +59,7 @@ async function handleAxiosResponse( return response.data as T } - const contentType = response.headers['content-type'] || '' + const contentType = String(response.headers['content-type'] || '') if (contentType.includes('application/json')) { const data = response.data as ApiResponse diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 26baacbb2..e15e5d9d1 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -2,10 +2,7 @@ "extends": "../tsconfig.json", "compilerOptions": { // Environment setup - "lib": [ - "ESNext", - "DOM" - ], + "lib": ["ESNext", "DOM"], "target": "ESNext", "module": "ESNext", // Output configuration @@ -20,11 +17,6 @@ "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true }, - "include": [ - "./src/**/*" - ], - "exclude": [ - "dist", - "node_modules" - ] -} \ No newline at end of file + "include": ["./src/**/*"], + "exclude": ["dist", "node_modules"] +} diff --git a/tools/package.json b/tools/package.json index 4c43e67b2..93f08e347 100644 --- a/tools/package.json +++ b/tools/package.json @@ -22,7 +22,7 @@ "prettier": "^3.7.4", "prompts": "^2.4.2", "semver": "^7.7.3", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "zod": "4.3.5", "@lifeforge/log": "workspace:*" }, diff --git a/tools/src/cli/setup.ts b/tools/src/cli/setup.ts index 6a39e237d..47894666e 100644 --- a/tools/src/cli/setup.ts +++ b/tools/src/cli/setup.ts @@ -1,9 +1,10 @@ -import { LOG_LEVELS } from '@lifeforge/log' import chalk from 'chalk' import { Command, program } from 'commander' import fs from 'fs' import path from 'path' +import { LOG_LEVELS } from '@lifeforge/log' + import logger, { setLogLevel } from '@/utils/logger' import { commands } from './commands' diff --git a/tools/src/commands/db/functions/database-initialization/superuser.ts b/tools/src/commands/db/functions/database-initialization/superuser.ts index 300ceccbb..452d3c76a 100644 --- a/tools/src/commands/db/functions/database-initialization/superuser.ts +++ b/tools/src/commands/db/functions/database-initialization/superuser.ts @@ -34,7 +34,7 @@ export function createPocketBaseSuperuser( try { const result = executeCommand( - // Remove flags with --http flag because PocketBase don't take http flag for superuser creation + // Remove flags with --http flag because PocketBase don't take http flag for superuser creation `${PB_BINARY_PATH} superuser create ${PB_KWARGS.filter(flag => !flag.startsWith('--http')).join(' ')}`, {}, [email, password] diff --git a/tools/src/commands/db/functions/schema-generation/generateSchemaContent.ts b/tools/src/commands/db/functions/schema-generation/generateSchemaContent.ts index 61c01ee06..54fee1562 100644 --- a/tools/src/commands/db/functions/schema-generation/generateSchemaContent.ts +++ b/tools/src/commands/db/functions/schema-generation/generateSchemaContent.ts @@ -12,7 +12,7 @@ async function processCollectionSchema( collection: Record, idToNameMap: Map ): Promise { - const { parseCollectionName } = await import('shared') + const { parseCollectionName } = await import('@lifeforge/shared') const collectionName = collection.name as string diff --git a/tools/src/commands/db/functions/schema-generation/matchCollectionToModule.ts b/tools/src/commands/db/functions/schema-generation/matchCollectionToModule.ts index 2967e8470..a9a2503c0 100644 --- a/tools/src/commands/db/functions/schema-generation/matchCollectionToModule.ts +++ b/tools/src/commands/db/functions/schema-generation/matchCollectionToModule.ts @@ -32,7 +32,7 @@ export async function matchCollectionToModule( allModules: string[], collection: Record ) { - const { parseCollectionName } = await import('shared') + const { parseCollectionName } = await import('@lifeforge/shared') const collectionName = collection.name as string diff --git a/tools/src/commands/db/handlers/generateMigrationsHandler.ts b/tools/src/commands/db/handlers/generateMigrationsHandler.ts index 01ab09264..ad2dfdfd6 100644 --- a/tools/src/commands/db/handlers/generateMigrationsHandler.ts +++ b/tools/src/commands/db/handlers/generateMigrationsHandler.ts @@ -1,10 +1,11 @@ +import chalk from 'chalk' + import logger from '@/utils/logger' import getPBInstance from '@/utils/pocketbase' import { cleanupOldMigrations } from '../functions/migration-generation/cleanupOldMigrations' import stageMigration from '../functions/migration-generation/stageMigrations' import { importSchemaModules } from '../utils' -import chalk from 'chalk' /** * Command handler for generating database migrations @@ -30,9 +31,13 @@ export async function generateMigrationsHandler( killPB?.() - logger.success(`Migrations generated successfully for module ${chalk.green(targetModule ? `${targetModule}` : 'all modules')}`) + logger.success( + `Migrations generated successfully for module ${chalk.green(targetModule ? `${targetModule}` : 'all modules')}` + ) } catch (error) { - logger.error(`Migration script failed for module ${chalk.red(targetModule ? `${targetModule}` : 'all modules')}.`) + logger.error( + `Migration script failed for module ${chalk.red(targetModule ? `${targetModule}` : 'all modules')}.` + ) logger.debug(`Error details: ${error}`) killPB?.() diff --git a/tools/src/commands/db/utils/constants.ts b/tools/src/commands/db/utils/constants.ts index 393644cdb..7152199b0 100644 --- a/tools/src/commands/db/utils/constants.ts +++ b/tools/src/commands/db/utils/constants.ts @@ -2,9 +2,6 @@ * Constants for database command operations */ - - - /** * Prettier formatting options for generated files */ diff --git a/tools/src/commands/dev/config/commands.ts b/tools/src/commands/dev/config/commands.ts index 92444d80c..9e48e20e1 100644 --- a/tools/src/commands/dev/config/commands.ts +++ b/tools/src/commands/dev/config/commands.ts @@ -84,7 +84,7 @@ export const SERVICE_COMMANDS: Record = { executeCommand('bun forge build shared') } - if (!fs.existsSync('packages/lifeforge-ui/dist')) { + if (!fs.existsSync('packages/ui/dist')) { executeCommand('bun forge build ui') } @@ -93,12 +93,10 @@ export const SERVICE_COMMANDS: Record = { }, ui: { command: () => { - killExistingProcess( - 'lifeforge/packages/lifeforge-ui/node_modules/.bin/storybook' - ) + killExistingProcess('lifeforge/packages/ui/node_modules/.bin/storybook') return 'bun run dev' }, - cwd: 'packages/lifeforge-ui' + cwd: 'packages/ui' } } diff --git a/tools/src/commands/dev/functions/getConcurrentServices.ts b/tools/src/commands/dev/functions/getConcurrentServices.ts index ae0c50b6a..6c999c2a0 100644 --- a/tools/src/commands/dev/functions/getConcurrentServices.ts +++ b/tools/src/commands/dev/functions/getConcurrentServices.ts @@ -47,7 +47,7 @@ export default async function getConcurrentServices( if (port) { args.push('--port', port) } - + if (args.length > 0) { finalCommand = `${command} ${args.join(' ')}` } diff --git a/tools/src/commands/modules/functions/prompts/module-type.ts b/tools/src/commands/modules/functions/prompts/module-type.ts index 7316d8318..4b1428f39 100644 --- a/tools/src/commands/modules/functions/prompts/module-type.ts +++ b/tools/src/commands/modules/functions/prompts/module-type.ts @@ -1,3 +1,4 @@ +import chalk from 'chalk' import fs from 'fs' import prompts from 'prompts' @@ -5,7 +6,6 @@ import { ROOT_DIR } from '@/constants/constants' import logger from '@/utils/logger' import { AVAILABLE_TEMPLATE_MODULE_TYPES } from '../../handlers/createModuleHandler' -import chalk from 'chalk' export async function promptModuleType(): Promise< keyof typeof AVAILABLE_TEMPLATE_MODULE_TYPES diff --git a/tools/src/commands/modules/functions/validateModuleAuthor.ts b/tools/src/commands/modules/functions/validateModuleAuthor.ts index 23409f250..477547ac7 100644 --- a/tools/src/commands/modules/functions/validateModuleAuthor.ts +++ b/tools/src/commands/modules/functions/validateModuleAuthor.ts @@ -9,7 +9,7 @@ import { checkAuth } from '@/utils/registry' export default async function validateModuleAuthor(modulePath: string) { const auth = await checkAuth() - const { packageJSONSchema } = await import('shared') + const { packageJSONSchema } = await import('@lifeforge/shared') const packageJson = z.safeParse( packageJSONSchema, diff --git a/tools/src/commands/modules/functions/validateModuleStructure.ts b/tools/src/commands/modules/functions/validateModuleStructure.ts index d70706c21..ae844684b 100644 --- a/tools/src/commands/modules/functions/validateModuleStructure.ts +++ b/tools/src/commands/modules/functions/validateModuleStructure.ts @@ -36,7 +36,7 @@ const MODULE_STRUCTURE: Array<{ validate: async (content: string) => { const json = JSON.parse(content) - const { packageJSONSchema } = await import('shared') + const { packageJSONSchema } = await import('@lifeforge/shared') const result = z.safeParse(packageJSONSchema, json) diff --git a/tools/src/commands/project/constants/projects.ts b/tools/src/commands/project/constants/projects.ts index a637dbcc8..9fc3d180b 100644 --- a/tools/src/commands/project/constants/projects.ts +++ b/tools/src/commands/project/constants/projects.ts @@ -1,6 +1,6 @@ export const PROJECTS = { shared: 'shared', - ui: 'packages/lifeforge-ui', + ui: 'packages/ui', client: 'client', server: 'server', docs: 'docs', diff --git a/tools/src/templates/bare-bones/_tsconfig.json b/tools/src/templates/bare-bones/_tsconfig.json index 6f0692c3d..8c89d7bcf 100644 --- a/tools/src/templates/bare-bones/_tsconfig.json +++ b/tools/src/templates/bare-bones/_tsconfig.json @@ -1,18 +1,12 @@ { - "extends": "./client/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "composite": false, - "paths": { - "@": [ - "./client/index" - ], - "@/*": [ - "./client/*" - ] - } - }, - "include": [ - "./manifest.ts" - ] -} \ No newline at end of file + "extends": "./client/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "composite": false, + "paths": { + "@": ["./client/index"], + "@/*": ["./client/*"] + } + }, + "include": ["./manifest.ts"] +} diff --git a/tools/src/templates/bare-bones/client/_tsconfig.json b/tools/src/templates/bare-bones/client/_tsconfig.json index 3471f5390..311a047be 100644 --- a/tools/src/templates/bare-bones/client/_tsconfig.json +++ b/tools/src/templates/bare-bones/client/_tsconfig.json @@ -3,12 +3,7 @@ // JSX and Language Settings "jsx": "react-jsx", "target": "ES2020", - "lib": [ - "ES2020", - "DOM", - "DOM.Iterable", - "ES2024.Object" - ], + "lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"], // Module Resolution "module": "ESNext", "moduleResolution": "bundler", @@ -27,18 +22,10 @@ "noFallthroughCasesInSwitch": true, // Path Mapping "paths": { - "@": [ - "./index" - ], - "@/*": [ - "./*" - ], - "@server/*": [ - "../server/*" - ] + "@": ["./index"], + "@/*": ["./*"], + "@server/*": ["../server/*"] } }, - "include": [ - "./**/*" - ] -} \ No newline at end of file + "include": ["./**/*"] +} diff --git a/tools/src/templates/bare-bones/client/index.tsx b/tools/src/templates/bare-bones/client/index.tsx index 869717973..79f90ae0d 100644 --- a/tools/src/templates/bare-bones/client/index.tsx +++ b/tools/src/templates/bare-bones/client/index.tsx @@ -1,4 +1,4 @@ -import { ModuleHeader } from 'lifeforge-ui' +import { ModuleHeader } from '@lifeforge/ui' function {{pascal moduleName.en}}() { return ( diff --git a/tools/src/templates/bare-bones/client/utils/forgeAPI.ts b/tools/src/templates/bare-bones/client/utils/forgeAPI.ts index c08a9233d..729cc6ec1 100644 --- a/tools/src/templates/bare-bones/client/utils/forgeAPI.ts +++ b/tools/src/templates/bare-bones/client/utils/forgeAPI.ts @@ -1,6 +1,6 @@ import routes from '@server/index' import routes from '@server/index' -import { createForgeProxy } from 'shared' +import { createForgeProxy } from '@lifeforge/shared' if (!import.meta.env.VITE_API_HOST) { throw new Error('VITE_API_HOST is not defined') diff --git a/tools/src/templates/bare-bones/manifest.ts b/tools/src/templates/bare-bones/manifest.ts index ae7676367..1f766a5ea 100644 --- a/tools/src/templates/bare-bones/manifest.ts +++ b/tools/src/templates/bare-bones/manifest.ts @@ -1,5 +1,6 @@ import { lazy } from 'react' -import type { ModuleConfig } from 'shared' + +import type { ModuleConfig } from '@lifeforge/shared' export default { name: '{{moduleName.en}}', diff --git a/tools/src/templates/bare-bones/package.json b/tools/src/templates/bare-bones/package.json index d17253200..c85c6bebf 100644 --- a/tools/src/templates/bare-bones/package.json +++ b/tools/src/templates/bare-bones/package.json @@ -11,11 +11,11 @@ "@uidotdev/usehooks": "^2.4.1", "clsx": "^2.1.1", "dayjs": "^1.11.18", - "lifeforge-ui": "workspace:*", + "@lifeforge/ui": "workspace:*", "react": "^19.2.0", "react-i18next": "^15.1.1", "react-toastify": "^11.0.5", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "tailwindcss": "^4.1.14", "vite": "^7.1.9", "zod": "4.3.5" diff --git a/tools/src/templates/client-only/_tsconfig.json b/tools/src/templates/client-only/_tsconfig.json index 6f0692c3d..8c89d7bcf 100644 --- a/tools/src/templates/client-only/_tsconfig.json +++ b/tools/src/templates/client-only/_tsconfig.json @@ -1,18 +1,12 @@ { - "extends": "./client/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "composite": false, - "paths": { - "@": [ - "./client/index" - ], - "@/*": [ - "./client/*" - ] - } - }, - "include": [ - "./manifest.ts" - ] -} \ No newline at end of file + "extends": "./client/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "composite": false, + "paths": { + "@": ["./client/index"], + "@/*": ["./client/*"] + } + }, + "include": ["./manifest.ts"] +} diff --git a/tools/src/templates/client-only/client/_tsconfig.json b/tools/src/templates/client-only/client/_tsconfig.json index 3471f5390..311a047be 100644 --- a/tools/src/templates/client-only/client/_tsconfig.json +++ b/tools/src/templates/client-only/client/_tsconfig.json @@ -3,12 +3,7 @@ // JSX and Language Settings "jsx": "react-jsx", "target": "ES2020", - "lib": [ - "ES2020", - "DOM", - "DOM.Iterable", - "ES2024.Object" - ], + "lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"], // Module Resolution "module": "ESNext", "moduleResolution": "bundler", @@ -27,18 +22,10 @@ "noFallthroughCasesInSwitch": true, // Path Mapping "paths": { - "@": [ - "./index" - ], - "@/*": [ - "./*" - ], - "@server/*": [ - "../server/*" - ] + "@": ["./index"], + "@/*": ["./*"], + "@server/*": ["../server/*"] } }, - "include": [ - "./**/*" - ] -} \ No newline at end of file + "include": ["./**/*"] +} diff --git a/tools/src/templates/client-only/client/index.tsx b/tools/src/templates/client-only/client/index.tsx index 869717973..79f90ae0d 100644 --- a/tools/src/templates/client-only/client/index.tsx +++ b/tools/src/templates/client-only/client/index.tsx @@ -1,4 +1,4 @@ -import { ModuleHeader } from 'lifeforge-ui' +import { ModuleHeader } from '@lifeforge/ui' function {{pascal moduleName.en}}() { return ( diff --git a/tools/src/templates/client-only/manifest.ts b/tools/src/templates/client-only/manifest.ts index ae7676367..1f766a5ea 100644 --- a/tools/src/templates/client-only/manifest.ts +++ b/tools/src/templates/client-only/manifest.ts @@ -1,5 +1,6 @@ import { lazy } from 'react' -import type { ModuleConfig } from 'shared' + +import type { ModuleConfig } from '@lifeforge/shared' export default { name: '{{moduleName.en}}', diff --git a/tools/src/templates/client-only/package.json b/tools/src/templates/client-only/package.json index 55492bee1..39206ce30 100644 --- a/tools/src/templates/client-only/package.json +++ b/tools/src/templates/client-only/package.json @@ -11,11 +11,11 @@ "@uidotdev/usehooks": "^2.4.1", "clsx": "^2.1.1", "dayjs": "^1.11.18", - "lifeforge-ui": "workspace:*", + "@lifeforge/ui": "workspace:*", "react": "^19.2.0", "react-i18next": "^15.1.1", "react-toastify": "^11.0.5", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "tailwindcss": "^4.1.14", "vite": "^7.1.9", "zod": "4.3.5" diff --git a/tools/src/templates/with-crud/_tsconfig.json b/tools/src/templates/with-crud/_tsconfig.json index 6f0692c3d..8c89d7bcf 100644 --- a/tools/src/templates/with-crud/_tsconfig.json +++ b/tools/src/templates/with-crud/_tsconfig.json @@ -1,18 +1,12 @@ { - "extends": "./client/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "composite": false, - "paths": { - "@": [ - "./client/index" - ], - "@/*": [ - "./client/*" - ] - } - }, - "include": [ - "./manifest.ts" - ] -} \ No newline at end of file + "extends": "./client/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "composite": false, + "paths": { + "@": ["./client/index"], + "@/*": ["./client/*"] + } + }, + "include": ["./manifest.ts"] +} diff --git a/tools/src/templates/with-crud/client/_tsconfig.json b/tools/src/templates/with-crud/client/_tsconfig.json index 95d2d4489..8f08d1127 100644 --- a/tools/src/templates/with-crud/client/_tsconfig.json +++ b/tools/src/templates/with-crud/client/_tsconfig.json @@ -3,12 +3,7 @@ // JSX and Language Settings "jsx": "react-jsx", "target": "ES2020", - "lib": [ - "ES2020", - "DOM", - "DOM.Iterable", - "ES2024.Object" - ], + "lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"], // Module Resolution "module": "ESNext", "moduleResolution": "bundler", @@ -27,18 +22,10 @@ "noFallthroughCasesInSwitch": true, // Path Mapping "paths": { - "@": [ - "./index" - ], - "@/*": [ - "./index/*" - ], - "@server/*": [ - "../server/*" - ] + "@": ["./index"], + "@/*": ["./index/*"], + "@server/*": ["../server/*"] } }, - "include": [ - "./**/*" - ] -} \ No newline at end of file + "include": ["./**/*"] +} diff --git a/tools/src/templates/with-crud/client/components/EntryItem.tsx b/tools/src/templates/with-crud/client/components/EntryItem.tsx index 2af8596f2..5da6af3a0 100644 --- a/tools/src/templates/with-crud/client/components/EntryItem.tsx +++ b/tools/src/templates/with-crud/client/components/EntryItem.tsx @@ -9,7 +9,7 @@ import { ContextMenuItem, Card, useModalStore -} from 'lifeforge-ui' +} from '@lifeforge/ui' import { toast } from 'react-toastify' import ModifyEntryModal from './ModifyEntryModal' diff --git a/tools/src/templates/with-crud/client/components/ModifyEntryModal.tsx b/tools/src/templates/with-crud/client/components/ModifyEntryModal.tsx index 5334edcb1..58cc0bc9e 100644 --- a/tools/src/templates/with-crud/client/components/ModifyEntryModal.tsx +++ b/tools/src/templates/with-crud/client/components/ModifyEntryModal.tsx @@ -1,9 +1,9 @@ import type { Entry } from '@' import forgeAPI from '@/utils/forgeAPI' import { useMutation, useQueryClient } from '@tanstack/react-query' -import { FormModal, defineForm } from 'lifeforge-ui' +import { FormModal, defineForm } from '@lifeforge/ui' import { toast } from 'react-toastify' -import { type InferInput } from 'shared' +import { type InferInput } from '@lifeforge/shared' function ModifyEntryModal({ onClose, diff --git a/tools/src/templates/with-crud/client/index.tsx b/tools/src/templates/with-crud/client/index.tsx index 858cad647..2bb4b5a2f 100644 --- a/tools/src/templates/with-crud/client/index.tsx +++ b/tools/src/templates/with-crud/client/index.tsx @@ -5,9 +5,9 @@ import { ModuleHeader, WithQuery, useModalStore -} from 'lifeforge-ui' +} from '@lifeforge/ui' import { useTranslation } from 'react-i18next' -import type { InferOutput } from 'shared' +import type { InferOutput } from '@lifeforge/shared' import EntryItem from './components/EntryItem' import ModifyEntryModal from './components/ModifyEntryModal' diff --git a/tools/src/templates/with-crud/client/utils/forgeAPI.ts b/tools/src/templates/with-crud/client/utils/forgeAPI.ts index c08a9233d..729cc6ec1 100644 --- a/tools/src/templates/with-crud/client/utils/forgeAPI.ts +++ b/tools/src/templates/with-crud/client/utils/forgeAPI.ts @@ -1,6 +1,6 @@ import routes from '@server/index' import routes from '@server/index' -import { createForgeProxy } from 'shared' +import { createForgeProxy } from '@lifeforge/shared' if (!import.meta.env.VITE_API_HOST) { throw new Error('VITE_API_HOST is not defined') diff --git a/tools/src/templates/with-crud/manifest.ts b/tools/src/templates/with-crud/manifest.ts index ae7676367..1f766a5ea 100644 --- a/tools/src/templates/with-crud/manifest.ts +++ b/tools/src/templates/with-crud/manifest.ts @@ -1,5 +1,6 @@ import { lazy } from 'react' -import type { ModuleConfig } from 'shared' + +import type { ModuleConfig } from '@lifeforge/shared' export default { name: '{{moduleName.en}}', diff --git a/tools/src/templates/with-crud/package.json b/tools/src/templates/with-crud/package.json index d17253200..c85c6bebf 100644 --- a/tools/src/templates/with-crud/package.json +++ b/tools/src/templates/with-crud/package.json @@ -11,11 +11,11 @@ "@uidotdev/usehooks": "^2.4.1", "clsx": "^2.1.1", "dayjs": "^1.11.18", - "lifeforge-ui": "workspace:*", + "@lifeforge/ui": "workspace:*", "react": "^19.2.0", "react-i18next": "^15.1.1", "react-toastify": "^11.0.5", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "tailwindcss": "^4.1.14", "vite": "^7.1.9", "zod": "4.3.5" diff --git a/tools/src/templates/with-routes/_tsconfig.json b/tools/src/templates/with-routes/_tsconfig.json index 6f0692c3d..8c89d7bcf 100644 --- a/tools/src/templates/with-routes/_tsconfig.json +++ b/tools/src/templates/with-routes/_tsconfig.json @@ -1,18 +1,12 @@ { - "extends": "./client/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "composite": false, - "paths": { - "@": [ - "./client/index" - ], - "@/*": [ - "./client/*" - ] - } - }, - "include": [ - "./manifest.ts" - ] -} \ No newline at end of file + "extends": "./client/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "composite": false, + "paths": { + "@": ["./client/index"], + "@/*": ["./client/*"] + } + }, + "include": ["./manifest.ts"] +} diff --git a/tools/src/templates/with-routes/client/_tsconfig.json b/tools/src/templates/with-routes/client/_tsconfig.json index 3471f5390..311a047be 100644 --- a/tools/src/templates/with-routes/client/_tsconfig.json +++ b/tools/src/templates/with-routes/client/_tsconfig.json @@ -3,12 +3,7 @@ // JSX and Language Settings "jsx": "react-jsx", "target": "ES2020", - "lib": [ - "ES2020", - "DOM", - "DOM.Iterable", - "ES2024.Object" - ], + "lib": ["ES2020", "DOM", "DOM.Iterable", "ES2024.Object"], // Module Resolution "module": "ESNext", "moduleResolution": "bundler", @@ -27,18 +22,10 @@ "noFallthroughCasesInSwitch": true, // Path Mapping "paths": { - "@": [ - "./index" - ], - "@/*": [ - "./*" - ], - "@server/*": [ - "../server/*" - ] + "@": ["./index"], + "@/*": ["./*"], + "@server/*": ["../server/*"] } }, - "include": [ - "./**/*" - ] -} \ No newline at end of file + "include": ["./**/*"] +} diff --git a/tools/src/templates/with-routes/client/pages/EntryDetails/index.tsx b/tools/src/templates/with-routes/client/pages/EntryDetails/index.tsx index 3cf764563..89e02a5dd 100644 --- a/tools/src/templates/with-routes/client/pages/EntryDetails/index.tsx +++ b/tools/src/templates/with-routes/client/pages/EntryDetails/index.tsx @@ -1,5 +1,5 @@ -import { GoBackButton } from 'lifeforge-ui' -import { useNavigate, useParams } from 'shared' +import { useNavigate, useParams } from '@lifeforge/shared' +import { GoBackButton } from '@lifeforge/ui' function EntryDetails() { const navigate = useNavigate() diff --git a/tools/src/templates/with-routes/client/pages/EntryList/index.tsx b/tools/src/templates/with-routes/client/pages/EntryList/index.tsx index c593a37e1..b3f1066ba 100644 --- a/tools/src/templates/with-routes/client/pages/EntryList/index.tsx +++ b/tools/src/templates/with-routes/client/pages/EntryList/index.tsx @@ -1,5 +1,5 @@ -import { Card, ModuleHeader } from 'lifeforge-ui' -import { Link } from 'shared' +import { Link } from '@lifeforge/shared' +import { Card, ModuleHeader } from '@lifeforge/ui' function EntryList() { return ( diff --git a/tools/src/templates/with-routes/client/utils/forgeAPI.ts b/tools/src/templates/with-routes/client/utils/forgeAPI.ts index c08a9233d..729cc6ec1 100644 --- a/tools/src/templates/with-routes/client/utils/forgeAPI.ts +++ b/tools/src/templates/with-routes/client/utils/forgeAPI.ts @@ -1,6 +1,6 @@ import routes from '@server/index' import routes from '@server/index' -import { createForgeProxy } from 'shared' +import { createForgeProxy } from '@lifeforge/shared' if (!import.meta.env.VITE_API_HOST) { throw new Error('VITE_API_HOST is not defined') diff --git a/tools/src/templates/with-routes/manifest.ts b/tools/src/templates/with-routes/manifest.ts index b8767f9ed..03244bc89 100644 --- a/tools/src/templates/with-routes/manifest.ts +++ b/tools/src/templates/with-routes/manifest.ts @@ -1,5 +1,6 @@ import { lazy } from 'react' -import type { ModuleConfig } from 'shared' + +import type { ModuleConfig } from '@lifeforge/shared' export default { name: '{{moduleName.en}}', diff --git a/tools/src/templates/with-routes/package.json b/tools/src/templates/with-routes/package.json index d17253200..c85c6bebf 100644 --- a/tools/src/templates/with-routes/package.json +++ b/tools/src/templates/with-routes/package.json @@ -11,11 +11,11 @@ "@uidotdev/usehooks": "^2.4.1", "clsx": "^2.1.1", "dayjs": "^1.11.18", - "lifeforge-ui": "workspace:*", + "@lifeforge/ui": "workspace:*", "react": "^19.2.0", "react-i18next": "^15.1.1", "react-toastify": "^11.0.5", - "shared": "workspace:*", + "@lifeforge/shared": "workspace:*", "tailwindcss": "^4.1.14", "vite": "^7.1.9", "zod": "4.3.5" diff --git a/tools/src/utils/commands.ts b/tools/src/utils/commands.ts index b9874d19f..692235f78 100644 --- a/tools/src/utils/commands.ts +++ b/tools/src/utils/commands.ts @@ -1,3 +1,4 @@ +import chalk from 'chalk' import { type IOType, spawnSync } from 'child_process' import fs from 'fs' import path from 'path' @@ -6,7 +7,6 @@ import { ROOT_DIR } from '@/constants/constants' import logger from './logger' import { addDependency, removeDependency } from './packageJson' -import chalk from 'chalk' interface CommandExecutionOptions { stdio?: IOType | [IOType, IOType, IOType] @@ -40,7 +40,9 @@ export default function executeCommand( } try { - logger.debug(`Executing command ${chalk.blue(cmd)} with arguments: ${chalk.blue(_arguments.length ? _arguments.join(' ') : `${chalk.red('none')}`)}`) + logger.debug( + `Executing command ${chalk.blue(cmd)} with arguments: ${chalk.blue(_arguments.length ? _arguments.join(' ') : `${chalk.red('none')}`)}` + ) const [toBeExecuted, ...args] = cmd.split(' ') @@ -68,7 +70,9 @@ export default function executeCommand( } if (!options.stdio || options.stdio === 'pipe') { - logger.debug(`Command Completed: ${chalk.blue(cmd)}, exit code: ${chalk.blue(String(result.status))}`) + logger.debug( + `Command Completed: ${chalk.blue(cmd)}, exit code: ${chalk.blue(String(result.status))}` + ) } return result.stdout?.toString().trim() || '' @@ -121,7 +125,9 @@ export function installPackage( const installedPath = path.join(ROOT_DIR, 'node_modules', fullName) if (!fs.existsSync(installedPath)) { - logger.error(`Failed to find installed package at ${chalk.blue(installedPath)}`) + logger.error( + `Failed to find installed package at ${chalk.blue(installedPath)}` + ) process.exit(1) } diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 1dd6b0573..a77f6cfd4 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -4,15 +4,9 @@ "rootDir": ".", "baseUrl": ".", "paths": { - "@/*": [ - "./src/*" - ] + "@/*": ["./src/*"] } }, - "include": [ - "./src/**/*.ts" - ], - "exclude": [ - "./src/templates/**/*" - ] -} \ No newline at end of file + "include": ["./src/**/*.ts"], + "exclude": ["./src/templates/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json index 25579e759..a14f7c3e1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ "@server/*": ["./server/src/*"], "@client/*": ["./client/src/*"], "@shared/*": ["./shared/src/*"], - "@ui/*": ["./packages/lifeforge-ui/src/*"] + "@ui/*": ["./packages/ui/src/*"] }, // Module resolution "moduleResolution": "bundler",