nfx-ui 0.16.2 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -271
- package/dist/animations.cjs +1 -2
- package/dist/animations.mjs +9 -9
- package/dist/apis.cjs +0 -1
- package/dist/apis.cjs.map +1 -1
- package/dist/apis.mjs +0 -1
- package/dist/apis.mjs.map +1 -1
- package/dist/chunk-LucideIcon-Chc7x8mN.mjs +15 -0
- package/dist/chunk-LucideIcon-Chc7x8mN.mjs.map +1 -0
- package/dist/chunk-LucideIcon-CuoAB_OX.cjs +3 -0
- package/dist/chunk-LucideIcon-CuoAB_OX.cjs.map +1 -0
- package/dist/chunk-ModalProvider-BgLSJXhS.cjs +3 -0
- package/dist/chunk-ModalProvider-BgLSJXhS.cjs.map +1 -0
- package/dist/chunk-ModalProvider-CpzFzfWG.mjs +220 -0
- package/dist/chunk-ModalProvider-CpzFzfWG.mjs.map +1 -0
- package/dist/chunk-PixelBlast-BbJ2VmCL.cjs +190 -0
- package/dist/chunk-PixelBlast-BbJ2VmCL.cjs.map +1 -0
- package/dist/chunk-PixelBlast-BiBrG_NH.mjs +504 -0
- package/dist/chunk-PixelBlast-BiBrG_NH.mjs.map +1 -0
- package/dist/chunk-ThemeProvider-C4kxX2D0.cjs +3 -0
- package/dist/chunk-ThemeProvider-C4kxX2D0.cjs.map +1 -0
- package/dist/chunk-ThemeProvider-D0U8V6ky.mjs +28 -0
- package/dist/chunk-ThemeProvider-D0U8V6ky.mjs.map +1 -0
- package/dist/chunk-animations-CkOpTtX1.cjs +11 -0
- package/dist/chunk-animations-CkOpTtX1.cjs.map +1 -0
- package/dist/chunk-animations-DKyNVF-O.mjs +973 -0
- package/dist/chunk-animations-DKyNVF-O.mjs.map +1 -0
- package/dist/chunk-dashboard-BsGK96hu.mjs +104 -0
- package/dist/chunk-dashboard-BsGK96hu.mjs.map +1 -0
- package/dist/chunk-dashboard-CFT0HjSM.cjs +3 -0
- package/dist/chunk-dashboard-CFT0HjSM.cjs.map +1 -0
- package/dist/chunk-hooks-Cy_8mdDG.mjs +90 -0
- package/dist/chunk-hooks-Cy_8mdDG.mjs.map +1 -0
- package/dist/chunk-hooks-yVn82nBZ.cjs +3 -0
- package/dist/chunk-hooks-yVn82nBZ.cjs.map +1 -0
- package/dist/chunk-i18n-B8pZ_hpC.mjs +435 -0
- package/dist/chunk-i18n-B8pZ_hpC.mjs.map +1 -0
- package/dist/chunk-i18n-C06d89Eq.cjs +3 -0
- package/dist/chunk-i18n-C06d89Eq.cjs.map +1 -0
- package/dist/chunk-layout-BDpxG0Ca.mjs +27 -0
- package/dist/chunk-layout-BDpxG0Ca.mjs.map +1 -0
- package/dist/chunk-layout-DKCQHheg.cjs +3 -0
- package/dist/chunk-layout-DKCQHheg.cjs.map +1 -0
- package/dist/chunk-lucide-CrMbx2vC.cjs +3 -0
- package/dist/chunk-lucide-CrMbx2vC.cjs.map +1 -0
- package/dist/chunk-lucide-yNs0iz1-.mjs +158 -0
- package/dist/chunk-lucide-yNs0iz1-.mjs.map +1 -0
- package/dist/chunk-modal-C3LgRLur.cjs +3 -0
- package/dist/chunk-modal-C3LgRLur.cjs.map +1 -0
- package/dist/chunk-modal-D9vk2ENf.mjs +92 -0
- package/dist/chunk-modal-D9vk2ENf.mjs.map +1 -0
- package/dist/chunk-preference-BP-GO9Uk.cjs +3 -0
- package/dist/chunk-preference-BP-GO9Uk.cjs.map +1 -0
- package/dist/chunk-preference-BXXryZLY.cjs +3 -0
- package/dist/chunk-preference-BXXryZLY.cjs.map +1 -0
- package/dist/chunk-preference-Y15HwKd0.mjs +42 -0
- package/dist/chunk-preference-Y15HwKd0.mjs.map +1 -0
- package/dist/chunk-preference-x4EdmqU6.mjs +295 -0
- package/dist/chunk-preference-x4EdmqU6.mjs.map +1 -0
- package/dist/chunk-rolldown-runtime-Bvb_CV3F.cjs +1 -0
- package/dist/chunk-useLanguageLabel-38sEu2rP.cjs +3 -0
- package/dist/chunk-useLanguageLabel-38sEu2rP.cjs.map +1 -0
- package/dist/chunk-useLanguageLabel-BLdxHuep.mjs +38 -0
- package/dist/chunk-useLanguageLabel-BLdxHuep.mjs.map +1 -0
- package/dist/chunk-useLayout-CbUZVWpS.cjs +3 -0
- package/dist/chunk-useLayout-CbUZVWpS.cjs.map +1 -0
- package/dist/chunk-useLayout-CjXHRPLD.mjs +302 -0
- package/dist/chunk-useLayout-CjXHRPLD.mjs.map +1 -0
- package/dist/chunk-useTheme-C2Ip6OAs.mjs +34 -0
- package/dist/chunk-useTheme-C2Ip6OAs.mjs.map +1 -0
- package/dist/chunk-useTheme-DSps5NbC.cjs +3 -0
- package/dist/chunk-useTheme-DSps5NbC.cjs.map +1 -0
- package/dist/components.cjs +3 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.mjs +1122 -1472
- package/dist/components.mjs.map +1 -1
- package/dist/constants.cjs +0 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.mjs +0 -1
- package/dist/constants.mjs.map +1 -1
- package/dist/enums.cjs +1 -0
- package/dist/enums.mjs +43 -0
- package/dist/events.cjs +0 -1
- package/dist/events.cjs.map +1 -1
- package/dist/events.mjs +0 -1
- package/dist/events.mjs.map +1 -1
- package/dist/hooks.cjs +1 -4
- package/dist/hooks.mjs +12 -104
- package/dist/icons.cjs +3 -2
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.mjs +19350 -73
- package/dist/icons.mjs.map +1 -0
- package/dist/languages.cjs +1 -2
- package/dist/languages.cjs.map +1 -1
- package/dist/languages.mjs +63 -76
- package/dist/languages.mjs.map +1 -1
- package/dist/layouts.cjs +2 -2
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.mjs +787 -395
- package/dist/layouts.mjs.map +1 -1
- package/dist/navigations.cjs +0 -1
- package/dist/navigations.cjs.map +1 -1
- package/dist/navigations.mjs +0 -1
- package/dist/navigations.mjs.map +1 -1
- package/dist/pixel-blast.cjs +1 -191
- package/dist/pixel-blast.mjs +2 -503
- package/dist/providers.cjs +4 -0
- package/dist/providers.cjs.map +1 -0
- package/dist/providers.mjs +37 -0
- package/dist/providers.mjs.map +1 -0
- package/dist/services.cjs +0 -1
- package/dist/services.cjs.map +1 -1
- package/dist/services.mjs +0 -1
- package/dist/services.mjs.map +1 -1
- package/dist/src/designs/animations/index.d.ts +1 -0
- package/dist/src/designs/animations/index.d.ts.map +1 -1
- package/dist/src/designs/components/CardHeader.d.ts +9 -0
- package/dist/src/designs/components/CardHeader.d.ts.map +1 -0
- package/dist/src/designs/components/EmptyState/index.d.ts +10 -0
- package/dist/src/designs/components/EmptyState/index.d.ts.map +1 -0
- package/dist/src/designs/components/LayoutSwitcher/index.d.ts +1 -1
- package/dist/src/designs/components/LayoutSwitcher/index.d.ts.map +1 -1
- package/dist/src/designs/components/Logo/index.d.ts +15 -0
- package/dist/src/designs/components/Logo/index.d.ts.map +1 -0
- package/dist/src/designs/components/LucideIcon.d.ts +11 -0
- package/dist/src/designs/components/LucideIcon.d.ts.map +1 -0
- package/dist/src/designs/components/PageHeader/index.d.ts +11 -0
- package/dist/src/designs/components/PageHeader/index.d.ts.map +1 -0
- package/dist/src/designs/components/PreferencesPopover/index.d.ts +6 -0
- package/dist/src/designs/components/PreferencesPopover/index.d.ts.map +1 -0
- package/dist/src/designs/components/Suspense/index.d.ts +6 -60
- package/dist/src/designs/components/Suspense/index.d.ts.map +1 -1
- package/dist/src/designs/components/ThemeSettings/index.d.ts +2 -0
- package/dist/src/designs/components/ThemeSettings/index.d.ts.map +1 -0
- package/dist/src/designs/components/ThemeSwitcher/index.d.ts +1 -3
- package/dist/src/designs/components/ThemeSwitcher/index.d.ts.map +1 -1
- package/dist/src/designs/components/VirtuosoList.d.ts +37 -0
- package/dist/src/designs/components/VirtuosoList.d.ts.map +1 -0
- package/dist/src/designs/components/index.d.ts +19 -25
- package/dist/src/designs/components/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/Background/index.d.ts +1 -1
- package/dist/src/designs/layouts/components/Background/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/Header/index.d.ts +31 -3
- package/dist/src/designs/layouts/components/Header/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/LayoutFrame/index.d.ts +1 -1
- package/dist/src/designs/layouts/components/LayoutFrame/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/Main/index.d.ts +8 -0
- package/dist/src/designs/layouts/components/Main/index.d.ts.map +1 -0
- package/dist/src/designs/layouts/components/MainWrapper/index.d.ts +1 -1
- package/dist/src/designs/layouts/components/MainWrapper/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/PageFrame/index.d.ts +10 -0
- package/dist/src/designs/layouts/components/PageFrame/index.d.ts.map +1 -0
- package/dist/src/designs/layouts/components/SideHideLayout/index.d.ts +1 -1
- package/dist/src/designs/layouts/components/SideHideLayout/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/SideShowLayout/index.d.ts +1 -1
- package/dist/src/designs/layouts/components/SideShowLayout/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/Sidebar/index.d.ts +74 -2
- package/dist/src/designs/layouts/components/Sidebar/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/components/Sidebar/menu.d.ts +9 -0
- package/dist/src/designs/layouts/components/Sidebar/menu.d.ts.map +1 -0
- package/dist/src/designs/layouts/components/UserTopBar/index.d.ts +18 -0
- package/dist/src/designs/layouts/components/UserTopBar/index.d.ts.map +1 -0
- package/dist/src/designs/layouts/components/index.d.ts +9 -1
- package/dist/src/designs/layouts/components/index.d.ts.map +1 -1
- package/dist/src/designs/layouts/index.d.ts +2 -0
- package/dist/src/designs/layouts/index.d.ts.map +1 -1
- package/dist/src/designs/providers/ModalProvider/components/Base.d.ts +6 -0
- package/dist/src/designs/providers/ModalProvider/components/Base.d.ts.map +1 -0
- package/dist/src/designs/providers/ModalProvider/components/Confirm.d.ts +6 -0
- package/dist/src/designs/providers/ModalProvider/components/Confirm.d.ts.map +1 -0
- package/dist/src/designs/providers/ModalProvider/components/Loading.d.ts +6 -0
- package/dist/src/designs/providers/ModalProvider/components/Loading.d.ts.map +1 -0
- package/dist/src/designs/providers/ModalProvider/index.d.ts +10 -0
- package/dist/src/designs/providers/ModalProvider/index.d.ts.map +1 -0
- package/dist/src/{preference/constants.d.ts → enums/dashboard.d.ts} +4 -8
- package/dist/src/enums/dashboard.d.ts.map +1 -0
- package/dist/src/enums/index.d.ts +4 -0
- package/dist/src/enums/index.d.ts.map +1 -0
- package/dist/src/enums/language.d.ts +13 -0
- package/dist/src/enums/language.d.ts.map +1 -0
- package/dist/src/enums/theme.d.ts +107 -0
- package/dist/src/enums/theme.d.ts.map +1 -0
- package/dist/src/hooks/index.d.ts +2 -4
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/preference.d.ts +21 -0
- package/dist/src/hooks/preference.d.ts.map +1 -0
- package/dist/src/icons/animated/accessibility-icon.d.ts +13 -0
- package/dist/src/icons/animated/accessibility-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/airplane-icon.d.ts +9 -0
- package/dist/src/icons/animated/airplane-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/alarm-clock-plus-icon.d.ts +11 -0
- package/dist/src/icons/animated/alarm-clock-plus-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/align-center-icon.d.ts +4 -0
- package/dist/src/icons/animated/align-center-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/align-vertical-space-around-icon.d.ts +4 -0
- package/dist/src/icons/animated/align-vertical-space-around-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/ambulance-icon.d.ts +4 -0
- package/dist/src/icons/animated/ambulance-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/ampersand-icon.d.ts +4 -0
- package/dist/src/icons/animated/ampersand-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/angry-icon.d.ts +4 -0
- package/dist/src/icons/animated/angry-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/annoyed-icon.d.ts +4 -0
- package/dist/src/icons/animated/annoyed-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/apple-brand-logo.d.ts +4 -0
- package/dist/src/icons/animated/apple-brand-logo.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-back-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-back-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-back-up-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-back-up-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-down-dash-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-down-dash-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-down-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-down-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-left-dash-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-left-dash-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-left-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-left-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-right-dash-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-right-dash-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-right-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-right-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-up-dash-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-up-dash-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-big-up-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-big-up-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-down-0-1-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-down-0-1-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-down-1-0-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-down-1-0-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-down-a-z-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-down-a-z-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-down-dashed-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-down-dashed-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-down-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-down-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-left-dashed-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-left-dashed-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-left-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-left-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-right-dashed-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-right-dashed-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-right-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-right-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-up-dashed-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-up-dashed-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/arrow-narrow-up-icon.d.ts +4 -0
- package/dist/src/icons/animated/arrow-narrow-up-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/at-sign-icon.d.ts +4 -0
- package/dist/src/icons/animated/at-sign-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/banana-icon.d.ts +4 -0
- package/dist/src/icons/animated/banana-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/battery-charging-icon.d.ts +4 -0
- package/dist/src/icons/animated/battery-charging-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/battery-icon.d.ts +4 -0
- package/dist/src/icons/animated/battery-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/battery-pause-icon.d.ts +4 -0
- package/dist/src/icons/animated/battery-pause-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/bell-off-icon.d.ts +4 -0
- package/dist/src/icons/animated/bell-off-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/bluetooth-connected-icon.d.ts +4 -0
- package/dist/src/icons/animated/bluetooth-connected-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/book-icon.d.ts +4 -0
- package/dist/src/icons/animated/book-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/bookmark-icon.d.ts +4 -0
- package/dist/src/icons/animated/bookmark-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brain-circuit-icon.d.ts +4 -0
- package/dist/src/icons/animated/brain-circuit-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-aistudio-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-aistudio-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-anthropic-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-anthropic-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-aws-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-aws-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-bags-fm-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-bags-fm-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-chrome-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-chrome-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-cursor-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-cursor-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-gemini-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-gemini-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-google-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-google-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-grok-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-grok-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-lmstudio-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-lmstudio-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-midjourney-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-midjourney-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-nextjs-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-nextjs-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-notion-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-notion-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-ollama-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-ollama-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-openai-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-openai-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-paypal-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-paypal-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-qwen-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-qwen-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-railway-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-railway-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-react-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-react-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-react-native-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-react-native-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-stripe-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-stripe-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-telegram-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-telegram-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-threads-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-threads-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-twitch-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-twitch-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-vercel-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-vercel-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-windows-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-windows-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-wordpress-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-wordpress-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-xai-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-xai-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brand-zoom-icon.d.ts +4 -0
- package/dist/src/icons/animated/brand-zoom-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/brightness-down-icon.d.ts +4 -0
- package/dist/src/icons/animated/brightness-down-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/bug-icon.d.ts +4 -0
- package/dist/src/icons/animated/bug-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/bulb-svg.d.ts +4 -0
- package/dist/src/icons/animated/bulb-svg.d.ts.map +1 -0
- package/dist/src/icons/animated/camera-icon.d.ts +4 -0
- package/dist/src/icons/animated/camera-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/camera-off-icon.d.ts +4 -0
- package/dist/src/icons/animated/camera-off-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/candy-cane-icon.d.ts +4 -0
- package/dist/src/icons/animated/candy-cane-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/cart-icon.d.ts +4 -0
- package/dist/src/icons/animated/cart-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/chart-bar-icon.d.ts +4 -0
- package/dist/src/icons/animated/chart-bar-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/chart-covariate-icon.d.ts +4 -0
- package/dist/src/icons/animated/chart-covariate-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/chart-histogram-icon.d.ts +4 -0
- package/dist/src/icons/animated/chart-histogram-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/chart-line-icon.d.ts +4 -0
- package/dist/src/icons/animated/chart-line-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/chart-pie-icon.d.ts +4 -0
- package/dist/src/icons/animated/chart-pie-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/checked-icon.d.ts +4 -0
- package/dist/src/icons/animated/checked-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/clock-icon.d.ts +4 -0
- package/dist/src/icons/animated/clock-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/cloud-1-icon.d.ts +4 -0
- package/dist/src/icons/animated/cloud-1-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/cloud-2-icon.d.ts +4 -0
- package/dist/src/icons/animated/cloud-2-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/cloud-3-icon.d.ts +4 -0
- package/dist/src/icons/animated/cloud-3-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/code-icon.d.ts +4 -0
- package/dist/src/icons/animated/code-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/code-xml-icon.d.ts +4 -0
- package/dist/src/icons/animated/code-xml-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/coffee-icon.d.ts +4 -0
- package/dist/src/icons/animated/coffee-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/coin-bitcoin-icon.d.ts +4 -0
- package/dist/src/icons/animated/coin-bitcoin-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/copy-icon.d.ts +4 -0
- package/dist/src/icons/animated/copy-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/copy-off-icon.d.ts +4 -0
- package/dist/src/icons/animated/copy-off-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/copyright-icon.d.ts +4 -0
- package/dist/src/icons/animated/copyright-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/cpu-icon.d.ts +4 -0
- package/dist/src/icons/animated/cpu-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/credit-card.d.ts +4 -0
- package/dist/src/icons/animated/credit-card.d.ts.map +1 -0
- package/dist/src/icons/animated/currency-bitcoin-icon.d.ts +4 -0
- package/dist/src/icons/animated/currency-bitcoin-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/currency-dollar-icon.d.ts +4 -0
- package/dist/src/icons/animated/currency-dollar-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/currency-ethereum-icon.d.ts +4 -0
- package/dist/src/icons/animated/currency-ethereum-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/currency-euro-icon.d.ts +4 -0
- package/dist/src/icons/animated/currency-euro-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/currency-rupee-icon.d.ts +4 -0
- package/dist/src/icons/animated/currency-rupee-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/device-airpods-icon.d.ts +4 -0
- package/dist/src/icons/animated/device-airpods-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/dialpad-icon.d.ts +4 -0
- package/dist/src/icons/animated/dialpad-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/dino-icon.d.ts +4 -0
- package/dist/src/icons/animated/dino-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/discord-icon.d.ts +4 -0
- package/dist/src/icons/animated/discord-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/docker-icon.d.ts +4 -0
- package/dist/src/icons/animated/docker-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/dots-horizontal-icon.d.ts +4 -0
- package/dist/src/icons/animated/dots-horizontal-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/dots-vertical-icon.d.ts +4 -0
- package/dist/src/icons/animated/dots-vertical-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/double-check-icon.d.ts +4 -0
- package/dist/src/icons/animated/double-check-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/down-chevron.d.ts +4 -0
- package/dist/src/icons/animated/down-chevron.d.ts.map +1 -0
- package/dist/src/icons/animated/download-icon.d.ts +4 -0
- package/dist/src/icons/animated/download-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/drum-icon.d.ts +4 -0
- package/dist/src/icons/animated/drum-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/expand-icon.d.ts +4 -0
- package/dist/src/icons/animated/expand-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/external-link-icon.d.ts +4 -0
- package/dist/src/icons/animated/external-link-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/eye-icon.d.ts +4 -0
- package/dist/src/icons/animated/eye-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/eye-off-icon.d.ts +4 -0
- package/dist/src/icons/animated/eye-off-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/facebook-icon.d.ts +4 -0
- package/dist/src/icons/animated/facebook-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/figma-icon.d.ts +4 -0
- package/dist/src/icons/animated/figma-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/file-description-icon.d.ts +4 -0
- package/dist/src/icons/animated/file-description-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/filled-bell-icon.d.ts +4 -0
- package/dist/src/icons/animated/filled-bell-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/filled-checked-icon.d.ts +4 -0
- package/dist/src/icons/animated/filled-checked-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/filter-icon.d.ts +4 -0
- package/dist/src/icons/animated/filter-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/flame-icon.d.ts +4 -0
- package/dist/src/icons/animated/flame-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/focus-icon.d.ts +4 -0
- package/dist/src/icons/animated/focus-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/gamepad-icon.d.ts +4 -0
- package/dist/src/icons/animated/gamepad-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/gauge-icon.d.ts +4 -0
- package/dist/src/icons/animated/gauge-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/gear-icon.d.ts +4 -0
- package/dist/src/icons/animated/gear-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/ghost-icon.d.ts +4 -0
- package/dist/src/icons/animated/ghost-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/github-copilot-icon.d.ts +4 -0
- package/dist/src/icons/animated/github-copilot-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/github-icon.d.ts +4 -0
- package/dist/src/icons/animated/github-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/gitlab-icon.d.ts +4 -0
- package/dist/src/icons/animated/gitlab-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/globe-icon.d.ts +4 -0
- package/dist/src/icons/animated/globe-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/gmail-icon.d.ts +4 -0
- package/dist/src/icons/animated/gmail-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/golang-icon.d.ts +4 -0
- package/dist/src/icons/animated/golang-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/hand-heart-icon.d.ts +4 -0
- package/dist/src/icons/animated/hand-heart-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/hashtag-icon.d.ts +4 -0
- package/dist/src/icons/animated/hashtag-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/heart-icon.d.ts +4 -0
- package/dist/src/icons/animated/heart-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/history-circle-icon.d.ts +4 -0
- package/dist/src/icons/animated/history-circle-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/home-icon.d.ts +4 -0
- package/dist/src/icons/animated/home-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/hotel-icon.d.ts +4 -0
- package/dist/src/icons/animated/hotel-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/index.d.ts +267 -0
- package/dist/src/icons/animated/index.d.ts.map +1 -0
- package/dist/src/icons/animated/info-circle-icon.d.ts +4 -0
- package/dist/src/icons/animated/info-circle-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/instagram-icon.d.ts +4 -0
- package/dist/src/icons/animated/instagram-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/javascript-icon.d.ts +4 -0
- package/dist/src/icons/animated/javascript-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/keyframes-icon.d.ts +4 -0
- package/dist/src/icons/animated/keyframes-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/layers-icon.d.ts +4 -0
- package/dist/src/icons/animated/layers-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/layout-bottombar-collapse-icon.d.ts +4 -0
- package/dist/src/icons/animated/layout-bottombar-collapse-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/layout-dashboard-icon.d.ts +4 -0
- package/dist/src/icons/animated/layout-dashboard-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/layout-sidebar-right-collapse-icon.d.ts +4 -0
- package/dist/src/icons/animated/layout-sidebar-right-collapse-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/layout-sidebar-right-icon.d.ts +4 -0
- package/dist/src/icons/animated/layout-sidebar-right-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-a-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-a-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-b-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-b-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-c-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-c-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-d-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-d-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-e-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-e-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-f-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-f-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-g-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-g-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-h-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-h-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-i-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-i-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-j-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-j-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-k-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-k-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-l-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-l-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-m-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-m-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-n-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-n-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-o-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-o-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-p-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-p-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-q-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-q-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-r-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-r-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-s-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-s-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-t-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-t-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-u-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-u-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-v-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-v-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-w-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-w-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-x-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-x-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-y-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-y-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/letter-z-icon.d.ts +4 -0
- package/dist/src/icons/animated/letter-z-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/library-icon.d.ts +4 -0
- package/dist/src/icons/animated/library-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/like-icon.d.ts +4 -0
- package/dist/src/icons/animated/like-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/link-icon.d.ts +4 -0
- package/dist/src/icons/animated/link-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/linkedin-icon.d.ts +4 -0
- package/dist/src/icons/animated/linkedin-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/locate-icon.d.ts +4 -0
- package/dist/src/icons/animated/locate-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/lock-icon.d.ts +4 -0
- package/dist/src/icons/animated/lock-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/logout-icon.d.ts +4 -0
- package/dist/src/icons/animated/logout-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/magnifier-icon.d.ts +4 -0
- package/dist/src/icons/animated/magnifier-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/mail-filled-icon.d.ts +4 -0
- package/dist/src/icons/animated/mail-filled-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/map-pin-icon.d.ts +4 -0
- package/dist/src/icons/animated/map-pin-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/meh-icon.d.ts +4 -0
- package/dist/src/icons/animated/meh-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/message-circle-icon.d.ts +4 -0
- package/dist/src/icons/animated/message-circle-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/moon-icon.d.ts +4 -0
- package/dist/src/icons/animated/moon-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/mouse-pointer-2-icon.d.ts +4 -0
- package/dist/src/icons/animated/mouse-pointer-2-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/mysql-icon.d.ts +4 -0
- package/dist/src/icons/animated/mysql-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/nodejs-icon.d.ts +4 -0
- package/dist/src/icons/animated/nodejs-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/paint-icon.d.ts +4 -0
- package/dist/src/icons/animated/paint-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/party-popper-icon.d.ts +4 -0
- package/dist/src/icons/animated/party-popper-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/passport-icon.d.ts +4 -0
- package/dist/src/icons/animated/passport-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/paw-print-icon.d.ts +4 -0
- package/dist/src/icons/animated/paw-print-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/pen-icon.d.ts +4 -0
- package/dist/src/icons/animated/pen-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/phone-volume.d.ts +4 -0
- package/dist/src/icons/animated/phone-volume.d.ts.map +1 -0
- package/dist/src/icons/animated/pinterest-icon.d.ts +4 -0
- package/dist/src/icons/animated/pinterest-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/player-icon.d.ts +4 -0
- package/dist/src/icons/animated/player-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/plug-connected-icon.d.ts +4 -0
- package/dist/src/icons/animated/plug-connected-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/plug-connected-x-icon.d.ts +4 -0
- package/dist/src/icons/animated/plug-connected-x-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/python-icon.d.ts +4 -0
- package/dist/src/icons/animated/python-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/qrcode-icon.d.ts +4 -0
- package/dist/src/icons/animated/qrcode-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/question-mark.d.ts +4 -0
- package/dist/src/icons/animated/question-mark.d.ts.map +1 -0
- package/dist/src/icons/animated/radio-icon.d.ts +4 -0
- package/dist/src/icons/animated/radio-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/rainbow-icon.d.ts +4 -0
- package/dist/src/icons/animated/rainbow-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/refresh-icon.d.ts +4 -0
- package/dist/src/icons/animated/refresh-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/right-chevron.d.ts +4 -0
- package/dist/src/icons/animated/right-chevron.d.ts.map +1 -0
- package/dist/src/icons/animated/rocket-icon.d.ts +4 -0
- package/dist/src/icons/animated/rocket-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/rosette-discount-check-icon.d.ts +4 -0
- package/dist/src/icons/animated/rosette-discount-check-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/rosette-discount-icon.d.ts +4 -0
- package/dist/src/icons/animated/rosette-discount-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/router-icon.d.ts +4 -0
- package/dist/src/icons/animated/router-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/satellite-dish-icon.d.ts +4 -0
- package/dist/src/icons/animated/satellite-dish-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/save-icon.d.ts +4 -0
- package/dist/src/icons/animated/save-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/scan-barcode-icon.d.ts +4 -0
- package/dist/src/icons/animated/scan-barcode-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/scan-heart-icon.d.ts +4 -0
- package/dist/src/icons/animated/scan-heart-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/send-horizontal-icon.d.ts +4 -0
- package/dist/src/icons/animated/send-horizontal-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/send-icon.d.ts +4 -0
- package/dist/src/icons/animated/send-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/shield-check.d.ts +4 -0
- package/dist/src/icons/animated/shield-check.d.ts.map +1 -0
- package/dist/src/icons/animated/shopping-cart-icon.d.ts +4 -0
- package/dist/src/icons/animated/shopping-cart-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/simple-checked-icon.d.ts +4 -0
- package/dist/src/icons/animated/simple-checked-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/skull-emoji.d.ts +4 -0
- package/dist/src/icons/animated/skull-emoji.d.ts.map +1 -0
- package/dist/src/icons/animated/slack-icon.d.ts +4 -0
- package/dist/src/icons/animated/slack-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/sliders-horizontal-icon.d.ts +4 -0
- package/dist/src/icons/animated/sliders-horizontal-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/snapchat-icon.d.ts +4 -0
- package/dist/src/icons/animated/snapchat-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/soup-icon.d.ts +4 -0
- package/dist/src/icons/animated/soup-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/sparkles-icon.d.ts +4 -0
- package/dist/src/icons/animated/sparkles-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/spotify-icon.d.ts +4 -0
- package/dist/src/icons/animated/spotify-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/stack-3-icon.d.ts +4 -0
- package/dist/src/icons/animated/stack-3-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/stack-icon.d.ts +4 -0
- package/dist/src/icons/animated/stack-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/star-icon.d.ts +4 -0
- package/dist/src/icons/animated/star-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/subscript-icon.d.ts +4 -0
- package/dist/src/icons/animated/subscript-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/target-icon.d.ts +4 -0
- package/dist/src/icons/animated/target-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/telephone-icon.d.ts +4 -0
- package/dist/src/icons/animated/telephone-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/terminal-icon.d.ts +4 -0
- package/dist/src/icons/animated/terminal-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/toggle-icon.d.ts +4 -0
- package/dist/src/icons/animated/toggle-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/trash-icon.d.ts +9 -0
- package/dist/src/icons/animated/trash-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/travel-bag.d.ts +4 -0
- package/dist/src/icons/animated/travel-bag.d.ts.map +1 -0
- package/dist/src/icons/animated/triangle-alert-icon.d.ts +4 -0
- package/dist/src/icons/animated/triangle-alert-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/trophy-icon.d.ts +4 -0
- package/dist/src/icons/animated/trophy-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/truck-electric-icon.d.ts +4 -0
- package/dist/src/icons/animated/truck-electric-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/twitter-icon.d.ts +4 -0
- package/dist/src/icons/animated/twitter-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/twitter-x-icon.d.ts +4 -0
- package/dist/src/icons/animated/twitter-x-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/types.d.ts +33 -0
- package/dist/src/icons/animated/types.d.ts.map +1 -0
- package/dist/src/icons/animated/typescript-icon.d.ts +4 -0
- package/dist/src/icons/animated/typescript-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/unlink-icon.d.ts +4 -0
- package/dist/src/icons/animated/unlink-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/unordered-list-icon.d.ts +4 -0
- package/dist/src/icons/animated/unordered-list-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/upload-icon.d.ts +4 -0
- package/dist/src/icons/animated/upload-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/useAnimatedIconTrigger.d.ts +8 -0
- package/dist/src/icons/animated/useAnimatedIconTrigger.d.ts.map +1 -0
- package/dist/src/icons/animated/user-check-icon.d.ts +4 -0
- package/dist/src/icons/animated/user-check-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/user-icon.d.ts +4 -0
- package/dist/src/icons/animated/user-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/user-plus-icon.d.ts +4 -0
- package/dist/src/icons/animated/user-plus-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/users-group-icon.d.ts +4 -0
- package/dist/src/icons/animated/users-group-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/users-icon.d.ts +4 -0
- package/dist/src/icons/animated/users-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/vinyl-icon.d.ts +4 -0
- package/dist/src/icons/animated/vinyl-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/volume-2-icon.d.ts +4 -0
- package/dist/src/icons/animated/volume-2-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/volume-x-icon.d.ts +4 -0
- package/dist/src/icons/animated/volume-x-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/wallet-icon.d.ts +4 -0
- package/dist/src/icons/animated/wallet-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/washing-machine-icon.d.ts +4 -0
- package/dist/src/icons/animated/washing-machine-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/whatsapp-icon.d.ts +4 -0
- package/dist/src/icons/animated/whatsapp-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/wifi-icon.d.ts +4 -0
- package/dist/src/icons/animated/wifi-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/wifi-off-icon.d.ts +4 -0
- package/dist/src/icons/animated/wifi-off-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/world-icon.d.ts +4 -0
- package/dist/src/icons/animated/world-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/x-icon.d.ts +4 -0
- package/dist/src/icons/animated/x-icon.d.ts.map +1 -0
- package/dist/src/icons/animated/youtube-icon.d.ts +4 -0
- package/dist/src/icons/animated/youtube-icon.d.ts.map +1 -0
- package/dist/src/icons/index.d.ts +1 -0
- package/dist/src/icons/index.d.ts.map +1 -1
- package/dist/src/icons/lucide.d.ts +1 -1
- package/dist/src/icons/lucide.d.ts.map +1 -1
- package/dist/src/languages/hooks/index.d.ts +1 -1
- package/dist/src/languages/hooks/index.d.ts.map +1 -1
- package/dist/src/languages/hooks/useLanguageLabel.d.ts +8 -7
- package/dist/src/languages/hooks/useLanguageLabel.d.ts.map +1 -1
- package/dist/src/languages/hooks/usePreferenceLabel.d.ts +1 -1
- package/dist/src/languages/hooks/usePreferenceLabel.d.ts.map +1 -1
- package/dist/src/languages/hooks/useThemeLabel.d.ts +4 -5
- package/dist/src/languages/hooks/useThemeLabel.d.ts.map +1 -1
- package/dist/src/languages/index.d.ts +0 -2
- package/dist/src/languages/index.d.ts.map +1 -1
- package/dist/src/languages/languages/i18n.d.ts +4 -7
- package/dist/src/languages/languages/i18n.d.ts.map +1 -1
- package/dist/src/languages/languages/i18nResources.d.ts +1 -1
- package/dist/src/languages/languages/i18nResources.d.ts.map +1 -1
- package/dist/src/languages/resources/index.d.ts +2 -2
- package/dist/src/languages/types/components.d.ts +1 -24
- package/dist/src/languages/types/components.d.ts.map +1 -1
- package/dist/src/languages/types/i18n.d.ts +1 -4
- package/dist/src/languages/types/i18n.d.ts.map +1 -1
- package/dist/src/languages/types/language.d.ts +2 -11
- package/dist/src/languages/types/language.d.ts.map +1 -1
- package/dist/src/languages/utils/getLocalLanguage.d.ts +1 -1
- package/dist/src/languages/utils/getLocalLanguage.d.ts.map +1 -1
- package/dist/src/languages/utils/languageStorage.d.ts +2 -3
- package/dist/src/languages/utils/languageStorage.d.ts.map +1 -1
- package/dist/src/providers/LanguageProvider/index.d.ts +19 -0
- package/dist/src/providers/LanguageProvider/index.d.ts.map +1 -0
- package/dist/src/providers/ThemeProvider/index.d.ts +17 -0
- package/dist/src/providers/ThemeProvider/index.d.ts.map +1 -0
- package/dist/src/providers/index.d.ts +7 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/stores/index.d.ts +4 -0
- package/dist/src/stores/index.d.ts.map +1 -1
- package/dist/src/stores/layout.d.ts +41 -0
- package/dist/src/stores/layout.d.ts.map +1 -0
- package/dist/src/stores/makeStore.d.ts +1 -1
- package/dist/src/stores/modal.d.ts +67 -0
- package/dist/src/stores/modal.d.ts.map +1 -0
- package/dist/src/stores/preference.d.ts +52 -0
- package/dist/src/stores/preference.d.ts.map +1 -0
- package/dist/src/themes/fonts.d.ts +21 -0
- package/dist/src/themes/fonts.d.ts.map +1 -0
- package/dist/src/themes/hooks/index.d.ts +1 -3
- package/dist/src/themes/hooks/index.d.ts.map +1 -1
- package/dist/src/themes/hooks/useTheme.d.ts +25 -9
- package/dist/src/themes/hooks/useTheme.d.ts.map +1 -1
- package/dist/src/themes/index.d.ts +3 -4
- package/dist/src/themes/index.d.ts.map +1 -1
- package/dist/src/themes/radix/index.d.ts +2 -0
- package/dist/src/themes/radix/index.d.ts.map +1 -0
- package/dist/src/themes/radix/mappings.d.ts +39 -0
- package/dist/src/themes/radix/mappings.d.ts.map +1 -0
- package/dist/src/themes/types/components.d.ts +1 -24
- package/dist/src/themes/types/components.d.ts.map +1 -1
- package/dist/src/themes/types/context.d.ts +6 -12
- package/dist/src/themes/types/context.d.ts.map +1 -1
- package/dist/src/themes/types/index.d.ts +1 -6
- package/dist/src/themes/types/index.d.ts.map +1 -1
- package/dist/src/themes/types/theme.d.ts +15 -26
- package/dist/src/themes/types/theme.d.ts.map +1 -1
- package/dist/src/utils/factory/hooks.d.ts +44 -0
- package/dist/src/utils/factory/hooks.d.ts.map +1 -0
- package/dist/src/utils/factory/index.d.ts +2 -0
- package/dist/src/utils/factory/index.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/safe.d.ts +4 -0
- package/dist/src/utils/safe.d.ts.map +1 -1
- package/dist/stores.cjs +1 -4
- package/dist/stores.mjs +32 -164
- package/dist/themes.cjs +2 -4
- package/dist/themes.mjs +27 -1473
- package/dist/types.cjs +0 -1
- package/dist/types.mjs +0 -1
- package/dist/utils.cjs +1 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.mjs +163 -181
- package/dist/utils.mjs.map +1 -1
- package/package.json +101 -43
- package/dist/chunk-BounceLoading-C-gq-XVr.mjs +0 -241
- package/dist/chunk-BounceLoading-C-gq-XVr.mjs.map +0 -1
- package/dist/chunk-BounceLoading-CkxvzNz8.cjs +0 -11
- package/dist/chunk-BounceLoading-CkxvzNz8.cjs.map +0 -1
- package/dist/chunk-animations-CiJbVYGC.mjs +0 -741
- package/dist/chunk-animations-CiJbVYGC.mjs.map +0 -1
- package/dist/chunk-animations-i85rn79V.cjs +0 -3
- package/dist/chunk-animations-i85rn79V.cjs.map +0 -1
- package/dist/chunk-chunk-D-Fg7nx1.cjs +0 -1
- package/dist/chunk-i18n-2-xL4pEi.cjs +0 -3
- package/dist/chunk-i18n-2-xL4pEi.cjs.map +0 -1
- package/dist/chunk-i18n-DgaoEbGL.mjs +0 -214
- package/dist/chunk-i18n-DgaoEbGL.mjs.map +0 -1
- package/dist/chunk-language-2r4uKROB.cjs +0 -3
- package/dist/chunk-language-2r4uKROB.cjs.map +0 -1
- package/dist/chunk-language-JRs5UIa2.mjs +0 -11
- package/dist/chunk-language-JRs5UIa2.mjs.map +0 -1
- package/dist/chunk-layout-BEAgFhif.mjs +0 -11
- package/dist/chunk-layout-BEAgFhif.mjs.map +0 -1
- package/dist/chunk-layout-mMQXuBLE.cjs +0 -3
- package/dist/chunk-layout-mMQXuBLE.cjs.map +0 -1
- package/dist/chunk-lucide-B99NZWfa.mjs +0 -158
- package/dist/chunk-lucide-B99NZWfa.mjs.map +0 -1
- package/dist/chunk-lucide-XL6d5__j.cjs +0 -3
- package/dist/chunk-lucide-XL6d5__j.cjs.map +0 -1
- package/dist/chunk-preference-DMhhY1Pl.mjs +0 -60
- package/dist/chunk-preference-DMhhY1Pl.mjs.map +0 -1
- package/dist/chunk-preference-DbNgeGhx.cjs +0 -3
- package/dist/chunk-preference-DbNgeGhx.cjs.map +0 -1
- package/dist/chunk-theme-CINVDd47.mjs +0 -17
- package/dist/chunk-theme-CINVDd47.mjs.map +0 -1
- package/dist/chunk-theme-D49XQfXe.cjs +0 -3
- package/dist/chunk-theme-D49XQfXe.cjs.map +0 -1
- package/dist/chunk-useLayout-BAIFfydj.cjs +0 -3
- package/dist/chunk-useLayout-BAIFfydj.cjs.map +0 -1
- package/dist/chunk-useLayout-BXsJlpcb.mjs +0 -12
- package/dist/chunk-useLayout-BXsJlpcb.mjs.map +0 -1
- package/dist/chunk-useTheme-BY1_pW9y.mjs +0 -13
- package/dist/chunk-useTheme-BY1_pW9y.mjs.map +0 -1
- package/dist/chunk-useTheme-Tw_7_cQf.cjs +0 -3
- package/dist/chunk-useTheme-Tw_7_cQf.cjs.map +0 -1
- package/dist/hooks.cjs.map +0 -1
- package/dist/hooks.mjs.map +0 -1
- package/dist/pixel-blast.cjs.map +0 -1
- package/dist/pixel-blast.mjs.map +0 -1
- package/dist/preference.cjs +0 -2
- package/dist/preference.mjs +0 -10
- package/dist/src/designs/components/Button/index.d.ts +0 -32
- package/dist/src/designs/components/Button/index.d.ts.map +0 -1
- package/dist/src/designs/components/Dropdown/index.d.ts +0 -25
- package/dist/src/designs/components/Dropdown/index.d.ts.map +0 -1
- package/dist/src/designs/components/Input/index.d.ts +0 -35
- package/dist/src/designs/components/Input/index.d.ts.map +0 -1
- package/dist/src/designs/components/KeyValueEditor/index.d.ts +0 -44
- package/dist/src/designs/components/KeyValueEditor/index.d.ts.map +0 -1
- package/dist/src/designs/components/SearchInput/index.d.ts +0 -15
- package/dist/src/designs/components/SearchInput/index.d.ts.map +0 -1
- package/dist/src/designs/components/ShowFilter/index.d.ts +0 -40
- package/dist/src/designs/components/ShowFilter/index.d.ts.map +0 -1
- package/dist/src/designs/components/SlideDownSwitcher/index.d.ts +0 -17
- package/dist/src/designs/components/SlideDownSwitcher/index.d.ts.map +0 -1
- package/dist/src/designs/components/Slider/index.d.ts +0 -39
- package/dist/src/designs/components/Slider/index.d.ts.map +0 -1
- package/dist/src/designs/components/Textarea/index.d.ts +0 -33
- package/dist/src/designs/components/Textarea/index.d.ts.map +0 -1
- package/dist/src/hooks/makeCursorFetchFunction.d.ts +0 -85
- package/dist/src/hooks/makeCursorFetchFunction.d.ts.map +0 -1
- package/dist/src/hooks/makeUnifiedInfiniteQuery.d.ts +0 -125
- package/dist/src/hooks/makeUnifiedInfiniteQuery.d.ts.map +0 -1
- package/dist/src/hooks/makeUnifiedQuery.d.ts +0 -20
- package/dist/src/hooks/makeUnifiedQuery.d.ts.map +0 -1
- package/dist/src/hooks/type.d.ts +0 -41
- package/dist/src/hooks/type.d.ts.map +0 -1
- package/dist/src/languages/providers/index.d.ts +0 -8
- package/dist/src/languages/providers/index.d.ts.map +0 -1
- package/dist/src/preference/constants.d.ts.map +0 -1
- package/dist/src/preference/core.d.ts +0 -12
- package/dist/src/preference/core.d.ts.map +0 -1
- package/dist/src/preference/index.d.ts +0 -27
- package/dist/src/preference/index.d.ts.map +0 -1
- package/dist/src/preference/nfx_slice.d.ts +0 -24
- package/dist/src/preference/nfx_slice.d.ts.map +0 -1
- package/dist/src/preference/types.d.ts +0 -28
- package/dist/src/preference/types.d.ts.map +0 -1
- package/dist/src/themes/hooks/useBaseVariables.d.ts +0 -8
- package/dist/src/themes/hooks/useBaseVariables.d.ts.map +0 -1
- package/dist/src/themes/hooks/useThemeVariables.d.ts +0 -11
- package/dist/src/themes/hooks/useThemeVariables.d.ts.map +0 -1
- package/dist/src/themes/hooks/useVariables.d.ts +0 -8
- package/dist/src/themes/hooks/useVariables.d.ts.map +0 -1
- package/dist/src/themes/providers/index.d.ts +0 -8
- package/dist/src/themes/providers/index.d.ts.map +0 -1
- package/dist/src/themes/themes/bases/android.d.ts +0 -5
- package/dist/src/themes/themes/bases/android.d.ts.map +0 -1
- package/dist/src/themes/themes/bases/default.d.ts +0 -6
- package/dist/src/themes/themes/bases/default.d.ts.map +0 -1
- package/dist/src/themes/themes/bases/index.d.ts +0 -9
- package/dist/src/themes/themes/bases/index.d.ts.map +0 -1
- package/dist/src/themes/themes/bases/ios.d.ts +0 -5
- package/dist/src/themes/themes/bases/ios.d.ts.map +0 -1
- package/dist/src/themes/themes/bases/linux.d.ts +0 -5
- package/dist/src/themes/themes/bases/linux.d.ts.map +0 -1
- package/dist/src/themes/themes/bases/windows.d.ts +0 -5
- package/dist/src/themes/themes/bases/windows.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/coffee.d.ts +0 -8
- package/dist/src/themes/themes/colors/coffee.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/corporate.d.ts +0 -8
- package/dist/src/themes/themes/colors/corporate.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/cosmic.d.ts +0 -8
- package/dist/src/themes/themes/colors/cosmic.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/dark.d.ts +0 -8
- package/dist/src/themes/themes/colors/dark.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/default.d.ts +0 -8
- package/dist/src/themes/themes/colors/default.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/forest.d.ts +0 -8
- package/dist/src/themes/themes/colors/forest.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/index.d.ts +0 -14
- package/dist/src/themes/themes/colors/index.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/light.d.ts +0 -8
- package/dist/src/themes/themes/colors/light.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/wheat.d.ts +0 -8
- package/dist/src/themes/themes/colors/wheat.d.ts.map +0 -1
- package/dist/src/themes/themes/colors/wine.d.ts +0 -8
- package/dist/src/themes/themes/colors/wine.d.ts.map +0 -1
- package/dist/src/themes/themes/index.d.ts +0 -3
- package/dist/src/themes/themes/index.d.ts.map +0 -1
- package/dist/src/themes/utils/index.d.ts +0 -5
- package/dist/src/themes/utils/index.d.ts.map +0 -1
- package/dist/src/themes/utils/themeStorage.d.ts +0 -12
- package/dist/src/themes/utils/themeStorage.d.ts.map +0 -1
- package/dist/stores.cjs.map +0 -1
- package/dist/stores.mjs.map +0 -1
- package/dist/themes.cjs.map +0 -1
- package/dist/themes.mjs.map +0 -1
package/dist/layouts.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layouts.mjs","names":[],"sources":["../src/designs/layouts/utils/layoutStorage.ts","../src/designs/layouts/components/Sidebar/styles.module.css","../src/designs/layouts/components/Sidebar/index.tsx","../src/designs/layouts/components/Footer/styles.module.css","../src/designs/layouts/components/Footer/index.tsx","../src/designs/layouts/components/Header/styles.module.css","../src/designs/layouts/components/Header/index.tsx","../src/designs/layouts/components/MainWrapper/styles.module.css","../src/designs/layouts/components/MainWrapper/index.tsx","../src/designs/layouts/components/SideHideLayout/styles.module.css","../src/designs/layouts/components/SideHideLayout/index.tsx","../src/designs/layouts/components/SideShowLayout/styles.module.css","../src/designs/layouts/components/SideShowLayout/index.tsx","../src/designs/layouts/components/Background/styles.module.css","../src/designs/layouts/components/Background/index.tsx","../src/designs/layouts/components/LayoutFrame/index.tsx","../src/designs/layouts/hooks/useSet.ts","../src/designs/layouts/hooks/useAction.ts","../src/designs/layouts/providers/index.tsx"],"sourcesContent":["/**\n * 布局相关 localStorage 读写与移除,统一走 utils/lstorage。\n * Layout localStorage get/set/remove via utils/lstorage.\n */\nimport type { Nilable } from \"@/types/utils\";\nimport { getItem, removeItem, setItem } from \"@/utils/lstorage\";\n\nimport { LAYOUT_STORAGE_KEY } from \"../types\";\n\nexport function getLayoutStorage(): Nilable<string> {\n return getItem(LAYOUT_STORAGE_KEY);\n}\n\nexport function setLayoutStorage(value: string): void {\n setItem(LAYOUT_STORAGE_KEY, value);\n}\n\nexport function removeLayoutStorage(): void {\n removeItem(LAYOUT_STORAGE_KEY);\n}\n","/* Sidebar layout shell */\n.sidebar {\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.sidebarContent {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding-top: 1rem;\n}\n\n.menuWrapper {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.sidebarFooter {\n margin-top: auto;\n flex-shrink: 0;\n}\n\n/* Keep scroll behavior but hide track */\n.menuWrapper::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n\n.menuWrapper {\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n/* react-pro-sidebar overrides */\n.sidebar :global(.ps-sidebar-root) {\n min-height: 0 !important;\n overflow: hidden !important;\n display: flex !important;\n flex-direction: column !important;\n background-color: var(--color-bg-2) !important;\n border-right: 1px solid var(--color-separator) !important;\n}\n\n.sidebar :global(.ps-sidebar-container) {\n min-height: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n overflow: hidden !important;\n background-color: var(--color-bg-2) !important;\n color: var(--color-fg-text) !important;\n}\n\n.sidebar :global(.ps-menu-button) {\n margin: 0.125rem 0.5rem !important;\n padding: 0.5rem 0.75rem !important;\n border-radius: var(--radius-button) !important;\n color: var(--color-fg-text) !important;\n font-size: 0.875rem !important;\n transition:\n background-color 0.2s ease,\n color 0.2s ease !important;\n}\n\n.sidebar :global(.ps-menu-button:hover) {\n background-color: var(--color-bg-3) !important;\n color: var(--color-fg-text) !important;\n}\n\n.sidebar :global(.ps-menu-button.ps-active) {\n background-color: var(--color-primary) !important;\n color: var(--color-primary-fg) !important;\n}\n\n.sidebar :global(.ps-menu-button.ps-active .ps-menu-icon),\n.sidebar :global(.ps-menu-button.ps-active .ps-menu-label),\n.sidebar :global(.ps-menu-button.ps-active .ps-submenu-expand-icon) {\n color: var(--color-primary-fg) !important;\n}\n\n.sidebar :global(.ps-menu-icon) {\n width: 1.25rem !important;\n height: 1.25rem !important;\n color: var(--color-fg-text) !important;\n}\n\n.sidebar :global(.ps-submenu-content) {\n background-color: var(--color-bg-3) !important;\n overflow: hidden !important;\n padding-left: 1rem !important;\n}\n\n.sidebar :global(.ps-submenu-content .ps-submenu-content) {\n padding-left: 0.75rem !important;\n}\n\n.sidebar :global(.ps-submenu-content .ps-menu-button) {\n margin: 0.125rem 0.25rem !important;\n padding: 0.375rem 0.5rem 0.375rem 0.75rem !important;\n font-size: 0.8125rem !important;\n}\n/* Bottom logout area */\n.logoutContainer {\n padding: 0.5rem;\n border-top: 1px solid var(--color-separator);\n}\n\n.logoutButton {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n border: none;\n border-radius: var(--radius-button);\n background: transparent;\n color: var(--color-fg-text);\n font-size: 0.875rem;\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n transition:\n background-color 0.2s ease,\n color 0.2s ease;\n}\n\n.logoutButton:hover {\n background-color: var(--color-bg-3);\n}\n\n.logoutButton:active {\n transform: scale(0.98);\n}\n\n.logoutButton svg {\n flex-shrink: 0;\n color: inherit;\n}\n\n.hiddenText {\n opacity: 0;\n width: 0;\n max-width: 0;\n overflow: hidden;\n}\n\n.visibleText {\n opacity: 1;\n width: auto;\n max-width: 200px;\n}\n","import type { SidebarMenuItem, SidebarProps } from \"../../types\";\n\nimport { memo, useCallback, useMemo } from \"react\";\nimport { Menu, MenuItem, Sidebar as ProSidebar, SubMenu } from \"react-pro-sidebar\";\n\nimport { LogOut } from \"@/icons/lucide\";\n\nimport styles from \"./styles.module.css\";\n\n/**\n * 当前路径是否命中该菜单项。\n * 若有 siblingPaths(同组子项路径),则只有当前路径精确等于 path 或匹配 path 下的详情(非其它子项)时才命中,避免 /categories 与 /categories/add 同时高亮。\n */\nfunction isPathActive(current: string, path: string, siblingPaths?: string[]): boolean {\n if (current === path) return true;\n if (!current.startsWith(path + \"/\")) return false;\n if (siblingPaths?.length) {\n const matchedSibling = siblingPaths.some((s) => s !== path && (current === s || current.startsWith(s + \"/\")));\n if (matchedSibling) return false;\n }\n return true;\n}\n\nfunction isSubMenuActive(current: string, item: SidebarMenuItem): boolean {\n if (isPathActive(current, item.path, item.children?.map((c) => c.path))) return true;\n if (!item.children) return false;\n return item.children.some((child) => isPathActive(current, child.path, item.children?.map((c) => c.path)) || isSubMenuActive(current, child));\n}\n\nconst Sidebar = memo(\n ({\n children,\n collapsed = false,\n toggled = false,\n onBackdropClick,\n breakPoint = \"all\",\n className,\n items = [],\n currentPathname = \"\",\n onNavigate,\n logoutLabel = \"Logout\",\n handleLogout,\n bottomLogoutButton,\n headerHeight = 0,\n footerHeight = 0,\n }: SidebarProps) => {\n const handleItemClick = useCallback(\n (path: string) => {\n onNavigate?.(path);\n },\n [onNavigate],\n );\n\n const renderItem = useCallback(\n (item: SidebarMenuItem, siblingPaths?: string[]) => {\n const active = isPathActive(currentPathname, item.path, siblingPaths);\n if (item.children?.length) {\n const subActive = isSubMenuActive(currentPathname, item);\n return (\n <SubMenu key={item.path} label={item.label} icon={item.icon} active={subActive}>\n {item.children.map((child) => renderItem(child, item.children!.map((c) => c.path)))}\n </SubMenu>\n );\n }\n return (\n <MenuItem key={item.path} icon={item.icon} onClick={() => handleItemClick(item.path)} active={active}>\n {item.label}\n </MenuItem>\n );\n },\n [currentPathname, handleItemClick],\n );\n\n const menuContent =\n items.length > 0 ? (\n <Menu\n key={`${collapsed}-${toggled}`}\n transitionDuration={300}\n closeOnClick\n menuItemStyles={{\n button: {\n color: \"var(--color-fg-text)\",\n backgroundColor: \"transparent\",\n \"&:hover\": {\n backgroundColor: \"var(--color-bg-3)\",\n color: \"var(--color-fg-text)\",\n },\n \"&.active\": {\n backgroundColor: \"var(--color-primary)\",\n color: \"var(--color-primary-fg)\",\n },\n },\n icon: {\n color: \"var(--color-fg-text)\",\n \"&.active\": {\n color: \"var(--color-primary-fg)\",\n },\n },\n label: {\n color: \"var(--color-fg-text)\",\n \"&.active\": {\n color: \"var(--color-primary-fg)\",\n },\n },\n }}\n >\n {items.map((item) => renderItem(item))}\n </Menu>\n ) : null;\n\n const bottomLogoutButtonContent = useMemo(() => {\n if (bottomLogoutButton != null) return bottomLogoutButton;\n if (handleLogout != null) {\n return (\n <div className={styles.logoutContainer}>\n <button type=\"button\" className={styles.logoutButton} onClick={handleLogout} title={logoutLabel}>\n <LogOut size={20} />\n <span className={collapsed ? styles.hiddenText : styles.visibleText}>{logoutLabel}</span>\n </button>\n </div>\n );\n }\n return null;\n }, [collapsed, logoutLabel, handleLogout, bottomLogoutButton]);\n\n return (\n <ProSidebar\n collapsed={collapsed}\n toggled={toggled}\n onBackdropClick={onBackdropClick}\n breakPoint={breakPoint}\n backgroundColor=\"var(--color-bg-2)\"\n rootStyles={{\n border: \"none\",\n borderRight: \"1px solid var(--color-separator)\",\n marginTop: `${headerHeight}px`,\n marginBottom: `${footerHeight}px`,\n height: `calc(100vh - ${footerHeight + headerHeight}px) !important`,\n }}\n className={`${styles.sidebar} ${className || \"\"}`}\n >\n <div className={styles.sidebarContent} onWheel={(e) => e.stopPropagation()}>\n <div className={styles.menuWrapper}>{children ?? menuContent}</div>\n {bottomLogoutButtonContent != null ? <div className={styles.sidebarFooter}>{bottomLogoutButtonContent}</div> : null}\n </div>\n </ProSidebar>\n );\n },\n);\n\nSidebar.displayName = \"Sidebar\";\nexport default Sidebar;\n","/* ===== Footer Component ===== */\r\n\r\n.footer {\r\n background: var(--color-bg-2);\r\n padding: 0 2rem;\r\n width: 100%;\r\n}\r\n\r\n.footerContent {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n max-width: 100%;\r\n margin: 0 auto;\r\n}\r\n\r\n.copyright {\r\n color: var(--color-fg-text);\r\n font-size: 0.875rem;\r\n}\r\n\r\n.links {\r\n display: flex;\r\n gap: 1.5rem;\r\n}\r\n\r\n.link {\r\n color: var(--color-fg-text);\r\n font-size: 0.875rem;\r\n text-decoration: none;\r\n transition: color 0.3s ease;\r\n}\r\n\r\n.link:hover {\r\n color: var(--color-primary);\r\n}\r\n\r\n/* ===== 响应式 ===== */\r\n@media (max-width: 768px) {\r\n .footerContent {\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .links {\r\n gap: 1rem;\r\n }\r\n}\r\n","import type { FooterProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\nexport const DefaultFooterContent = memo(() => {\n const currentYear = new Date().getFullYear();\n return (\n <div className={styles.footerContent}>\n <span className={styles.copyright}>© {currentYear}</span>\n <div className={styles.links}>\n <a href=\"#\" className={styles.link}>\n About Us\n </a>\n <a href=\"#\" className={styles.link}>\n Privacy Policy\n </a>\n <a href=\"#\" className={styles.link}>\n Terms of Service\n </a>\n </div>\n </div>\n );\n});\nDefaultFooterContent.displayName = \"DefaultFooterContent\";\n\n/** 通用 Footer:只负责布局与样式,内容由外部传入。 */\nconst Footer = memo(({ children, className }: FooterProps) => {\n return <div className={`${styles.footer} ${className || \"\"}`}>{children ?? <DefaultFooterContent />}</div>;\n});\n\nFooter.displayName = \"Footer\";\n\nexport default Footer;\n","/* ===== Header - 主容器样式 ===== */\r\n\r\n.header {\r\n display: flex;\r\n width: 100%;\r\n padding: 0.5rem 2rem;\r\n}\r\n\r\n/* 左侧容器:占一半,左对齐 */\r\n.header> :first-child {\r\n flex: 1;\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n}\r\n\r\n/* 右侧容器:占一半,右对齐 */\r\n.header> :last-child {\r\n flex: 1;\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n}","import type { HeaderProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\n/** 通用 Header:只负责布局左右两栏,内容全部由外部传入,内部不获取数据。Generic header: layout only; all content from props. */\nconst Header = memo(({ leftContent, rightContent }: HeaderProps) => {\n return (\n <div className={styles.header}>\n <div>{leftContent}</div>\n <div>{rightContent}</div>\n </div>\n );\n});\n\nHeader.displayName = \"Header\";\nexport default Header;\n","/* ===== One Column Layout ===== */\r\n\r\n.layout {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100vh;\r\n width: 100%;\r\n background: var(--color-bg);\r\n position: relative;\r\n}\r\n\r\n/* ===== Header ===== */\r\n.header {\r\n position: fixed;\r\n top: 0;\r\n z-index: 100;\r\n background: var(--color-bg);\r\n width: 100%;\r\n box-shadow: 0 0.125rem 0.25rem 0 var(--color-shadow);\r\n}\r\n\r\n\r\n/* ===== Footer ===== */\r\n.footer {\r\n position: fixed;\r\n bottom: 0;\r\n width: 100%;\r\n z-index: 100;\r\n}\r\n","import type { MainWrapperProps } from \"../../types\";\n\nimport { memo, useCallback, useLayoutEffect, useRef, useState } from \"react\";\n\nimport Footer from \"../Footer\";\nimport Header from \"../Header\";\nimport styles from \"./styles.module.css\";\n\nfunction useElementHeight<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [height, setHeight] = useState(0);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n const observer = new ResizeObserver(([entry]) => {\n const nextHeight = entry?.contentRect.height ?? 0;\n setHeight((prev) => (prev !== nextHeight ? nextHeight : prev));\n });\n\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const callbackRef = useCallback((instance: T | null) => {\n if (instance) {\n ref.current = instance;\n }\n }, []);\n\n return [callbackRef, height] as const;\n}\n\nconst MainWrapper = memo(({ children, headerLeft, headerRight, footerContent }: MainWrapperProps) => {\n const [headerRef, headerHeight] = useElementHeight<HTMLDivElement>();\n const [footerRef, footerHeight] = useElementHeight<HTMLDivElement>();\n\n return (\n <div className={styles.layout}>\n <header ref={headerRef} className={styles.header}>\n <Header leftContent={headerLeft} rightContent={headerRight} />\n </header>\n\n {children(headerHeight, footerHeight)}\n\n {/* Footer */}\n <footer ref={footerRef} className={styles.footer}>\n <Footer>{footerContent}</Footer>\n </footer>\n </div>\n );\n});\n\nMainWrapper.displayName = \"MainWrapper\";\nexport default MainWrapper;\n",".mainWrapper {\n display: flex;\n flex: 1;\n position: relative;\n}\n\n/* Fixed strip between header and footer: z-index above footer (100) so the drawer is not painted under it */\n.sidebarChrome {\n position: fixed;\n left: 0;\n z-index: 101;\n box-sizing: border-box;\n}\n\n.sidebar {\n height: 100%;\n min-height: 0;\n}\n\n.content {\n flex: 1;\n background: var(--color-bg);\n overflow-y: auto;\n overflow-x: hidden;\n min-height: calc(100vh - 10rem);\n padding-top: 0;\n padding-bottom: 0;\n margin: 0;\n}\n\n@media (max-width: 768px) {\n .content {\n width: 100%;\n }\n .sidebarChrome {\n z-index: 999;\n }\n}\n","import type { SideHideLayoutProps } from \"../../types\";\n\nimport { memo, useCallback } from \"react\";\n\nimport useLayout from \"../../hooks/useLayout\";\nimport Sidebar from \"../Sidebar\";\nimport styles from \"./styles.module.css\";\n\nconst SideHideLayout = memo(\n ({\n children,\n headerHeight,\n footerHeight,\n sidebarItems,\n sidebarCurrentPathname,\n onSidebarNavigate,\n sidebarLogoutLabel,\n onSidebarLogout,\n bottomLogoutButton,\n }: SideHideLayoutProps) => {\n const { sidebarOpen, closeSidebar } = useLayout();\n\n const handleBackdropClick = useCallback(() => {\n closeSidebar();\n }, [closeSidebar]);\n\n return (\n <>\n <div\n className={styles.sidebarChrome}\n style={{\n top: `${headerHeight}px`,\n height: `calc(100vh - ${headerHeight + footerHeight}px)`,\n }}\n >\n <Sidebar\n toggled={sidebarOpen}\n onBackdropClick={handleBackdropClick}\n breakPoint=\"all\"\n className={styles.sidebar}\n items={sidebarItems}\n currentPathname={sidebarCurrentPathname}\n onNavigate={onSidebarNavigate}\n logoutLabel={sidebarLogoutLabel}\n handleLogout={onSidebarLogout}\n bottomLogoutButton={bottomLogoutButton}\n />\n </div>\n <main\n className={styles.mainWrapper}\n style={{\n marginTop: `${headerHeight}px`,\n marginBottom: `${footerHeight}px`,\n }}\n >\n <div className={styles.content} data-lenis-prevent>\n {children}\n </div>\n </main>\n </>\n );\n },\n);\n\nSideHideLayout.displayName = \"SideHideLayout\";\n\nexport default SideHideLayout;\n","/* ===== Main Wrapper (Sidebar + Content) ===== */\n.mainWrapper {\n display: flex;\n flex: 1;\n position: relative;\n flex-direction: row;\n}\n\n.sidebarContainer {\n position: fixed;\n left: 0;\n z-index: 99;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-height: 0;\n box-sizing: border-box;\n}\n\n.sidebar {\n top: 0;\n left: 0;\n flex-shrink: 0;\n}\n\n.content {\n flex: 1;\n background: var(--color-bg);\n overflow-y: auto;\n overflow-x: hidden;\n padding-top: 0;\n padding-bottom: 0;\n margin: 0;\n}\n\n@media (max-width: 1024px) {\n .content {\n padding: 1.5rem;\n }\n}\n\n@media (max-width: 768px) {\n .content {\n width: 100%;\n }\n}\n","import type { SideShowLayoutProps } from \"../../types\";\n\nimport { memo, useCallback, useLayoutEffect, useRef, useState } from \"react\";\n\nimport useLayout from \"../../hooks/useLayout\";\nimport Sidebar from \"../Sidebar\";\nimport styles from \"./styles.module.css\";\n\nfunction useElementWidth<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [width, setWidth] = useState(0);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n const observer = new ResizeObserver(([entry]) => {\n const nextWidth = entry?.contentRect.width ?? 0;\n setWidth((prev) => (prev !== nextWidth ? nextWidth : prev));\n });\n\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const callbackRef = useCallback((instance: T | null) => {\n if (instance) {\n ref.current = instance;\n }\n }, []);\n\n return [callbackRef, width] as const;\n}\n\nconst SideShowLayout = memo(\n ({\n children,\n headerHeight,\n footerHeight,\n sidebarItems,\n sidebarCurrentPathname,\n onSidebarNavigate,\n sidebarLogoutLabel,\n onSidebarLogout,\n bottomLogoutButton,\n }: SideShowLayoutProps) => {\n const { sidebarOpen, closeSidebar } = useLayout();\n const [sidebarRef, sidebarWidth] = useElementWidth<HTMLDivElement>();\n\n const handleBackdropClick = () => {\n closeSidebar();\n };\n\n return (\n <>\n <div\n ref={sidebarRef}\n className={styles.sidebarContainer}\n style={{\n // top: `${headerHeight}px`,\n // bottom: `${footerHeight}px`,\n // marginTop: `${headerHeight}px`,\n // marginBottom: `${footerHeight}px`,\n height: `100%`,\n }}\n >\n <Sidebar\n collapsed={sidebarOpen}\n toggled={sidebarOpen}\n onBackdropClick={handleBackdropClick}\n breakPoint=\"xs\"\n className={styles.sidebar}\n items={sidebarItems}\n currentPathname={sidebarCurrentPathname}\n onNavigate={onSidebarNavigate}\n logoutLabel={sidebarLogoutLabel}\n handleLogout={onSidebarLogout}\n bottomLogoutButton={bottomLogoutButton}\n headerHeight={headerHeight}\n footerHeight={footerHeight}\n />\n </div>\n <main\n className={styles.mainWrapper}\n style={{\n marginTop: `${headerHeight}px`,\n marginBottom: `${footerHeight}px`,\n marginLeft: `${sidebarWidth}px`,\n width: `calc(100% - ${sidebarWidth}px)`,\n }}\n >\n <div className={styles.content} data-lenis-prevent>\n {children}\n </div>\n </main>\n </>\n );\n },\n);\n\nSideShowLayout.displayName = \"SideShowLayout\";\nexport default SideShowLayout;\n",".wavesWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.wavesWrapper > * {\n pointer-events: auto;\n}\n\n.squaresWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.squaresWrapper > * {\n pointer-events: auto;\n}\n\n.letterGlitchWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.letterGlitchWrapper > * {\n pointer-events: auto;\n}\n\n.pixelBlastWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.pixelBlastWrapper > * {\n pointer-events: auto;\n}\n","import type { ReactNode } from \"react\";\n\nimport { Suspense, lazy, memo } from \"react\";\n\nimport { LetterGlitchBackground, SquareBackground, WaveBackground } from \"@/designs/animations\";\nimport { DashboardBackgroundEnum } from \"@/preference\";\n\nimport styles from \"./styles.module.css\";\n\nconst LazyPixelBlast = lazy(() => import(\"@/designs/animations/PixelBlast\"));\n\ninterface BackgroundProps {\n children: ReactNode;\n /** 可选:外部传入的偏好,有则优先使用;否则从 profile.preference 解析。Optional: preference from parent; otherwise parsed from profile. */\n background?: DashboardBackgroundEnum | null;\n}\n\n/** 与 NFX-Identity/console 一致:仪表盘背景由用户偏好(可外部传入或从 profile 解析) */\nconst Background = memo(({ children, background }: BackgroundProps) => {\n const renderBackground = () => {\n switch (background) {\n case DashboardBackgroundEnum.WAVES:\n return (\n <div className={styles.wavesWrapper}>\n <WaveBackground />\n </div>\n );\n case DashboardBackgroundEnum.SQUARES:\n return (\n <div className={styles.squaresWrapper}>\n <SquareBackground />\n </div>\n );\n case DashboardBackgroundEnum.LETTER_GLITCH:\n return (\n <div className={styles.letterGlitchWrapper}>\n <LetterGlitchBackground />\n </div>\n );\n case DashboardBackgroundEnum.PIXEL_BLAST:\n return (\n <Suspense fallback={null}>\n <div className={styles.pixelBlastWrapper}>\n <LazyPixelBlast />\n </div>\n </Suspense>\n );\n case DashboardBackgroundEnum.NONE:\n default:\n return null;\n }\n };\n\n return (\n <>\n {children}\n {renderBackground()}\n </>\n );\n});\n\nBackground.displayName = \"Background\";\nexport default Background;\nexport type { BackgroundProps };\n","import type { LayoutFrameProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport useLayout from \"../../hooks/useLayout\";\nimport { LayoutModeEnum } from \"../../types\";\nimport MainWrapper from \"../MainWrapper\";\nimport SideHideLayout from \"../SideHideLayout\";\nimport SideShowLayout from \"../SideShowLayout\";\n\nexport const LayoutFrame = memo(\n ({\n children,\n headerLeft,\n headerRight,\n footerContent,\n sidebarItems,\n sidebarCurrentPathname,\n onSidebarNavigate,\n sidebarLogoutLabel,\n onSidebarLogout,\n bottomLogoutButton,\n }: LayoutFrameProps) => {\n const { layoutMode } = useLayout();\n return (\n <MainWrapper headerLeft={headerLeft} headerRight={headerRight} footerContent={footerContent}>\n {(headerHeight, footerHeight) => {\n if (layoutMode === LayoutModeEnum.HIDE) {\n return (\n <SideHideLayout\n headerHeight={headerHeight}\n footerHeight={footerHeight}\n sidebarItems={sidebarItems}\n sidebarCurrentPathname={sidebarCurrentPathname}\n onSidebarNavigate={onSidebarNavigate}\n sidebarLogoutLabel={sidebarLogoutLabel}\n onSidebarLogout={onSidebarLogout}\n bottomLogoutButton={bottomLogoutButton}\n >\n {children}\n </SideHideLayout>\n );\n } else {\n return (\n <SideShowLayout\n headerHeight={headerHeight}\n footerHeight={footerHeight}\n sidebarItems={sidebarItems}\n sidebarCurrentPathname={sidebarCurrentPathname}\n onSidebarNavigate={onSidebarNavigate}\n sidebarLogoutLabel={sidebarLogoutLabel}\n onSidebarLogout={onSidebarLogout}\n bottomLogoutButton={bottomLogoutButton}\n >\n {children}\n </SideShowLayout>\n );\n }\n }}\n </MainWrapper>\n );\n },\n);\n\nLayoutFrame.displayName = \"LayoutFrame\";\nexport default LayoutFrame;\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { getLayoutStorage, setLayoutStorage } from \"../utils\";\nimport { LayoutModeEnum } from \"../types\";\n\ninterface UseSetProps {\n defaultLayoutMode: LayoutModeEnum;\n sidebarOpen: boolean;\n}\n\nconst useSet = ({ defaultLayoutMode, sidebarOpen }: UseSetProps) => {\n const [layoutMode, setLayoutModeState] = useState<LayoutModeEnum>(() => {\n const saved = getLayoutStorage();\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n const mode = parsed.state?.layoutMode ?? parsed.layoutMode;\n return mode === LayoutModeEnum.SHOW || mode === LayoutModeEnum.HIDE ? mode : defaultLayoutMode;\n } catch {\n return defaultLayoutMode;\n }\n }\n return defaultLayoutMode;\n });\n\n useEffect(() => {\n const storage = {\n state: {\n sidebarOpen,\n layoutMode,\n },\n };\n setLayoutStorage(JSON.stringify(storage));\n }, [sidebarOpen, layoutMode]);\n\n const setLayoutMode = useCallback((mode: LayoutModeEnum) => {\n setLayoutModeState(mode);\n }, []);\n\n return {\n layoutMode,\n setLayoutMode,\n };\n};\n\nexport default useSet;\n","import { useCallback, useState } from \"react\";\n\nimport { getLayoutStorage } from \"../utils\";\n\nconst useAction = () => {\n const [sidebarOpen, setSidebarOpenState] = useState<boolean>(() => {\n const saved = getLayoutStorage();\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n return parsed.state?.sidebarOpen ?? parsed.sidebarOpen ?? false;\n } catch {\n return false;\n }\n }\n return false;\n });\n\n const setSidebarOpen = useCallback((open: boolean) => {\n setSidebarOpenState(open);\n }, []);\n\n const toggleSidebar = useCallback(() => {\n setSidebarOpenState((prev) => !prev);\n }, []);\n\n const closeSidebar = useCallback(() => {\n setSidebarOpenState(false);\n }, []);\n\n return {\n sidebarOpen,\n setSidebarOpen,\n toggleSidebar,\n closeSidebar,\n };\n};\n\nexport default useAction;\n","/**\n * 布局提供者:提供侧栏开关与显示/隐藏模式上下文。\n * Layout provider: provides sidebar state and show/hide layout mode context.\n */\nimport type { LayoutProviderProps } from \"../types\";\n\nimport { memo } from \"react\";\n\nimport useAction from \"../hooks/useAction\";\nimport { LayoutContext } from \"../hooks/useLayout\";\nimport useSet from \"../hooks/useSet\";\nimport { DEFAULT_LAYOUT_MODE } from \"../types\";\n\nconst LayoutProvider = memo(({ children, defaultLayoutMode = DEFAULT_LAYOUT_MODE }: LayoutProviderProps) => {\n const { sidebarOpen, setSidebarOpen, toggleSidebar, closeSidebar } = useAction();\n const { layoutMode, setLayoutMode } = useSet({ defaultLayoutMode, sidebarOpen });\n\n return (\n <LayoutContext.Provider\n value={{\n sidebarOpen,\n layoutMode,\n setSidebarOpen,\n toggleSidebar,\n closeSidebar,\n setLayoutMode,\n }}\n >\n {children}\n </LayoutContext.Provider>\n );\n});\n\nLayoutProvider.displayName = \"LayoutProvider\";\nexport default LayoutProvider;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layouts.mjs","names":[],"sources":["../src/designs/layouts/utils/layoutStorage.ts","../src/designs/layouts/components/Sidebar/s.module.css","../src/designs/layouts/components/Sidebar/menu.tsx","../src/designs/layouts/components/Sidebar/index.tsx","../src/designs/layouts/components/Header/s.module.css","../src/designs/layouts/components/Header/index.tsx","../src/designs/layouts/components/Main/index.tsx","../src/designs/layouts/components/PageFrame/s.module.css","../src/designs/layouts/components/PageFrame/index.tsx","../src/designs/layouts/components/UserTopBar/s.module.css","../src/designs/layouts/components/UserTopBar/index.tsx","../src/designs/layouts/components/MainWrapper/index.tsx","../src/designs/layouts/components/SideHideLayout/index.tsx","../src/designs/layouts/components/SideShowLayout/index.tsx","../src/designs/layouts/components/Footer/styles.module.css","../src/designs/layouts/components/Footer/index.tsx","../src/designs/layouts/components/Background/styles.module.css","../src/designs/layouts/components/Background/index.tsx","../src/designs/layouts/components/LayoutFrame/index.tsx","../src/designs/layouts/hooks/useSet.ts","../src/designs/layouts/hooks/useAction.ts","../src/designs/layouts/providers/index.tsx"],"sourcesContent":["/**\n * 布局相关 localStorage 读写与移除,统一走 utils/lstorage。\n * Layout localStorage get/set/remove via utils/lstorage.\n */\nimport type { Nilable } from \"@/types/utils\";\nimport { getItem, removeItem, setItem } from \"@/utils/lstorage\";\n\nimport { LAYOUT_STORAGE_KEY } from \"../types\";\n\nexport function getLayoutStorage(): Nilable<string> {\n return getItem(LAYOUT_STORAGE_KEY);\n}\n\nexport function setLayoutStorage(value: string): void {\n setItem(LAYOUT_STORAGE_KEY, value);\n}\n\nexport function removeLayoutStorage(): void {\n removeItem(LAYOUT_STORAGE_KEY);\n}\n",".shell {\n background: var(--color-background);\n color: var(--gray-12);\n}\n.content {\n position: relative;\n background: var(--color-background);\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.contentInner {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.sidebar {\n font-family: Arial, \"Noto Sans SC\", sans-serif;\n height: 100%;\n min-height: 0;\n background: var(--color-panel-solid);\n border-right: 1px solid var(--gray-a4);\n border-radius: 0;\n}\n.header {\n position: relative;\n flex-shrink: 0;\n margin: 0 20px;\n padding: 21px 0 22px;\n border-bottom: 1px solid var(--gray-a4);\n}\n.toggle {\n position: absolute !important;\n right: -34px !important;\n top: 30px !important;\n width: 26px !important;\n height: 26px !important;\n border: 1px solid var(--gray-a5) !important;\n border-radius: var(--radius-2) !important;\n background: var(--color-panel-solid) !important;\n color: var(--gray-11) !important;\n z-index: 2;\n}\n.toggle:hover {\n background: var(--gray-3) !important;\n color: var(--gray-12) !important;\n}\n.accountCard {\n appearance: none;\n display: flex;\n align-items: center;\n gap: 11px;\n width: 100%;\n padding: 0;\n border: 0;\n font: inherit;\n color: inherit;\n text-align: left;\n cursor: pointer;\n background: transparent;\n border-radius: var(--radius-3);\n}\n.accountCard:focus-visible {\n outline: 2px solid var(--accent-8);\n outline-offset: 5px;\n}\n.accountCard:hover .accountName {\n color: var(--accent-11);\n}\n.accountInfo {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n gap: 3px;\n}\n.accountRole {\n color: var(--gray-11);\n font-size: 11px;\n line-height: 16px;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.accountName {\n font-size: 15px;\n line-height: 21px;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.avatar {\n flex-shrink: 0;\n}\n.menuArea {\n flex: 1 1 auto;\n min-height: 0;\n padding: 8px 20px 12px;\n overflow-x: hidden;\n overflow-y: auto;\n scrollbar-width: thin;\n scrollbar-color: var(--gray-a5) transparent;\n}\n.menuAreaCollapsed {\n overflow-y: auto;\n}\n.sectionTitle {\n margin: 19px 0 9px;\n padding: 20px 10px 0;\n border-top: 1px solid var(--gray-a4);\n color: var(--gray-11);\n text-transform: uppercase;\n}\n.sectionTitle :global(.rt-Text) {\n font-size: 11px;\n line-height: 16px;\n font-weight: 400;\n letter-spacing: 0.5px;\n}\n.sectionTitleIcon {\n display: none;\n}\n.sectionDivider {\n height: 1px;\n margin: 22px 0 16px;\n background: var(--gray-a4);\n}\n.menuArea :global(.ps-menu-label .rt-Text),\n.footer :global(.ps-menu-label .rt-Text) {\n font: inherit;\n}\n.menuArea :global(.ps-menu-button.ps-active .ps-menu-label) {\n font-weight: 500;\n}\n.menuArea :global(.ps-submenu-root.ps-open > .ps-menu-button) {\n background: var(--gray-a3);\n color: var(--gray-12);\n}\n.menuArea :global(.ps-submenu-content) {\n border: 0;\n}\n/* One continuous trunk. Only the final branch terminates the trunk before its bend.\n Opaque tokens prevent overlapping segments from becoming a darker double stroke. */\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root)::before {\n content: \"\";\n position: absolute;\n left: 21px;\n top: -3px;\n bottom: -3px;\n width: 1px;\n background: var(--gray-5);\n pointer-events: none;\n}\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root)::after {\n content: \"\";\n position: absolute;\n left: 21px;\n top: calc(50% - 8px);\n width: 11px;\n height: 8px;\n border-left: 1px solid var(--gray-5);\n border-bottom: 1px solid var(--gray-5);\n border-bottom-left-radius: 8px;\n pointer-events: none;\n}\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root:last-child)::before {\n bottom: calc(50% + 8px);\n}\n.menuArea :global(.ps-submenu-content .ps-menu-button) {\n position: relative;\n}\n.menuAreaCollapsed :global(.ps-menu-root > ul > .ps-menuitem-root > .ps-menu-button) {\n justify-content: center;\n padding: 0;\n}\n.menuAreaCollapsed :global(.ps-menu-root > ul > .ps-menuitem-root > .ps-menu-button > .ps-menu-icon) {\n margin: 0;\n}\n.menuAreaCollapsed :global(.ps-menu-root > ul > .ps-menuitem-root > .ps-menu-button > .ps-menu-label),\n.menuAreaCollapsed :global(.ps-submenu-expand-icon) {\n display: none;\n}\n.menuAreaCollapsed :global(.ps-submenu-content) {\n border: 1px solid var(--gray-a5);\n}\n.menuAreaCollapsed :global(.ps-submenu-content .ps-menu-label) {\n display: block;\n}\n.footer {\n flex-shrink: 0;\n margin-top: auto;\n padding: 10px 20px 20px;\n}\n.logout {\n width: 100%;\n height: 40px !important;\n padding: 0 10px !important;\n gap: 10px !important;\n justify-content: flex-start !important;\n background: transparent !important;\n color: var(--red-11) !important;\n font-size: 15px !important;\n font-weight: 400 !important;\n border-radius: var(--radius-chip) !important;\n box-shadow: none !important;\n}\n.logoutCollapsed {\n padding: 0 !important;\n justify-content: center !important;\n}\n.logout:hover:not(:disabled) {\n background: var(--red-a3) !important;\n}\n.mobileToggle {\n position: sticky;\n top: var(--space-3);\n z-index: 10;\n margin: var(--space-3);\n box-shadow: var(--shadow-3);\n background: var(--color-panel-solid) !important;\n color: var(--gray-12) !important;\n}\n.menuIconWrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.menuIconDot {\n position: absolute;\n top: -3px;\n right: -3px;\n width: 7px;\n height: 7px;\n border-radius: var(--radius-full);\n background: var(--red-9);\n border: 2px solid var(--color-panel-solid);\n box-sizing: content-box;\n pointer-events: none;\n}\n.menuBadge {\n padding: 0 5px;\n border-radius: var(--radius-full);\n background: var(--accent-a3);\n color: var(--accent-11);\n font-size: 10px;\n}\n.menuDot {\n width: 7px;\n height: 7px;\n border-radius: var(--radius-full);\n background: var(--red-9);\n}\n@media (prefers-reduced-motion: reduce) {\n .sidebar :global(*) {\n transition-duration: 0ms !important;\n animation-duration: 0ms !important;\n }\n}\n\n.footerCollapsed :global(.ps-menu-button) {\n justify-content: center;\n padding: 0;\n}\n.footerCollapsed :global(.ps-menu-icon) {\n margin: 0;\n}\n.footerCollapsed :global(.ps-menu-label) {\n display: none;\n}\n\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul) {\n padding: 1px 0 7px;\n}\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-root:not(.ps-open) > .ps-submenu-content) {\n visibility: hidden;\n}\n\n.menuAreaCollapsed .sectionTitle {\n padding: 16px 0 0;\n margin: 17px -8px 9px;\n text-align: center;\n justify-content: center;\n}\n.menuAreaCollapsed .sectionTitle :global(.rt-Text) {\n font-size: 9px;\n line-height: 11px;\n letter-spacing: 0;\n overflow-wrap: normal;\n word-break: normal;\n}\n.collapsedSubmenuTrigger {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 40px;\n margin: 6px 0;\n padding: 0;\n border: 0;\n border-radius: var(--radius-chip);\n color: var(--gray-11);\n background: transparent;\n cursor: pointer;\n}\n.collapsedSubmenuTrigger:hover,\n.collapsedSubmenuActive {\n background: var(--gray-a3);\n color: var(--gray-12);\n}\n.collapsedSubmenuTrigger:focus-visible {\n outline: 2px solid var(--accent-8);\n outline-offset: 2px;\n}\n.flyout {\n width: max-content;\n min-width: 156px;\n max-width: min(260px, calc(100vw - 24px));\n max-height: var(--radix-popover-content-available-height);\n padding: 5px 0 !important;\n border: 1px solid var(--gray-a5);\n border-radius: var(--radius-4);\n background: var(--color-panel-solid);\n box-shadow: var(--shadow-5);\n overflow-y: auto;\n}\n.flyout :global(.ps-menu-label .rt-Text) {\n font: inherit;\n}\n.flyout :global(.ps-menu-button.ps-active .ps-menu-label) {\n font-weight: 500;\n}\n\n.collapsedSubmenuCurrent,\n.collapsedSubmenuCurrent:hover {\n background: var(--accent-a3);\n color: var(--accent-11);\n}\n.menuArea :global(.ps-submenu-root > .ps-menu-button.ps-active) {\n background: var(--accent-a3);\n color: var(--accent-11);\n}\n\n/* Highlight only the route from the parent down to the current child. */\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root:has(~ .ps-menuitem-root > .ps-menu-button.ps-active))::before {\n background: var(--accent-9);\n}\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root:has(> .ps-menu-button.ps-active))::before {\n background: var(--accent-9);\n bottom: calc(50% + 8px);\n}\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root:has(> .ps-menu-button.ps-active))::after {\n border-color: var(--accent-9);\n}\n/* Continue the neutral trunk below an active child when more siblings follow. */\n.menuArea:not(.menuAreaCollapsed) :global(.ps-submenu-content > ul > .ps-menuitem-root:not(:last-child) > .ps-menu-button.ps-active)::before {\n content: \"\";\n position: absolute;\n left: -11px;\n top: 50%;\n bottom: -3px;\n width: 1px;\n background: var(--gray-5);\n pointer-events: none;\n}\n","import type { ReactNode } from \"react\";\nimport type { MenuItemProps, SubMenuProps } from \"react-pro-sidebar\";\n\nimport { createContext, isValidElement, useContext, useEffect, useRef, useState } from \"react\";\nimport { Popover, Tooltip } from \"@radix-ui/themes\";\nimport { Menu, MenuItem as ProMenuItem, SubMenu as ProSubMenu } from \"react-pro-sidebar\";\n\nimport styles from \"./s.module.css\";\n\nconst CollapsedContext = createContext(false);\nconst NestedContext = createContext(false);\n\nexport function SidebarMenuState({ collapsed, children }: { collapsed: boolean; children: ReactNode }) {\n return <CollapsedContext.Provider value={collapsed}>{children}</CollapsedContext.Provider>;\n}\n\nfunction labelText(node: ReactNode): string {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(labelText).join(\"\");\n if (isValidElement<{ children?: ReactNode }>(node)) return labelText(node.props.children);\n return \"\";\n}\n\nexport function MenuItem(props: MenuItemProps) {\n const collapsed = useContext(CollapsedContext);\n const nested = useContext(NestedContext);\n const label = labelText(props.children);\n const hasUnread = nested && isValidElement<{ showDot?: boolean }>(props.icon) && props.icon.props.showDot;\n const item = (\n <ProMenuItem\n {...props}\n suffix={props.suffix ?? (hasUnread ? <span className={styles.menuDot} /> : undefined)}\n aria-label={props[\"aria-label\"] ?? label}\n aria-current={props.active ? \"page\" : undefined}\n />\n );\n return collapsed && !nested ? (\n <Tooltip content={label} side=\"right\" sideOffset={14} delayDuration={150}>\n {item}\n </Tooltip>\n ) : (\n item\n );\n}\n\nfunction CollapsedSubMenu({ children, label, icon, active }: SubMenuProps) {\n const [open, setOpen] = useState(false);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const pointerOpened = useRef(false);\n const content = useRef<HTMLDivElement>(null);\n const trigger = useRef<HTMLButtonElement>(null);\n const cancelClose = () => clearTimeout(closeTimer.current);\n const scheduleClose = () => {\n if (!pointerOpened.current) return;\n cancelClose();\n closeTimer.current = setTimeout(() => setOpen(false), 180);\n };\n useEffect(() => () => clearTimeout(closeTimer.current), []);\n return (\n <li className=\"ps-menuitem-root\">\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <button\n ref={trigger}\n type=\"button\"\n className={`${styles.collapsedSubmenuTrigger} ${active ? styles.collapsedSubmenuCurrent : open ? styles.collapsedSubmenuActive : \"\"}`}\n aria-label={labelText(label)}\n aria-expanded={open}\n onPointerEnter={() => {\n cancelClose();\n pointerOpened.current = true;\n setOpen(true);\n }}\n onPointerLeave={scheduleClose}\n onClick={(event) => {\n // Hover may already have opened the panel. A click should keep it open.\n event.preventDefault();\n cancelClose();\n pointerOpened.current = false;\n setOpen(true);\n content.current?.querySelector<HTMLAnchorElement>(\"a[href]\")?.focus();\n }}\n >\n {icon}\n </button>\n </Popover.Trigger>\n <Popover.Content\n ref={content}\n side=\"right\"\n align=\"start\"\n sideOffset={12}\n collisionPadding={12}\n className={styles.flyout}\n aria-label={labelText(label)}\n onPointerEnter={cancelClose}\n onPointerLeave={scheduleClose}\n onOpenAutoFocus={(event) => {\n if (pointerOpened.current) event.preventDefault();\n }}\n onCloseAutoFocus={(event) => {\n if (pointerOpened.current) event.preventDefault();\n }}\n >\n <NestedContext.Provider value={true}>\n <Menu\n menuItemStyles={{\n button: ({ active }) => ({\n height: \"34px\",\n margin: \"3px 7px\",\n padding: \"0 11px\",\n borderRadius: \"var(--radius-chip)\",\n font: \"14px Arial, sans-serif\",\n color: active ? \"var(--accent-11)\" : \"var(--gray-11)\",\n backgroundColor: active ? \"var(--accent-a3)\" : \"transparent\",\n \"&:hover\": {\n backgroundColor: active ? \"var(--accent-a3)\" : \"var(--gray-a3)\",\n color: active ? \"var(--accent-11)\" : \"var(--gray-12)\",\n },\n \"&:focus-visible\": {\n outline: \"2px solid var(--accent-8)\",\n outlineOffset: \"-2px\",\n },\n }),\n icon: { display: \"none\" },\n }}\n onClick={(event) => {\n if ((event.target as HTMLElement).closest(\"a[href]\")) setOpen(false);\n }}\n >\n {children}\n </Menu>\n </NestedContext.Provider>\n </Popover.Content>\n </Popover.Root>\n </li>\n );\n}\n\nexport function SubMenu({ children, ...props }: SubMenuProps) {\n const collapsed = useContext(CollapsedContext);\n if (collapsed) return <CollapsedSubMenu {...props}>{children}</CollapsedSubMenu>;\n return (\n <ProSubMenu {...props} aria-label={labelText(props.label)} aria-expanded={props.open}>\n <NestedContext.Provider value={true}>{children}</NestedContext.Provider>\n </ProSubMenu>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { Box, Button, Flex, IconButton, Text } from \"@radix-ui/themes\";\nimport type { LucideIcon as LucideIconType } from \"lucide-react\";\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp, LogOut, Menu as MenuIcon } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Menu, Sidebar as ProSidebar } from \"react-pro-sidebar\";\n\nimport LucideIcon from \"@/designs/components/LucideIcon\";\nimport type { SidebarMenuItem } from \"../../types\";\n\nimport { MenuItem, SidebarMenuState, SubMenu } from \"./menu\";\nimport styles from \"./s.module.css\";\n\nconst SIDEBAR_WIDTH = \"234px\";\nconst SIDEBAR_COLLAPSED_WIDTH = \"84px\";\n\nfunction MenuLabel({ children, active = false }: { children: ReactNode; active?: boolean }) {\n return (\n <Text as=\"span\" size=\"2\" weight={active ? \"bold\" : \"medium\"}>\n {children}\n </Text>\n );\n}\n\nfunction SectionTitle({ label, icon }: { label: string; icon: LucideIconType }) {\n return (\n <Flex align=\"center\" justify=\"between\" gap=\"2\" className={styles.sectionTitle}>\n <Text as=\"span\" size=\"2\" weight=\"bold\">\n {label}\n </Text>\n <LucideIcon icon={icon} size={16} className={styles.sectionTitleIcon} />\n </Flex>\n );\n}\n\nfunction createMenuItemStyles(collapsed: boolean) {\n return {\n button: ({ active, level = 0 }: { active: boolean; level?: number }) => ({\n height: level > 0 ? \"34px\" : \"40px\",\n margin: level > 0 ? (collapsed ? \"3px 7px\" : \"3px 0 3px 32px\") : \"6px 0\",\n borderRadius: \"var(--radius-chip)\",\n paddingLeft: level > 0 ? \"11px\" : \"10px\",\n paddingRight: \"10px\",\n fontSize: level > 0 ? \"14px\" : \"15px\",\n fontWeight: 400,\n color: active ? \"var(--accent-11)\" : \"var(--gray-11)\",\n backgroundColor: active ? \"var(--accent-a3)\" : \"transparent\",\n transition: \"background-color 150ms ease, color 150ms ease\",\n \"&:hover\": { backgroundColor: active ? \"var(--accent-a3)\" : \"var(--gray-a3)\", color: active ? \"var(--accent-11)\" : \"var(--gray-12)\" },\n \"&:focus-visible\": {\n outline: \"2px solid var(--accent-8)\",\n outlineOffset: \"2px\",\n },\n }),\n icon: ({ level = 0 }: { level?: number }) => ({\n width: \"20px\",\n minWidth: \"20px\",\n height: \"20px\",\n marginRight: \"10px\",\n color: \"inherit\",\n ...(level > 0 ? { display: \"none\" } : {}),\n }),\n subMenuContent: {\n backgroundColor: collapsed ? \"var(--color-panel-solid)\" : \"transparent\",\n padding: collapsed ? \"5px 0\" : \"0\",\n ...(collapsed\n ? {\n zIndex: 1000,\n minWidth: \"156px\",\n width: \"max-content\",\n maxWidth: \"260px\",\n maxHeight: \"calc(100dvh - 32px)\",\n overflowY: \"auto\" as const,\n borderRadius: \"var(--radius-4)\",\n border: \"1px solid var(--gray-a5)\",\n boxShadow: \"var(--shadow-5)\",\n }\n : {}),\n },\n };\n}\n\nfunction isActivePath(current: string, path: string): boolean {\n return current === path || current.startsWith(`${path}/`);\n}\n\nexport type SidebarChromeProps = {\n items?: SidebarMenuItem[];\n currentPathname?: string;\n onNavigate?: (path: string) => void;\n handleLogout?: () => void;\n logoutLabel?: string;\n header?: ReactNode;\n topBar?: ReactNode;\n footerExtra?: ReactNode;\n children?: ReactNode;\n};\n\nfunction Sidebar({\n items = [],\n currentPathname = \"\",\n onNavigate,\n handleLogout,\n logoutLabel,\n header,\n topBar,\n footerExtra,\n children,\n}: SidebarChromeProps) {\n const { t } = useTranslation(\"language\");\n const [desktopCollapsed, setCollapsed] = useState(false);\n const [toggled, setToggled] = useState(false);\n const [broken, setBroken] = useState(false);\n const collapsed = !broken && desktopCollapsed;\n const drawerRef = useRef<HTMLHtmlElement>(null);\n const [openKeys, setOpenKeys] = useState<Record<string, boolean>>({});\n\n useEffect(() => {\n if (!broken || !toggled) return;\n const previousFocus = document.activeElement as HTMLElement | null;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n const focusable = () =>\n Array.from(drawerRef.current?.querySelectorAll<HTMLElement>(\"button:not([disabled]), a[href], [tabindex='0']\") ?? []).filter(\n (node) => node.getClientRects().length && getComputedStyle(node).visibility !== \"hidden\",\n );\n focusable()[0]?.focus();\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n setToggled(false);\n }\n if (event.key !== \"Tab\") return;\n const nodes = focusable();\n const first = nodes[0];\n const last = nodes[nodes.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus();\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.body.style.overflow = previousOverflow;\n document.removeEventListener(\"keydown\", onKeyDown);\n previousFocus?.focus();\n };\n }, [broken, toggled]);\n\n const closeMobile = () => broken && setToggled(false);\n\n const renderItem = (item: SidebarMenuItem) => {\n const active = isActivePath(currentPathname, item.path);\n if (item.children?.length) {\n const childActive = item.children.some((c) => isActivePath(currentPathname, c.path));\n const open = openKeys[item.path] ?? childActive;\n return (\n <SubMenu\n key={item.path}\n label={item.label}\n icon={item.icon}\n open={open}\n onOpenChange={(next) => setOpenKeys((s) => ({ ...s, [item.path]: next }))}\n active={childActive}\n >\n {item.children.map((child) => {\n const childIsActive = isActivePath(currentPathname, child.path);\n return (\n <MenuItem\n key={child.path}\n icon={child.icon}\n active={childIsActive}\n onClick={() => {\n onNavigate?.(child.path);\n closeMobile();\n }}\n >\n <MenuLabel active={childIsActive}>{child.label}</MenuLabel>\n </MenuItem>\n );\n })}\n </SubMenu>\n );\n }\n return (\n <MenuItem\n key={item.path}\n icon={item.icon}\n active={active}\n onClick={() => {\n onNavigate?.(item.path);\n closeMobile();\n }}\n >\n <MenuLabel active={active}>{item.label}</MenuLabel>\n </MenuItem>\n );\n };\n\n return (\n <Flex minHeight=\"100dvh\" width=\"100%\" className={styles.shell}>\n <SidebarMenuState collapsed={collapsed}>\n <ProSidebar\n ref={drawerRef}\n inert={broken && !toggled ? true : undefined}\n aria-hidden={broken && !toggled ? true : undefined}\n collapsed={collapsed}\n toggled={toggled}\n onBackdropClick={() => setToggled(false)}\n onBreakPoint={setBroken}\n breakPoint=\"md\"\n width={SIDEBAR_WIDTH}\n collapsedWidth={SIDEBAR_COLLAPSED_WIDTH}\n rootStyles={{\n border: 0,\n height: \"100dvh\",\n flexShrink: 0,\n position: \"sticky\",\n top: 0,\n margin: 0,\n zIndex: 200,\n overflow: \"visible\",\n \"&.ps-broken.ps-toggled\": { left: 0 },\n \"&.ps-broken\": { height: \"100dvh\", position: \"fixed\", margin: 0, top: 0, bottom: 0 },\n \"& .ps-sidebar-container\": {\n background: \"transparent\",\n height: \"100%\",\n overflow: \"visible\",\n },\n }}\n >\n <Flex direction=\"column\" height=\"100%\" minHeight=\"0\" className={styles.sidebar}>\n <div className={styles.header}>\n {header}\n <IconButton\n variant=\"soft\"\n size=\"1\"\n className={styles.toggle}\n aria-label={collapsed ? t(\"sidebar.expand\") : t(\"sidebar.collapse\")}\n aria-expanded={!collapsed}\n onClick={() => (broken ? setToggled(false) : setCollapsed((value) => !value))}\n >\n <LucideIcon icon={collapsed ? ChevronRight : ChevronLeft} size={14} />\n </IconButton>\n </div>\n\n <Box flexGrow=\"1\" minHeight=\"0\" py=\"2\" className={`${styles.menuArea} ${collapsed ? styles.menuAreaCollapsed : \"\"}`}>\n <Menu renderExpandIcon={({ open }) => <LucideIcon icon={open ? ChevronUp : ChevronDown} size={14} />} menuItemStyles={createMenuItemStyles(collapsed)} closeOnClick>\n {items.map(renderItem)}\n </Menu>\n </Box>\n\n <div className={`${styles.footer} ${collapsed ? styles.footerCollapsed : \"\"}`}>\n {footerExtra}\n {handleLogout ? (\n <Button\n variant=\"ghost\"\n className={`${styles.logout} ${collapsed ? styles.logoutCollapsed : \"\"}`}\n onClick={handleLogout}\n aria-label={logoutLabel ?? t(\"sidebar.logout\")}\n title={collapsed ? (logoutLabel ?? t(\"sidebar.logout\")) : undefined}\n >\n <LucideIcon icon={LogOut} size={18} />\n {!collapsed && (logoutLabel ?? t(\"sidebar.logout\"))}\n </Button>\n ) : null}\n </div>\n </Flex>\n </ProSidebar>\n </SidebarMenuState>\n\n <Flex direction=\"column\" flexGrow=\"1\" minWidth=\"0\" inert={broken && toggled ? true : undefined} className={styles.content}>\n {broken ? (\n <IconButton variant=\"surface\" color=\"gray\" size=\"3\" className={styles.mobileToggle} onClick={() => setToggled(true)} aria-label={t(\"sidebar.openMenu\")}>\n <LucideIcon icon={MenuIcon} size={18} />\n </IconButton>\n ) : null}\n {topBar}\n <Box flexGrow=\"1\" minWidth=\"0\" minHeight=\"0\" className={styles.contentInner}>\n {children}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nexport default Sidebar;\nexport { SectionTitle, MenuLabel, createMenuItemStyles, SIDEBAR_WIDTH, SIDEBAR_COLLAPSED_WIDTH };\n",".header {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 30;\n width: 100%;\n padding: var(--space-3) var(--space-4);\n pointer-events: none;\n background: linear-gradient(180deg, color-mix(in oklab, var(--color-background) 92%, transparent), transparent);\n}\n\n.header .bar {\n pointer-events: auto;\n}\n\n/* Floating bar: width/centering + float shadow only — surface comes from Card */\n.bar {\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n box-shadow: 0 8px 28px color-mix(in oklab, var(--gray-12) 6%, transparent);\n}\n\n.nav {\n display: none;\n gap: var(--space-1);\n}\n\n@media (min-width: 900px) {\n .nav {\n display: flex;\n }\n}\n\n.nav :global(.rt-BaseButton) {\n padding-inline: var(--space-4);\n background: transparent;\n color: var(--gray-12);\n font-size: var(--font-size-3);\n border-radius: var(--radius-chip) !important;\n}\n\n@media (hover: hover) {\n .nav :global(.rt-BaseButton):hover {\n background: var(--accent-a2);\n color: var(--accent-11);\n }\n}\n\n.navActive {\n background: var(--accent-a3) !important;\n color: var(--accent-11) !important;\n font-weight: var(--font-weight-bold);\n}\n\n.mobileNav {\n display: flex;\n}\n\n@media (min-width: 900px) {\n .mobileNav {\n display: none;\n }\n}\n\n.brandWord {\n font-family: var(--heading-font-family);\n letter-spacing: -0.03em;\n}\n\n.accountMenu {\n min-width: 200px;\n}\n","import type { ReactNode } from \"react\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { HamburgerMenuIcon } from \"@radix-ui/react-icons\";\nimport { Avatar, Button, Card, DropdownMenu, Flex, IconButton, Separator, Text } from \"@radix-ui/themes\";\nimport { setHeaderHeight } from \"@/stores/layout\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Logo from \"@/designs/components/Logo\";\nimport PreferencesPopover from \"@/designs/components/PreferencesPopover\";\n\nimport styles from \"./s.module.css\";\n\nexport type HeaderNavItem = {\n key: string;\n label: string;\n onSelect: () => void;\n active?: boolean;\n};\n\nexport type HeaderAccount = {\n displayName: string;\n initial: string;\n avatarSrc?: string;\n menuItems?: { key: string; label: string; onSelect: () => void; color?: \"red\" }[];\n};\n\nexport type HeaderProps = {\n brandTitle?: ReactNode;\n brandSubtitle?: ReactNode;\n logoSrc?: string;\n srcDark?: string;\n navItems?: HeaderNavItem[];\n account?: HeaderAccount | null;\n onLogin?: () => void;\n onSignup?: () => void;\n onLogoClick?: () => void;\n extraActions?: ReactNode;\n};\n\nfunction Header({\n brandTitle,\n brandSubtitle,\n logoSrc,\n srcDark,\n navItems = [],\n account,\n onLogin,\n onSignup,\n onLogoClick,\n extraActions,\n}: HeaderProps) {\n const headerRef = useRef<HTMLElement | null>(null);\n const { t } = useTranslation(\"language\");\n const [elevated, setElevated] = useState(false);\n\n useEffect(() => {\n if (!headerRef.current) return;\n const element = headerRef.current;\n const emitHeight = () => {\n const rect = element.getBoundingClientRect();\n const computed = getComputedStyle(element);\n const marginBottom = parseFloat(computed.marginBottom) || 0;\n setHeaderHeight(rect.bottom + marginBottom);\n };\n emitHeight();\n const observer = new ResizeObserver(emitHeight);\n observer.observe(element);\n window.addEventListener(\"resize\", emitHeight);\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", emitHeight);\n };\n }, []);\n\n useEffect(() => {\n const onScroll = () => setElevated(window.scrollY > 12);\n onScroll();\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, []);\n\n return (\n <Flex asChild className={styles.header}>\n <header ref={headerRef}>\n <Card\n size=\"1\"\n className={styles.bar}\n style={\n elevated\n ? {\n boxShadow: \"0 14px 40px color-mix(in oklab, var(--gray-12) 10%, transparent)\",\n }\n : undefined\n }\n >\n <Flex align=\"center\" justify=\"between\" gap=\"3\">\n <Logo variant=\"glassSquare\" size=\"small\" src={logoSrc} srcDark={srcDark} title={brandTitle} subtitle={brandSubtitle} onClick={onLogoClick} />\n\n {navItems.length > 0 ? (\n <Flex asChild align=\"center\" gap=\"1\" className={styles.nav}>\n <nav>\n {navItems.map((item) => (\n <Button key={item.key} size=\"3\" variant=\"soft\" className={item.active ? styles.navActive : undefined} onClick={item.onSelect}>\n {item.label}\n </Button>\n ))}\n </nav>\n </Flex>\n ) : null}\n\n <Flex align=\"center\" gap=\"2\" flexShrink=\"0\">\n {navItems.length > 0 ? (\n <DropdownMenu.Root modal={false}>\n <DropdownMenu.Trigger>\n <IconButton variant=\"soft\" color=\"gray\" size=\"2\" className={styles.mobileNav} aria-label={t(\"header.openMenu\")}>\n <HamburgerMenuIcon />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {navItems.map((item) => (\n <DropdownMenu.Item key={item.key} onSelect={item.onSelect}>\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n\n <PreferencesPopover />\n {extraActions}\n\n {account ? (\n <DropdownMenu.Root modal={false}>\n <DropdownMenu.Trigger>\n <Button variant=\"soft\" color=\"gray\" highContrast>\n <Avatar size=\"1\" radius=\"full\" src={account.avatarSrc} fallback={account.initial} />\n <Text size=\"2\" truncate style={{ maxWidth: 120 }}>\n {account.displayName}\n </Text>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" sideOffset={8} size=\"2\" className={styles.accountMenu}>\n <DropdownMenu.Label>\n <Text size=\"1\" color=\"gray\" truncate style={{ maxWidth: 200 }}>\n {account.displayName}\n </Text>\n </DropdownMenu.Label>\n {account.menuItems?.map((item) => (\n <DropdownMenu.Item key={item.key} color={item.color} onSelect={item.onSelect}>\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : (\n <>\n {onLogin || onSignup ? <Separator orientation=\"vertical\" size=\"1\" /> : null}\n {onLogin ? (\n <Button variant=\"soft\" color=\"gray\" onClick={onLogin}>\n {t(\"header.login\")}\n </Button>\n ) : null}\n {onSignup ? <Button onClick={onSignup}>{t(\"header.signup\")}</Button> : null}\n </>\n )}\n </Flex>\n </Flex>\n </Card>\n </header>\n </Flex>\n );\n}\n\nexport default Header;\n","import type { CSSProperties, ReactNode } from \"react\";\n\nimport { Box } from \"@radix-ui/themes\";\nimport { useLayoutStore } from \"@/stores/layout\";\n\nimport Header from \"../Header\";\n\nexport type MainProps = {\n children?: ReactNode;\n header?: ReactNode;\n};\n\nfunction Main({ children, header }: MainProps) {\n const headerHeight = useLayoutStore((state) => state.headerHeight);\n\n return (\n <Box position=\"relative\" minHeight=\"100dvh\" style={{ background: \"var(--color-background)\" }}>\n {header ?? <Header />}\n <Box\n asChild\n position=\"relative\"\n minHeight=\"100dvh\"\n style={\n {\n paddingTop: 0,\n \"--app-header-height\": `${headerHeight}px`,\n } as CSSProperties\n }\n >\n <main>{children}</main>\n </Box>\n </Box>\n );\n}\n\nexport default Main;\n","/* Sidebar full-height pages: grow vertically without breaking Container centering. */\n.fullHeightFrame {\n flex: 1 1 auto;\n align-self: stretch;\n min-height: 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n.fullHeightBody {\n flex: 1 1 auto;\n box-sizing: border-box;\n}\n","import type { ReactNode } from \"react\";\n\nimport { Container, Flex } from \"@radix-ui/themes\";\n\nimport styles from \"./s.module.css\";\n\nconst PAGE_FRAME_DEFAULT_MAX_WIDTH_PX = 1440;\n\nexport type PageFrameProps = {\n children: ReactNode;\n className?: string;\n maxWidth?: number | string;\n fullHeight?: boolean;\n};\n\nfunction PageFrame({ children, className, maxWidth = PAGE_FRAME_DEFAULT_MAX_WIDTH_PX, fullHeight }: PageFrameProps) {\n const resolvedMaxWidth = typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n const frameClass = [fullHeight ? styles.fullHeightFrame : \"\", className ?? \"\"].filter(Boolean).join(\" \");\n\n return (\n <Container size=\"4\" align=\"center\" py={fullHeight ? \"0\" : \"5\"} width=\"100%\" maxWidth={resolvedMaxWidth} className={frameClass || undefined}>\n {fullHeight ? (\n <Flex direction=\"column\" flexGrow=\"1\" minHeight=\"0\" width=\"100%\" height=\"100%\" className={styles.fullHeightBody}>\n {children}\n </Flex>\n ) : (\n children\n )}\n </Container>\n );\n}\n\nexport default PageFrame;\n","/* Sticky bar chrome — Themes cannot express z-index/blur/hairline */\n.bar {\n z-index: 10;\n border-bottom: 1px solid var(--gray-a4);\n background: color-mix(in oklab, var(--color-background) 92%, transparent);\n backdrop-filter: blur(10px);\n}\n","import type { ReactNode } from \"react\";\n\nimport { Avatar, Badge, Button, Flex, Text } from \"@radix-ui/themes\";\n\nimport styles from \"./s.module.css\";\n\nexport type UserTopBarAction = {\n key: string;\n label: string;\n icon?: ReactNode;\n onClick: () => void;\n badge?: boolean;\n};\n\nexport type UserTopBarProps = {\n displayName: string;\n subtitle?: string;\n avatarSrc?: string;\n initial?: string;\n requestBadge?: string;\n actions?: UserTopBarAction[];\n};\n\nexport default function UserTopBar({ displayName, subtitle, avatarSrc, initial = \"?\", requestBadge, actions = [] }: UserTopBarProps) {\n return (\n <Flex align=\"center\" justify=\"between\" gap=\"3\" wrap=\"wrap\" py=\"3\" px=\"4\" position=\"sticky\" top=\"0\" className={styles.bar}>\n <Flex align=\"center\" gap=\"3\" minWidth=\"0\">\n <Avatar size=\"2\" radius=\"full\" src={avatarSrc} fallback={initial} />\n <Flex direction=\"column\" minWidth=\"0\">\n <Text size=\"2\" weight=\"bold\" truncate>\n {displayName}\n </Text>\n {subtitle ? (\n <Text size=\"1\" color=\"gray\" truncate>\n {subtitle}\n </Text>\n ) : null}\n </Flex>\n {requestBadge ? (\n <Badge color=\"orange\" variant=\"soft\">\n {requestBadge}\n </Badge>\n ) : null}\n </Flex>\n\n <Flex align=\"center\" gap=\"2\" wrap=\"wrap\">\n {actions.map((action) => (\n <Button key={action.key} size=\"2\" variant=\"soft\" color={action.badge ? undefined : \"gray\"} onClick={action.onClick}>\n {action.icon}\n {action.label}\n {action.badge ? (\n <Badge size=\"1\" color=\"red\">\n ·\n </Badge>\n ) : null}\n </Button>\n ))}\n </Flex>\n </Flex>\n );\n}\n","import type { MainWrapperProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nconst MainWrapper = memo(({ children }: MainWrapperProps) => {\n return <>{children(0, 0)}</>;\n});\n\nMainWrapper.displayName = \"MainWrapper\";\nexport default MainWrapper;\n","import type { SideHideLayoutProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport Sidebar from \"../Sidebar\";\n\nconst SideHideLayout = memo(({ children, sidebarItems, sidebarCurrentPathname, onSidebarNavigate, sidebarLogoutLabel, onSidebarLogout }: SideHideLayoutProps) => {\n return (\n <Sidebar items={sidebarItems} currentPathname={sidebarCurrentPathname} onNavigate={onSidebarNavigate} logoutLabel={sidebarLogoutLabel} handleLogout={onSidebarLogout}>\n {children}\n </Sidebar>\n );\n});\n\nSideHideLayout.displayName = \"SideHideLayout\";\nexport default SideHideLayout;\n","import type { SideShowLayoutProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport Sidebar from \"../Sidebar\";\n\nconst SideShowLayout = memo(({ children, sidebarItems, sidebarCurrentPathname, onSidebarNavigate, sidebarLogoutLabel, onSidebarLogout }: SideShowLayoutProps) => {\n return (\n <Sidebar items={sidebarItems} currentPathname={sidebarCurrentPathname} onNavigate={onSidebarNavigate} logoutLabel={sidebarLogoutLabel} handleLogout={onSidebarLogout}>\n {children}\n </Sidebar>\n );\n});\n\nSideShowLayout.displayName = \"SideShowLayout\";\nexport default SideShowLayout;\n","/* ===== Footer Component ===== */\r\n\r\n.footer {\r\n background: var(--color-bg-2);\r\n padding: 0 2rem;\r\n width: 100%;\r\n}\r\n\r\n.footerContent {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n max-width: 100%;\r\n margin: 0 auto;\r\n}\r\n\r\n.copyright {\r\n color: var(--color-fg-text);\r\n font-size: 0.875rem;\r\n}\r\n\r\n.links {\r\n display: flex;\r\n gap: 1.5rem;\r\n}\r\n\r\n.link {\r\n color: var(--color-fg-text);\r\n font-size: 0.875rem;\r\n text-decoration: none;\r\n transition: color 0.3s ease;\r\n}\r\n\r\n.link:hover {\r\n color: var(--color-primary);\r\n}\r\n\r\n/* ===== 响应式 ===== */\r\n@media (max-width: 768px) {\r\n .footerContent {\r\n flex-direction: column;\r\n gap: 1rem;\r\n }\r\n\r\n .links {\r\n gap: 1rem;\r\n }\r\n}\r\n","import type { FooterProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\nexport const DefaultFooterContent = memo(() => {\n const currentYear = new Date().getFullYear();\n return (\n <div className={styles.footerContent}>\n <span className={styles.copyright}>© {currentYear}</span>\n <div className={styles.links}>\n <a href=\"#\" className={styles.link}>\n About Us\n </a>\n <a href=\"#\" className={styles.link}>\n Privacy Policy\n </a>\n <a href=\"#\" className={styles.link}>\n Terms of Service\n </a>\n </div>\n </div>\n );\n});\nDefaultFooterContent.displayName = \"DefaultFooterContent\";\n\n/** 通用 Footer:只负责布局与样式,内容由外部传入。 */\nconst Footer = memo(({ children, className }: FooterProps) => {\n return <div className={`${styles.footer} ${className || \"\"}`}>{children ?? <DefaultFooterContent />}</div>;\n});\n\nFooter.displayName = \"Footer\";\n\nexport default Footer;\n",".wavesWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.wavesWrapper > * {\n pointer-events: auto;\n}\n\n.squaresWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.squaresWrapper > * {\n pointer-events: auto;\n}\n\n.letterGlitchWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.letterGlitchWrapper > * {\n pointer-events: auto;\n}\n\n.pixelBlastWrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n}\n\n.pixelBlastWrapper > * {\n pointer-events: auto;\n}\n","import type { ReactNode } from \"react\";\n\nimport { Suspense, lazy, memo } from \"react\";\n\nimport { LetterGlitchBackground, SquareBackground, WaveBackground } from \"@/designs/animations\";\nimport { DashboardBackgroundEnum } from \"@/enums/dashboard\";\n\nimport styles from \"./styles.module.css\";\n\nconst LazyPixelBlast = lazy(() => import(\"@/designs/animations/PixelBlast\"));\n\ninterface BackgroundProps {\n children: ReactNode;\n /** 可选:外部传入的偏好,有则优先使用;否则从 profile.preference 解析。Optional: preference from parent; otherwise parsed from profile. */\n background?: DashboardBackgroundEnum | null;\n}\n\n/** 与 NFX-Identity/console 一致:仪表盘背景由用户偏好(可外部传入或从 profile 解析) */\nconst Background = memo(({ children, background }: BackgroundProps) => {\n const renderBackground = () => {\n switch (background) {\n case DashboardBackgroundEnum.WAVES:\n return (\n <div className={styles.wavesWrapper}>\n <WaveBackground />\n </div>\n );\n case DashboardBackgroundEnum.SQUARES:\n return (\n <div className={styles.squaresWrapper}>\n <SquareBackground />\n </div>\n );\n case DashboardBackgroundEnum.LETTER_GLITCH:\n return (\n <div className={styles.letterGlitchWrapper}>\n <LetterGlitchBackground />\n </div>\n );\n case DashboardBackgroundEnum.PIXEL_BLAST:\n return (\n <Suspense fallback={null}>\n <div className={styles.pixelBlastWrapper}>\n <LazyPixelBlast />\n </div>\n </Suspense>\n );\n case DashboardBackgroundEnum.NONE:\n default:\n return null;\n }\n };\n\n return (\n <>\n {children}\n {renderBackground()}\n </>\n );\n});\n\nBackground.displayName = \"Background\";\nexport default Background;\nexport type { BackgroundProps };\n","import type { LayoutFrameProps } from \"../../types\";\n\nimport { memo } from \"react\";\n\nimport Sidebar from \"../Sidebar\";\n\nexport const LayoutFrame = memo(\n ({\n children,\n sidebarItems,\n sidebarCurrentPathname,\n onSidebarNavigate,\n sidebarLogoutLabel,\n onSidebarLogout,\n headerLeft,\n headerRight,\n }: LayoutFrameProps) => {\n return (\n <Sidebar\n items={sidebarItems}\n currentPathname={sidebarCurrentPathname}\n onNavigate={onSidebarNavigate}\n logoutLabel={sidebarLogoutLabel}\n handleLogout={onSidebarLogout}\n header={headerLeft}\n topBar={headerRight}\n >\n {children}\n </Sidebar>\n );\n },\n);\n\nLayoutFrame.displayName = \"LayoutFrame\";\nexport default LayoutFrame;\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { getLayoutStorage, setLayoutStorage } from \"../utils\";\nimport { LayoutModeEnum } from \"../types\";\n\ninterface UseSetProps {\n defaultLayoutMode: LayoutModeEnum;\n sidebarOpen: boolean;\n}\n\nconst useSet = ({ defaultLayoutMode, sidebarOpen }: UseSetProps) => {\n const [layoutMode, setLayoutModeState] = useState<LayoutModeEnum>(() => {\n const saved = getLayoutStorage();\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n const mode = parsed.state?.layoutMode ?? parsed.layoutMode;\n return mode === LayoutModeEnum.SHOW || mode === LayoutModeEnum.HIDE ? mode : defaultLayoutMode;\n } catch {\n return defaultLayoutMode;\n }\n }\n return defaultLayoutMode;\n });\n\n useEffect(() => {\n const storage = {\n state: {\n sidebarOpen,\n layoutMode,\n },\n };\n setLayoutStorage(JSON.stringify(storage));\n }, [sidebarOpen, layoutMode]);\n\n const setLayoutMode = useCallback((mode: LayoutModeEnum) => {\n setLayoutModeState(mode);\n }, []);\n\n return {\n layoutMode,\n setLayoutMode,\n };\n};\n\nexport default useSet;\n","import { useCallback, useState } from \"react\";\n\nimport { getLayoutStorage } from \"../utils\";\n\nconst useAction = () => {\n const [sidebarOpen, setSidebarOpenState] = useState<boolean>(() => {\n const saved = getLayoutStorage();\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n return parsed.state?.sidebarOpen ?? parsed.sidebarOpen ?? false;\n } catch {\n return false;\n }\n }\n return false;\n });\n\n const setSidebarOpen = useCallback((open: boolean) => {\n setSidebarOpenState(open);\n }, []);\n\n const toggleSidebar = useCallback(() => {\n setSidebarOpenState((prev) => !prev);\n }, []);\n\n const closeSidebar = useCallback(() => {\n setSidebarOpenState(false);\n }, []);\n\n return {\n sidebarOpen,\n setSidebarOpen,\n toggleSidebar,\n closeSidebar,\n };\n};\n\nexport default useAction;\n","/**\n * 布局提供者:提供侧栏开关与显示/隐藏模式上下文。\n * Layout provider: provides sidebar state and show/hide layout mode context.\n */\nimport type { LayoutProviderProps } from \"../types\";\n\nimport { memo } from \"react\";\n\nimport useAction from \"../hooks/useAction\";\nimport { LayoutContext } from \"../hooks/useLayout\";\nimport useSet from \"../hooks/useSet\";\nimport { DEFAULT_LAYOUT_MODE } from \"../types\";\n\nconst LayoutProvider = memo(({ children, defaultLayoutMode = DEFAULT_LAYOUT_MODE }: LayoutProviderProps) => {\n const { sidebarOpen, setSidebarOpen, toggleSidebar, closeSidebar } = useAction();\n const { layoutMode, setLayoutMode } = useSet({ defaultLayoutMode, sidebarOpen });\n\n return (\n <LayoutContext.Provider\n value={{\n sidebarOpen,\n layoutMode,\n setSidebarOpen,\n toggleSidebar,\n closeSidebar,\n setLayoutMode,\n }}\n >\n {children}\n </LayoutContext.Provider>\n );\n});\n\nLayoutProvider.displayName = \"LayoutProvider\";\nexport default LayoutProvider;\n"],"mappings":"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"}
|
package/dist/navigations.cjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
(function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(`.styles-module__loading___bgEAk{justify-content:center;align-items:center;display:inline-flex}.styles-module__loading___bgEAk svg polyline{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.styles-module__loading___bgEAk svg polyline.styles-module__back___XLPvD{fill:none;stroke:var(--color-primary-alpha)}.styles-module__loading___bgEAk svg polyline.styles-module__front___hSxig{fill:none;stroke:var(--color-primary);stroke-dasharray:48 144;stroke-dashoffset:192px;animation:1.4s linear infinite styles-module__dash_682___AQzo6}@keyframes styles-module__dash_682___AQzo6{72.5%{opacity:0}to{stroke-dashoffset:0}}.styles-module__loader___E7OIM{justify-content:center;align-items:center;width:fit-content;height:fit-content;display:flex}.styles-module__truckWrapper___Sk4zX{flex-direction:column;justify-content:flex-end;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow-x:hidden}.styles-module__truckBody___j7w2C{width:65%;height:fit-content;margin-bottom:6px;animation:1s linear infinite styles-module__motion___IiNlW}@keyframes styles-module__motion___IiNlW{0%{transform:translateY(0)}50%{transform:translateY(3px)}to{transform:translateY(0)}}.styles-module__truckTires___4ncTl{justify-content:space-between;align-items:center;width:65%;height:fit-content;padding:0 10px 0 15px;display:flex;position:absolute;bottom:0}.styles-module__tiresvg___IBQcN{width:24px}.styles-module__road___sxx-E{background-color:var(--color-fg-heading);border-radius:var(--radius-button);align-self:flex-end;width:100%;height:1.5px;position:relative;bottom:0}.styles-module__road___sxx-E:before{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:10px solid var(--color-bg);width:20px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-50%}.styles-module__road___sxx-E:after{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:4px solid var(--color-bg);width:10px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-65%}.styles-module__lampPost___okcN5{height:45%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;bottom:0;right:-90%}@keyframes styles-module__roadAnimation___yvrHP{0%{transform:translate(0)}to{transform:translate(-350px)}}.styles-module__loader___pFUzL{justify-content:center;align-items:center;display:inline-flex;position:relative}.styles-module__loader___pFUzL:before{content:"";background:var(--color-primary);opacity:.3;border-radius:50%;width:100%;height:5px;animation:.5s linear infinite styles-module__shadow324___sutUe;position:absolute;top:calc(100% + 12px);left:0}.styles-module__loader___pFUzL:after{content:"";background:var(--color-primary);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__square___GKjhm:after{border-radius:var(--radius-button);animation:.5s linear infinite styles-module__jump7456Square___Z-D9b}.styles-module__circle___bUpSN:after{border-radius:50%;animation:.5s linear infinite styles-module__jump7456Circle___2AfF7}@keyframes styles-module__jump7456Square___Z-D9b{15%{border-bottom-right-radius:3px}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__jump7456Circle___2AfF7{15%{border-bottom-right-radius:50%}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__shadow324___sutUe{0%,to{transform:scale(1)}50%{transform:scaleX(1.2)}}.style-module__waves___oR3u7{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.style-module__waves___oR3u7:before{content:"";background:var(--color-bg);width:.5rem;height:.5rem;transform:translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);will-change:transform;border-radius:50%;position:absolute;top:0;left:0}.style-module__wavesCanvas___zkhTC{width:100%;height:100%;display:block}.style-module__squaresCanvas___22kMc{border:none;width:100%;height:100%;display:block}.style-module__container___HkxIe{background-color:var(--color-bg);width:100%;height:100%;position:relative;overflow:hidden}.style-module__canvas___MR9JX{width:100%;height:100%;display:block}.style-module__outerVignette___i75nw{pointer-events:none;background:radial-gradient(circle,#0000 60%,#000 100%);width:100%;height:100%;position:absolute;top:0;left:0}.style-module__centerVignette___n9uVG{pointer-events:none;background:radial-gradient(circle,#000c 0%,#0000 60%);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__button___RbliA{border-radius:var(--radius-button);cursor:pointer;border:1px solid #0000;outline:none;justify-content:center;align-items:center;gap:.5rem;font-family:inherit;font-weight:500;transition:all .2s;display:inline-flex;position:relative}.styles-module__button___RbliA:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.styles-module__button___RbliA:disabled{cursor:not-allowed;opacity:.6}.styles-module__button___RbliA.styles-module__small___yK0Yp{min-height:2rem;padding:.5rem 1rem;font-size:.8125rem}.styles-module__button___RbliA.styles-module__medium___eBTch{min-height:2.5rem;padding:.75rem 1.5rem;font-size:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl{min-height:3rem;padding:1rem 2rem;font-size:1rem}.styles-module__button___RbliA.styles-module__primary___qsZpA{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__button___RbliA.styles-module__primary___qsZpA:hover:not(:disabled){background:var(--color-primary-light);border-color:var(--color-primary-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__primary___qsZpA:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__secondary___SCpPv{background:var(--color-bg-2);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__button___RbliA.styles-module__secondary___SCpPv:hover:not(:disabled){background:var(--color-bg-3);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__outline___rrlk9{border-color:var(--color-border-4);color:var(--color-fg-text);background:0 0}.styles-module__button___RbliA.styles-module__outline___rrlk9:hover:not(:disabled){background:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__ghost___QMoiH{color:var(--color-fg-text);background:0 0;border-color:#0000}.styles-module__button___RbliA.styles-module__ghost___QMoiH:hover:not(:disabled){background:var(--color-bg-2)}.styles-module__button___RbliA.styles-module__danger___MW-pg{background:var(--color-danger);border-color:var(--color-danger);color:var(--color-danger-fg,#fff)}.styles-module__button___RbliA.styles-module__danger___MW-pg:hover:not(:disabled){background:var(--color-danger-light);border-color:var(--color-danger-light);color:var(--color-danger-fg,#fff);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__danger___MW-pg:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__fullWidth___-dXBR{width:100%}.styles-module__button___RbliA.styles-module__loading___UWw6V{pointer-events:none}.styles-module__spinner___KpJ-L{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:1rem;height:1rem;animation:.6s linear infinite styles-module__spin___ntZKM}@keyframes styles-module__spin___ntZKM{to{transform:rotate(360deg)}}.styles-module__button___RbliA.styles-module__small___yK0Yp .styles-module__spinner___KpJ-L{border-width:1.5px;width:.875rem;height:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl .styles-module__spinner___KpJ-L{border-width:2.5px;width:1.25rem;height:1.25rem}.styles-module__content___oyZRO{align-items:center;display:flex}.styles-module__leftIcon___cDktv,.styles-module__rightIcon___1mpk0{flex-shrink:0;align-items:center;display:flex}.styles-module__leftIcon___cDktv{margin-right:-.25rem}.styles-module__rightIcon___1mpk0{margin-left:-.25rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U{aspect-ratio:1;min-width:2.5rem;min-height:2.5rem;padding:0}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__small___yK0Yp{min-width:2rem;min-height:2rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__large___pIZkl{min-width:3rem;min-height:3rem}.styles-module__iconContainer___bwvE3{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.styles-module__layout___WaGy9{flex-direction:column;justify-content:center;align-items:center;gap:.25rem;width:100%;display:flex}.styles-module__horizontal___lKpGq{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.styles-module__topIcon___bzw6s,.styles-module__bottomIcon___suPfa{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__leftIcon___cDktv,.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__rightIcon___1mpk0{margin:0}.Dropdown-module__dropdown___c9wIp{width:100%;display:inline-block;position:relative}.Dropdown-module__dropdownButton___suNh-{border:1px solid var(--color-separator);border-radius:var(--radius-card);cursor:pointer;text-align:left;background:var(--color-bg-2);width:100%;color:var(--color-fg-text);outline:none;justify-content:space-between;align-items:center;padding:.75rem 2.5rem .75rem 1rem;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5rem;transition:all .2s ease-in-out;display:flex;position:relative}.Dropdown-module__dropdownButton___suNh-:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-bg-1)}.Dropdown-module__dropdownButton___suNh-:focus{border-color:var(--color-primary);background:var(--color-bg-1);box-shadow:0 0 0 2px var(--color-primary-transparent)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__disabled___Rz0pX{cursor:not-allowed;opacity:.6;background:var(--color-bg-3)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__error___F7dDu{border-color:var(--color-danger)}.Dropdown-module__buttonText___D2zxn{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.Dropdown-module__chevronIcon___uyawp{color:var(--color-fg-highlight);flex-shrink:0;transition:transform .15s;position:absolute;right:1rem}.Dropdown-module__chevronIcon___uyawp.Dropdown-module__open___APoXd{transform:rotate(180deg)}.Dropdown-module__dropdownMenu___WJ-QO{background:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-card);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;animation:.15s ease-out Dropdown-module__slideDown___sRCmO;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}@keyframes Dropdown-module__slideDown___sRCmO{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.Dropdown-module__optionsList___Be6RN{margin:0;padding:.5rem 0;list-style:none}.Dropdown-module__option___q-NgT{cursor:pointer;color:var(--color-fg-text);align-items:center;padding:.75rem 1rem;font-size:.875rem;transition:all .15s;display:flex}.Dropdown-module__option___q-NgT:hover{background-color:var(--color-bg-2)}.Dropdown-module__option___q-NgT.Dropdown-module__selected___-OTW-{background-color:var(--color-bg-3);color:var(--color-fg-highlight);font-weight:600}@media (width<=768px){.Dropdown-module__dropdownButton___suNh-{padding:.625rem 2.25rem .625rem .875rem;font-size:.875rem}.Dropdown-module__chevronIcon___uyawp{right:.875rem}.Dropdown-module__option___q-NgT{padding:.625rem .875rem;font-size:.8125rem}}.styles-module__wrapper___COeGm{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___COeGm.styles-module__fullWidth___lVU49{width:100%}.styles-module__label___gfOA7{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___-zOy5{color:var(--color-danger)}.styles-module__inputContainer___wXY53{align-items:center;width:100%;display:flex;position:relative}.styles-module__input___IZDc3{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);outline:none;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__input___IZDc3[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-webkit-strong-password-toggle-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;width:0!important;height:0!important;margin:0!important;padding:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-reveal{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-clear{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__input___IZDc3::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__input___IZDc3.styles-module__small___cuGyE{padding:.5rem .75rem;font-size:.8125rem}.styles-module__input___IZDc3.styles-module__medium___JdDPu{padding:.75rem;font-size:.875rem}.styles-module__input___IZDc3.styles-module__large___fMmiG{padding:1rem;font-size:1rem}.styles-module__input___IZDc3.styles-module__default___-eZTG{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__input___IZDc3.styles-module__filled___EQ5PQ{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3{padding-left:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3{padding-right:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-left:2rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-right:2rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-left:3rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-right:3rem}.styles-module__leftIcon___jEW5H,.styles-module__rightIcon___bA3Eo{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute}.styles-module__leftIcon___jEW5H{left:.75rem}.styles-module__rightIcon___bA3Eo{right:.75rem}.styles-module__rightIcon___bA3Eo.styles-module__rightIconInteractive___ccypw{pointer-events:auto}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__leftIcon___jEW5H{left:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__rightIcon___bA3Eo{right:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__leftIcon___jEW5H{left:1rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__rightIcon___bA3Eo{right:1rem}.styles-module__input___IZDc3.styles-module__error___946qV{border-color:var(--color-danger)}.styles-module__input___IZDc3.styles-module__error___946qV:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__input___IZDc3.styles-module__disabled___sJvLd{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorMessage___5Mn22{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___T2eui{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__container___xeg8O{flex-direction:column;gap:1rem;display:flex}.styles-module__label___qhbKe{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__error___O-7AY{color:var(--color-error);font-size:.875rem}.styles-module__pairs___owGV3{flex-direction:column;gap:.75rem;display:flex}.styles-module__pair___G4WFY{grid-template-columns:1fr 2fr auto;align-items:start;gap:.75rem;display:grid}.styles-module__keyInput___wl1M1,.styles-module__valueInput___HiwJ5{flex:1}.styles-module__removeButton___4-X0b{min-width:auto;color:var(--color-error);padding:.5rem}.styles-module__removeButton___4-X0b:hover{background-color:var(--color-error);color:var(--color-primary-fg)}.styles-module__addButton___QFljt{align-self:flex-start}@media (width<=768px){.styles-module__pair___G4WFY{grid-template-columns:1fr}.styles-module__removeButton___4-X0b{align-self:flex-end}}.styles-module__searchContainer___86TGN{width:100%;max-width:400px;position:relative}.styles-module__searchContainerFull___cEuNS{max-width:none}.styles-module__searchIcon___ZInry{color:var(--color-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.styles-module__searchInput___SqZXQ{border:1px solid var(--color-border);border-radius:var(--radius-input);width:100%;color:var(--color-fg-text);background:var(--color-bg-2);padding:.75rem 3rem;font-size:1rem;transition:all .2s}.styles-module__searchInput___SqZXQ:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.styles-module__searchInput___SqZXQ::placeholder{color:var(--color-fg-muted)}.styles-module__clearBtn___7jExr{width:1.5rem;height:1.5rem;color:var(--color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.styles-module__clearBtn___7jExr:hover{color:var(--color-fg-text)}@media (width<=768px){.styles-module__searchContainer___86TGN{max-width:100%}}.styles-module__container___nGxdM{flex-direction:column;gap:.75rem;display:flex}.styles-module__toggleContainer___VrsKI{align-items:center;display:flex}.styles-module__toggleButton___IzD6Z{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg-muted);cursor:pointer;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;transition:all .2s;display:flex}.styles-module__toggleButton___IzD6Z:hover{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__optionsContainer___LOzlO{background:var(--color-bg-2);border-radius:var(--radius-card);border:1px solid var(--color-border-4);gap:.5rem;padding:.5rem;display:flex}.styles-module__option___abhnC{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:.375rem;padding:.5rem .875rem;font-size:.875rem;font-weight:500;transition:all .2s;display:flex}.styles-module__option___abhnC:hover{background:var(--color-bg-3);border-color:var(--color-border-3)}.styles-module__option___abhnC.styles-module__active___pqmSi{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__option___abhnC.styles-module__active___pqmSi:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__nbSelect___KjxSc{font-family:inherit;font-size:.9375rem;font-weight:600;line-height:1.5rem;display:inline-block;position:relative}.styles-module__selectButton___AKZe4{border-radius:var(--radius-button);cursor:pointer;text-align:left;width:100%;min-width:8rem;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;appearance:none;border:1px solid;outline:none;justify-content:space-between;align-items:center;padding:.4375rem 2.2rem .4375rem 1.125rem;transition:all .15s ease-in-out;display:flex;position:relative}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:hover:not(:disabled){background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:focus,.styles-module__selectButton___AKZe4.styles-module__primary___HU36a.styles-module__open___9AKMb{background-color:var(--color-primary-light);border-color:var(--color-primary-light);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP{background-color:var(--color-bg);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:hover:not(:disabled){background-color:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:focus,.styles-module__selectButton___AKZe4.styles-module__default___LedYP.styles-module__open___9AKMb{background-color:var(--color-bg-2);border-color:var(--color-primary);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4:disabled{cursor:not-allowed;opacity:.6}.styles-module__buttonText___QSLO1{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.styles-module__chevronIcon___qAHaD{flex-shrink:0;width:1.5rem;height:1.5rem;transition:transform .15s;position:absolute;right:.41rem}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a .styles-module__chevronIcon___qAHaD{color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP .styles-module__chevronIcon___qAHaD{color:var(--color-fg)}.styles-module__chevronIcon___qAHaD.styles-module__open___9AKMb{transform:rotate(180deg)}.styles-module__optionsPanel___NWAp3{background-color:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-button);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;transform-origin:top;visibility:hidden;pointer-events:none;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}.styles-module__optionsPanel___NWAp3.styles-module__open___9AKMb{visibility:visible;pointer-events:auto;animation:.25s ease-out styles-module__expandDown___eD4lh}.styles-module__optionsPanel___NWAp3.styles-module__closed___bez-q{visibility:hidden;pointer-events:none;animation:.25s ease-out styles-module__collapseUp___dt1E7}@keyframes styles-module__expandDown___eD4lh{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes styles-module__collapseUp___dt1E7{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.styles-module__optionsPanel___NWAp3.styles-module__primary___HU36a{border-color:var(--color-primary)}.styles-module__optionsPanel___NWAp3.styles-module__default___LedYP{border-color:var(--color-border-4)}.styles-module__optionsList___AxhVp{margin:0;padding:.5rem 0;list-style:none}.styles-module__option___t1SSw{cursor:pointer;color:var(--color-fg-text);justify-content:space-between;align-items:center;padding:.75rem 1.125rem;transition:all .15s;display:flex}.styles-module__option___t1SSw:hover{background-color:var(--color-bg-2)}.styles-module__option___t1SSw.styles-module__selected___azD4A{background-color:var(--color-primary);color:var(--color-primary-fg);font-weight:700}@media (prefers-color-scheme:dark){.styles-module__optionsPanel___NWAp3{box-shadow:0 .5rem 1rem var(--color-shadow)}}.styles-module__sliderContainer___lgpaD{flex-direction:column;gap:.5rem;display:flex}.styles-module__sliderContainer___lgpaD.styles-module__fullWidth___ZS8W5{width:100%}.styles-module__labelRow___dkVVM{justify-content:space-between;align-items:center;min-height:1.5rem;margin-bottom:.5rem;display:flex}.styles-module__label___bXGZs{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__required___FuyfE{color:var(--color-danger);margin-left:.25rem}.styles-module__sliderWrapper___1Wdti{touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.75rem;width:100%;display:flex}.styles-module__sliderRoot___yzOjR{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-grow:1;align-items:center;width:100%;padding:.75rem 0;display:flex;position:relative}.styles-module__sliderRoot___yzOjR:active{cursor:grabbing}.styles-module__sliderTrackWrapper___N72WQ{flex-grow:1;display:flex;position:relative}.styles-module__sliderTrack___AltcD{border-radius:var(--radius-badge);background-color:var(--color-bg-3);width:100%;height:.375rem;position:relative;overflow:hidden}.styles-module__sliderRange___U3g0-{background-color:var(--color-primary);border-radius:var(--radius-badge);height:100%;position:absolute}.styles-module__valueIndicator___aLf0I{color:var(--color-primary);text-align:center;flex-shrink:0;min-width:2rem;font-size:.875rem;font-weight:600;line-height:1}.styles-module__iconWrapper___wL-b8{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__icon___vHsID{width:20px;height:20px;color:var(--color-fg-muted)}.styles-module__errorMessage___qFgGe{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___tgBGl{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__loadingContainer___OMgwS{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.styles-module__loadingText___KRZqR{color:var(--color-fg-muted);font-size:1rem}.styles-module__errorContainer___qhAg2{text-align:center;min-height:60vh;color:var(--color-fg-text);flex-direction:column;justify-content:center;align-items:center;gap:2rem;padding:3rem 2rem;display:flex}.styles-module__errorIconWrapper___IHZrN{background:linear-gradient(135deg, rgba(var(--color-error-rgb), .1), rgba(var(--color-error-rgb), .05));border:2px solid rgba(var(--color-error-rgb), .2);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;animation:2s ease-in-out infinite styles-module__pulse___Lju-z;display:flex}@keyframes styles-module__pulse___Lju-z{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.styles-module__errorIcon___oGDIP{color:var(--color-error);stroke-width:1.5px}.styles-module__errorContent___F55rQ{flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:600px;display:flex}.styles-module__errorTitle___hC8D-{color:var(--color-fg-heading);letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.2}.styles-module__errorDescription___hZtuP{color:var(--color-fg-muted);max-width:480px;margin:0;font-size:1rem;line-height:1.6}.styles-module__errorDetailsWrapper___-sp8b{width:100%;max-width:600px;margin-top:.5rem}.styles-module__errorDetailsContainer___eywMo{text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-bg-2);width:100%;transition:all .2s;overflow:hidden}.styles-module__errorDetailsContainer___eywMo:hover{border-color:var(--color-border-hover);background:var(--color-bg-3)}.styles-module__errorDetailsSummary___hGEoD{cursor:pointer;color:var(--color-fg-muted);-webkit-user-select:none;user-select:none;padding:.875rem 1.25rem;font-size:.875rem;font-weight:500;list-style:none;transition:color .2s}.styles-module__errorDetailsSummary___hGEoD:hover{color:var(--color-fg-text)}.styles-module__errorDetailsSummary___hGEoD::-webkit-details-marker{display:none}.styles-module__errorDetailsSummary___hGEoD:before{content:"▶";margin-right:.5rem;font-size:.75rem;transition:transform .2s;display:inline-block}.styles-module__errorDetailsContainer___eywMo[open] .styles-module__errorDetailsSummary___hGEoD:before{transform:rotate(90deg)}.styles-module__errorDetails___tzCT-{background:var(--color-bg-3);border-top:1px solid var(--color-border);max-width:100%;color:var(--color-fg-muted);white-space:pre-wrap;word-break:break-word;margin:0;padding:1rem 1.25rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:.8125rem;line-height:1.6;overflow-x:auto}.styles-module__errorActions___gtqYw{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.styles-module__retryButton___TA4jm{border-radius:var(--radius-button);background:var(--color-primary);color:var(--color-primary-fg);cursor:pointer;box-shadow:0 2px 8px var(--color-shadow);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__retryButton___TA4jm:hover{box-shadow:0 4px 16px var(--color-shadow);background:var(--color-primary-light);color:var(--color-primary-fg);transform:translateY(-2px)}.styles-module__retryButton___TA4jm:active{box-shadow:0 2px 8px var(--color-shadow);transform:translateY(0)}.styles-module__retryButtonIcon___vzfp-{font-size:1.125rem;line-height:1;transition:transform .3s;display:inline-block}.styles-module__retryButton___TA4jm:hover .styles-module__retryButtonIcon___vzfp-{transform:rotate(180deg)}.styles-module__clearLocalDataButton___T3B-K{border-radius:var(--radius-button);color:var(--color-fg-muted);border:1px solid var(--color-border-4);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__clearLocalDataButton___T3B-K:hover{color:var(--color-fg-text);border-color:var(--color-border-3);background:var(--color-bg-secondary)}.styles-module__wrapper___jXPV3{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___jXPV3.styles-module__fullWidth___eKyGB{width:100%}.styles-module__label___MyTeo{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___TV-m8{color:var(--color-danger)}.styles-module__inputContainer___VvGBl{align-items:flex-start;width:100%;display:flex;position:relative}.styles-module__textarea___AjX9N{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);resize:vertical;outline:none;min-height:4rem;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__textarea___AjX9N:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__textarea___AjX9N::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__textarea___AjX9N.styles-module__small___zMx0G{min-height:3rem;padding:.5rem .75rem;font-size:.8125rem}.styles-module__textarea___AjX9N.styles-module__medium___tO2Lb{min-height:4rem;padding:.75rem;font-size:.875rem}.styles-module__textarea___AjX9N.styles-module__large___3eU2g{min-height:5rem;padding:1rem;font-size:1rem}.styles-module__textarea___AjX9N.styles-module__default___vsSxX{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__textarea___AjX9N.styles-module__filled___TPQgI{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___VvGBl .styles-module__leftIcon___FHp2R{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;left:.75rem}.styles-module__inputContainer___VvGBl .styles-module__rightIcon___dkyvP{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;right:.75rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__rightIcon___dkyvP{top:.5rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__rightIcon___dkyvP{top:1rem}.styles-module__textarea___AjX9N.styles-module__error___d8gLK{border-color:var(--color-danger)}.styles-module__textarea___AjX9N.styles-module__error___d8gLK:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__textarea___AjX9N.styles-module__disabled___IzbfE{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorText___Nom7x{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___97Def{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__virtualList___pM6rN{contain:strict;width:100%;padding-bottom:300px;position:relative;overflow:auto}.styles-module__emptyContainer___rm938{height:100%;color:var(--color-fg-muted);justify-content:center;align-items:center;display:flex}.styles-module__virtualListInner___HxRzc{width:100%;position:relative}.styles-module__virtualListItems___p19-a{width:100%;position:absolute;top:0;left:0}.styles-module__loadingMore___zAdLM{color:var(--color-fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;margin-top:1rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh span{background-color:var(--color-bg-2);border-radius:var(--radius-button);padding:.5rem 1rem}.styles-module__virtualList___xmj2v{width:100%;padding-bottom:300px;position:relative;overflow:visible}.styles-module__virtualListInner___quD74{width:100%;position:relative}.styles-module__virtualListItems___-Muml{width:100%;position:absolute;top:0;left:0}.styles-module__virtualListRow___h3pzX{width:100%}.styles-module__emptyContainer___LIy8r{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:2rem 0;display:flex}.styles-module__loadingMore___Mzf-p{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:1.5rem 0;display:flex}.styles-module__endOfList___g5G--{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;padding:1.5rem 0;display:flex}.styles-module__sidebar___BMt0j{flex-direction:column;min-height:0;display:flex;overflow:hidden}.styles-module__sidebarContent___iAwiw{flex-direction:column;flex:1;min-height:0;padding-top:1rem;display:flex;overflow:hidden}.styles-module__menuWrapper___DKuEv{flex:1;min-height:0;overflow:hidden auto}.styles-module__sidebarFooter___qiPXO{flex-shrink:0;margin-top:auto}.styles-module__menuWrapper___DKuEv::-webkit-scrollbar{width:0;height:0}.styles-module__menuWrapper___DKuEv{scrollbar-width:none;-ms-overflow-style:none}.styles-module__sidebar___BMt0j .ps-sidebar-root{background-color:var(--color-bg-2)!important;border-right:1px solid var(--color-separator)!important;flex-direction:column!important;min-height:0!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-sidebar-container{background-color:var(--color-bg-2)!important;min-height:0!important;color:var(--color-fg-text)!important;flex-direction:column!important;flex:1!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-menu-button{border-radius:var(--radius-button)!important;color:var(--color-fg-text)!important;margin:.125rem .5rem!important;padding:.5rem .75rem!important;font-size:.875rem!important;transition:background-color .2s,color .2s!important}.styles-module__sidebar___BMt0j .ps-menu-button:hover{background-color:var(--color-bg-3)!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active{background-color:var(--color-primary)!important;color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-submenu-expand-icon{color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-icon{width:1.25rem!important;height:1.25rem!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-submenu-content{background-color:var(--color-bg-3)!important;padding-left:1rem!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-submenu-content{padding-left:.75rem!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-menu-button{margin:.125rem .25rem!important;padding:.375rem .5rem .375rem .75rem!important;font-size:.8125rem!important}.styles-module__logoutContainer___7NwBL{border-top:1px solid var(--color-separator);padding:.5rem}.styles-module__logoutButton___rfD6u{border-radius:var(--radius-button);width:100%;color:var(--color-fg-text);cursor:pointer;white-space:nowrap;background:0 0;border:none;justify-content:flex-start;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;transition:background-color .2s,color .2s;display:flex;overflow:hidden}.styles-module__logoutButton___rfD6u:hover{background-color:var(--color-bg-3)}.styles-module__logoutButton___rfD6u:active{transform:scale(.98)}.styles-module__logoutButton___rfD6u svg{color:inherit;flex-shrink:0}.styles-module__hiddenText___z183T{opacity:0;width:0;max-width:0;overflow:hidden}.styles-module__visibleText___lfsv-{opacity:1;width:auto;max-width:200px}.styles-module__footer___g-hY7{background:var(--color-bg-2);width:100%;padding:0 2rem}.styles-module__footerContent___Oen5n{justify-content:space-between;align-items:center;max-width:100%;margin:0 auto;display:flex}.styles-module__copyright___1R2o3{color:var(--color-fg-text);font-size:.875rem}.styles-module__links___dQyvB{gap:1.5rem;display:flex}.styles-module__link___UWfyK{color:var(--color-fg-text);font-size:.875rem;text-decoration:none;transition:color .3s}.styles-module__link___UWfyK:hover{color:var(--color-primary)}@media (width<=768px){.styles-module__footerContent___Oen5n{flex-direction:column;gap:1rem}.styles-module__links___dQyvB{gap:1rem}}.styles-module__header___4Uc8h{width:100%;padding:.5rem 2rem;display:flex}.styles-module__header___4Uc8h>:first-child{flex:1;justify-content:flex-start;align-items:center;display:flex}.styles-module__header___4Uc8h>:last-child{flex:1;justify-content:flex-end;align-items:center;display:flex}.styles-module__layout___ZQKU7{background:var(--color-bg);flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.styles-module__header___XIaFb{z-index:100;background:var(--color-bg);width:100%;box-shadow:0 .125rem .25rem 0 var(--color-shadow);position:fixed;top:0}.styles-module__footer___r8ASO{z-index:100;width:100%;position:fixed;bottom:0}.styles-module__mainWrapper___i4tEI{flex:1;display:flex;position:relative}.styles-module__sidebarChrome___q0pw5{z-index:101;box-sizing:border-box;position:fixed;left:0}.styles-module__sidebar___ij-8-{height:100%;min-height:0}.styles-module__content___mTgUr{background:var(--color-bg);flex:1;min-height:calc(100vh - 10rem);margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=768px){.styles-module__content___mTgUr{width:100%}.styles-module__sidebarChrome___q0pw5{z-index:999}}.styles-module__mainWrapper___AiTAw{flex-direction:row;flex:1;display:flex;position:relative}.styles-module__sidebarContainer___X4yj8{z-index:99;box-sizing:border-box;flex-direction:column;min-height:0;display:flex;position:fixed;left:0;overflow:hidden}.styles-module__sidebar___VQTlH{flex-shrink:0;top:0;left:0}.styles-module__content___htJlH{background:var(--color-bg);flex:1;margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=1024px){.styles-module__content___htJlH{padding:1.5rem}}@media (width<=768px){.styles-module__content___htJlH{width:100%}}.styles-module__wavesWrapper___TK7DI{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__wavesWrapper___TK7DI>*{pointer-events:auto}.styles-module__squaresWrapper___P25uF{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__squaresWrapper___P25uF>*{pointer-events:auto}.styles-module__letterGlitchWrapper___KWtWU{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__letterGlitchWrapper___KWtWU>*{pointer-events:auto}.styles-module__pixelBlastWrapper___YptHh{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__pixelBlastWrapper___YptHh>*{pointer-events:auto}.style-module__container___Hh3-c{width:100%;height:100%;position:relative;overflow:hidden}/*$vite$:1*/`)),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
2
1
|
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function R(t){return t}function c(t,e){return t===e}function s(t,e){if(t===e)return!0;const u=e.split("/").filter(Boolean),n=t.split("/").filter(Boolean);return u.length!==n.length?!1:u.every((r,o)=>r.startsWith(":")||r===n[o])}function a(t){const e=t;return{ROUTES:e,matchRoute:(o,i)=>s(o,i),isActiveRoute:(o,i)=>c(o,i),getRouteByKey:o=>e[o]}}exports.createRouter=a;exports.defineRouter=R;exports.isActiveRoute=c;exports.matchRoute=s;
|
|
3
2
|
|
|
4
3
|
//# sourceMappingURL=navigations.cjs.map
|
package/dist/navigations.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigations.cjs","names":[],"sources":["../src/navigations/navigation.ts"],"sourcesContent":["import type { Defined, KeyOf } from \"@/types\";\n\n/**\n * 通用路由类型与 defineRouter / createRouter(与 EventEmitter 的 defineEvents 约定一致)\n * Generic route types and defineRouter / createRouter; only values from defineRouter are accepted by createRouter.\n *\n * @example\n * ```ts\n * import { defineRouter, createRouter } from \"@/types/navigation\";\n * const routeMap = defineRouter({ HOME: \"/\", LOGIN: \"/login\", USER: \"/user/:id\" });\n * const router = createRouter(routeMap);\n * router.ROUTES.HOME; // \"/\"\n * router.matchRoute(pathname, router.ROUTES.USER);\n * ```\n */\n\n/** 由 defineRouter 返回的「已规范路由表」类型;createRouter 只接受此类型。 */\nexport type DefinedRouter<R extends Record<string, string>> = Defined<R, \"router\">;\n\n/** 由路由表 R 推导的 key 类型 */\nexport type RouteKey<R extends Record<string, string>> = KeyOf<R>;\n\n/** 由路由表 R 推导的 path 联合类型 */\nexport type RoutePath<R extends Record<string, string>> = R[RouteKey<R>];\n\n/**\n * 规范创建路由表:仅允许 defineRouter 返回的值传入 createRouter(类型约束)。\n * Define route map: only the return value of defineRouter may be passed to createRouter.\n *\n * @param routes - 路由 key-value 对象(值可为含 :param 的 path)\n * @returns DefinedRouter<R>,仅此类型可传入 createRouter\n */\nexport function defineRouter<R extends Record<string, string>>(routes: R): DefinedRouter<R> {\n return routes as DefinedRouter<R>;\n}\n\n/**\n * 精确匹配:当前路径是否等于目标 path\n * Exact match: current path equals target path.\n */\nexport function isActiveRoute(currentPath: string, targetPath: string): boolean {\n return currentPath === targetPath;\n}\n\n/**\n * 模式匹配:pathname 是否匹配带 :param 的 route 模式\n * Pattern match: pathname matches route pattern (supports :param segments).\n */\nexport function matchRoute(pathname: string, route: string): boolean {\n if (pathname === route) return true;\n const routeParts = route.split(\"/\").filter(Boolean);\n const pathParts = pathname.split(\"/\").filter(Boolean);\n if (routeParts.length !== pathParts.length) return false;\n return routeParts.every((p, i) => p.startsWith(\":\") || p === pathParts[i]);\n}\n\n/**\n * 创建路由对象:仅接受 defineRouter(...) 的返回值,得到只读 ROUTES + matchRoute / isActiveRoute / getRouteByKey\n * Create router: accepts only the return value of defineRouter(...); returns ROUTES and typed helpers.\n *\n * @param routes - 须为 defineRouter(...) 的返回值(DefinedRouter)\n */\nexport function createRouter<R extends Record<string, string>>(routes: DefinedRouter<R>) {\n const ROUTES = routes as Readonly<R>;\n\n const matchRouteBound = (pathname: string, route: R[keyof R]): boolean => matchRoute(pathname, route);\n\n const isActiveRouteBound = (currentPath: string, targetPath: R[keyof R]): boolean => isActiveRoute(currentPath, targetPath);\n\n const getRouteByKey = (key: keyof R): R[keyof R] => ROUTES[key];\n\n return {\n ROUTES,\n matchRoute: matchRouteBound,\n isActiveRoute: isActiveRouteBound,\n getRouteByKey,\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigations.cjs","names":[],"sources":["../src/navigations/navigation.ts"],"sourcesContent":["import type { Defined, KeyOf } from \"@/types\";\n\n/**\n * 通用路由类型与 defineRouter / createRouter(与 EventEmitter 的 defineEvents 约定一致)\n * Generic route types and defineRouter / createRouter; only values from defineRouter are accepted by createRouter.\n *\n * @example\n * ```ts\n * import { defineRouter, createRouter } from \"@/types/navigation\";\n * const routeMap = defineRouter({ HOME: \"/\", LOGIN: \"/login\", USER: \"/user/:id\" });\n * const router = createRouter(routeMap);\n * router.ROUTES.HOME; // \"/\"\n * router.matchRoute(pathname, router.ROUTES.USER);\n * ```\n */\n\n/** 由 defineRouter 返回的「已规范路由表」类型;createRouter 只接受此类型。 */\nexport type DefinedRouter<R extends Record<string, string>> = Defined<R, \"router\">;\n\n/** 由路由表 R 推导的 key 类型 */\nexport type RouteKey<R extends Record<string, string>> = KeyOf<R>;\n\n/** 由路由表 R 推导的 path 联合类型 */\nexport type RoutePath<R extends Record<string, string>> = R[RouteKey<R>];\n\n/**\n * 规范创建路由表:仅允许 defineRouter 返回的值传入 createRouter(类型约束)。\n * Define route map: only the return value of defineRouter may be passed to createRouter.\n *\n * @param routes - 路由 key-value 对象(值可为含 :param 的 path)\n * @returns DefinedRouter<R>,仅此类型可传入 createRouter\n */\nexport function defineRouter<R extends Record<string, string>>(routes: R): DefinedRouter<R> {\n return routes as DefinedRouter<R>;\n}\n\n/**\n * 精确匹配:当前路径是否等于目标 path\n * Exact match: current path equals target path.\n */\nexport function isActiveRoute(currentPath: string, targetPath: string): boolean {\n return currentPath === targetPath;\n}\n\n/**\n * 模式匹配:pathname 是否匹配带 :param 的 route 模式\n * Pattern match: pathname matches route pattern (supports :param segments).\n */\nexport function matchRoute(pathname: string, route: string): boolean {\n if (pathname === route) return true;\n const routeParts = route.split(\"/\").filter(Boolean);\n const pathParts = pathname.split(\"/\").filter(Boolean);\n if (routeParts.length !== pathParts.length) return false;\n return routeParts.every((p, i) => p.startsWith(\":\") || p === pathParts[i]);\n}\n\n/**\n * 创建路由对象:仅接受 defineRouter(...) 的返回值,得到只读 ROUTES + matchRoute / isActiveRoute / getRouteByKey\n * Create router: accepts only the return value of defineRouter(...); returns ROUTES and typed helpers.\n *\n * @param routes - 须为 defineRouter(...) 的返回值(DefinedRouter)\n */\nexport function createRouter<R extends Record<string, string>>(routes: DefinedRouter<R>) {\n const ROUTES = routes as Readonly<R>;\n\n const matchRouteBound = (pathname: string, route: R[keyof R]): boolean => matchRoute(pathname, route);\n\n const isActiveRouteBound = (currentPath: string, targetPath: R[keyof R]): boolean => isActiveRoute(currentPath, targetPath);\n\n const getRouteByKey = (key: keyof R): R[keyof R] => ROUTES[key];\n\n return {\n ROUTES,\n matchRoute: matchRouteBound,\n isActiveRoute: isActiveRouteBound,\n getRouteByKey,\n };\n}\n"],"mappings":"mEAgCA,SAAgB,EAA+C,EAA6B,CAC1F,OAAO,CACT,CAMA,SAAgB,EAAc,EAAqB,EAA6B,CAC9E,OAAO,IAAgB,CACzB,CAMA,SAAgB,EAAW,EAAkB,EAAwB,CACnE,GAAI,IAAa,EAAO,MAAO,GAC/B,MAAM,EAAa,EAAM,MAAM,GAAG,EAAE,OAAO,OAAO,EAC5C,EAAY,EAAS,MAAM,GAAG,EAAE,OAAO,OAAO,EACpD,OAAI,EAAW,SAAW,EAAU,OAAe,GAC5C,EAAW,MAAA,CAAO,EAAG,IAAM,EAAE,WAAW,GAAG,GAAK,IAAM,EAAU,CAAA,CAAE,CAC3E,CAQA,SAAgB,EAA+C,EAA0B,CACvF,MAAM,EAAS,EAQf,MAAO,CACL,OAAA,EACA,WARI,CAAmB,EAAkB,IAA+B,EAAW,EAAU,CAAK,EASlG,cAPI,CAAsB,EAAqB,IAAoC,EAAc,EAAa,CAAU,EAQxH,cANqB,GAA6B,EAAO,CAAA,CAO3D,CACF"}
|
package/dist/navigations.mjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
(function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(`.styles-module__loading___bgEAk{justify-content:center;align-items:center;display:inline-flex}.styles-module__loading___bgEAk svg polyline{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.styles-module__loading___bgEAk svg polyline.styles-module__back___XLPvD{fill:none;stroke:var(--color-primary-alpha)}.styles-module__loading___bgEAk svg polyline.styles-module__front___hSxig{fill:none;stroke:var(--color-primary);stroke-dasharray:48 144;stroke-dashoffset:192px;animation:1.4s linear infinite styles-module__dash_682___AQzo6}@keyframes styles-module__dash_682___AQzo6{72.5%{opacity:0}to{stroke-dashoffset:0}}.styles-module__loader___E7OIM{justify-content:center;align-items:center;width:fit-content;height:fit-content;display:flex}.styles-module__truckWrapper___Sk4zX{flex-direction:column;justify-content:flex-end;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow-x:hidden}.styles-module__truckBody___j7w2C{width:65%;height:fit-content;margin-bottom:6px;animation:1s linear infinite styles-module__motion___IiNlW}@keyframes styles-module__motion___IiNlW{0%{transform:translateY(0)}50%{transform:translateY(3px)}to{transform:translateY(0)}}.styles-module__truckTires___4ncTl{justify-content:space-between;align-items:center;width:65%;height:fit-content;padding:0 10px 0 15px;display:flex;position:absolute;bottom:0}.styles-module__tiresvg___IBQcN{width:24px}.styles-module__road___sxx-E{background-color:var(--color-fg-heading);border-radius:var(--radius-button);align-self:flex-end;width:100%;height:1.5px;position:relative;bottom:0}.styles-module__road___sxx-E:before{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:10px solid var(--color-bg);width:20px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-50%}.styles-module__road___sxx-E:after{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:4px solid var(--color-bg);width:10px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-65%}.styles-module__lampPost___okcN5{height:45%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;bottom:0;right:-90%}@keyframes styles-module__roadAnimation___yvrHP{0%{transform:translate(0)}to{transform:translate(-350px)}}.styles-module__loader___pFUzL{justify-content:center;align-items:center;display:inline-flex;position:relative}.styles-module__loader___pFUzL:before{content:"";background:var(--color-primary);opacity:.3;border-radius:50%;width:100%;height:5px;animation:.5s linear infinite styles-module__shadow324___sutUe;position:absolute;top:calc(100% + 12px);left:0}.styles-module__loader___pFUzL:after{content:"";background:var(--color-primary);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__square___GKjhm:after{border-radius:var(--radius-button);animation:.5s linear infinite styles-module__jump7456Square___Z-D9b}.styles-module__circle___bUpSN:after{border-radius:50%;animation:.5s linear infinite styles-module__jump7456Circle___2AfF7}@keyframes styles-module__jump7456Square___Z-D9b{15%{border-bottom-right-radius:3px}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__jump7456Circle___2AfF7{15%{border-bottom-right-radius:50%}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__shadow324___sutUe{0%,to{transform:scale(1)}50%{transform:scaleX(1.2)}}.style-module__waves___oR3u7{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.style-module__waves___oR3u7:before{content:"";background:var(--color-bg);width:.5rem;height:.5rem;transform:translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);will-change:transform;border-radius:50%;position:absolute;top:0;left:0}.style-module__wavesCanvas___zkhTC{width:100%;height:100%;display:block}.style-module__squaresCanvas___22kMc{border:none;width:100%;height:100%;display:block}.style-module__container___HkxIe{background-color:var(--color-bg);width:100%;height:100%;position:relative;overflow:hidden}.style-module__canvas___MR9JX{width:100%;height:100%;display:block}.style-module__outerVignette___i75nw{pointer-events:none;background:radial-gradient(circle,#0000 60%,#000 100%);width:100%;height:100%;position:absolute;top:0;left:0}.style-module__centerVignette___n9uVG{pointer-events:none;background:radial-gradient(circle,#000c 0%,#0000 60%);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__button___RbliA{border-radius:var(--radius-button);cursor:pointer;border:1px solid #0000;outline:none;justify-content:center;align-items:center;gap:.5rem;font-family:inherit;font-weight:500;transition:all .2s;display:inline-flex;position:relative}.styles-module__button___RbliA:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.styles-module__button___RbliA:disabled{cursor:not-allowed;opacity:.6}.styles-module__button___RbliA.styles-module__small___yK0Yp{min-height:2rem;padding:.5rem 1rem;font-size:.8125rem}.styles-module__button___RbliA.styles-module__medium___eBTch{min-height:2.5rem;padding:.75rem 1.5rem;font-size:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl{min-height:3rem;padding:1rem 2rem;font-size:1rem}.styles-module__button___RbliA.styles-module__primary___qsZpA{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__button___RbliA.styles-module__primary___qsZpA:hover:not(:disabled){background:var(--color-primary-light);border-color:var(--color-primary-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__primary___qsZpA:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__secondary___SCpPv{background:var(--color-bg-2);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__button___RbliA.styles-module__secondary___SCpPv:hover:not(:disabled){background:var(--color-bg-3);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__outline___rrlk9{border-color:var(--color-border-4);color:var(--color-fg-text);background:0 0}.styles-module__button___RbliA.styles-module__outline___rrlk9:hover:not(:disabled){background:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__ghost___QMoiH{color:var(--color-fg-text);background:0 0;border-color:#0000}.styles-module__button___RbliA.styles-module__ghost___QMoiH:hover:not(:disabled){background:var(--color-bg-2)}.styles-module__button___RbliA.styles-module__danger___MW-pg{background:var(--color-danger);border-color:var(--color-danger);color:var(--color-danger-fg,#fff)}.styles-module__button___RbliA.styles-module__danger___MW-pg:hover:not(:disabled){background:var(--color-danger-light);border-color:var(--color-danger-light);color:var(--color-danger-fg,#fff);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__danger___MW-pg:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__fullWidth___-dXBR{width:100%}.styles-module__button___RbliA.styles-module__loading___UWw6V{pointer-events:none}.styles-module__spinner___KpJ-L{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:1rem;height:1rem;animation:.6s linear infinite styles-module__spin___ntZKM}@keyframes styles-module__spin___ntZKM{to{transform:rotate(360deg)}}.styles-module__button___RbliA.styles-module__small___yK0Yp .styles-module__spinner___KpJ-L{border-width:1.5px;width:.875rem;height:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl .styles-module__spinner___KpJ-L{border-width:2.5px;width:1.25rem;height:1.25rem}.styles-module__content___oyZRO{align-items:center;display:flex}.styles-module__leftIcon___cDktv,.styles-module__rightIcon___1mpk0{flex-shrink:0;align-items:center;display:flex}.styles-module__leftIcon___cDktv{margin-right:-.25rem}.styles-module__rightIcon___1mpk0{margin-left:-.25rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U{aspect-ratio:1;min-width:2.5rem;min-height:2.5rem;padding:0}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__small___yK0Yp{min-width:2rem;min-height:2rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__large___pIZkl{min-width:3rem;min-height:3rem}.styles-module__iconContainer___bwvE3{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.styles-module__layout___WaGy9{flex-direction:column;justify-content:center;align-items:center;gap:.25rem;width:100%;display:flex}.styles-module__horizontal___lKpGq{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.styles-module__topIcon___bzw6s,.styles-module__bottomIcon___suPfa{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__leftIcon___cDktv,.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__rightIcon___1mpk0{margin:0}.Dropdown-module__dropdown___c9wIp{width:100%;display:inline-block;position:relative}.Dropdown-module__dropdownButton___suNh-{border:1px solid var(--color-separator);border-radius:var(--radius-card);cursor:pointer;text-align:left;background:var(--color-bg-2);width:100%;color:var(--color-fg-text);outline:none;justify-content:space-between;align-items:center;padding:.75rem 2.5rem .75rem 1rem;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5rem;transition:all .2s ease-in-out;display:flex;position:relative}.Dropdown-module__dropdownButton___suNh-:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-bg-1)}.Dropdown-module__dropdownButton___suNh-:focus{border-color:var(--color-primary);background:var(--color-bg-1);box-shadow:0 0 0 2px var(--color-primary-transparent)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__disabled___Rz0pX{cursor:not-allowed;opacity:.6;background:var(--color-bg-3)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__error___F7dDu{border-color:var(--color-danger)}.Dropdown-module__buttonText___D2zxn{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.Dropdown-module__chevronIcon___uyawp{color:var(--color-fg-highlight);flex-shrink:0;transition:transform .15s;position:absolute;right:1rem}.Dropdown-module__chevronIcon___uyawp.Dropdown-module__open___APoXd{transform:rotate(180deg)}.Dropdown-module__dropdownMenu___WJ-QO{background:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-card);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;animation:.15s ease-out Dropdown-module__slideDown___sRCmO;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}@keyframes Dropdown-module__slideDown___sRCmO{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.Dropdown-module__optionsList___Be6RN{margin:0;padding:.5rem 0;list-style:none}.Dropdown-module__option___q-NgT{cursor:pointer;color:var(--color-fg-text);align-items:center;padding:.75rem 1rem;font-size:.875rem;transition:all .15s;display:flex}.Dropdown-module__option___q-NgT:hover{background-color:var(--color-bg-2)}.Dropdown-module__option___q-NgT.Dropdown-module__selected___-OTW-{background-color:var(--color-bg-3);color:var(--color-fg-highlight);font-weight:600}@media (width<=768px){.Dropdown-module__dropdownButton___suNh-{padding:.625rem 2.25rem .625rem .875rem;font-size:.875rem}.Dropdown-module__chevronIcon___uyawp{right:.875rem}.Dropdown-module__option___q-NgT{padding:.625rem .875rem;font-size:.8125rem}}.styles-module__wrapper___COeGm{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___COeGm.styles-module__fullWidth___lVU49{width:100%}.styles-module__label___gfOA7{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___-zOy5{color:var(--color-danger)}.styles-module__inputContainer___wXY53{align-items:center;width:100%;display:flex;position:relative}.styles-module__input___IZDc3{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);outline:none;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__input___IZDc3[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-webkit-strong-password-toggle-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;width:0!important;height:0!important;margin:0!important;padding:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-reveal{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-clear{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__input___IZDc3::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__input___IZDc3.styles-module__small___cuGyE{padding:.5rem .75rem;font-size:.8125rem}.styles-module__input___IZDc3.styles-module__medium___JdDPu{padding:.75rem;font-size:.875rem}.styles-module__input___IZDc3.styles-module__large___fMmiG{padding:1rem;font-size:1rem}.styles-module__input___IZDc3.styles-module__default___-eZTG{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__input___IZDc3.styles-module__filled___EQ5PQ{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3{padding-left:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3{padding-right:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-left:2rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-right:2rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-left:3rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-right:3rem}.styles-module__leftIcon___jEW5H,.styles-module__rightIcon___bA3Eo{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute}.styles-module__leftIcon___jEW5H{left:.75rem}.styles-module__rightIcon___bA3Eo{right:.75rem}.styles-module__rightIcon___bA3Eo.styles-module__rightIconInteractive___ccypw{pointer-events:auto}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__leftIcon___jEW5H{left:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__rightIcon___bA3Eo{right:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__leftIcon___jEW5H{left:1rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__rightIcon___bA3Eo{right:1rem}.styles-module__input___IZDc3.styles-module__error___946qV{border-color:var(--color-danger)}.styles-module__input___IZDc3.styles-module__error___946qV:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__input___IZDc3.styles-module__disabled___sJvLd{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorMessage___5Mn22{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___T2eui{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__container___xeg8O{flex-direction:column;gap:1rem;display:flex}.styles-module__label___qhbKe{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__error___O-7AY{color:var(--color-error);font-size:.875rem}.styles-module__pairs___owGV3{flex-direction:column;gap:.75rem;display:flex}.styles-module__pair___G4WFY{grid-template-columns:1fr 2fr auto;align-items:start;gap:.75rem;display:grid}.styles-module__keyInput___wl1M1,.styles-module__valueInput___HiwJ5{flex:1}.styles-module__removeButton___4-X0b{min-width:auto;color:var(--color-error);padding:.5rem}.styles-module__removeButton___4-X0b:hover{background-color:var(--color-error);color:var(--color-primary-fg)}.styles-module__addButton___QFljt{align-self:flex-start}@media (width<=768px){.styles-module__pair___G4WFY{grid-template-columns:1fr}.styles-module__removeButton___4-X0b{align-self:flex-end}}.styles-module__searchContainer___86TGN{width:100%;max-width:400px;position:relative}.styles-module__searchContainerFull___cEuNS{max-width:none}.styles-module__searchIcon___ZInry{color:var(--color-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.styles-module__searchInput___SqZXQ{border:1px solid var(--color-border);border-radius:var(--radius-input);width:100%;color:var(--color-fg-text);background:var(--color-bg-2);padding:.75rem 3rem;font-size:1rem;transition:all .2s}.styles-module__searchInput___SqZXQ:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.styles-module__searchInput___SqZXQ::placeholder{color:var(--color-fg-muted)}.styles-module__clearBtn___7jExr{width:1.5rem;height:1.5rem;color:var(--color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.styles-module__clearBtn___7jExr:hover{color:var(--color-fg-text)}@media (width<=768px){.styles-module__searchContainer___86TGN{max-width:100%}}.styles-module__container___nGxdM{flex-direction:column;gap:.75rem;display:flex}.styles-module__toggleContainer___VrsKI{align-items:center;display:flex}.styles-module__toggleButton___IzD6Z{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg-muted);cursor:pointer;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;transition:all .2s;display:flex}.styles-module__toggleButton___IzD6Z:hover{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__optionsContainer___LOzlO{background:var(--color-bg-2);border-radius:var(--radius-card);border:1px solid var(--color-border-4);gap:.5rem;padding:.5rem;display:flex}.styles-module__option___abhnC{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:.375rem;padding:.5rem .875rem;font-size:.875rem;font-weight:500;transition:all .2s;display:flex}.styles-module__option___abhnC:hover{background:var(--color-bg-3);border-color:var(--color-border-3)}.styles-module__option___abhnC.styles-module__active___pqmSi{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__option___abhnC.styles-module__active___pqmSi:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__nbSelect___KjxSc{font-family:inherit;font-size:.9375rem;font-weight:600;line-height:1.5rem;display:inline-block;position:relative}.styles-module__selectButton___AKZe4{border-radius:var(--radius-button);cursor:pointer;text-align:left;width:100%;min-width:8rem;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;appearance:none;border:1px solid;outline:none;justify-content:space-between;align-items:center;padding:.4375rem 2.2rem .4375rem 1.125rem;transition:all .15s ease-in-out;display:flex;position:relative}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:hover:not(:disabled){background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:focus,.styles-module__selectButton___AKZe4.styles-module__primary___HU36a.styles-module__open___9AKMb{background-color:var(--color-primary-light);border-color:var(--color-primary-light);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP{background-color:var(--color-bg);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:hover:not(:disabled){background-color:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:focus,.styles-module__selectButton___AKZe4.styles-module__default___LedYP.styles-module__open___9AKMb{background-color:var(--color-bg-2);border-color:var(--color-primary);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4:disabled{cursor:not-allowed;opacity:.6}.styles-module__buttonText___QSLO1{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.styles-module__chevronIcon___qAHaD{flex-shrink:0;width:1.5rem;height:1.5rem;transition:transform .15s;position:absolute;right:.41rem}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a .styles-module__chevronIcon___qAHaD{color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP .styles-module__chevronIcon___qAHaD{color:var(--color-fg)}.styles-module__chevronIcon___qAHaD.styles-module__open___9AKMb{transform:rotate(180deg)}.styles-module__optionsPanel___NWAp3{background-color:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-button);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;transform-origin:top;visibility:hidden;pointer-events:none;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}.styles-module__optionsPanel___NWAp3.styles-module__open___9AKMb{visibility:visible;pointer-events:auto;animation:.25s ease-out styles-module__expandDown___eD4lh}.styles-module__optionsPanel___NWAp3.styles-module__closed___bez-q{visibility:hidden;pointer-events:none;animation:.25s ease-out styles-module__collapseUp___dt1E7}@keyframes styles-module__expandDown___eD4lh{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes styles-module__collapseUp___dt1E7{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.styles-module__optionsPanel___NWAp3.styles-module__primary___HU36a{border-color:var(--color-primary)}.styles-module__optionsPanel___NWAp3.styles-module__default___LedYP{border-color:var(--color-border-4)}.styles-module__optionsList___AxhVp{margin:0;padding:.5rem 0;list-style:none}.styles-module__option___t1SSw{cursor:pointer;color:var(--color-fg-text);justify-content:space-between;align-items:center;padding:.75rem 1.125rem;transition:all .15s;display:flex}.styles-module__option___t1SSw:hover{background-color:var(--color-bg-2)}.styles-module__option___t1SSw.styles-module__selected___azD4A{background-color:var(--color-primary);color:var(--color-primary-fg);font-weight:700}@media (prefers-color-scheme:dark){.styles-module__optionsPanel___NWAp3{box-shadow:0 .5rem 1rem var(--color-shadow)}}.styles-module__sliderContainer___lgpaD{flex-direction:column;gap:.5rem;display:flex}.styles-module__sliderContainer___lgpaD.styles-module__fullWidth___ZS8W5{width:100%}.styles-module__labelRow___dkVVM{justify-content:space-between;align-items:center;min-height:1.5rem;margin-bottom:.5rem;display:flex}.styles-module__label___bXGZs{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__required___FuyfE{color:var(--color-danger);margin-left:.25rem}.styles-module__sliderWrapper___1Wdti{touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.75rem;width:100%;display:flex}.styles-module__sliderRoot___yzOjR{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-grow:1;align-items:center;width:100%;padding:.75rem 0;display:flex;position:relative}.styles-module__sliderRoot___yzOjR:active{cursor:grabbing}.styles-module__sliderTrackWrapper___N72WQ{flex-grow:1;display:flex;position:relative}.styles-module__sliderTrack___AltcD{border-radius:var(--radius-badge);background-color:var(--color-bg-3);width:100%;height:.375rem;position:relative;overflow:hidden}.styles-module__sliderRange___U3g0-{background-color:var(--color-primary);border-radius:var(--radius-badge);height:100%;position:absolute}.styles-module__valueIndicator___aLf0I{color:var(--color-primary);text-align:center;flex-shrink:0;min-width:2rem;font-size:.875rem;font-weight:600;line-height:1}.styles-module__iconWrapper___wL-b8{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__icon___vHsID{width:20px;height:20px;color:var(--color-fg-muted)}.styles-module__errorMessage___qFgGe{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___tgBGl{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__loadingContainer___OMgwS{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.styles-module__loadingText___KRZqR{color:var(--color-fg-muted);font-size:1rem}.styles-module__errorContainer___qhAg2{text-align:center;min-height:60vh;color:var(--color-fg-text);flex-direction:column;justify-content:center;align-items:center;gap:2rem;padding:3rem 2rem;display:flex}.styles-module__errorIconWrapper___IHZrN{background:linear-gradient(135deg, rgba(var(--color-error-rgb), .1), rgba(var(--color-error-rgb), .05));border:2px solid rgba(var(--color-error-rgb), .2);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;animation:2s ease-in-out infinite styles-module__pulse___Lju-z;display:flex}@keyframes styles-module__pulse___Lju-z{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.styles-module__errorIcon___oGDIP{color:var(--color-error);stroke-width:1.5px}.styles-module__errorContent___F55rQ{flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:600px;display:flex}.styles-module__errorTitle___hC8D-{color:var(--color-fg-heading);letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.2}.styles-module__errorDescription___hZtuP{color:var(--color-fg-muted);max-width:480px;margin:0;font-size:1rem;line-height:1.6}.styles-module__errorDetailsWrapper___-sp8b{width:100%;max-width:600px;margin-top:.5rem}.styles-module__errorDetailsContainer___eywMo{text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-bg-2);width:100%;transition:all .2s;overflow:hidden}.styles-module__errorDetailsContainer___eywMo:hover{border-color:var(--color-border-hover);background:var(--color-bg-3)}.styles-module__errorDetailsSummary___hGEoD{cursor:pointer;color:var(--color-fg-muted);-webkit-user-select:none;user-select:none;padding:.875rem 1.25rem;font-size:.875rem;font-weight:500;list-style:none;transition:color .2s}.styles-module__errorDetailsSummary___hGEoD:hover{color:var(--color-fg-text)}.styles-module__errorDetailsSummary___hGEoD::-webkit-details-marker{display:none}.styles-module__errorDetailsSummary___hGEoD:before{content:"▶";margin-right:.5rem;font-size:.75rem;transition:transform .2s;display:inline-block}.styles-module__errorDetailsContainer___eywMo[open] .styles-module__errorDetailsSummary___hGEoD:before{transform:rotate(90deg)}.styles-module__errorDetails___tzCT-{background:var(--color-bg-3);border-top:1px solid var(--color-border);max-width:100%;color:var(--color-fg-muted);white-space:pre-wrap;word-break:break-word;margin:0;padding:1rem 1.25rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:.8125rem;line-height:1.6;overflow-x:auto}.styles-module__errorActions___gtqYw{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.styles-module__retryButton___TA4jm{border-radius:var(--radius-button);background:var(--color-primary);color:var(--color-primary-fg);cursor:pointer;box-shadow:0 2px 8px var(--color-shadow);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__retryButton___TA4jm:hover{box-shadow:0 4px 16px var(--color-shadow);background:var(--color-primary-light);color:var(--color-primary-fg);transform:translateY(-2px)}.styles-module__retryButton___TA4jm:active{box-shadow:0 2px 8px var(--color-shadow);transform:translateY(0)}.styles-module__retryButtonIcon___vzfp-{font-size:1.125rem;line-height:1;transition:transform .3s;display:inline-block}.styles-module__retryButton___TA4jm:hover .styles-module__retryButtonIcon___vzfp-{transform:rotate(180deg)}.styles-module__clearLocalDataButton___T3B-K{border-radius:var(--radius-button);color:var(--color-fg-muted);border:1px solid var(--color-border-4);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__clearLocalDataButton___T3B-K:hover{color:var(--color-fg-text);border-color:var(--color-border-3);background:var(--color-bg-secondary)}.styles-module__wrapper___jXPV3{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___jXPV3.styles-module__fullWidth___eKyGB{width:100%}.styles-module__label___MyTeo{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___TV-m8{color:var(--color-danger)}.styles-module__inputContainer___VvGBl{align-items:flex-start;width:100%;display:flex;position:relative}.styles-module__textarea___AjX9N{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);resize:vertical;outline:none;min-height:4rem;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__textarea___AjX9N:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__textarea___AjX9N::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__textarea___AjX9N.styles-module__small___zMx0G{min-height:3rem;padding:.5rem .75rem;font-size:.8125rem}.styles-module__textarea___AjX9N.styles-module__medium___tO2Lb{min-height:4rem;padding:.75rem;font-size:.875rem}.styles-module__textarea___AjX9N.styles-module__large___3eU2g{min-height:5rem;padding:1rem;font-size:1rem}.styles-module__textarea___AjX9N.styles-module__default___vsSxX{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__textarea___AjX9N.styles-module__filled___TPQgI{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___VvGBl .styles-module__leftIcon___FHp2R{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;left:.75rem}.styles-module__inputContainer___VvGBl .styles-module__rightIcon___dkyvP{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;right:.75rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__rightIcon___dkyvP{top:.5rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__rightIcon___dkyvP{top:1rem}.styles-module__textarea___AjX9N.styles-module__error___d8gLK{border-color:var(--color-danger)}.styles-module__textarea___AjX9N.styles-module__error___d8gLK:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__textarea___AjX9N.styles-module__disabled___IzbfE{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorText___Nom7x{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___97Def{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__virtualList___pM6rN{contain:strict;width:100%;padding-bottom:300px;position:relative;overflow:auto}.styles-module__emptyContainer___rm938{height:100%;color:var(--color-fg-muted);justify-content:center;align-items:center;display:flex}.styles-module__virtualListInner___HxRzc{width:100%;position:relative}.styles-module__virtualListItems___p19-a{width:100%;position:absolute;top:0;left:0}.styles-module__loadingMore___zAdLM{color:var(--color-fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;margin-top:1rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh span{background-color:var(--color-bg-2);border-radius:var(--radius-button);padding:.5rem 1rem}.styles-module__virtualList___xmj2v{width:100%;padding-bottom:300px;position:relative;overflow:visible}.styles-module__virtualListInner___quD74{width:100%;position:relative}.styles-module__virtualListItems___-Muml{width:100%;position:absolute;top:0;left:0}.styles-module__virtualListRow___h3pzX{width:100%}.styles-module__emptyContainer___LIy8r{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:2rem 0;display:flex}.styles-module__loadingMore___Mzf-p{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:1.5rem 0;display:flex}.styles-module__endOfList___g5G--{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;padding:1.5rem 0;display:flex}.styles-module__sidebar___BMt0j{flex-direction:column;min-height:0;display:flex;overflow:hidden}.styles-module__sidebarContent___iAwiw{flex-direction:column;flex:1;min-height:0;padding-top:1rem;display:flex;overflow:hidden}.styles-module__menuWrapper___DKuEv{flex:1;min-height:0;overflow:hidden auto}.styles-module__sidebarFooter___qiPXO{flex-shrink:0;margin-top:auto}.styles-module__menuWrapper___DKuEv::-webkit-scrollbar{width:0;height:0}.styles-module__menuWrapper___DKuEv{scrollbar-width:none;-ms-overflow-style:none}.styles-module__sidebar___BMt0j .ps-sidebar-root{background-color:var(--color-bg-2)!important;border-right:1px solid var(--color-separator)!important;flex-direction:column!important;min-height:0!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-sidebar-container{background-color:var(--color-bg-2)!important;min-height:0!important;color:var(--color-fg-text)!important;flex-direction:column!important;flex:1!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-menu-button{border-radius:var(--radius-button)!important;color:var(--color-fg-text)!important;margin:.125rem .5rem!important;padding:.5rem .75rem!important;font-size:.875rem!important;transition:background-color .2s,color .2s!important}.styles-module__sidebar___BMt0j .ps-menu-button:hover{background-color:var(--color-bg-3)!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active{background-color:var(--color-primary)!important;color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-submenu-expand-icon{color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-icon{width:1.25rem!important;height:1.25rem!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-submenu-content{background-color:var(--color-bg-3)!important;padding-left:1rem!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-submenu-content{padding-left:.75rem!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-menu-button{margin:.125rem .25rem!important;padding:.375rem .5rem .375rem .75rem!important;font-size:.8125rem!important}.styles-module__logoutContainer___7NwBL{border-top:1px solid var(--color-separator);padding:.5rem}.styles-module__logoutButton___rfD6u{border-radius:var(--radius-button);width:100%;color:var(--color-fg-text);cursor:pointer;white-space:nowrap;background:0 0;border:none;justify-content:flex-start;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;transition:background-color .2s,color .2s;display:flex;overflow:hidden}.styles-module__logoutButton___rfD6u:hover{background-color:var(--color-bg-3)}.styles-module__logoutButton___rfD6u:active{transform:scale(.98)}.styles-module__logoutButton___rfD6u svg{color:inherit;flex-shrink:0}.styles-module__hiddenText___z183T{opacity:0;width:0;max-width:0;overflow:hidden}.styles-module__visibleText___lfsv-{opacity:1;width:auto;max-width:200px}.styles-module__footer___g-hY7{background:var(--color-bg-2);width:100%;padding:0 2rem}.styles-module__footerContent___Oen5n{justify-content:space-between;align-items:center;max-width:100%;margin:0 auto;display:flex}.styles-module__copyright___1R2o3{color:var(--color-fg-text);font-size:.875rem}.styles-module__links___dQyvB{gap:1.5rem;display:flex}.styles-module__link___UWfyK{color:var(--color-fg-text);font-size:.875rem;text-decoration:none;transition:color .3s}.styles-module__link___UWfyK:hover{color:var(--color-primary)}@media (width<=768px){.styles-module__footerContent___Oen5n{flex-direction:column;gap:1rem}.styles-module__links___dQyvB{gap:1rem}}.styles-module__header___4Uc8h{width:100%;padding:.5rem 2rem;display:flex}.styles-module__header___4Uc8h>:first-child{flex:1;justify-content:flex-start;align-items:center;display:flex}.styles-module__header___4Uc8h>:last-child{flex:1;justify-content:flex-end;align-items:center;display:flex}.styles-module__layout___ZQKU7{background:var(--color-bg);flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.styles-module__header___XIaFb{z-index:100;background:var(--color-bg);width:100%;box-shadow:0 .125rem .25rem 0 var(--color-shadow);position:fixed;top:0}.styles-module__footer___r8ASO{z-index:100;width:100%;position:fixed;bottom:0}.styles-module__mainWrapper___i4tEI{flex:1;display:flex;position:relative}.styles-module__sidebarChrome___q0pw5{z-index:101;box-sizing:border-box;position:fixed;left:0}.styles-module__sidebar___ij-8-{height:100%;min-height:0}.styles-module__content___mTgUr{background:var(--color-bg);flex:1;min-height:calc(100vh - 10rem);margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=768px){.styles-module__content___mTgUr{width:100%}.styles-module__sidebarChrome___q0pw5{z-index:999}}.styles-module__mainWrapper___AiTAw{flex-direction:row;flex:1;display:flex;position:relative}.styles-module__sidebarContainer___X4yj8{z-index:99;box-sizing:border-box;flex-direction:column;min-height:0;display:flex;position:fixed;left:0;overflow:hidden}.styles-module__sidebar___VQTlH{flex-shrink:0;top:0;left:0}.styles-module__content___htJlH{background:var(--color-bg);flex:1;margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=1024px){.styles-module__content___htJlH{padding:1.5rem}}@media (width<=768px){.styles-module__content___htJlH{width:100%}}.styles-module__wavesWrapper___TK7DI{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__wavesWrapper___TK7DI>*{pointer-events:auto}.styles-module__squaresWrapper___P25uF{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__squaresWrapper___P25uF>*{pointer-events:auto}.styles-module__letterGlitchWrapper___KWtWU{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__letterGlitchWrapper___KWtWU>*{pointer-events:auto}.styles-module__pixelBlastWrapper___YptHh{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__pixelBlastWrapper___YptHh>*{pointer-events:auto}.style-module__container___Hh3-c{width:100%;height:100%;position:relative;overflow:hidden}/*$vite$:1*/`)),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
2
1
|
function R(t) {
|
|
3
2
|
return t;
|
|
4
3
|
}
|
package/dist/navigations.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigations.mjs","names":[],"sources":["../src/navigations/navigation.ts"],"sourcesContent":["import type { Defined, KeyOf } from \"@/types\";\n\n/**\n * 通用路由类型与 defineRouter / createRouter(与 EventEmitter 的 defineEvents 约定一致)\n * Generic route types and defineRouter / createRouter; only values from defineRouter are accepted by createRouter.\n *\n * @example\n * ```ts\n * import { defineRouter, createRouter } from \"@/types/navigation\";\n * const routeMap = defineRouter({ HOME: \"/\", LOGIN: \"/login\", USER: \"/user/:id\" });\n * const router = createRouter(routeMap);\n * router.ROUTES.HOME; // \"/\"\n * router.matchRoute(pathname, router.ROUTES.USER);\n * ```\n */\n\n/** 由 defineRouter 返回的「已规范路由表」类型;createRouter 只接受此类型。 */\nexport type DefinedRouter<R extends Record<string, string>> = Defined<R, \"router\">;\n\n/** 由路由表 R 推导的 key 类型 */\nexport type RouteKey<R extends Record<string, string>> = KeyOf<R>;\n\n/** 由路由表 R 推导的 path 联合类型 */\nexport type RoutePath<R extends Record<string, string>> = R[RouteKey<R>];\n\n/**\n * 规范创建路由表:仅允许 defineRouter 返回的值传入 createRouter(类型约束)。\n * Define route map: only the return value of defineRouter may be passed to createRouter.\n *\n * @param routes - 路由 key-value 对象(值可为含 :param 的 path)\n * @returns DefinedRouter<R>,仅此类型可传入 createRouter\n */\nexport function defineRouter<R extends Record<string, string>>(routes: R): DefinedRouter<R> {\n return routes as DefinedRouter<R>;\n}\n\n/**\n * 精确匹配:当前路径是否等于目标 path\n * Exact match: current path equals target path.\n */\nexport function isActiveRoute(currentPath: string, targetPath: string): boolean {\n return currentPath === targetPath;\n}\n\n/**\n * 模式匹配:pathname 是否匹配带 :param 的 route 模式\n * Pattern match: pathname matches route pattern (supports :param segments).\n */\nexport function matchRoute(pathname: string, route: string): boolean {\n if (pathname === route) return true;\n const routeParts = route.split(\"/\").filter(Boolean);\n const pathParts = pathname.split(\"/\").filter(Boolean);\n if (routeParts.length !== pathParts.length) return false;\n return routeParts.every((p, i) => p.startsWith(\":\") || p === pathParts[i]);\n}\n\n/**\n * 创建路由对象:仅接受 defineRouter(...) 的返回值,得到只读 ROUTES + matchRoute / isActiveRoute / getRouteByKey\n * Create router: accepts only the return value of defineRouter(...); returns ROUTES and typed helpers.\n *\n * @param routes - 须为 defineRouter(...) 的返回值(DefinedRouter)\n */\nexport function createRouter<R extends Record<string, string>>(routes: DefinedRouter<R>) {\n const ROUTES = routes as Readonly<R>;\n\n const matchRouteBound = (pathname: string, route: R[keyof R]): boolean => matchRoute(pathname, route);\n\n const isActiveRouteBound = (currentPath: string, targetPath: R[keyof R]): boolean => isActiveRoute(currentPath, targetPath);\n\n const getRouteByKey = (key: keyof R): R[keyof R] => ROUTES[key];\n\n return {\n ROUTES,\n matchRoute: matchRouteBound,\n isActiveRoute: isActiveRouteBound,\n getRouteByKey,\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigations.mjs","names":[],"sources":["../src/navigations/navigation.ts"],"sourcesContent":["import type { Defined, KeyOf } from \"@/types\";\n\n/**\n * 通用路由类型与 defineRouter / createRouter(与 EventEmitter 的 defineEvents 约定一致)\n * Generic route types and defineRouter / createRouter; only values from defineRouter are accepted by createRouter.\n *\n * @example\n * ```ts\n * import { defineRouter, createRouter } from \"@/types/navigation\";\n * const routeMap = defineRouter({ HOME: \"/\", LOGIN: \"/login\", USER: \"/user/:id\" });\n * const router = createRouter(routeMap);\n * router.ROUTES.HOME; // \"/\"\n * router.matchRoute(pathname, router.ROUTES.USER);\n * ```\n */\n\n/** 由 defineRouter 返回的「已规范路由表」类型;createRouter 只接受此类型。 */\nexport type DefinedRouter<R extends Record<string, string>> = Defined<R, \"router\">;\n\n/** 由路由表 R 推导的 key 类型 */\nexport type RouteKey<R extends Record<string, string>> = KeyOf<R>;\n\n/** 由路由表 R 推导的 path 联合类型 */\nexport type RoutePath<R extends Record<string, string>> = R[RouteKey<R>];\n\n/**\n * 规范创建路由表:仅允许 defineRouter 返回的值传入 createRouter(类型约束)。\n * Define route map: only the return value of defineRouter may be passed to createRouter.\n *\n * @param routes - 路由 key-value 对象(值可为含 :param 的 path)\n * @returns DefinedRouter<R>,仅此类型可传入 createRouter\n */\nexport function defineRouter<R extends Record<string, string>>(routes: R): DefinedRouter<R> {\n return routes as DefinedRouter<R>;\n}\n\n/**\n * 精确匹配:当前路径是否等于目标 path\n * Exact match: current path equals target path.\n */\nexport function isActiveRoute(currentPath: string, targetPath: string): boolean {\n return currentPath === targetPath;\n}\n\n/**\n * 模式匹配:pathname 是否匹配带 :param 的 route 模式\n * Pattern match: pathname matches route pattern (supports :param segments).\n */\nexport function matchRoute(pathname: string, route: string): boolean {\n if (pathname === route) return true;\n const routeParts = route.split(\"/\").filter(Boolean);\n const pathParts = pathname.split(\"/\").filter(Boolean);\n if (routeParts.length !== pathParts.length) return false;\n return routeParts.every((p, i) => p.startsWith(\":\") || p === pathParts[i]);\n}\n\n/**\n * 创建路由对象:仅接受 defineRouter(...) 的返回值,得到只读 ROUTES + matchRoute / isActiveRoute / getRouteByKey\n * Create router: accepts only the return value of defineRouter(...); returns ROUTES and typed helpers.\n *\n * @param routes - 须为 defineRouter(...) 的返回值(DefinedRouter)\n */\nexport function createRouter<R extends Record<string, string>>(routes: DefinedRouter<R>) {\n const ROUTES = routes as Readonly<R>;\n\n const matchRouteBound = (pathname: string, route: R[keyof R]): boolean => matchRoute(pathname, route);\n\n const isActiveRouteBound = (currentPath: string, targetPath: R[keyof R]): boolean => isActiveRoute(currentPath, targetPath);\n\n const getRouteByKey = (key: keyof R): R[keyof R] => ROUTES[key];\n\n return {\n ROUTES,\n matchRoute: matchRouteBound,\n isActiveRoute: isActiveRouteBound,\n getRouteByKey,\n };\n}\n"],"mappings":"AAgCA,SAAgB,EAA+C,GAA6B;AAC1F,SAAO;AACT;AAMA,SAAgB,EAAc,GAAqB,GAA6B;AAC9E,SAAO,MAAgB;AACzB;AAMA,SAAgB,EAAW,GAAkB,GAAwB;AACnE,MAAI,MAAa,EAAO,QAAO;AAC/B,QAAM,IAAa,EAAM,MAAM,GAAG,EAAE,OAAO,OAAO,GAC5C,IAAY,EAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AACpD,SAAI,EAAW,WAAW,EAAU,SAAe,KAC5C,EAAW,MAAA,CAAO,GAAG,MAAM,EAAE,WAAW,GAAG,KAAK,MAAM,EAAU,CAAA,CAAE;AAC3E;AAQA,SAAgB,EAA+C,GAA0B;AACvF,QAAM,IAAS;AAQf,SAAO;AAAA,IACL,QAAA;AAAA,IACA,YARI,CAAmB,GAAkB,MAA+B,EAAW,GAAU,CAAK;AAAA,IASlG,eAPI,CAAsB,GAAqB,MAAoC,EAAc,GAAa,CAAU;AAAA,IAQxH,eANI,CAAiB,MAA6B,EAAO,CAAA;AAAA,EAO3D;AACF"}
|