@hua-labs/ui 2.2.0 → 2.3.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/LICENSE +21 -0
- package/README.md +91 -43
- package/dist/{ComponentLayout-BhM4VSoq.d.mts → ComponentLayout-Clf6C2jV.d.mts} +37 -3
- package/dist/DashboardSidebar-ZulecqKs.d.mts +54 -0
- package/dist/DashboardToolbar-BRZayZNz.d.mts +122 -0
- package/dist/EmptyState-SQ3Z6Vf2.d.mts +64 -0
- package/dist/{Modal-CrXmb3Ll.d.mts → Modal-DKKtBtbh.d.mts} +12 -6
- package/dist/{Section-BWzyshgX.d.mts → Section-DKdIG1sg.d.mts} +11 -12
- package/dist/SectionHeader-DHwQ_xh8.d.mts +1653 -0
- package/dist/{Switch-Dzm5TLR3.d.mts → Switch-D0l7SJrz.d.mts} +31 -15
- package/dist/Tooltip-Cv7nYhPW.d.mts +304 -0
- package/dist/advanced/Logo.d.ts +8 -4
- package/dist/advanced/Logo.d.ts.map +1 -1
- package/dist/advanced/dashboard.d.ts +28 -6
- package/dist/advanced/dashboard.d.ts.map +1 -1
- package/dist/advanced-dashboard.d.mts +9 -2278
- package/dist/advanced-dashboard.mjs +1 -33
- package/dist/advanced-dashboard.mjs.map +1 -1
- package/dist/advanced-emotion.d.mts +13 -5
- package/dist/advanced-emotion.mjs +1 -1
- package/dist/advanced-motion.d.mts +136 -56
- package/dist/advanced-motion.mjs +1 -1
- package/dist/advanced.d.mts +69 -36
- package/dist/advanced.mjs +14 -3
- package/dist/advanced.mjs.map +1 -1
- package/dist/chunk-32OZGTPV.mjs +41 -0
- package/dist/chunk-32OZGTPV.mjs.map +1 -0
- package/dist/chunk-6WBFZ2KV.mjs +3 -0
- package/dist/chunk-6WBFZ2KV.mjs.map +1 -0
- package/dist/chunk-7CGJQSJO.mjs +3 -0
- package/dist/chunk-7CGJQSJO.mjs.map +1 -0
- package/dist/chunk-7T3IUG3G.mjs +3 -0
- package/dist/chunk-7T3IUG3G.mjs.map +1 -0
- package/dist/chunk-AJOGTUWS.mjs +3 -0
- package/dist/chunk-AJOGTUWS.mjs.map +1 -0
- package/dist/chunk-AQTSQYH2.mjs +3 -0
- package/dist/chunk-AQTSQYH2.mjs.map +1 -0
- package/dist/chunk-B2MRZJQA.mjs +3 -0
- package/dist/chunk-B2MRZJQA.mjs.map +1 -0
- package/dist/chunk-BOX4TONF.mjs +3 -0
- package/dist/chunk-BOX4TONF.mjs.map +1 -0
- package/dist/chunk-C2DOXNBK.mjs +3 -0
- package/dist/chunk-C2DOXNBK.mjs.map +1 -0
- package/dist/chunk-CQBMR7VU.mjs +3 -0
- package/dist/chunk-CQBMR7VU.mjs.map +1 -0
- package/dist/chunk-CYAAAEPJ.mjs +3 -0
- package/dist/chunk-CYAAAEPJ.mjs.map +1 -0
- package/dist/chunk-D7MTTTQY.mjs +8 -0
- package/dist/chunk-D7MTTTQY.mjs.map +1 -0
- package/dist/chunk-DABVKUJN.mjs +3 -0
- package/dist/chunk-DABVKUJN.mjs.map +1 -0
- package/dist/chunk-EK6BLFVQ.mjs +3 -0
- package/dist/chunk-EK6BLFVQ.mjs.map +1 -0
- package/dist/chunk-FVUAVGP5.mjs +3 -0
- package/dist/chunk-FVUAVGP5.mjs.map +1 -0
- package/dist/chunk-GAIUZVNC.mjs +3 -0
- package/dist/chunk-GAIUZVNC.mjs.map +1 -0
- package/dist/chunk-HLBIIF4I.mjs +3 -0
- package/dist/chunk-HLBIIF4I.mjs.map +1 -0
- package/dist/chunk-I6NCGF6E.mjs +3 -0
- package/dist/chunk-I6NCGF6E.mjs.map +1 -0
- package/dist/chunk-J46VEBVF.mjs +3 -0
- package/dist/chunk-J46VEBVF.mjs.map +1 -0
- package/dist/chunk-JNW3CLCA.mjs +3 -0
- package/dist/chunk-JNW3CLCA.mjs.map +1 -0
- package/dist/chunk-JY3QVUGW.mjs +3 -0
- package/dist/chunk-JY3QVUGW.mjs.map +1 -0
- package/dist/chunk-KHBZOGUU.mjs +3 -0
- package/dist/chunk-KHBZOGUU.mjs.map +1 -0
- package/dist/chunk-KPNNAQLI.mjs +3 -0
- package/dist/chunk-KPNNAQLI.mjs.map +1 -0
- package/dist/chunk-L2LGSILS.mjs +13 -0
- package/dist/chunk-L2LGSILS.mjs.map +1 -0
- package/dist/chunk-LPHUWTQ2.mjs +3 -0
- package/dist/chunk-LPHUWTQ2.mjs.map +1 -0
- package/dist/chunk-M4JE7TQL.mjs +3 -0
- package/dist/chunk-M4JE7TQL.mjs.map +1 -0
- package/dist/chunk-MEDKGNLV.mjs +3 -0
- package/dist/chunk-MEDKGNLV.mjs.map +1 -0
- package/dist/chunk-MR46CSMC.mjs +3 -0
- package/dist/chunk-MR46CSMC.mjs.map +1 -0
- package/dist/chunk-NSDWT2JM.mjs +3 -0
- package/dist/chunk-NSDWT2JM.mjs.map +1 -0
- package/dist/chunk-OBMOTQEU.mjs +3 -0
- package/dist/chunk-OBMOTQEU.mjs.map +1 -0
- package/dist/chunk-RICRFXFP.mjs +3 -0
- package/dist/chunk-RICRFXFP.mjs.map +1 -0
- package/dist/chunk-SOK7VBSM.mjs +13 -0
- package/dist/chunk-SOK7VBSM.mjs.map +1 -0
- package/dist/chunk-SPZ7SZH4.mjs +3 -0
- package/dist/chunk-SPZ7SZH4.mjs.map +1 -0
- package/dist/chunk-TB3DARQO.mjs +3 -0
- package/dist/chunk-TB3DARQO.mjs.map +1 -0
- package/dist/chunk-TND4HPKW.mjs +51 -0
- package/dist/chunk-TND4HPKW.mjs.map +1 -0
- package/dist/chunk-TSAXVD2H.mjs +35 -0
- package/dist/chunk-TSAXVD2H.mjs.map +1 -0
- package/dist/chunk-UR3TIWBS.mjs +3 -0
- package/dist/chunk-UR3TIWBS.mjs.map +1 -0
- package/dist/chunk-XU2XBAEW.mjs +3 -0
- package/dist/chunk-XU2XBAEW.mjs.map +1 -0
- package/dist/chunk-XXHDNZTG.mjs +3 -0
- package/dist/chunk-XXHDNZTG.mjs.map +1 -0
- package/dist/chunk-YW5DA7Q6.mjs +3 -0
- package/dist/chunk-YW5DA7Q6.mjs.map +1 -0
- package/dist/chunk-ZTHUGQZL.mjs +3 -0
- package/dist/chunk-ZTHUGQZL.mjs.map +1 -0
- package/dist/chunk-ZVCGC6EV.mjs +3 -0
- package/dist/chunk-ZVCGC6EV.mjs.map +1 -0
- package/dist/chunk-ZZ67E3M5.mjs +3 -0
- package/dist/chunk-ZZ67E3M5.mjs.map +1 -0
- package/dist/{common-YLvZxA_K.d.mts → common-Bej8Okcg.d.mts} +1 -1
- package/dist/components/Accordion.d.ts +14 -7
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Action.d.ts.map +1 -1
- package/dist/components/ActionToolbar.d.ts +10 -6
- package/dist/components/ActionToolbar.d.ts.map +1 -1
- package/dist/components/Alert.d.ts +16 -2
- package/dist/components/Alert.d.ts.map +1 -1
- package/dist/components/Autocomplete.d.ts +6 -4
- package/dist/components/Autocomplete.d.ts.map +1 -1
- package/dist/components/Avatar.d.ts +20 -7
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Badge.d.ts +27 -9
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Bookmark.d.ts +4 -2
- package/dist/components/Bookmark.d.ts.map +1 -1
- package/dist/components/BottomSheet.d.ts +13 -9
- package/dist/components/BottomSheet.d.ts.map +1 -1
- package/dist/components/Box.d.ts +9 -0
- package/dist/components/Box.d.ts.map +1 -0
- package/dist/components/Breadcrumb.d.ts +9 -4
- package/dist/components/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Button.d.ts +3 -29
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.variants.d.ts +54 -10
- package/dist/components/Button.variants.d.ts.map +1 -1
- package/dist/components/Card.d.ts +49 -14
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/ChatMessage.d.ts +3 -2
- package/dist/components/ChatMessage.d.ts.map +1 -1
- package/dist/components/Checkbox.d.ts +5 -2
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/CodeBlock.d.ts +8 -5
- package/dist/components/CodeBlock.d.ts.map +1 -1
- package/dist/components/ColorPicker.d.ts +4 -2
- package/dist/components/ColorPicker.d.ts.map +1 -1
- package/dist/components/Command.d.ts +28 -14
- package/dist/components/Command.d.ts.map +1 -1
- package/dist/components/ComponentLayout.d.ts +5 -2
- package/dist/components/ComponentLayout.d.ts.map +1 -1
- package/dist/components/ConfirmModal.d.ts +4 -0
- package/dist/components/ConfirmModal.d.ts.map +1 -1
- package/dist/components/Container.d.ts +18 -5
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/ContextMenu.d.ts +36 -36
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/DatePicker.d.ts +12 -5
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/Divider.d.ts +2 -1
- package/dist/components/Divider.d.ts.map +1 -1
- package/dist/components/Drawer.d.ts +17 -12
- package/dist/components/Drawer.d.ts.map +1 -1
- package/dist/components/Dropdown.d.ts +25 -7
- package/dist/components/Dropdown.d.ts.map +1 -1
- package/dist/components/EmotionAnalysis.d.ts +3 -1
- package/dist/components/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/EmotionButton.d.ts +3 -1
- package/dist/components/EmotionButton.d.ts.map +1 -1
- package/dist/components/EmotionMeter.d.ts +3 -1
- package/dist/components/EmotionMeter.d.ts.map +1 -1
- package/dist/components/EmotionSelector.d.ts +3 -1
- package/dist/components/EmotionSelector.d.ts.map +1 -1
- package/dist/components/FeatureCard.d.ts +9 -3
- package/dist/components/FeatureCard.d.ts.map +1 -1
- package/dist/components/Form.d.ts +20 -54
- package/dist/components/Form.d.ts.map +1 -1
- package/dist/components/FormControl.d.ts +3 -2
- package/dist/components/FormControl.d.ts.map +1 -1
- package/dist/components/Grid.d.ts +11 -4
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/HeroSection.d.ts +4 -2
- package/dist/components/HeroSection.d.ts.map +1 -1
- package/dist/components/Icon/Icon.d.ts +12 -8
- package/dist/components/Icon/Icon.d.ts.map +1 -1
- package/dist/components/IconsaxGallery/index.d.ts +8 -5
- package/dist/components/IconsaxGallery/index.d.ts.map +1 -1
- package/dist/components/InfoCard.d.ts +5 -2
- package/dist/components/InfoCard.d.ts.map +1 -1
- package/dist/components/Input.d.ts +29 -4
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +15 -10
- package/dist/components/Label.d.ts.map +1 -1
- package/dist/components/LanguageToggle.d.ts +5 -3
- package/dist/components/LanguageToggle.d.ts.map +1 -1
- package/dist/components/Link.d.ts +17 -6
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/LoadingSpinner.d.ts +7 -3
- package/dist/components/LoadingSpinner.d.ts.map +1 -1
- package/dist/components/Menu.d.ts +59 -60
- package/dist/components/Menu.d.ts.map +1 -1
- package/dist/components/Modal.d.ts +12 -6
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Navigation.d.ts +26 -11
- package/dist/components/Navigation.d.ts.map +1 -1
- package/dist/components/NumberInput.d.ts +5 -2
- package/dist/components/NumberInput.d.ts.map +1 -1
- package/dist/components/PageNavigation.d.ts +6 -3
- package/dist/components/PageNavigation.d.ts.map +1 -1
- package/dist/components/PageTransition.d.ts +2 -2
- package/dist/components/PageTransition.d.ts.map +1 -1
- package/dist/components/Pagination.d.ts +5 -2
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Panel.d.ts +1 -7
- package/dist/components/Panel.d.ts.map +1 -1
- package/dist/components/Popover.d.ts +25 -9
- package/dist/components/Popover.d.ts.map +1 -1
- package/dist/components/Pressable.d.ts +14 -0
- package/dist/components/Pressable.d.ts.map +1 -0
- package/dist/components/Progress.d.ts +36 -13
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Prose.d.ts +51 -0
- package/dist/components/Prose.d.ts.map +1 -0
- package/dist/components/Radio.d.ts +29 -33
- package/dist/components/Radio.d.ts.map +1 -1
- package/dist/components/ScrollArea.d.ts +8 -9
- package/dist/components/ScrollArea.d.ts.map +1 -1
- package/dist/components/ScrollIndicator.d.ts +9 -8
- package/dist/components/ScrollIndicator.d.ts.map +1 -1
- package/dist/components/ScrollProgress.d.ts +3 -2
- package/dist/components/ScrollProgress.d.ts.map +1 -1
- package/dist/components/ScrollToTop.d.ts +5 -5
- package/dist/components/ScrollToTop.d.ts.map +1 -1
- package/dist/components/Section.d.ts +12 -9
- package/dist/components/Section.d.ts.map +1 -1
- package/dist/components/SectionHeader.d.ts +3 -2
- package/dist/components/SectionHeader.d.ts.map +1 -1
- package/dist/components/Select.d.ts +18 -5
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Skeleton.d.ts +43 -15
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Slider.d.ts +7 -5
- package/dist/components/Slider.d.ts.map +1 -1
- package/dist/components/Stack.d.ts +22 -6
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/StatsPanel.d.ts +4 -2
- package/dist/components/StatsPanel.d.ts.map +1 -1
- package/dist/components/Switch.d.ts +9 -4
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Table.d.ts +43 -18
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Tabs.d.ts +50 -77
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/components/Text.d.ts +11 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Textarea.d.ts +24 -6
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/ThemeToggle.d.ts +18 -27
- package/dist/components/ThemeToggle.d.ts.map +1 -1
- package/dist/components/Timeline.d.ts +4 -2
- package/dist/components/Timeline.d.ts.map +1 -1
- package/dist/components/Toast.d.ts +1 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toggle.d.ts +11 -2
- package/dist/components/Toggle.d.ts.map +1 -1
- package/dist/components/Tooltip.d.ts +5 -2
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Upload.d.ts +5 -3
- package/dist/components/Upload.d.ts.map +1 -1
- package/dist/components/advanced/AdvancedPageTransition.d.ts +7 -5
- package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -1
- package/dist/components/advanced/AnimatedGradient.d.ts +6 -2
- package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
- package/dist/components/advanced/Carousel.d.ts +3 -1
- package/dist/components/advanced/Carousel.d.ts.map +1 -1
- package/dist/components/advanced/DotNav.d.ts +12 -5
- package/dist/components/advanced/DotNav.d.ts.map +1 -1
- package/dist/components/advanced/GlowCard.d.ts +4 -1
- package/dist/components/advanced/GlowCard.d.ts.map +1 -1
- package/dist/components/advanced/HorizontalScroll.d.ts +4 -1
- package/dist/components/advanced/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/advanced/ImageReveal.d.ts +23 -1
- package/dist/components/advanced/ImageReveal.d.ts.map +1 -1
- package/dist/components/advanced/Marquee.d.ts +4 -2
- package/dist/components/advanced/Marquee.d.ts.map +1 -1
- package/dist/components/advanced/Parallax.d.ts +4 -2
- package/dist/components/advanced/Parallax.d.ts.map +1 -1
- package/dist/components/advanced/SpotlightCard.d.ts +13 -12
- package/dist/components/advanced/SpotlightCard.d.ts.map +1 -1
- package/dist/components/advanced/TextReveal.d.ts +5 -1
- package/dist/components/advanced/TextReveal.d.ts.map +1 -1
- package/dist/components/advanced/TiltCard.d.ts +6 -2
- package/dist/components/advanced/TiltCard.d.ts.map +1 -1
- package/dist/components/advanced/VideoBackground.d.ts +4 -1
- package/dist/components/advanced/VideoBackground.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditor.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditor.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts +5 -3
- package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts +5 -3
- package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/types.d.ts +5 -2
- package/dist/components/advanced/blog-editor/types.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionAnalysis.d.ts +3 -1
- package/dist/components/advanced/emotion/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionButton.d.ts +3 -1
- package/dist/components/advanced/emotion/EmotionButton.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionMeter.d.ts +4 -2
- package/dist/components/advanced/emotion/EmotionMeter.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionSelector.d.ts +3 -1
- package/dist/components/advanced/emotion/EmotionSelector.d.ts.map +1 -1
- package/dist/components/dashboard/ActivityFeed.d.ts +5 -2
- package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -1
- package/dist/components/dashboard/BarChart.d.ts +3 -2
- package/dist/components/dashboard/BarChart.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardGrid.d.ts +13 -3
- package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardSidebar.d.ts +15 -82
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardToolbar.d.ts +3 -2
- package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -1
- package/dist/components/dashboard/EmptyState.d.ts +3 -2
- package/dist/components/dashboard/EmptyState.d.ts.map +1 -1
- package/dist/components/dashboard/MembershipBadge.d.ts +3 -2
- package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -1
- package/dist/components/dashboard/MerchantList.d.ts +3 -2
- package/dist/components/dashboard/MerchantList.d.ts.map +1 -1
- package/dist/components/dashboard/MetricCard.d.ts +3 -2
- package/dist/components/dashboard/MetricCard.d.ts.map +1 -1
- package/dist/components/dashboard/MiniBarChart.d.ts +3 -2
- package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -1
- package/dist/components/dashboard/NotificationCard.d.ts +5 -2
- package/dist/components/dashboard/NotificationCard.d.ts.map +1 -1
- package/dist/components/dashboard/ProfileCard.d.ts +5 -2
- package/dist/components/dashboard/ProfileCard.d.ts.map +1 -1
- package/dist/components/dashboard/ProgressCard.d.ts +6 -3
- package/dist/components/dashboard/ProgressCard.d.ts.map +1 -1
- package/dist/components/dashboard/QuickActionCard.d.ts +22 -27
- package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -1
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts +3 -2
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -1
- package/dist/components/dashboard/SettlementTimeline.d.ts +3 -2
- package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -1
- package/dist/components/dashboard/StatCard.d.ts +7 -4
- package/dist/components/dashboard/StatCard.d.ts.map +1 -1
- package/dist/components/dashboard/SummaryCard.d.ts +6 -3
- package/dist/components/dashboard/SummaryCard.d.ts.map +1 -1
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts +2 -2
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -1
- package/dist/components/dashboard/TransactionsTable.d.ts +3 -2
- package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -1
- package/dist/components/dashboard/TrendChart.d.ts +3 -2
- package/dist/components/dashboard/TrendChart.d.ts.map +1 -1
- package/dist/components/dashboard/YearlyHeatmap.d.ts +4 -2
- package/dist/components/dashboard/YearlyHeatmap.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanAddCard.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanAddColumn.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanBoard.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanColumn.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanColumnHeader.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanDropIndicator.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/index.d.ts +1 -1
- package/dist/components/dashboard/kanban/types.d.ts +24 -12
- package/dist/components/dashboard/kanban/types.d.ts.map +1 -1
- package/dist/components/scrollbar/scrollbar.d.ts +2 -1
- package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
- package/dist/context/MotionConfigContext.d.ts +41 -0
- package/dist/context/MotionConfigContext.d.ts.map +1 -0
- package/dist/data.d.mts +55 -23
- package/dist/data.d.ts +45 -3
- package/dist/data.d.ts.map +1 -1
- package/dist/data.mjs +2 -2
- package/dist/data.mjs.map +1 -1
- package/dist/feedback.d.mts +6 -293
- package/dist/feedback.d.ts +7 -5
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.mjs +1 -1
- package/dist/form.d.mts +99 -114
- package/dist/form.mjs +8 -3
- package/dist/form.mjs.map +1 -1
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useAnimatedEntrance.d.ts +24 -0
- package/dist/hooks/useAnimatedEntrance.d.ts.map +1 -0
- package/dist/hooks/useBreakpoint.d.ts +22 -0
- package/dist/hooks/useBreakpoint.d.ts.map +1 -0
- package/dist/hooks/useDotEnv.d.ts +12 -0
- package/dist/hooks/useDotEnv.d.ts.map +1 -0
- package/dist/hooks/useDotMap.d.ts +38 -0
- package/dist/hooks/useDotMap.d.ts.map +1 -0
- package/dist/iconsax-extended.mjs +2 -2
- package/dist/iconsax-extended.mjs.map +1 -1
- package/dist/iconsax.mjs +2 -2
- package/dist/iconsax.mjs.map +1 -1
- package/dist/index.d.mts +358 -127
- package/dist/index.d.ts +74 -64
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +15 -15
- package/dist/index.mjs.map +1 -1
- package/dist/interactive/kanban.d.ts +12 -0
- package/dist/interactive/kanban.d.ts.map +1 -0
- package/dist/interactive-kanban.d.mts +378 -0
- package/dist/interactive-kanban.mjs +3 -0
- package/dist/interactive-kanban.mjs.map +1 -0
- package/dist/interactive.d.mts +193 -197
- package/dist/interactive.d.ts +7 -5
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/landing/LandingAbout.d.ts +2 -2
- package/dist/landing/LandingAbout.d.ts.map +1 -1
- package/dist/landing/LandingCTA.d.ts +2 -2
- package/dist/landing/LandingCTA.d.ts.map +1 -1
- package/dist/landing/LandingContact.d.ts +2 -2
- package/dist/landing/LandingContact.d.ts.map +1 -1
- package/dist/landing/LandingExperience.d.ts +1 -1
- package/dist/landing/LandingExperience.d.ts.map +1 -1
- package/dist/landing/LandingFeatures.d.ts +1 -1
- package/dist/landing/LandingFeatures.d.ts.map +1 -1
- package/dist/landing/LandingHero.d.ts +2 -2
- package/dist/landing/LandingHero.d.ts.map +1 -1
- package/dist/landing/LandingLogoCloud.d.ts +2 -2
- package/dist/landing/LandingLogoCloud.d.ts.map +1 -1
- package/dist/landing/LandingMetrics.d.ts +1 -1
- package/dist/landing/LandingMetrics.d.ts.map +1 -1
- package/dist/landing/LandingProjects.d.ts +1 -1
- package/dist/landing/LandingProjects.d.ts.map +1 -1
- package/dist/landing/LandingShowcase.d.ts +2 -2
- package/dist/landing/LandingShowcase.d.ts.map +1 -1
- package/dist/landing/LandingSkills.d.ts +1 -1
- package/dist/landing/LandingSkills.d.ts.map +1 -1
- package/dist/landing/LandingStats.d.ts +1 -1
- package/dist/landing/LandingStats.d.ts.map +1 -1
- package/dist/landing/LandingTestimonials.d.ts +1 -1
- package/dist/landing/LandingTestimonials.d.ts.map +1 -1
- package/dist/landing/types.d.ts +42 -30
- package/dist/landing/types.d.ts.map +1 -1
- package/dist/landing.d.mts +47 -37
- package/dist/landing.mjs +4 -20
- package/dist/landing.mjs.map +1 -1
- package/dist/lib/Slot.d.ts.map +1 -1
- package/dist/lib/icon-providers.d.ts +17 -3
- package/dist/lib/icon-providers.d.ts.map +1 -1
- package/dist/lib/styles/animation.d.ts +35 -0
- package/dist/lib/styles/animation.d.ts.map +1 -0
- package/dist/lib/styles/disabled.d.ts +15 -0
- package/dist/lib/styles/disabled.d.ts.map +1 -0
- package/dist/lib/styles/focus.d.ts +34 -0
- package/dist/lib/styles/focus.d.ts.map +1 -0
- package/dist/lib/styles/glass.d.ts +18 -0
- package/dist/lib/styles/glass.d.ts.map +1 -0
- package/dist/lib/styles/hover.d.ts +9 -0
- package/dist/lib/styles/hover.d.ts.map +1 -0
- package/dist/lib/styles/index.d.ts +6 -0
- package/dist/lib/styles/index.d.ts.map +1 -1
- package/dist/lib/styles/transition.d.ts +42 -0
- package/dist/lib/styles/transition.d.ts.map +1 -0
- package/dist/lib/types/common.d.ts +3 -3
- package/dist/lib/types/common.d.ts.map +1 -1
- package/dist/native/Box.d.ts +11 -0
- package/dist/native/Box.d.ts.map +1 -0
- package/dist/native/Pressable.d.ts +10 -0
- package/dist/native/Pressable.d.ts.map +1 -0
- package/dist/native/Text.d.ts +11 -0
- package/dist/native/Text.d.ts.map +1 -0
- package/dist/native/index.d.ts +9 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/useDotMap.d.ts +51 -0
- package/dist/native/useDotMap.d.ts.map +1 -0
- package/dist/native.mjs +2 -0
- package/dist/native.mjs.map +1 -0
- package/dist/navigation.d.mts +48 -21
- package/dist/navigation.d.ts +10 -8
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.mjs +1 -1
- package/dist/navigation.mjs.map +1 -1
- package/dist/overlay.d.mts +84 -37
- package/dist/overlay.mjs +2 -2
- package/dist/overlay.mjs.map +1 -1
- package/dist/sdui/SDUIRenderer.d.ts.map +1 -1
- package/dist/sdui/core.d.ts +50 -0
- package/dist/sdui/core.d.ts.map +1 -0
- package/dist/sdui/index.d.ts +3 -1
- package/dist/sdui/index.d.ts.map +1 -1
- package/dist/sdui/registry.d.ts.map +1 -1
- package/dist/sdui/types.d.ts +38 -0
- package/dist/sdui/types.d.ts.map +1 -1
- package/dist/sdui.d.mts +89 -1
- package/dist/sdui.mjs +2 -2
- package/dist/sdui.mjs.map +1 -1
- package/package.json +39 -15
- package/src/styles/component-vars.css +503 -69
- package/src/styles/landing.css +12 -12
- package/src/styles/prose.css +284 -0
- package/src/styles/recommended-theme.css +123 -141
- package/src/styles/utilities.css +3 -3
- package/dist/chunk-5DPW7SVD.mjs +0 -4
- package/dist/chunk-5DPW7SVD.mjs.map +0 -1
- package/dist/chunk-5L5HIPKA.mjs +0 -3
- package/dist/chunk-5L5HIPKA.mjs.map +0 -1
- package/dist/chunk-CNW22G24.mjs +0 -13
- package/dist/chunk-CNW22G24.mjs.map +0 -1
- package/dist/chunk-CW66UBQG.mjs +0 -3
- package/dist/chunk-CW66UBQG.mjs.map +0 -1
- package/dist/chunk-EPY3432E.mjs +0 -3
- package/dist/chunk-EPY3432E.mjs.map +0 -1
- package/dist/chunk-F2M4YDDQ.mjs +0 -3
- package/dist/chunk-F2M4YDDQ.mjs.map +0 -1
- package/dist/chunk-FHMFDCX2.mjs +0 -3
- package/dist/chunk-FHMFDCX2.mjs.map +0 -1
- package/dist/chunk-HBIUCLFL.mjs +0 -3
- package/dist/chunk-HBIUCLFL.mjs.map +0 -1
- package/dist/chunk-HEBXAFRY.mjs +0 -3
- package/dist/chunk-HEBXAFRY.mjs.map +0 -1
- package/dist/chunk-IG47LMOD.mjs +0 -3
- package/dist/chunk-IG47LMOD.mjs.map +0 -1
- package/dist/chunk-J47ZEXEL.mjs +0 -3
- package/dist/chunk-J47ZEXEL.mjs.map +0 -1
- package/dist/chunk-K2FOFIST.mjs +0 -3
- package/dist/chunk-K2FOFIST.mjs.map +0 -1
- package/dist/chunk-LL6QPRD7.mjs +0 -3
- package/dist/chunk-LL6QPRD7.mjs.map +0 -1
- package/dist/chunk-NMJLOK6M.mjs +0 -3
- package/dist/chunk-NMJLOK6M.mjs.map +0 -1
- package/dist/chunk-O24K56OS.mjs +0 -3
- package/dist/chunk-O24K56OS.mjs.map +0 -1
- package/dist/chunk-OIWG3IJ7.mjs +0 -3
- package/dist/chunk-OIWG3IJ7.mjs.map +0 -1
- package/dist/chunk-OLLU7ZFH.mjs +0 -3
- package/dist/chunk-OLLU7ZFH.mjs.map +0 -1
- package/dist/chunk-Q76JW7X5.mjs +0 -73
- package/dist/chunk-Q76JW7X5.mjs.map +0 -1
- package/dist/chunk-QRM66RQG.mjs +0 -3
- package/dist/chunk-QRM66RQG.mjs.map +0 -1
- package/dist/chunk-QRRP7TGF.mjs +0 -13
- package/dist/chunk-QRRP7TGF.mjs.map +0 -1
- package/dist/chunk-SD6XGDAC.mjs +0 -3
- package/dist/chunk-SD6XGDAC.mjs.map +0 -1
- package/dist/chunk-SDFVGFXT.mjs +0 -3
- package/dist/chunk-SDFVGFXT.mjs.map +0 -1
- package/dist/chunk-SMLDNOV3.mjs +0 -8
- package/dist/chunk-SMLDNOV3.mjs.map +0 -1
- package/dist/chunk-TAP6MYDW.mjs +0 -3
- package/dist/chunk-TAP6MYDW.mjs.map +0 -1
- package/dist/chunk-TBZ645BI.mjs +0 -3
- package/dist/chunk-TBZ645BI.mjs.map +0 -1
- package/dist/chunk-V2DNYJR6.mjs +0 -3
- package/dist/chunk-V2DNYJR6.mjs.map +0 -1
- package/dist/chunk-VBABZXL7.mjs +0 -3
- package/dist/chunk-VBABZXL7.mjs.map +0 -1
- package/dist/chunk-WYBSHTGY.mjs +0 -3
- package/dist/chunk-WYBSHTGY.mjs.map +0 -1
- package/dist/chunk-ZQUMJQYV.mjs +0 -3
- package/dist/chunk-ZQUMJQYV.mjs.map +0 -1
- package/dist/chunk-ZY23NOT4.mjs +0 -3
- package/dist/chunk-ZY23NOT4.mjs.map +0 -1
- package/dist/components/EmptyState.d.ts +0 -62
- package/dist/components/EmptyState.d.ts.map +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {b as b$2}from'./chunk-A5YOVVM5.mjs';import {f}from'./chunk-UR3TIWBS.mjs';import {a,b as b$1}from'./chunk-LPHUWTQ2.mjs';import {c as c$1}from'./chunk-7T3IUG3G.mjs';import {m}from'./chunk-NSDWT2JM.mjs';import {b,d,c,e}from'./chunk-OBMOTQEU.mjs';import B,{useMemo,useState,useCallback}from'react';import {dot,dotVariants}from'@hua-labs/dot';import {jsx,jsxs}from'react/jsx-runtime';var xe=B.forwardRef(({as:e="div",dot:t,style:r,...o},a)=>{let s=b(),n=useMemo(()=>d(t?dot(t,s):{},r),[t,s,r]);return jsx(e,{ref:a,style:n,...o})});xe.displayName="Box";var Re={p:{lineHeight:"1.625"},h1:{lineHeight:"1.25",letterSpacing:"-0.025em"},h2:{lineHeight:"1.25",letterSpacing:"-0.025em"},h3:{lineHeight:"1.375"}},Ce=B.forwardRef(({as:e="span",dot:t,style:r,...o},a)=>{let s=b(),n=useMemo(()=>{var i;return d((i=Re[e])!=null?i:{},t?dot(t,s):{},r)},[e,t,s,r]);return jsx(e,{ref:a,style:n,...o})});Ce.displayName="Text";var ne=44,we=B.forwardRef(({dot:e,style:t,asChild:r=false,disabled:o,disableMinTouch:a$1=false,children:s,onMouseDown:n,onMouseUp:i,onMouseEnter:m,onMouseLeave:b,...c$2},S)=>{let[C,u]=useState(false),[v,p]=useState(false),{style:w,handlers:y}=c(e!=null?e:"",{disabled:!!o}),P=useCallback(g=>{u(true),y.onMouseEnter(),m==null||m(g);},[y,m]),k=useCallback(g=>{u(false),p(false),y.onMouseLeave(),b==null||b(g);},[y,b]),H=useCallback(g=>{o||p(true),n==null||n(g);},[o,n]),h=useCallback(g=>{p(false),i==null||i(g);},[i]),x=useMemo(()=>{let g={transition:a.micro,cursor:o?"not-allowed":"pointer",opacity:o?.5:C&&!v?.85:1};return a$1||(g.minHeight=ne,g.minWidth=ne,g.display="inline-flex"),v&&!o&&(g.transform="scale(0.98)",g.opacity=1),g},[o,a$1,C,v]),L=useMemo(()=>d(x,w,t),[x,w,t]),A={onFocus:y.onFocus,onBlur:y.onBlur,onMouseEnter:P,onMouseLeave:k};return r?jsx(c$1,{ref:S,style:L,"aria-disabled":o||void 0,onMouseDown:H,onMouseUp:h,...A,...c$2,children:s}):jsx("button",{ref:S,type:"button",style:L,disabled:o,"aria-disabled":o||void 0,onMouseDown:H,onMouseUp:h,...A,...c$2,children:s})});we.displayName="Pressable";var Me=dotVariants({base:"",variants:{direction:{vertical:"flex flex-col",horizontal:"flex flex-row"},align:{start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"},justify:{start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"}},defaultVariants:{direction:"vertical",align:"start",justify:"start"}}),Le={none:"0px",sm:"1rem",md:"1.5rem",lg:"2rem",xl:"3rem"},Be=B.forwardRef(({dot:e$1,direction:t="vertical",spacing:r="md",align:o="start",justify:a="start",wrap:s=false,style:n,...i},m)=>{let b=useMemo(()=>{let c=Me({direction:t,align:o,justify:a}),S={gap:Le[r]};return d(c,S,s?{flexWrap:"wrap"}:void 0,e(e$1),n)},[t,r,o,a,s,e$1,n]);return jsx("div",{ref:m,style:b,...i})});Be.displayName="Stack";var De=dotVariants({base:"",variants:{padding:{none:"p-0",small:"p-3",sm:"p-3",medium:"p-6",md:"p-6",large:"p-8",lg:"p-8",xl:"p-12",custom:""},rounded:{none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl",full:"rounded-full",custom:""}},defaultVariants:{padding:"md",rounded:"lg"}}),_e={default:{backgroundColor:"var(--color-card)",color:"var(--color-card-foreground)",border:"1px solid var(--color-border)"},solid:{backgroundColor:"var(--color-card)",color:"var(--color-card-foreground)",border:"1px solid var(--color-border)"},glass:{...b$1("heavy"),backgroundColor:"rgba(255, 255, 255, 0.6)",border:"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)"},outline:{backgroundColor:"transparent",border:"1px solid var(--color-border)"},elevated:{backgroundColor:"var(--color-card)",color:"var(--color-card-foreground)",boxShadow:"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)",border:"1px solid var(--color-border)"},neon:{backgroundColor:"color-mix(in srgb, var(--color-muted) 50%, transparent)",border:"1px solid rgba(103, 232, 249, 0.3)",boxShadow:"0 10px 15px -3px rgba(103, 232, 249, 0.2)"},holographic:{...b$1("light"),background:"linear-gradient(to bottom right, rgba(255,255,255,0.2), rgba(168,85,247,0.2), rgba(6,182,212,0.2))",border:"1px solid rgba(255, 255, 255, 0.3)"},cyberpunk:{backgroundColor:"var(--color-card)",border:"2px solid #f472b6",boxShadow:"0 10px 15px -3px rgba(244, 114, 182, 0.3)"},minimal:{backgroundColor:"var(--color-card)",border:"1px solid var(--color-border)",boxShadow:"0 1px 2px 0 rgba(0, 0, 0, 0.05)"},luxury:{background:"linear-gradient(to bottom right, #fffbeb, #fef3c7)",border:"1px solid #fbbf24",boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"}},Oe={none:{},glow:{boxShadow:"0 25px 50px -12px color-mix(in srgb, var(--color-primary) 20%, transparent)"},shadow:{boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"},gradient:{backgroundImage:"linear-gradient(to right, color-mix(in srgb, var(--color-primary) 10%, transparent), rgba(168,85,247,0.1), rgba(6,182,212,0.1))"},animated:{animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"}},Ve=B.forwardRef(({dot:e$1,style:t="default",effect:r="none",transparency:o=1,blurIntensity:a$1=0,borderOpacity:s=1,shadowOpacity:n=1,glowIntensity:i=0,glowColor:m="blue",particleEffect:b=false,hoverEffect:c=false,animationEffect:S=false,padding:C="md",customPadding:u,rounded:v="lg",customRounded:p,background:w="solid",gradientColors:y=["#3B82F6","#8B5CF6"],patternType:P="dots",backgroundImage:k,backgroundVideo:H,interactive:h=false,hoverScale:x=1.05,hoverRotate:L=0,hoverGlow:A=false,children:g,...pe},me)=>{let[q,K]=useState(false),U=useMemo(()=>{switch(P){case "dots":return "radial-gradient(circle, #000 1px, transparent 1px)";case "lines":return "linear-gradient(45deg, #000 1px, transparent 1px)";case "grid":return "linear-gradient(#000 1px, transparent 1px), linear-gradient(90deg, #000 1px, transparent 1px)";case "waves":return "repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(0,0,0,0.1) 10px, rgba(0,0,0,0.1) 20px)";default:return ""}},[P]),Z=useMemo(()=>{let f={};switch(o!==1&&(f.opacity=o),a$1>0&&(f.backdropFilter=`blur(${a$1}px)`),s<1&&(f.borderColor=`rgba(0, 0, 0, ${s})`),n<1&&(f.boxShadow=`0 4px 6px -1px rgba(0, 0, 0, ${n*.1})`),i>0&&(f.boxShadow=`${f.boxShadow||""}, 0 0 ${i*10}px ${m}`),w){case "gradient":f.background=`linear-gradient(135deg, ${y.join(", ")})`;break;case "pattern":f.backgroundImage=U;break;case "image":k&&(f.backgroundImage=`url(${k})`,f.backgroundSize="cover",f.backgroundPosition="center");break;}return f},[o,a$1,s,n,i,m,w,y,U,k]),J=useMemo(()=>{if(!h||!q)return {};let f={},_=[];return x!==1&&_.push(`scale(${x})`),L!==0&&_.push(`rotate(${L}deg)`),_.length&&(f.transform=_.join(" ")),A&&(f.boxShadow="0 25px 50px -12px rgba(6, 182, 212, 0.3)"),f},[h,q,x,L,A]),ue=useMemo(()=>d({transition:a.slow},De({padding:u?"custom":C,rounded:p?"custom":v}),_e[t],Oe[r],u?{padding:u}:void 0,p?{borderRadius:p}:void 0,J,Z,e(e$1)),[t,r,C,u,v,p,J,Z,e$1]);return jsxs("div",{style:{position:"relative"},children:[w==="video"&&H&&jsx("video",{style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",borderRadius:"8px"},autoPlay:true,muted:true,loop:true,playsInline:true,children:jsx("source",{src:H,type:"video/mp4"})}),b&&jsx("div",{style:{position:"absolute",inset:0,pointerEvents:"none"}}),jsx(f,{ref:me,style:ue,onMouseEnter:h?()=>K(true):void 0,onMouseLeave:h?()=>K(false):void 0,...pe,children:g}),S&&jsx("div",{style:{position:"absolute",inset:0,pointerEvents:"none"}})]})});Ve.displayName="Panel";var I=e=>dot(e),ze=dotVariants({base:"h-full rounded-full",variants:{variant:{default:"bg-[var(--color-foreground)]",success:"bg-[var(--progress-success)]",warning:"bg-[var(--progress-warning)]",error:"bg-[var(--progress-error)]",info:"bg-[var(--progress-info)]",glass:""}},defaultVariants:{variant:"default"}}),We={backgroundColor:"rgba(255, 255, 255, 0.5)",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)"},$e=dotVariants({base:"relative w-full overflow-hidden rounded-full",variants:{variant:{default:"bg-[var(--progress-track)]",success:"bg-[var(--progress-track)]",warning:"bg-[var(--progress-track)]",error:"bg-[var(--progress-track)]",info:"bg-[var(--progress-track)]",glass:""},size:{sm:"h-2",md:"h-3",lg:"h-4"}},defaultVariants:{variant:"default",size:"md"}}),Xe={backgroundColor:"rgba(255, 255, 255, 0.1)",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)",border:"1px solid rgba(255, 255, 255, 0.2)"},N=B.forwardRef(({dot:e$1,style:t,value:r=0,max:o=100,size:a="md",variant:s="default",showValue:n=false,animated:i=true,striped:m=false,label:b,description:c,autoVariant:S=false,...C},u)=>{let v=Math.min(Math.max(r/o*100,0),100),p=(()=>{if(!S)return s;let x=r/o;return x>.5?"success":x>.25?"warning":"error"})(),w=useMemo(()=>d(I("w-full"),e(e$1),t),[e$1,t]),y=useMemo(()=>{let x=$e({variant:p,size:a});return d(x,p==="glass"?Xe:void 0)},[p,a]),P=useMemo(()=>{let x=ze({variant:p});return d(x,{transition:i?"width 0.3s ease-out":"none"},p==="glass"?We:void 0,m?{backgroundImage:"linear-gradient(to right, transparent, rgba(255, 255, 255, 0.2), transparent)",backgroundSize:"20px 100%",animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"}:void 0,{width:`${v}%`})},[p,i,m,v]),k=useMemo(()=>I("text-sm font-medium text-[var(--color-foreground)]"),[]),H=useMemo(()=>I("text-sm text-[var(--color-muted-foreground)]"),[]),h=useMemo(()=>I("text-xs text-[var(--color-muted-foreground)]"),[]);return jsxs("div",{style:w,...C,children:[(b||n)&&jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",...e("mb-2")},children:[b&&jsx("span",{style:k,children:b}),n&&jsxs("span",{style:H,children:[Math.round(v),"%"]})]}),jsx("div",{ref:u,style:y,children:jsx("div",{style:P})}),c&&jsx("p",{style:{...h,...e("mt-2")},children:c})]})});N.displayName="Progress";var Ye=B.forwardRef(({dot:e,...t},r)=>jsx(N,{ref:r,variant:"success",dot:e,...t}));Ye.displayName="ProgressSuccess";var qe=B.forwardRef(({dot:e,...t},r)=>jsx(N,{ref:r,variant:"warning",dot:e,...t}));qe.displayName="ProgressWarning";var Ke=B.forwardRef(({dot:e,...t},r)=>jsx(N,{ref:r,variant:"error",dot:e,...t}));Ke.displayName="ProgressError";var Ue=B.forwardRef(({dot:e,...t},r)=>jsx(N,{ref:r,variant:"info",dot:e,...t}));Ue.displayName="ProgressInfo";var Ze=B.forwardRef(({title:e$1,dot:t,style:r,...o},a)=>{let s=useMemo(()=>d(I("p-4 rounded-lg"),{backgroundColor:"var(--color-card)",border:"1px solid var(--color-border)"},e(t),r),[t,r]),n=useMemo(()=>d(I("text-sm font-semibold text-[var(--color-foreground)]"),e("mb-3")),[]);return jsxs("div",{style:s,children:[e$1&&jsx("h3",{style:n,children:e$1}),jsx(N,{ref:a,...o})]})});Ze.displayName="ProgressWrapper";var Je=B.forwardRef(({dot:e$1,style:t,children:r,...o},a)=>{let s=useMemo(()=>d({display:"flex",flexDirection:"column",...e("gap-4")},e(e$1),t),[e$1,t]);return jsx("div",{ref:a,style:s,...o,children:r})});Je.displayName="ProgressGroup";var Qe={sm:{height:40,width:40},md:{height:48,width:48},lg:{height:56,width:56}},D={sm:16,md:20,lg:24},de={display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",cursor:"pointer",outline:"none",...e("rounded-lg")},ce={backgroundColor:"var(--color-muted)"},Y={outline:"none",boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px var(--color-ring)"},et={backgroundColor:"var(--color-muted)"},tt={backgroundColor:"var(--color-primary)"};function $t({dot:e$1,style:t,size:r="md",variant:o="button",showLabel:a=false,label:s={light:"\uB77C\uC774\uD2B8",dark:"\uB2E4\uD06C",system:"\uC2DC\uC2A4\uD15C"},...n}){let{theme:i,setTheme:m$1,resolvedTheme:b}=b$2(),c=b==="dark",[S,C]=useState(false),[u,v]=useState(false),p=useMemo(()=>d(de,Qe[r],S?ce:void 0,u?Y:void 0,e(e$1),t),[r,S,u,e$1,t]),w=useMemo(()=>d({position:"relative",display:"inline-flex",height:24,width:44,alignItems:"center",borderRadius:9999,border:"none",cursor:"pointer",transition:"background-color 300ms ease",outline:"none"},c?tt:et,u?Y:void 0,e(e$1),t),[c,u,e$1,t]),y=useMemo(()=>d(de,{fontSize:"0.875rem",fontWeight:500,justifyContent:"flex-start",transition:"background-color 300ms ease",...e("gap-3 pl-4 pr-4 pt-3 pb-3")},S?ce:void 0,u?Y:void 0,e(e$1),t),[S,u,e$1,t]),P={onMouseEnter:()=>C(true),onMouseLeave:()=>C(false),onFocus:()=>v(true),onBlur:()=>v(false)},k=()=>{m$1(i==="system"?"light":i==="light"?"dark":"light");};if(o==="icon"){let h={position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",transition:"transform 300ms ease, opacity 300ms ease",transform:c?"rotate(0deg)":"rotate(90deg)",opacity:c?1:0},x={position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",transition:"transform 300ms ease, opacity 300ms ease",transform:c?"rotate(90deg)":"rotate(0deg)",opacity:c?0:1};return jsx("button",{onClick:k,style:p,...P,...n,children:jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",width:"100%",height:"100%"},children:[jsx("div",{style:h,children:jsx(m,{name:"moon",size:D[r],dot:"text-[rgb(99,102,241)]"})}),jsx("div",{style:x,children:jsx(m,{name:"sun",size:D[r],dot:c?"text-[rgb(234,179,8)]":"text-[rgb(217,119,6)]"})})]})})}return o==="switch"?jsxs("button",{onClick:k,style:w,...P,...n,children:[jsx("span",{style:{display:"inline-block",height:16,width:16,borderRadius:"50%",backgroundColor:"white",boxShadow:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",transition:"transform 300ms ease",transform:c?"translateX(24px)":"translateX(4px)"}}),jsxs("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"space-between",...e("pl-1.5 pr-1.5")},children:[jsx(m,{name:"sun",size:12,dot:"text-[rgb(217,119,6)] opacity-0"}),jsx(m,{name:"moon",size:12,dot:"text-[rgb(99,102,241)] opacity-0"})]})]}):jsxs("button",{onClick:k,style:y,...P,...n,children:[i==="system"?jsx(m,{name:"monitor",size:D[r]}):b==="dark"?jsx(m,{name:"moon",size:D[r]}):jsx(m,{name:"sun",size:D[r],dot:"text-[rgb(217,119,6)]"}),a&&jsx("span",{style:{color:"var(--color-foreground)"},children:i==="system"?s.system:i==="dark"?s.dark:s.light})]})}export{xe as a,Ce as b,we as c,Be as d,Ve as e,N as f,Ye as g,qe as h,Ke as i,Ue as j,Je as k,$t as l};//# sourceMappingURL=chunk-GAIUZVNC.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-GAIUZVNC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Box.tsx","../src/components/Text.tsx","../src/components/Pressable.tsx","../src/components/Stack.tsx","../src/components/Panel.tsx","../src/components/Progress.tsx","../src/components/ThemeToggle.tsx"],"names":["Box","React","Tag","dotProp","style","props","ref","env","useDotEnv","computedStyle","useMemo","mergeStyles","dotFn","jsx","TAG_DEFAULTS","Text","_a","MIN_TOUCH_PX","Pressable","asChild","disabled","disableMinTouch","children","onMouseDown","onMouseUp","onMouseEnterProp","onMouseLeaveProp","isHovered","setIsHovered","useState","isPressed","setIsPressed","dotStyle","handlers","useDotMap","handleMouseEnter","useCallback","e","handleMouseLeave","handleMouseDown","handleMouseUp","defaultStyle","base","TRANSITIONS","combinedHandlers","Slot","stackVariants","dotVariants","SPACING_GAP","Stack","direction","spacing","align","justify","wrap","gapStyle","resolveDot","panelVariantStyles","STYLE_BASE","createGlassStyle","EFFECT_STYLE","Panel","dot","effect","transparency","blurIntensity","borderOpacity","shadowOpacity","glowIntensity","glowColor","particleEffect","_hoverEffect","animationEffect","padding","customPadding","rounded","customRounded","background","gradientColors","patternType","backgroundImage","backgroundVideo","interactive","hoverScale","hoverRotate","hoverGlow","cardProps","patternBackground","backgroundStyles","styles","hoverStyle","s","transforms","jsxs","Card","input","progressBarVariantStyles","GLASS_BAR_EXTRAS","progressTrackVariantStyles","GLASS_TRACK_EXTRAS","Progress","value","max","size","variant","showValue","animated","striped","label","description","autoVariant","percentage","resolvedVariant","ratio","containerStyle","trackStyle","barStyle","labelStyle","valueStyle","descriptionStyle","ProgressSuccess","ProgressWarning","ProgressError","ProgressInfo","ProgressWrapper","title","styleProp","wrapperStyle","titleStyle","ProgressGroup","groupStyle","SIZE_STYLES","ICON_SIZES","BASE_BUTTON","HOVER_BG","FOCUS_RING","SWITCH_BG_LIGHT","SWITCH_BG_DARK","ThemeToggle","showLabel","theme","setTheme","resolvedTheme","useTheme","isDark","isFocused","setIsFocused","iconButtonStyle","switchTrackStyle","buttonStyle","interactionHandlers","handleClick","moonStyle","sunStyle","Icon"],"mappings":"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","file":"chunk-GAIUZVNC.mjs","sourcesContent":["\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport { dot as dotFn } from \"@hua-labs/dot\"\nimport { useDotEnv } from \"../hooks/useDotEnv\"\nimport { mergeStyles } from \"../hooks/useDotMap\"\n\ntype BoxElement =\n | \"div\" | \"section\" | \"article\" | \"aside\" | \"main\" | \"nav\"\n | \"header\" | \"footer\" | \"figure\" | \"figcaption\" | \"details\" | \"summary\"\n | \"fieldset\" | \"form\" | \"ol\" | \"ul\" | \"li\"\n\nexport interface BoxProps extends Omit<React.HTMLAttributes<HTMLElement>, 'className'> {\n as?: BoxElement\n dot?: string\n}\n\nconst Box = React.forwardRef<HTMLElement, BoxProps>(\n ({ as: Tag = \"div\", dot: dotProp, style, ...props }, ref) => {\n const env = useDotEnv()\n const computedStyle = useMemo(\n () => mergeStyles(dotProp ? dotFn(dotProp, env) as React.CSSProperties : {}, style),\n [dotProp, env, style],\n )\n\n return <Tag ref={ref as React.Ref<never>} style={computedStyle} {...props} />\n },\n)\nBox.displayName = \"Box\"\n\nexport { Box }\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { dot as dotFn } from \"@hua-labs/dot\";\nimport { useDotEnv } from \"../hooks/useDotEnv\";\nimport { mergeStyles } from \"../hooks/useDotMap\";\n\ntype TextElement =\n | \"span\"\n | \"p\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"label\"\n | \"em\"\n | \"strong\"\n | \"small\"\n | \"s\"\n | \"mark\"\n | \"abbr\"\n | \"time\"\n | \"code\"\n | \"pre\"\n | \"blockquote\"\n | \"cite\"\n | \"q\";\n\nexport interface TextProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"className\"\n> {\n as?: TextElement;\n dot?: string;\n /** For as=\"label\" — associates the label with a form control */\n htmlFor?: string;\n}\n\n/** Default line-height / letter-spacing by tag — overridable via dot or style props */\nconst TAG_DEFAULTS: Partial<Record<TextElement, React.CSSProperties>> = {\n p: { lineHeight: \"1.625\" },\n h1: { lineHeight: \"1.25\", letterSpacing: \"-0.025em\" },\n h2: { lineHeight: \"1.25\", letterSpacing: \"-0.025em\" },\n h3: { lineHeight: \"1.375\" },\n};\n\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n ({ as: Tag = \"span\", dot: dotProp, style, ...props }, ref) => {\n const env = useDotEnv();\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n TAG_DEFAULTS[Tag] ?? {},\n dotProp ? (dotFn(dotProp, env) as React.CSSProperties) : {},\n style,\n ),\n [Tag, dotProp, env, style],\n );\n\n return (\n <Tag ref={ref as React.Ref<never>} style={computedStyle} {...props} />\n );\n },\n);\nText.displayName = \"Text\";\n\nexport { Text };\n","\"use client\";\n\nimport React, { useMemo, useState, useCallback } from \"react\";\nimport { useDotMap, mergeStyles } from \"../hooks/useDotMap\";\nimport { Slot } from \"../lib/Slot\";\nimport { TRANSITIONS } from \"../lib/styles/transition\";\n\n/** Minimum touch target size (px) per WCAG 2.1 AA §2.5.5 */\nconst MIN_TOUCH_PX = 44;\n\nexport interface PressableProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n dot?: string;\n asChild?: boolean;\n /**\n * Disable the WCAG 2.1 AA minimum touch target (44 × 44 px).\n * Use when the element is part of a larger interactive region or when\n * the enclosing layout already satisfies the size requirement.\n */\n disableMinTouch?: boolean;\n}\n\nconst Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n (\n {\n dot: dotProp,\n style,\n asChild = false,\n disabled,\n disableMinTouch = false,\n children,\n onMouseDown,\n onMouseUp,\n onMouseEnter: onMouseEnterProp,\n onMouseLeave: onMouseLeaveProp,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const { style: dotStyle, handlers } = useDotMap(dotProp ?? \"\", {\n disabled: !!disabled,\n });\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n setIsHovered(true);\n handlers.onMouseEnter();\n onMouseEnterProp?.(e);\n },\n [handlers, onMouseEnterProp],\n );\n\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n setIsHovered(false);\n setIsPressed(false);\n handlers.onMouseLeave();\n onMouseLeaveProp?.(e);\n },\n [handlers, onMouseLeaveProp],\n );\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!disabled) setIsPressed(true);\n onMouseDown?.(e);\n },\n [disabled, onMouseDown],\n );\n\n const handleMouseUp = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onMouseUp?.(e);\n },\n [onMouseUp],\n );\n\n /**\n * Default interaction styles.\n * Merging order: defaultStyle → dotStyle → explicit style prop\n * This means dot prop and explicit style always win over defaults.\n */\n const defaultStyle = useMemo((): React.CSSProperties => {\n const base: React.CSSProperties = {\n transition: TRANSITIONS.micro,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n // Hover: subtle dim — overridden if dot prop sets its own hover opacity\n opacity: disabled ? 0.5 : isHovered && !isPressed ? 0.85 : 1,\n };\n\n if (!disableMinTouch) {\n base.minHeight = MIN_TOUCH_PX;\n base.minWidth = MIN_TOUCH_PX;\n base.display = \"inline-flex\";\n }\n\n // Active press feedback: subtle scale-down\n if (isPressed && !disabled) {\n base.transform = \"scale(0.98)\";\n base.opacity = 1;\n }\n\n return base;\n }, [disabled, disableMinTouch, isHovered, isPressed]);\n\n const computedStyle = useMemo(\n () => mergeStyles(defaultStyle, dotStyle, style),\n [defaultStyle, dotStyle, style],\n );\n\n // Provide combined handlers — dot handlers (focus/blur) are kept via spread\n const combinedHandlers = {\n onFocus: handlers.onFocus,\n onBlur: handlers.onBlur,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n };\n\n if (asChild) {\n return (\n <Slot\n ref={ref}\n style={computedStyle}\n aria-disabled={disabled || undefined}\n onMouseDown={handleMouseDown as React.MouseEventHandler}\n onMouseUp={handleMouseUp as React.MouseEventHandler}\n {...combinedHandlers}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n style={computedStyle}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n {...combinedHandlers}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\nPressable.displayName = \"Pressable\";\n\nexport { Pressable };\n","\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\"\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\"\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties\n\nexport const stackVariants = dotVariants({\n base: \"\",\n variants: {\n direction: {\n vertical: \"flex flex-col\",\n horizontal: \"flex flex-row\",\n },\n align: {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n },\n justify: {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n },\n },\n defaultVariants: {\n direction: \"vertical\",\n align: \"start\",\n justify: \"start\",\n },\n})\n\n/** Gap values for spacing — replaces space-y-* / space-x-* with flexbox gap */\nconst SPACING_GAP: Record<string, string> = {\n none: '0px',\n sm: '1rem',\n md: '1.5rem',\n lg: '2rem',\n xl: '3rem',\n}\n\n/**\n * Stack 컴포넌트의 props\n */\nexport interface StackProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'className'> {\n direction?: \"vertical\" | \"horizontal\"\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\"\n wrap?: boolean\n dot?: string\n}\n\n/**\n * Stack 컴포넌트\n *\n * Flexbox를 사용한 스택 레이아웃 컴포넌트입니다.\n *\n * @example\n * <Stack spacing=\"md\"><div>1</div><div>2</div></Stack>\n * <Stack direction=\"horizontal\" spacing=\"lg\" align=\"center\" justify=\"between\">{...}</Stack>\n * <Stack direction=\"horizontal\" wrap spacing=\"sm\">{tags}</Stack>\n */\nconst Stack = React.forwardRef<HTMLDivElement, StackProps>(\n ({\n dot: dotProp,\n direction = \"vertical\",\n spacing = \"md\",\n align = \"start\",\n justify = \"start\",\n wrap = false,\n style,\n ...props\n }, ref) => {\n const computedStyle = useMemo(() => {\n const base = stackVariants({ direction, align, justify }) as React.CSSProperties\n const gapStyle: React.CSSProperties = { gap: SPACING_GAP[spacing] }\n const wrapStyle: React.CSSProperties | undefined = wrap ? { flexWrap: 'wrap' } : undefined\n return mergeStyles(base, gapStyle, wrapStyle, resolveDot(dotProp), style)\n }, [direction, spacing, align, justify, wrap, dotProp, style])\n\n return (\n <div\n ref={ref}\n style={computedStyle}\n {...props}\n />\n )\n }\n)\nStack.displayName = \"Stack\"\n\nexport { Stack }\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { dotVariants } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { Card, CardProps } from \"./Card\";\nimport type { CSSProperties } from \"react\";\nimport { createGlassStyle } from \"../lib/styles/glass\";\nimport { TRANSITIONS } from \"../lib/styles/transition\";\n\nconst panelVariantStyles = dotVariants({\n base: \"\",\n variants: {\n padding: {\n none: \"p-0\",\n small: \"p-3\",\n sm: \"p-3\",\n medium: \"p-6\",\n md: \"p-6\",\n large: \"p-8\",\n lg: \"p-8\",\n xl: \"p-12\",\n custom: \"\",\n },\n rounded: {\n none: \"rounded-none\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n xl: \"rounded-xl\",\n full: \"rounded-full\",\n custom: \"\",\n },\n },\n defaultVariants: {\n padding: \"md\",\n rounded: \"lg\",\n },\n});\n\nconst STYLE_BASE: Record<string, CSSProperties> = {\n default: {\n backgroundColor: \"var(--color-card)\",\n color: \"var(--color-card-foreground)\",\n border: \"1px solid var(--color-border)\",\n },\n solid: {\n backgroundColor: \"var(--color-card)\",\n color: \"var(--color-card-foreground)\",\n border: \"1px solid var(--color-border)\",\n },\n glass: {\n ...createGlassStyle(\"heavy\"),\n backgroundColor: \"rgba(255, 255, 255, 0.6)\",\n border:\n \"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)\",\n },\n outline: {\n backgroundColor: \"transparent\",\n border: \"1px solid var(--color-border)\",\n },\n elevated: {\n backgroundColor: \"var(--color-card)\",\n color: \"var(--color-card-foreground)\",\n boxShadow:\n \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n border: \"1px solid var(--color-border)\",\n },\n neon: {\n backgroundColor: \"color-mix(in srgb, var(--color-muted) 50%, transparent)\",\n border: \"1px solid rgba(103, 232, 249, 0.3)\",\n boxShadow: \"0 10px 15px -3px rgba(103, 232, 249, 0.2)\",\n },\n holographic: {\n ...createGlassStyle(\"light\"),\n background:\n \"linear-gradient(to bottom right, rgba(255,255,255,0.2), rgba(168,85,247,0.2), rgba(6,182,212,0.2))\",\n border: \"1px solid rgba(255, 255, 255, 0.3)\",\n },\n cyberpunk: {\n backgroundColor: \"var(--color-card)\",\n border: \"2px solid #f472b6\",\n boxShadow: \"0 10px 15px -3px rgba(244, 114, 182, 0.3)\",\n },\n minimal: {\n backgroundColor: \"var(--color-card)\",\n border: \"1px solid var(--color-border)\",\n boxShadow: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n luxury: {\n background: \"linear-gradient(to bottom right, #fffbeb, #fef3c7)\",\n border: \"1px solid #fbbf24\",\n boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n },\n};\n\nconst EFFECT_STYLE: Record<string, CSSProperties> = {\n none: {},\n glow: {\n boxShadow:\n \"0 25px 50px -12px color-mix(in srgb, var(--color-primary) 20%, transparent)\",\n },\n shadow: { boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\" },\n gradient: {\n backgroundImage:\n \"linear-gradient(to right, color-mix(in srgb, var(--color-primary) 10%, transparent), rgba(168,85,247,0.1), rgba(6,182,212,0.1))\",\n },\n animated: { animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\" },\n};\n\n/**\n * Panel 컴포넌트의 props / Panel component props\n */\nexport interface PanelProps extends Omit<\n CardProps,\n \"variant\" | \"style\" | \"padding\" | \"rounded\"\n> {\n style?:\n | \"default\"\n | \"solid\"\n | \"glass\"\n | \"outline\"\n | \"elevated\"\n | \"neon\"\n | \"holographic\"\n | \"cyberpunk\"\n | \"minimal\"\n | \"luxury\";\n effect?: \"none\" | \"glow\" | \"shadow\" | \"gradient\" | \"animated\";\n\n transparency?: number;\n blurIntensity?: number;\n borderOpacity?: number;\n shadowOpacity?: number;\n glowIntensity?: number;\n glowColor?: string;\n\n particleEffect?: boolean;\n hoverEffect?: boolean;\n animationEffect?: boolean;\n\n padding?:\n | \"none\"\n | \"small\"\n | \"sm\"\n | \"medium\"\n | \"md\"\n | \"large\"\n | \"lg\"\n | \"xl\"\n | \"custom\";\n customPadding?: string;\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\" | \"custom\";\n customRounded?: string;\n\n background?: \"solid\" | \"gradient\" | \"pattern\" | \"image\" | \"video\";\n gradientColors?: string[];\n patternType?: \"dots\" | \"lines\" | \"grid\" | \"waves\" | \"custom\";\n backgroundImage?: string;\n backgroundVideo?: string;\n\n interactive?: boolean;\n hoverScale?: number;\n hoverRotate?: number;\n hoverGlow?: boolean;\n}\n\n/**\n * Panel 컴포넌트 / Panel component\n *\n * Card를 확장한 고급 스타일링 패널 컴포넌트입니다.\n *\n * @example\n * <Panel><div>내용</div></Panel>\n * <Panel style=\"glass\" effect=\"glow\"><div>Glass 패널</div></Panel>\n * <Panel style=\"neon\" interactive hoverGlow><div>호버 효과</div></Panel>\n */\nconst Panel = React.forwardRef<HTMLDivElement, PanelProps>(\n (\n {\n dot,\n style = \"default\",\n effect = \"none\",\n transparency = 1,\n blurIntensity = 0,\n borderOpacity = 1,\n shadowOpacity = 1,\n glowIntensity = 0,\n glowColor = \"blue\",\n particleEffect = false,\n hoverEffect: _hoverEffect = false,\n animationEffect = false,\n padding = \"md\",\n customPadding,\n rounded = \"lg\",\n customRounded,\n background = \"solid\",\n gradientColors = [\"#3B82F6\", \"#8B5CF6\"],\n patternType = \"dots\",\n backgroundImage,\n backgroundVideo,\n interactive = false,\n hoverScale = 1.05,\n hoverRotate = 0,\n hoverGlow = false,\n children,\n ...cardProps\n },\n ref,\n ): React.ReactElement => {\n const [isHovered, setIsHovered] = useState(false);\n\n // 패턴 배경 생성\n const patternBackground = useMemo(() => {\n switch (patternType) {\n case \"dots\":\n return \"radial-gradient(circle, #000 1px, transparent 1px)\";\n case \"lines\":\n return \"linear-gradient(45deg, #000 1px, transparent 1px)\";\n case \"grid\":\n return \"linear-gradient(#000 1px, transparent 1px), linear-gradient(90deg, #000 1px, transparent 1px)\";\n case \"waves\":\n return \"repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(0,0,0,0.1) 10px, rgba(0,0,0,0.1) 20px)\";\n default:\n return \"\";\n }\n }, [patternType]);\n\n // 배경 스타일 생성\n const backgroundStyles = useMemo((): CSSProperties => {\n const styles: CSSProperties = {};\n\n if (transparency !== 1) {\n styles.opacity = transparency;\n }\n\n if (blurIntensity > 0) {\n styles.backdropFilter = `blur(${blurIntensity}px)`;\n }\n\n if (borderOpacity < 1) {\n styles.borderColor = `rgba(0, 0, 0, ${borderOpacity})`;\n }\n\n if (shadowOpacity < 1) {\n styles.boxShadow = `0 4px 6px -1px rgba(0, 0, 0, ${shadowOpacity * 0.1})`;\n }\n\n if (glowIntensity > 0) {\n styles.boxShadow = `${styles.boxShadow || \"\"}, 0 0 ${glowIntensity * 10}px ${glowColor}`;\n }\n\n switch (background) {\n case \"gradient\":\n styles.background = `linear-gradient(135deg, ${gradientColors.join(\", \")})`;\n break;\n case \"pattern\":\n styles.backgroundImage = patternBackground;\n break;\n case \"image\":\n if (backgroundImage) {\n styles.backgroundImage = `url(${backgroundImage})`;\n styles.backgroundSize = \"cover\";\n styles.backgroundPosition = \"center\";\n }\n break;\n case \"video\":\n break;\n }\n\n return styles;\n }, [\n transparency,\n blurIntensity,\n borderOpacity,\n shadowOpacity,\n glowIntensity,\n glowColor,\n background,\n gradientColors,\n patternBackground,\n backgroundImage,\n ]);\n\n // 호버 효과\n const hoverStyle = useMemo((): CSSProperties => {\n if (!interactive || !isHovered) return {};\n const s: CSSProperties = {};\n const transforms: string[] = [];\n if (hoverScale !== 1) transforms.push(`scale(${hoverScale})`);\n if (hoverRotate !== 0) transforms.push(`rotate(${hoverRotate}deg)`);\n if (transforms.length) s.transform = transforms.join(\" \");\n if (hoverGlow) s.boxShadow = \"0 25px 50px -12px rgba(6, 182, 212, 0.3)\";\n return s;\n }, [interactive, isHovered, hoverScale, hoverRotate, hoverGlow]);\n\n // 최종 스타일 합산\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n { transition: TRANSITIONS.slow },\n panelVariantStyles({\n padding: customPadding ? \"custom\" : padding,\n rounded: customRounded ? \"custom\" : rounded,\n }) as CSSProperties,\n STYLE_BASE[style],\n EFFECT_STYLE[effect],\n customPadding ? { padding: customPadding } : undefined,\n customRounded ? { borderRadius: customRounded } : undefined,\n hoverStyle,\n backgroundStyles,\n resolveDot(dot),\n ),\n [\n style,\n effect,\n padding,\n customPadding,\n rounded,\n customRounded,\n hoverStyle,\n backgroundStyles,\n dot,\n ],\n );\n\n return (\n <div style={{ position: \"relative\" }}>\n {/* 비디오 배경 */}\n {background === \"video\" && backgroundVideo && (\n <video\n style={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderRadius: \"8px\",\n }}\n autoPlay\n muted\n loop\n playsInline\n >\n <source src={backgroundVideo} type=\"video/mp4\" />\n </video>\n )}\n\n {/* 파티클 효과 */}\n {particleEffect && (\n <div\n style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n >\n {/* 파티클 효과 렌더링 */}\n </div>\n )}\n\n {/* 메인 Panel */}\n <Card\n ref={ref}\n style={computedStyle}\n onMouseEnter={interactive ? () => setIsHovered(true) : undefined}\n onMouseLeave={interactive ? () => setIsHovered(false) : undefined}\n {...cardProps}\n >\n {children}\n </Card>\n\n {/* 애니메이션 효과 */}\n {animationEffect && (\n <div\n style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n >\n {/* 애니메이션 효과 렌더링 */}\n </div>\n )}\n </div>\n );\n },\n);\n\nPanel.displayName = \"Panel\";\n\nexport { Panel };\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties;\n\nexport const progressBarVariantStyles = dotVariants({\n base: \"h-full rounded-full\",\n variants: {\n variant: {\n default: \"bg-[var(--color-foreground)]\",\n success: \"bg-[var(--progress-success)]\",\n warning: \"bg-[var(--progress-warning)]\",\n error: \"bg-[var(--progress-error)]\",\n info: \"bg-[var(--progress-info)]\",\n glass: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n/** Glass bar extras (can't be dot utilities) */\nconst GLASS_BAR_EXTRAS: React.CSSProperties = {\n backgroundColor: \"rgba(255, 255, 255, 0.5)\",\n backdropFilter: \"blur(4px)\",\n WebkitBackdropFilter: \"blur(4px)\",\n};\n\nexport const progressTrackVariantStyles = dotVariants({\n base: \"relative w-full overflow-hidden rounded-full\",\n variants: {\n variant: {\n default: \"bg-[var(--progress-track)]\",\n success: \"bg-[var(--progress-track)]\",\n warning: \"bg-[var(--progress-track)]\",\n error: \"bg-[var(--progress-track)]\",\n info: \"bg-[var(--progress-track)]\",\n glass: \"\",\n },\n size: {\n sm: \"h-2\",\n md: \"h-3\",\n lg: \"h-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\n/** Glass track extras */\nconst GLASS_TRACK_EXTRAS: React.CSSProperties = {\n backgroundColor: \"rgba(255, 255, 255, 0.1)\",\n backdropFilter: \"blur(4px)\",\n WebkitBackdropFilter: \"blur(4px)\",\n border: \"1px solid rgba(255, 255, 255, 0.2)\",\n};\n\n/**\n * Progress component props\n */\nexport interface ProgressProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n value?: number;\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\" | \"glass\";\n showValue?: boolean;\n animated?: boolean;\n striped?: boolean;\n label?: string;\n description?: string;\n autoVariant?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Progress component\n *\n * A progress bar component for displaying progress.\n *\n * @example\n * <Progress value={50} />\n * <Progress value={75} variant=\"success\" label=\"Upload\" showValue />\n * <Progress value={90} variant=\"warning\" striped animated />\n */\nconst Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n dot: dotProp,\n style,\n value = 0,\n max = 100,\n size = \"md\",\n variant = \"default\",\n showValue = false,\n animated = true,\n striped = false,\n label,\n description,\n autoVariant = false,\n ...props\n },\n ref,\n ) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const resolvedVariant = (() => {\n if (!autoVariant) return variant;\n const ratio = value / max;\n if (ratio > 0.5) return \"success\";\n if (ratio > 0.25) return \"warning\";\n return \"error\";\n })();\n\n const containerStyle = useMemo(\n () => mergeStyles(s(\"w-full\"), resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n const trackStyle = useMemo(() => {\n const base = progressTrackVariantStyles({\n variant: resolvedVariant,\n size,\n }) as React.CSSProperties;\n return mergeStyles(\n base,\n resolvedVariant === \"glass\" ? GLASS_TRACK_EXTRAS : undefined,\n );\n }, [resolvedVariant, size]);\n\n const barStyle = useMemo(() => {\n const base = progressBarVariantStyles({\n variant: resolvedVariant,\n }) as React.CSSProperties;\n const stripedStyle: React.CSSProperties | undefined = striped\n ? {\n backgroundImage:\n \"linear-gradient(to right, transparent, rgba(255, 255, 255, 0.2), transparent)\",\n backgroundSize: \"20px 100%\",\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n }\n : undefined;\n return mergeStyles(\n base,\n { transition: animated ? \"width 0.3s ease-out\" : \"none\" },\n resolvedVariant === \"glass\" ? GLASS_BAR_EXTRAS : undefined,\n stripedStyle,\n { width: `${percentage}%` },\n );\n }, [resolvedVariant, animated, striped, percentage]);\n\n const labelStyle = useMemo(\n () => s(\"text-sm font-medium text-[var(--color-foreground)]\"),\n [],\n );\n const valueStyle = useMemo(\n () => s(\"text-sm text-[var(--color-muted-foreground)]\"),\n [],\n );\n const descriptionStyle = useMemo(\n () => s(\"text-xs text-[var(--color-muted-foreground)]\"),\n [],\n );\n\n return (\n <div style={containerStyle} {...props}>\n {(label || showValue) && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"mb-2\"),\n }}\n >\n {label && <span style={labelStyle}>{label}</span>}\n {showValue && (\n <span style={valueStyle}>{Math.round(percentage)}%</span>\n )}\n </div>\n )}\n\n <div ref={ref} style={trackStyle}>\n <div style={barStyle} />\n </div>\n\n {description && (\n <p style={{ ...descriptionStyle, ...resolveDot(\"mt-2\") }}>\n {description}\n </p>\n )}\n </div>\n );\n },\n);\nProgress.displayName = \"Progress\";\n\n// Convenience components\nexport const ProgressSuccess = React.forwardRef<\n HTMLDivElement,\n Omit<ProgressProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Progress ref={ref} variant=\"success\" dot={dotProp} {...props} />\n));\nProgressSuccess.displayName = \"ProgressSuccess\";\n\nexport const ProgressWarning = React.forwardRef<\n HTMLDivElement,\n Omit<ProgressProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Progress ref={ref} variant=\"warning\" dot={dotProp} {...props} />\n));\nProgressWarning.displayName = \"ProgressWarning\";\n\nexport const ProgressError = React.forwardRef<\n HTMLDivElement,\n Omit<ProgressProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Progress ref={ref} variant=\"error\" dot={dotProp} {...props} />\n));\nProgressError.displayName = \"ProgressError\";\n\nexport const ProgressInfo = React.forwardRef<\n HTMLDivElement,\n Omit<ProgressProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Progress ref={ref} variant=\"info\" dot={dotProp} {...props} />\n));\nProgressInfo.displayName = \"ProgressInfo\";\n\n// Composite Progress components\nexport const ProgressWrapper = React.forwardRef<\n HTMLDivElement,\n ProgressProps & { title?: string }\n>(({ title, dot: dotProp, style: styleProp, ...props }, ref) => {\n const wrapperStyle = useMemo(\n () =>\n mergeStyles(\n s(\"p-4 rounded-lg\"),\n {\n backgroundColor: \"var(--color-card)\",\n border: \"1px solid var(--color-border)\",\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n const titleStyle = useMemo(\n () =>\n mergeStyles(\n s(\"text-sm font-semibold text-[var(--color-foreground)]\"),\n resolveDot(\"mb-3\"),\n ),\n [],\n );\n\n return (\n <div style={wrapperStyle}>\n {title && <h3 style={titleStyle}>{title}</h3>}\n <Progress ref={ref} {...props} />\n </div>\n );\n});\nProgressWrapper.displayName = \"ProgressWrapper\";\n\nexport const ProgressGroup = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, children, ...props }, ref) => {\n const groupStyle = useMemo(\n () =>\n mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\" as const,\n ...resolveDot(\"gap-4\"),\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={groupStyle} {...props}>\n {children}\n </div>\n );\n});\nProgressGroup.displayName = \"ProgressGroup\";\n\nexport { Progress };\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { Icon } from \"./Icon\";\nimport { useTheme } from \"./ThemeProvider\";\n\n// ---- size tokens --------------------------------------------------------\n\nconst SIZE_STYLES: Record<\"sm\" | \"md\" | \"lg\", React.CSSProperties> = {\n sm: { height: 40, width: 40 },\n md: { height: 48, width: 48 },\n lg: { height: 56, width: 56 },\n};\n\nconst ICON_SIZES: Record<\"sm\" | \"md\" | \"lg\", number> = {\n sm: 16,\n md: 20,\n lg: 24,\n};\n\n// ---- shared base styles -------------------------------------------------\n\nconst BASE_BUTTON: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n outline: \"none\",\n ...resolveDot(\"rounded-lg\"),\n};\n\nconst HOVER_BG: React.CSSProperties = {\n backgroundColor: \"var(--color-muted)\",\n};\n\nconst FOCUS_RING: React.CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px var(--color-ring), 0 0 0 3px var(--color-ring)\",\n};\n\nconst SWITCH_BG_LIGHT: React.CSSProperties = {\n backgroundColor: \"var(--color-muted)\",\n};\n\nconst SWITCH_BG_DARK: React.CSSProperties = {\n backgroundColor: \"var(--color-primary)\",\n};\n\n/**\n * ThemeToggle component props\n */\nexport interface ThemeToggleProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n /** dot style utility string for the root element */\n dot?: string;\n /** Additional inline style for the root element */\n style?: React.CSSProperties;\n /** Toggle size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Toggle style variant */\n variant?: \"button\" | \"icon\" | \"switch\";\n /** Whether to show a text label */\n showLabel?: boolean;\n /** Custom label text */\n label?: {\n light?: string;\n dark?: string;\n system?: string;\n };\n}\n\n/**\n * ThemeToggle component\n *\n * Toggle component for switching between light/dark/system themes.\n * Used with ThemeProvider, supports light/dark/system themes.\n *\n * @example\n * // Basic usage (button style)\n * <ThemeToggle />\n *\n * @example\n * // Icon only\n * <ThemeToggle variant=\"icon\" size=\"lg\" />\n *\n * @example\n * // Switch style\n * <ThemeToggle variant=\"switch\" />\n *\n * @example\n * // With label\n * <ThemeToggle\n * showLabel\n * label={{ light: \"밝게\", dark: \"어둡게\" }}\n * />\n */\nexport function ThemeToggle({\n dot: dotProp,\n style,\n size = \"md\",\n variant = \"button\",\n showLabel = false,\n label = {\n light: \"라이트\",\n dark: \"다크\",\n system: \"시스템\",\n },\n ...props\n}: ThemeToggleProps) {\n const { theme, setTheme, resolvedTheme } = useTheme();\n const isDark = resolvedTheme === \"dark\";\n\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n // Compute all variant styles unconditionally (rules of hooks)\n const iconButtonStyle = useMemo(\n () =>\n mergeStyles(\n BASE_BUTTON,\n SIZE_STYLES[size],\n isHovered ? HOVER_BG : undefined,\n isFocused ? FOCUS_RING : undefined,\n resolveDot(dotProp),\n style,\n ),\n [size, isHovered, isFocused, dotProp, style],\n );\n\n const switchTrackStyle = useMemo(\n () =>\n mergeStyles(\n {\n position: \"relative\" as const,\n display: \"inline-flex\",\n height: 24,\n width: 44,\n alignItems: \"center\",\n borderRadius: 9999,\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 300ms ease\",\n outline: \"none\",\n },\n isDark ? SWITCH_BG_DARK : SWITCH_BG_LIGHT,\n isFocused ? FOCUS_RING : undefined,\n resolveDot(dotProp),\n style,\n ),\n [isDark, isFocused, dotProp, style],\n );\n\n const buttonStyle = useMemo(\n () =>\n mergeStyles(\n BASE_BUTTON,\n {\n fontSize: \"0.875rem\",\n fontWeight: 500,\n justifyContent: \"flex-start\",\n transition: \"background-color 300ms ease\",\n ...resolveDot(\"gap-3 pl-4 pr-4 pt-3 pb-3\"),\n },\n isHovered ? HOVER_BG : undefined,\n isFocused ? FOCUS_RING : undefined,\n resolveDot(dotProp),\n style,\n ),\n [isHovered, isFocused, dotProp, style],\n );\n\n const interactionHandlers = {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n };\n\n const handleClick = () => {\n if (theme === \"system\") {\n setTheme(\"light\");\n } else if (theme === \"light\") {\n setTheme(\"dark\");\n } else {\n // dark → light\n setTheme(\"light\");\n }\n };\n\n // ---- icon variant -------------------------------------------------------\n\n if (variant === \"icon\") {\n const moonStyle: React.CSSProperties = {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"transform 300ms ease, opacity 300ms ease\",\n transform: isDark ? \"rotate(0deg)\" : \"rotate(90deg)\",\n opacity: isDark ? 1 : 0,\n };\n\n const sunStyle: React.CSSProperties = {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"transform 300ms ease, opacity 300ms ease\",\n transform: isDark ? \"rotate(90deg)\" : \"rotate(0deg)\",\n opacity: isDark ? 0 : 1,\n };\n\n return (\n <button\n onClick={handleClick}\n style={iconButtonStyle}\n {...interactionHandlers}\n {...props}\n >\n <div\n style={{\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <div style={moonStyle}>\n <Icon\n name=\"moon\"\n size={ICON_SIZES[size]}\n dot=\"text-[rgb(99,102,241)]\"\n />\n </div>\n <div style={sunStyle}>\n <Icon\n name=\"sun\"\n size={ICON_SIZES[size]}\n dot={isDark ? \"text-[rgb(234,179,8)]\" : \"text-[rgb(217,119,6)]\"}\n />\n </div>\n </div>\n </button>\n );\n }\n\n // ---- switch variant -----------------------------------------------------\n\n if (variant === \"switch\") {\n const thumbStyle: React.CSSProperties = {\n display: \"inline-block\",\n height: 16,\n width: 16,\n borderRadius: \"50%\",\n backgroundColor: \"white\",\n boxShadow:\n \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",\n transition: \"transform 300ms ease\",\n transform: isDark ? \"translateX(24px)\" : \"translateX(4px)\",\n };\n\n return (\n <button\n onClick={handleClick}\n style={switchTrackStyle}\n {...interactionHandlers}\n {...props}\n >\n <span style={thumbStyle} />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"pl-1.5 pr-1.5\"),\n }}\n >\n <Icon name=\"sun\" size={12} dot=\"text-[rgb(217,119,6)] opacity-0\" />\n <Icon name=\"moon\" size={12} dot=\"text-[rgb(99,102,241)] opacity-0\" />\n </div>\n </button>\n );\n }\n\n // ---- default button variant --------------------------------------------\n\n const renderIcon = () => {\n if (theme === \"system\") {\n return <Icon name=\"monitor\" size={ICON_SIZES[size]} />;\n }\n return resolvedTheme === \"dark\" ? (\n <Icon name=\"moon\" size={ICON_SIZES[size]} />\n ) : (\n <Icon name=\"sun\" size={ICON_SIZES[size]} dot=\"text-[rgb(217,119,6)]\" />\n );\n };\n\n return (\n <button\n onClick={handleClick}\n style={buttonStyle}\n {...interactionHandlers}\n {...props}\n >\n {renderIcon()}\n {showLabel && (\n <span style={{ color: \"var(--color-foreground)\" }}>\n {theme === \"system\"\n ? label.system\n : theme === \"dark\"\n ? label.dark\n : label.light}\n </span>\n )}\n </button>\n );\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {a,e as e$1,b}from'./chunk-CYAAAEPJ.mjs';import {a as a$1}from'./chunk-JY3QVUGW.mjs';import {m}from'./chunk-NSDWT2JM.mjs';import {e,d}from'./chunk-OBMOTQEU.mjs';import k from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var R=({label:d,onClick:p,href:n,icon:a,appearance:e$1="secondary",loading:c})=>{let l=jsxs(Fragment,{children:[a&&(typeof a=="string"?jsx(m,{name:a,dot:"w-4 h-4"}):a),jsx("span",{children:d})]}),s={display:"inline-flex",alignItems:"center",...e("gap-2"),...e("rounded-lg"),...e("px-3 py-2"),fontSize:"0.875rem",fontWeight:500,transition:"colors 150ms",cursor:"pointer",border:"none",background:"transparent",...e$1==="primary"&&{backgroundColor:"var(--color-primary, #6366f1)",color:"#ffffff"},...e$1==="secondary"&&{border:"1px solid #e2e8f0",color:"#1e293b",backgroundColor:"#ffffff"},...e$1==="ghost"&&{color:"#475569"}};return n?jsx("a",{style:s,href:n,children:l}):jsx("button",{style:s,onClick:p,disabled:c,children:l})},N=k.forwardRef(({title:d$1,description:p,meta:n,variant:a$2="cards",dateRange:e$2,filters:c,actions:l,onRefresh:s,lastUpdated:m$1,dot:h,style:w,...C},S)=>{var y;let T={width:"100%",...a$2==="cards"&&{...e("rounded-xl"),border:"1px solid rgba(226,232,240,0.7)",backgroundColor:"var(--color-card, #ffffff)",boxShadow:"0 1px 3px rgba(0,0,0,0.1)"}};return jsx("div",{ref:S,style:d(T,e(h),w),...C,children:jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-4"),...e("px-6 py-5")},children:[jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2")},children:[jsxs("div",{children:[d$1&&jsx("div",{style:{fontSize:"1.25rem",fontWeight:600,color:"var(--color-foreground, #0f172a)"},children:d$1}),p&&jsx("p",{style:{fontSize:"0.875rem",color:"var(--color-muted-foreground, #64748b)"},children:p})]}),jsxs("div",{style:{display:"flex",flexWrap:"wrap",...e("gap-2")},children:[e$2&&jsx(a,{trigger:jsxs(a$1,{variant:"outline",size:"sm",dot:"gap-2","aria-label":`\uB0A0\uC9DC \uBC94\uC704 \uC120\uD0DD: ${e$2.display||"\uB0A0\uC9DC \uBC94\uC704"}`,children:[jsx(m,{name:"calendar",dot:"w-4 h-4"}),e$2.display||"\uB0A0\uC9DC \uBC94\uC704"]}),children:jsxs(e$1,{style:{maxHeight:"16rem",overflowY:"auto"},children:[(y=e$2.presets)==null?void 0:y.map(i=>jsx(b,{onClick:()=>{var g;return (g=e$2.onSelectPreset)==null?void 0:g.call(e$2,i)},children:i.label},i.value)),e$2.onCustomRange&&jsx(b,{onClick:e$2.onCustomRange,children:"\uC0AC\uC6A9\uC790 \uC9C0\uC815..."})]})}),s&&jsxs(a$1,{variant:"ghost",size:"sm",dot:"gap-2 text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white",onClick:s,"aria-label":"\uB370\uC774\uD130 \uC0C8\uB85C\uACE0\uCE68",children:[jsx(m,{name:"refresh",dot:"w-4 h-4"}),"\uC0C8\uB85C\uACE0\uCE68"]})]})]}),(c||n||m$1)&&jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-3 pt-3"),borderTop:"1px solid var(--color-border, #f1f5f9)"},children:[jsxs("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",...e("gap-3"),fontSize:"0.875rem",color:"var(--color-foreground, #475569)"},children:[c,n]}),m$1&&jsxs("span",{style:{fontSize:"0.75rem",color:"#94a3b8"},children:["\uC5C5\uB370\uC774\uD2B8: ",m$1]})]}),l&&l.length>0&&jsx("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"flex-end",...e("gap-2 pt-4"),borderTop:"1px solid var(--color-border, #f1f5f9)"},children:l.map(i=>jsx(R,{...i},i.label))})]})})});N.displayName="DashboardToolbar";export{N as a};//# sourceMappingURL=chunk-HLBIIF4I.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-HLBIIF4I.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/dashboard/DashboardToolbar.tsx"],"names":["ToolbarButton","label","onClick","href","icon","appearance","loading","content","jsxs","Fragment","jsx","Icon","baseStyle","resolveDot","DashboardToolbar","React","title","description","meta","variant","dateRange","filters","actions","onRefresh","lastUpdated","dot","style","props","ref","_a","containerStyle","mergeStyles","Dropdown","Button","DropdownMenu","preset","DropdownItem","action"],"mappings":"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","file":"chunk-HLBIIF4I.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Button } from \"../Button\";\nimport { Dropdown, DropdownItem, DropdownMenu } from \"../Dropdown\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\n\ntype ToolbarVariant = \"plain\" | \"cards\";\n\n/**\n * 툴바 액션 인터페이스 / ToolbarAction interface\n * @typedef {Object} ToolbarAction\n * @property {string} label - 액션 라벨 / Action label\n * @property {() => void} [onClick] - 클릭 핸들러 / Click handler\n * @property {string} [href] - 링크 URL / Link URL\n * @property {IconName | React.ReactNode} [icon] - 아이콘 / Icon\n * @property {\"primary\" | \"secondary\" | \"ghost\"} [appearance=\"secondary\"] - 액션 스타일 / Action style\n * @property {boolean} [loading] - 로딩 상태 / Loading state\n */\nexport interface ToolbarAction {\n label: string;\n onClick?: () => void;\n href?: string;\n icon?: IconName | React.ReactNode;\n appearance?: \"primary\" | \"secondary\" | \"ghost\";\n loading?: boolean;\n}\n\n/**\n * 날짜 프리셋 인터페이스 / DatePreset interface\n * @typedef {Object} DatePreset\n * @property {string} label - 프리셋 라벨 / Preset label\n * @property {string} value - 프리셋 값 / Preset value\n */\nexport interface DatePreset {\n label: string;\n value: string;\n}\n\n/**\n * 날짜 범위 설정 인터페이스 / DateRangeConfig interface\n * @typedef {Object} DateRangeConfig\n * @property {{ from: Date; to: Date } | null} value - 날짜 범위 값 / Date range value\n * @property {DatePreset[]} [presets] - 날짜 프리셋 배열 / Date preset array\n * @property {(preset: DatePreset) => void} [onSelectPreset] - 프리셋 선택 핸들러 / Preset selection handler\n * @property {() => void} [onCustomRange] - 커스텀 범위 선택 핸들러 / Custom range selection handler\n * @property {string} [display] - 표시 텍스트 / Display text\n */\nexport interface DateRangeConfig {\n value: { from: Date; to: Date } | null;\n presets?: DatePreset[];\n onSelectPreset?: (preset: DatePreset) => void;\n onCustomRange?: () => void;\n display?: string;\n}\n\n/**\n * DashboardToolbar 컴포넌트의 props / DashboardToolbar component props\n * @typedef {Object} DashboardToolbarProps\n * @property {React.ReactNode} [title] - 툴바 제목 / Toolbar title\n * @property {React.ReactNode} [description] - 툴바 설명 / Toolbar description\n * @property {React.ReactNode} [meta] - 메타 정보 / Meta information\n * @property {\"plain\" | \"cards\"} [variant=\"cards\"] - 툴바 스타일 변형 / Toolbar style variant\n * @property {DateRangeConfig} [dateRange] - 날짜 범위 설정 / Date range configuration\n * @property {React.ReactNode} [filters] - 필터 컴포넌트 / Filter component\n * @property {ToolbarAction[]} [actions] - 액션 버튼 배열 / Action buttons array\n * @property {() => void} [onRefresh] - 새로고침 핸들러 / Refresh handler\n * @property {string} [lastUpdated] - 마지막 업데이트 시간 / Last updated time\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface DashboardToolbarProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"title\" | \"className\"\n> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n meta?: React.ReactNode;\n variant?: ToolbarVariant;\n dateRange?: DateRangeConfig;\n filters?: React.ReactNode;\n actions?: ToolbarAction[];\n onRefresh?: () => void;\n lastUpdated?: string;\n dot?: string;\n}\n\nconst ToolbarButton: React.FC<ToolbarAction> = ({\n label,\n onClick,\n href,\n icon,\n appearance = \"secondary\",\n loading,\n}) => {\n const content = (\n <>\n {icon &&\n (typeof icon === \"string\" ? (\n <Icon name={icon as IconName} dot=\"w-4 h-4\" />\n ) : (\n icon\n ))}\n <span>{label}</span>\n </>\n );\n\n const baseStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n ...resolveDot(\"rounded-lg\"),\n ...resolveDot(\"px-3 py-2\"),\n fontSize: \"0.875rem\",\n fontWeight: 500,\n transition: \"colors 150ms\",\n cursor: \"pointer\",\n border: \"none\",\n background: \"transparent\",\n ...(appearance === \"primary\" && {\n backgroundColor: \"var(--color-primary, #6366f1)\",\n color: \"#ffffff\",\n }),\n ...(appearance === \"secondary\" && {\n border: \"1px solid #e2e8f0\",\n color: \"#1e293b\",\n backgroundColor: \"#ffffff\",\n }),\n ...(appearance === \"ghost\" && {\n color: \"#475569\",\n }),\n };\n\n if (href) {\n return (\n <a style={baseStyle} href={href}>\n {content}\n </a>\n );\n }\n\n return (\n <button style={baseStyle} onClick={onClick} disabled={loading}>\n {content}\n </button>\n );\n};\n\n/**\n * DashboardToolbar 컴포넌트\n *\n * 대시보드 상단 툴바 컴포넌트입니다.\n * 제목, 설명, 필터, 날짜 범위 선택, 액션 버튼 등을 포함할 수 있습니다.\n *\n * Top toolbar component for dashboards.\n * Can include title, description, filters, date range selection, and action buttons.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <DashboardToolbar\n * title=\"거래 대시보드\"\n * description=\"전체 거래 현황을 확인하세요\"\n * actions={[\n * { label: \"내보내기\", icon: \"download\", onClick: handleExport },\n * { label: \"필터\", icon: \"funnel\", onClick: handleFilter }\n * ]}\n * onRefresh={handleRefresh}\n * />\n *\n * @example\n * // 날짜 범위 포함 / With date range\n * <DashboardToolbar\n * title=\"매출 분석\"\n * dateRange={{\n * value: { from: new Date(\"2024-01-01\"), to: new Date(\"2024-12-31\") },\n * presets: [\n * { label: \"오늘\", value: \"today\" },\n * { label: \"이번 주\", value: \"thisWeek\" },\n * { label: \"이번 달\", value: \"thisMonth\" }\n * ],\n * onSelectPreset: handlePresetSelect,\n * onCustomRange: handleCustomRange\n * }}\n * />\n *\n * @param {DashboardToolbarProps} props - DashboardToolbar 컴포넌트의 props / DashboardToolbar component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} DashboardToolbar 컴포넌트 / DashboardToolbar component\n */\nexport const DashboardToolbar = React.forwardRef<\n HTMLDivElement,\n DashboardToolbarProps\n>(\n (\n {\n title,\n description,\n meta,\n variant = \"cards\",\n dateRange,\n filters,\n actions,\n onRefresh,\n lastUpdated,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const containerStyle: React.CSSProperties = {\n width: \"100%\",\n ...(variant === \"cards\" && {\n ...resolveDot(\"rounded-xl\"),\n border: \"1px solid rgba(226,232,240,0.7)\",\n backgroundColor: \"var(--color-card, #ffffff)\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.1)\",\n }),\n };\n\n return (\n <div\n ref={ref}\n style={mergeStyles(containerStyle, resolveDot(dot), style)}\n {...props}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-4\"),\n ...resolveDot(\"px-6 py-5\"),\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <div>\n {title && (\n <div\n style={{\n fontSize: \"1.25rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {title}\n </div>\n )}\n {description && (\n <p\n style={{\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground, #64748b)\",\n }}\n >\n {description}\n </p>\n )}\n </div>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n {dateRange && (\n <Dropdown\n trigger={\n <Button\n variant=\"outline\"\n size=\"sm\"\n dot=\"gap-2\"\n aria-label={`날짜 범위 선택: ${dateRange.display || \"날짜 범위\"}`}\n >\n <Icon name=\"calendar\" dot=\"w-4 h-4\" />\n {dateRange.display || \"날짜 범위\"}\n </Button>\n }\n >\n <DropdownMenu\n style={{ maxHeight: \"16rem\", overflowY: \"auto\" }}\n >\n {dateRange.presets?.map((preset) => (\n <DropdownItem\n key={preset.value}\n onClick={() => dateRange.onSelectPreset?.(preset)}\n >\n {preset.label}\n </DropdownItem>\n ))}\n {dateRange.onCustomRange && (\n <DropdownItem onClick={dateRange.onCustomRange}>\n 사용자 지정...\n </DropdownItem>\n )}\n </DropdownMenu>\n </Dropdown>\n )}\n {onRefresh && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n dot=\"gap-2 text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white\"\n onClick={onRefresh}\n aria-label=\"데이터 새로고침\"\n >\n <Icon name=\"refresh\" dot=\"w-4 h-4\" />\n 새로고침\n </Button>\n )}\n </div>\n </div>\n\n {(filters || meta || lastUpdated) && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3 pt-3\"),\n borderTop: \"1px solid var(--color-border, #f1f5f9)\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3\"),\n fontSize: \"0.875rem\",\n color: \"var(--color-foreground, #475569)\",\n }}\n >\n {filters}\n {meta}\n </div>\n {lastUpdated && (\n <span style={{ fontSize: \"0.75rem\", color: \"#94a3b8\" }}>\n 업데이트: {lastUpdated}\n </span>\n )}\n </div>\n )}\n\n {actions && actions.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"flex-end\",\n ...resolveDot(\"gap-2 pt-4\"),\n borderTop: \"1px solid var(--color-border, #f1f5f9)\",\n }}\n >\n {actions.map((action) => (\n <ToolbarButton key={action.label} {...action} />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nDashboardToolbar.displayName = \"DashboardToolbar\";\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {a as a$1,i,j,e as e$1,g,h,f}from'./chunk-RICRFXFP.mjs';import {b,a}from'./chunk-LPHUWTQ2.mjs';import {d,e}from'./chunk-OBMOTQEU.mjs';import X,{useId,useState,useMemo}from'react';import {dotVariants,dot}from'@hua-labs/dot';import {jsx,jsxs}from'react/jsx-runtime';var B={borderColor:"var(--color-accent-foreground)",boxShadow:"0 1px 2px 0 rgba(0, 0, 0, 0.05)"},Fe={borderColor:"var(--color-foreground)"};var ae=dotVariants({base:"flex w-full border",variants:{variant:{default:"border-[var(--color-input)] bg-[var(--color-background)]",outline:"border-2 border-[var(--color-input)] bg-transparent",filled:"border-transparent bg-[var(--color-secondary)]/50",glass:""},rounded:{none:"rounded-none",sm:"rounded",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl",full:"rounded-full"},size:{sm:"h-8 px-2 py-1 text-sm",md:"h-10 px-3 py-2 text-sm",lg:"h-12 px-4 py-3 text-base"}},defaultVariants:{variant:"default",rounded:"md",size:"md"}}),se={glass:{color:"white",...b("light")}},ne=X.forwardRef(({dot:s,type:a$2,variant:l="default",rounded:d$1="md",size:e$1="md",error:i$1,success:c,style:u,leftIcon:S,id:m,...r},g$1)=>{var A;let y=useId(),I=m||y,[v,h$1]=useState(false),[b,P]=useState(false),p=r["aria-invalid"],C=i$1||(p!==void 0?p:false),x=(A=r.disabled)!=null?A:false,L=useMemo(()=>{let o=d({transition:a.normal},ae({variant:l,rounded:d$1,size:e$1}),se[l],S?{paddingLeft:e$1==="sm"?"32px":e$1==="lg"?"44px":"40px"}:void 0);if(x)return d(o,a$1,e(s),u);let t={};return v&&!b&&(t=B),b&&(C?t=g:c?t=h:t=f),b||(C?t=d(t,i):c&&(t=d(t,j))),d(o,t,e(s),u)},[l,d$1,e$1,v,b,x,C,c,s,u,S]),O=jsx("input",{type:a$2,id:I,style:L,ref:g$1,"aria-invalid":C||void 0,onMouseEnter:()=>h$1(true),onMouseLeave:()=>h$1(false),onFocus:o=>{var t;P(true),(t=r.onFocus)==null||t.call(r,o);},onBlur:o=>{var t;P(false),(t=r.onBlur)==null||t.call(r,o);},...r});return S?jsxs("div",{style:{position:"relative"},children:[jsx("div",{style:{position:"absolute",left:"12px",top:"50%",transform:"translateY(-50%)",color:"var(--color-muted-foreground)",pointerEvents:"none",zIndex:10},children:S}),O]}):O});ne.displayName="Input";var ue=s=>dot(s),Se=dotVariants({base:"text-sm font-medium leading-none",variants:{variant:{default:"text-[var(--color-foreground)]",glass:"text-white"}},defaultVariants:{variant:"default"}}),me={default:{color:"var(--color-muted-foreground)",cursor:"not-allowed"},glass:{color:"rgba(255, 255, 255, 0.5)",cursor:"not-allowed"}},pe={default:{color:"var(--color-destructive)"},glass:{color:"#f87171"}},fe=X.forwardRef(({children:s,required:a=false,error:l=false,disabled:d$1=false,variant:e$1="default",dot:i,style:c,...u},S)=>{let m=useMemo(()=>{let g=Se({variant:e$1});return d(g,l?pe[e$1]:void 0,d$1?me[e$1]:void 0,e(i),c)},[e$1,l,d$1,i,c]),r=useMemo(()=>ue(e$1==="glass"?"text-red-400 ml-1":"text-[var(--color-destructive)] ml-1"),[e$1]);return jsxs("label",{ref:S,style:m,"aria-required":a?true:void 0,...u,children:[s,a&&jsx("span",{style:r,"aria-label":"required field",children:"*"})]})});fe.displayName="Label";var Ce={display:"flex",alignItems:"flex-start",...e("gap-3")},be={position:"relative",display:"inline-flex",cursor:"pointer",alignItems:"center",borderRadius:"9999px",flexShrink:0,transition:a.bgBorder},Ee={pointerEvents:"none",position:"absolute",borderRadius:"9999px",backgroundColor:"white",boxShadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)",top:"50%",transform:"translateY(-50%)",transition:a.transform},ye={position:"absolute",width:1,height:1,overflow:"hidden",clip:"rect(0,0,0,0)",whiteSpace:"nowrap",borderWidth:0,padding:0,margin:-1},ve={sm:{width:"2.25rem",height:"1.25rem"},md:{width:"2.75rem",height:"1.5rem"},lg:{width:"3.5rem",height:"2rem"}},he={sm:{width:"1rem",height:"1rem"},md:{width:"1.25rem",height:"1.25rem"},lg:{width:"1.75rem",height:"1.75rem"}},xe={sm:{left:"0.125rem"},md:{left:"0.125rem"},lg:{left:"0.125rem"}},Te={sm:"translateY(-50%) translateX(1rem)",md:"translateY(-50%) translateX(1.25rem)",lg:"translateY(-50%) translateX(1.5rem)"},_e={sm:"translateY(-50%) translateX(0)",md:"translateY(-50%) translateX(0)",lg:"translateY(-50%) translateX(0)"},Ie={default:{backgroundColor:"var(--color-muted)"},outline:{backgroundColor:"transparent",border:"2px solid var(--color-input)"},filled:{backgroundColor:"var(--color-secondary)"},glass:{...b("light"),backgroundColor:"rgba(255, 255, 255, 0.20)",border:"1px solid rgba(255, 255, 255, 0.30)"}},Pe={default:{backgroundColor:"var(--color-primary)"},outline:{backgroundColor:"var(--color-primary)",border:"2px solid var(--color-primary)"},filled:{backgroundColor:"var(--color-primary)"},glass:{...b("light"),backgroundColor:"rgba(var(--color-primary-rgb, 99, 102, 241), 0.50)",border:"1px solid rgba(var(--color-primary-rgb, 99, 102, 241), 0.30)"}},Le={backgroundColor:"color-mix(in srgb, var(--color-destructive) 20%, transparent)"},Oe={backgroundColor:"var(--color-destructive)"},Ae={backgroundColor:"color-mix(in srgb, var(--color-success) 20%, transparent)"},He={backgroundColor:"var(--color-success)"},Me={cursor:"not-allowed",opacity:.5},we={display:"flex",flexDirection:"column"},ke={fontSize:"0.875rem",fontWeight:500,color:"var(--color-foreground)",cursor:"pointer"},Ne={fontSize:"0.875rem",color:"var(--color-muted-foreground)"},De=X.forwardRef(({variant:s="default",size:a="md",error:l=false,success:d$1=false,label:e$2,description:i,id:c,checked:u,defaultChecked:S=false,disabled:m,onChange:r,onFocus:g,onBlur:y,dot:I,style:v,...h},b)=>{let P=X.useId(),p=c||P,C=e$2?`${p}-label`:void 0,x=i?`${p}-description`:void 0,L=u!==void 0,[O,A]=useState(S),o=L?u:O,[t,M]=useState(false),G=f=>{L||A(f.target.checked),r==null||r(f);},Z=f=>{M(true),g==null||g(f);},$=f=>{M(false),y==null||y(f);},J=useMemo(()=>{let f=o?Pe[s]:Ie[s],j=l?o?Oe:Le:d$1?o?He:Ae:void 0;return d(be,ve[a],f,j,t?e$1:void 0,m?Me:void 0,e(I),v)},[s,a,o,l,d$1,t,m,I,v]),Q=useMemo(()=>d(Ee,he[a],xe[a],{transform:o?Te[a]:_e[a]}),[a,o]);return jsxs("div",{style:Ce,children:[jsxs("div",{style:{position:"relative",flexShrink:0},children:[jsx("input",{type:"checkbox",id:p,style:ye,ref:b,checked:o,disabled:m,"aria-checked":o,"aria-invalid":l,"aria-labelledby":e$2?C:void 0,"aria-describedby":x,role:"switch",onChange:G,onFocus:Z,onBlur:$,...h,"aria-label":e$2?void 0:h["aria-label"]}),jsx("label",{htmlFor:p,style:{display:"block",cursor:m?"not-allowed":"pointer"},children:jsx("div",{style:J,children:jsx("div",{style:Q})})})]}),(e$2||i)&&jsxs("div",{style:we,children:[e$2&&jsx("label",{htmlFor:p,id:C,style:ke,children:e$2}),i&&jsx("p",{id:x,style:Ne,children:i})]})]})});De.displayName="Switch";export{B as a,Fe as b,ne as c,fe as d,De as e};//# sourceMappingURL=chunk-I6NCGF6E.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-I6NCGF6E.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/styles/hover.ts","../src/components/Input.tsx","../src/components/Label.tsx","../src/components/Switch.tsx"],"names":["FORM_HOVER","CONTROL_HOVER_BORDER","inputVariantStyles","dotVariants","VARIANT_EXTRAS","createGlassStyle","Input","React","dotProp","type","variant","rounded","size","error","success","style","leftIcon","idProp","props","ref","_a","autoId","useId","id","isHovered","setIsHovered","useState","isFocused","setIsFocused","ariaInvalid","isInvalid","isDisabled","computedStyle","useMemo","base","mergeStyles","TRANSITIONS","DISABLED_INPUT","resolveDot","stateStyles","FORM_FOCUS_ERROR","FORM_FOCUS_SUCCESS","FORM_FOCUS_BASE","FORM_BORDER_ERROR","FORM_BORDER_SUCCESS","inputElement","jsx","e","jsxs","s","input","dotFn","labelVariantStyles","DISABLED_STYLE","ERROR_STYLE","Label","children","required","disabled","requiredStarStyle","WRAPPER_STYLE","TRACK_BASE","THUMB_BASE","SR_ONLY_STYLE","TRACK_SIZES","THUMB_SIZES","THUMB_OFFSET_UNCHECKED","THUMB_TRANSLATE_CHECKED","THUMB_TRANSLATE_UNCHECKED","VARIANT_UNCHECKED","VARIANT_CHECKED","STATE_UNCHECKED_ERROR","STATE_CHECKED_ERROR","STATE_UNCHECKED_SUCCESS","STATE_CHECKED_SUCCESS","DISABLED_TRACK","LABEL_META_WRAPPER","LABEL_STYLE","DESCRIPTION_STYLE","Switch","label","description","controlledChecked","defaultChecked","onChange","onFocus","onBlur","generatedId","switchId","labelId","descriptionId","isControlled","internalChecked","setInternalChecked","checked","handleChange","handleFocus","handleBlur","trackStyle","variantColor","stateColor","FOCUS_RING_CONTROL","thumbStyle"],"mappings":"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","file":"chunk-I6NCGF6E.mjs","sourcesContent":["/**\n * Shared hover style utilities for HUA-UI components\n */\n\nimport type { CSSProperties } from \"react\";\n\n/** Form input hover style (Input, Select, Textarea) */\nexport const FORM_HOVER: CSSProperties = {\n borderColor: \"var(--color-accent-foreground)\",\n boxShadow: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n};\n\n/** Control hover border — unchecked Checkbox */\nexport const CONTROL_HOVER_BORDER: CSSProperties = {\n borderColor: \"var(--color-foreground)\",\n};\n","\"use client\";\n\nimport React, { useState, useMemo, useId } from \"react\";\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { createGlassStyle } from \"../lib/styles/glass\";\nimport {\n FORM_FOCUS_BASE,\n FORM_FOCUS_ERROR,\n FORM_FOCUS_SUCCESS,\n FORM_BORDER_ERROR,\n FORM_BORDER_SUCCESS,\n FORM_DISABLED,\n} from \"../lib/styles/focus\";\nimport { FORM_HOVER } from \"../lib/styles/hover\";\nimport { TRANSITIONS } from \"../lib/styles/transition\";\nimport type { CSSProperties } from \"react\";\n\nconst s = (input: string) => dotFn(input) as CSSProperties;\n\nexport const inputVariantStyles = dotVariants({\n base: \"flex w-full border\",\n variants: {\n variant: {\n default: \"border-[var(--color-input)] bg-[var(--color-background)]\",\n outline: \"border-2 border-[var(--color-input)] bg-transparent\",\n filled: \"border-transparent bg-[var(--color-secondary)]/50\",\n glass: \"\",\n },\n rounded: {\n none: \"rounded-none\",\n sm: \"rounded\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n xl: \"rounded-xl\",\n full: \"rounded-full\",\n },\n size: {\n sm: \"h-8 px-2 py-1 text-sm\",\n md: \"h-10 px-3 py-2 text-sm\",\n lg: \"h-12 px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n rounded: \"md\",\n size: \"md\",\n },\n});\n\n/** Extra base styles per variant (can't be expressed as dot utilities) */\nconst VARIANT_EXTRAS: Record<string, CSSProperties> = {\n glass: {\n color: \"white\",\n ...createGlassStyle(\"light\"),\n },\n};\n\n/** All Input variants share the same focus ring (FORM_FOCUS_BASE) */\n\n/**\n * Input 컴포넌트의 props / Input component props\n */\nexport interface InputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"className\" | \"size\"\n> {\n variant?: \"default\" | \"outline\" | \"filled\" | \"glass\";\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n size?: \"sm\" | \"md\" | \"lg\";\n error?: boolean;\n success?: boolean;\n dot?: string;\n style?: CSSProperties;\n leftIcon?: React.ReactNode;\n}\n\n/**\n * Input 컴포넌트 / Input component\n *\n * 표준 HTML input 요소를 래핑한 스타일링된 입력 필드 컴포넌트입니다.\n *\n * @example\n * <Input type=\"text\" placeholder=\"이름을 입력하세요\" />\n * <Input type=\"email\" error placeholder=\"이메일\" />\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n dot: dotProp,\n type,\n variant = \"default\",\n rounded = \"md\",\n size = \"md\",\n error,\n success,\n style,\n leftIcon,\n id: idProp,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const id = idProp || autoId;\n\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const ariaInvalid = props[\"aria-invalid\" as keyof typeof props] as\n | boolean\n | undefined;\n const isInvalid =\n error || (ariaInvalid !== undefined ? ariaInvalid : false);\n const isDisabled = props.disabled ?? false;\n\n const computedStyle = useMemo(() => {\n const base = mergeStyles(\n { transition: TRANSITIONS.normal },\n inputVariantStyles({ variant, rounded, size }) as CSSProperties,\n VARIANT_EXTRAS[variant],\n leftIcon\n ? {\n paddingLeft:\n size === \"sm\" ? \"32px\" : size === \"lg\" ? \"44px\" : \"40px\",\n }\n : undefined,\n );\n\n if (isDisabled) {\n return mergeStyles(base, FORM_DISABLED, resolveDot(dotProp), style);\n }\n\n let stateStyles: CSSProperties = {};\n\n if (isHovered && !isFocused) {\n stateStyles = FORM_HOVER;\n }\n\n if (isFocused) {\n if (isInvalid) {\n stateStyles = FORM_FOCUS_ERROR;\n } else if (success) {\n stateStyles = FORM_FOCUS_SUCCESS;\n } else {\n stateStyles = FORM_FOCUS_BASE;\n }\n }\n\n // Error/success border (non-focus)\n if (!isFocused) {\n if (isInvalid) {\n stateStyles = mergeStyles(stateStyles, FORM_BORDER_ERROR);\n } else if (success) {\n stateStyles = mergeStyles(stateStyles, FORM_BORDER_SUCCESS);\n }\n }\n\n return mergeStyles(base, stateStyles, resolveDot(dotProp), style);\n }, [\n variant,\n rounded,\n size,\n isHovered,\n isFocused,\n isDisabled,\n isInvalid,\n success,\n dotProp,\n style,\n leftIcon,\n ]);\n\n const inputElement = (\n <input\n type={type}\n id={id}\n style={computedStyle}\n ref={ref}\n aria-invalid={isInvalid || undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={(e) => {\n setIsFocused(true);\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n setIsFocused(false);\n props.onBlur?.(e);\n }}\n {...props}\n />\n );\n\n if (leftIcon) {\n return (\n <div style={{ position: \"relative\" }}>\n <div\n style={{\n position: \"absolute\",\n left: \"12px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n color: \"var(--color-muted-foreground)\",\n pointerEvents: \"none\",\n zIndex: 10,\n }}\n >\n {leftIcon}\n </div>\n {inputElement}\n </div>\n );\n }\n\n return inputElement;\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\"\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\"\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties\n\nexport const labelVariantStyles = dotVariants(\n {\n base: \"text-sm font-medium leading-none\",\n variants: {\n variant: {\n default: \"text-[var(--color-foreground)]\",\n glass: \"text-white\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\n/** Disabled style per variant */\nconst DISABLED_STYLE: Record<string, React.CSSProperties> = {\n default: { color: 'var(--color-muted-foreground)', cursor: 'not-allowed' },\n glass: { color: 'rgba(255, 255, 255, 0.5)', cursor: 'not-allowed' },\n}\n\n/** Error style per variant */\nconst ERROR_STYLE: Record<string, React.CSSProperties> = {\n default: { color: 'var(--color-destructive)' },\n glass: { color: '#f87171' },\n}\n\n/**\n * Label component props\n */\nexport interface LabelProps extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'className'> {\n required?: boolean\n error?: boolean\n disabled?: boolean\n variant?: \"default\" | \"glass\"\n dot?: string\n style?: React.CSSProperties\n}\n\n/**\n * Label component\n *\n * A component for displaying form field labels.\n *\n * @example\n * <Label htmlFor=\"email\">Email</Label>\n * <Label required htmlFor=\"name\">Name</Label>\n * <Label error htmlFor=\"password\">Password</Label>\n */\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({\n children,\n required = false,\n error = false,\n disabled = false,\n variant = \"default\",\n dot: dotProp,\n style,\n ...props\n }, ref) => {\n const computedStyle = useMemo(() => {\n const base = labelVariantStyles({ variant }) as React.CSSProperties\n return mergeStyles(\n base,\n error ? ERROR_STYLE[variant] : undefined,\n disabled ? DISABLED_STYLE[variant] : undefined,\n resolveDot(dotProp),\n style,\n )\n }, [variant, error, disabled, dotProp, style])\n\n const requiredStarStyle = useMemo(() =>\n s(variant === \"glass\" ? \"text-red-400 ml-1\" : \"text-[var(--color-destructive)] ml-1\"),\n [variant]\n )\n\n return (\n <label\n ref={ref}\n style={computedStyle}\n aria-required={required ? true : undefined}\n {...props}\n >\n {children}\n {required && (\n <span style={requiredStarStyle} aria-label=\"required field\">*</span>\n )}\n </label>\n )\n }\n)\nLabel.displayName = \"Label\"\n\nexport { Label }\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { createGlassStyle } from \"../lib/styles/glass\";\nimport { FOCUS_RING_CONTROL } from \"../lib/styles/focus\";\nimport { TRANSITIONS } from \"../lib/styles/transition\";\n\n// ---------------------------------------------------------------------------\n// Static style constants\n// ---------------------------------------------------------------------------\n\nconst WRAPPER_STYLE: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n ...resolveDot(\"gap-3\"),\n};\n\nconst TRACK_BASE: React.CSSProperties = {\n position: \"relative\",\n display: \"inline-flex\",\n cursor: \"pointer\",\n alignItems: \"center\",\n borderRadius: \"9999px\",\n flexShrink: 0,\n transition: TRANSITIONS.bgBorder,\n};\n\nconst THUMB_BASE: React.CSSProperties = {\n pointerEvents: \"none\",\n position: \"absolute\",\n borderRadius: \"9999px\",\n backgroundColor: \"white\",\n boxShadow:\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: TRANSITIONS.transform,\n};\n\n// Screen-reader-only hidden input\nconst SR_ONLY_STYLE: React.CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n borderWidth: 0,\n padding: 0,\n margin: -1,\n};\n\n// Size definitions\ntype SizeKey = \"sm\" | \"md\" | \"lg\";\n\nconst TRACK_SIZES: Record<SizeKey, React.CSSProperties> = {\n sm: { width: \"2.25rem\", height: \"1.25rem\" },\n md: { width: \"2.75rem\", height: \"1.5rem\" },\n lg: { width: \"3.5rem\", height: \"2rem\" },\n};\n\nconst THUMB_SIZES: Record<SizeKey, React.CSSProperties> = {\n sm: { width: \"1rem\", height: \"1rem\" },\n md: { width: \"1.25rem\", height: \"1.25rem\" },\n lg: { width: \"1.75rem\", height: \"1.75rem\" },\n};\n\n// Thumb left offset (unchecked position): 2px gap from track edge\nconst THUMB_OFFSET_UNCHECKED: Record<SizeKey, React.CSSProperties> = {\n sm: { left: \"0.125rem\" },\n md: { left: \"0.125rem\" },\n lg: { left: \"0.125rem\" },\n};\n\n// Thumb translateX when checked: track width - thumb width - 2×offset\n// sm: 2.25rem - 1rem - 0.25rem = 1rem → 16px\n// md: 2.75rem - 1.25rem - 0.25rem = 1.25rem → 20px\n// lg: 3.5rem - 1.75rem - 0.25rem = 1.5rem → 24px\nconst THUMB_TRANSLATE_CHECKED: Record<SizeKey, string> = {\n sm: \"translateY(-50%) translateX(1rem)\",\n md: \"translateY(-50%) translateX(1.25rem)\",\n lg: \"translateY(-50%) translateX(1.5rem)\",\n};\n\nconst THUMB_TRANSLATE_UNCHECKED: Record<SizeKey, string> = {\n sm: \"translateY(-50%) translateX(0)\",\n md: \"translateY(-50%) translateX(0)\",\n lg: \"translateY(-50%) translateX(0)\",\n};\n\n// Variant colors (track background, unchecked / checked)\ntype VariantKey = \"default\" | \"outline\" | \"filled\" | \"glass\";\n\nconst VARIANT_UNCHECKED: Record<VariantKey, React.CSSProperties> = {\n default: { backgroundColor: \"var(--color-muted)\" },\n outline: {\n backgroundColor: \"transparent\",\n border: \"2px solid var(--color-input)\",\n },\n filled: { backgroundColor: \"var(--color-secondary)\" },\n glass: {\n ...createGlassStyle(\"light\"),\n backgroundColor: \"rgba(255, 255, 255, 0.20)\",\n border: \"1px solid rgba(255, 255, 255, 0.30)\",\n },\n};\n\nconst VARIANT_CHECKED: Record<VariantKey, React.CSSProperties> = {\n default: { backgroundColor: \"var(--color-primary)\" },\n outline: {\n backgroundColor: \"var(--color-primary)\",\n border: \"2px solid var(--color-primary)\",\n },\n filled: { backgroundColor: \"var(--color-primary)\" },\n glass: {\n ...createGlassStyle(\"light\"),\n backgroundColor: \"rgba(var(--color-primary-rgb, 99, 102, 241), 0.50)\",\n border: \"1px solid rgba(var(--color-primary-rgb, 99, 102, 241), 0.30)\",\n },\n};\n\n// State overrides (error / success)\nconst STATE_UNCHECKED_ERROR: React.CSSProperties = {\n backgroundColor:\n \"color-mix(in srgb, var(--color-destructive) 20%, transparent)\",\n};\nconst STATE_CHECKED_ERROR: React.CSSProperties = {\n backgroundColor: \"var(--color-destructive)\",\n};\nconst STATE_UNCHECKED_SUCCESS: React.CSSProperties = {\n backgroundColor: \"color-mix(in srgb, var(--color-success) 20%, transparent)\",\n};\nconst STATE_CHECKED_SUCCESS: React.CSSProperties = {\n backgroundColor: \"var(--color-success)\",\n};\n\n// Focus ring — imported from shared focus.ts\n\n// Disabled styles\nconst DISABLED_TRACK: React.CSSProperties = {\n cursor: \"not-allowed\",\n opacity: 0.5,\n};\n\n// Label + description\nconst LABEL_META_WRAPPER: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n};\n\nconst LABEL_STYLE: React.CSSProperties = {\n fontSize: \"0.875rem\",\n fontWeight: 500,\n color: \"var(--color-foreground)\",\n cursor: \"pointer\",\n};\n\nconst DESCRIPTION_STYLE: React.CSSProperties = {\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground)\",\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Switch 컴포넌트의 props / Switch component props\n * @typedef {Object} SwitchProps\n * @property {\"default\" | \"outline\" | \"filled\" | \"glass\"} [variant=\"default\"] - Switch 스타일 변형 / Switch style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Switch 크기 / Switch size\n * @property {boolean} [error=false] - 에러 상태 표시 / Error state\n * @property {boolean} [success=false] - 성공 상태 표시 / Success state\n * @property {string} [label] - 스위치 레이블 텍스트 / Switch label text\n * @property {string} [description] - 스위치 설명 텍스트 / Switch description text\n * @property {string} [dot] - dot 유틸리티 문자열 / dot utility string\n * @extends {Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'className'>}\n */\nexport interface SwitchProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"className\"\n> {\n variant?: VariantKey;\n size?: SizeKey;\n error?: boolean;\n success?: boolean;\n label?: string;\n description?: string;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * Switch 컴포넌트 / Switch component\n *\n * 토글 스위치 입력 필드를 제공하는 컴포넌트입니다.\n * ARIA 속성을 자동으로 설정하여 접근성을 지원합니다.\n *\n * Toggle switch input field component.\n * Automatically sets ARIA attributes for accessibility support.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Switch label=\"알림 받기\" />\n *\n * @example\n * // 제어 컴포넌트 / Controlled component\n * const [enabled, setEnabled] = useState(false)\n * <Switch\n * checked={enabled}\n * onChange={(e) => setEnabled(e.target.checked)}\n * label=\"다크 모드\"\n * />\n *\n * @example\n * // 에러 상태 / Error state\n * <Switch\n * label=\"필수 설정\"\n * description=\"이 설정을 활성화해야 합니다\"\n * error\n * />\n *\n * @param {SwitchProps} props - Switch 컴포넌트의 props / Switch component props\n * @param {React.Ref<HTMLInputElement>} ref - input 요소 ref / input element ref\n * @returns {JSX.Element} Switch 컴포넌트 / Switch component\n */\nconst Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n variant = \"default\",\n size = \"md\",\n error = false,\n success = false,\n label,\n description,\n id,\n checked: controlledChecked,\n defaultChecked = false,\n disabled,\n onChange,\n onFocus,\n onBlur,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const switchId = id || generatedId;\n const labelId = label ? `${switchId}-label` : undefined;\n const descriptionId = description ? `${switchId}-description` : undefined;\n\n // Controlled vs uncontrolled\n const isControlled = controlledChecked !== undefined;\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const checked = isControlled ? controlledChecked : internalChecked;\n\n // Focus state for ring\n const [isFocused, setIsFocused] = useState(false);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n // Computed track style\n const trackStyle = useMemo((): React.CSSProperties => {\n const variantColor = checked\n ? VARIANT_CHECKED[variant]\n : VARIANT_UNCHECKED[variant];\n\n const stateColor = error\n ? checked\n ? STATE_CHECKED_ERROR\n : STATE_UNCHECKED_ERROR\n : success\n ? checked\n ? STATE_CHECKED_SUCCESS\n : STATE_UNCHECKED_SUCCESS\n : undefined;\n\n return mergeStyles(\n TRACK_BASE,\n TRACK_SIZES[size],\n variantColor,\n stateColor,\n isFocused ? FOCUS_RING_CONTROL : undefined,\n disabled ? DISABLED_TRACK : undefined,\n resolveDot(dotProp),\n style,\n );\n }, [\n variant,\n size,\n checked,\n error,\n success,\n isFocused,\n disabled,\n dotProp,\n style,\n ]);\n\n // Computed thumb style\n const thumbStyle = useMemo((): React.CSSProperties => {\n return mergeStyles(\n THUMB_BASE,\n THUMB_SIZES[size],\n THUMB_OFFSET_UNCHECKED[size],\n {\n transform: checked\n ? THUMB_TRANSLATE_CHECKED[size]\n : THUMB_TRANSLATE_UNCHECKED[size],\n },\n );\n }, [size, checked]);\n\n return (\n <div style={WRAPPER_STYLE}>\n <div style={{ position: \"relative\", flexShrink: 0 }}>\n {/* Hidden real checkbox — stays accessible for keyboard/form */}\n <input\n type=\"checkbox\"\n id={switchId}\n style={SR_ONLY_STYLE}\n ref={ref}\n checked={checked}\n disabled={disabled}\n aria-checked={checked}\n aria-invalid={error}\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={descriptionId}\n role=\"switch\"\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n aria-label={!label ? props[\"aria-label\"] : undefined}\n />\n {/* Visual track — clicking this toggles the hidden input via label linkage */}\n <label\n htmlFor={switchId}\n style={{\n display: \"block\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n }}\n >\n <div style={trackStyle}>\n <div style={thumbStyle} />\n </div>\n </label>\n </div>\n {(label || description) && (\n <div style={LABEL_META_WRAPPER}>\n {label && (\n <label htmlFor={switchId} id={labelId} style={LABEL_STYLE}>\n {label}\n </label>\n )}\n {description && (\n <p id={descriptionId} style={DESCRIPTION_STYLE}>\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n },\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {a as a$1}from'./chunk-DABVKUJN.mjs';import {m}from'./chunk-NSDWT2JM.mjs';import {d,e}from'./chunk-OBMOTQEU.mjs';import a from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var Se=72,xe=264,we=a.forwardRef(({logo:Y,productSwitcher:_,sections:d$1,footerActions:P,isCollapsed:w,defaultCollapsed:X=false,onToggleCollapsed:b,collapsedWidth:q=Se,expandedWidth:G=xe,mobileBreakpoint:k=1024,overlayBackground:J="rgba(15, 23, 42, 0.45)",variant:u="default",hideToggle:K=false,itemDot:g,activeDot:m$1,itemClassName:Q,activeClassName:V,isMobileOpen:v,onMobileOpenChange:h,hideMobileToggle:Z=false,pinnedItems:y,defaultPinnedItems:C,onPinnedChange:S,dot:$,style:ee,...te},oe)=>{let R=g!=null?g:Q,I=m$1!=null?m$1:V,[re,ne]=a.useState(X),[ae,ie]=a.useState(false),[x,se]=a.useState(false),[N,L]=a.useState(false),[de,D]=a.useState(null),[le,ce]=a.useState(()=>{let e=new Set;for(let o of d$1)o.defaultCollapsed&&e.add(o.id);return e}),[pe,fe]=a.useState(()=>{if(C)return new Set(C);let e=d$1[0];return e?new Set(e.items.map(o=>o.id)):new Set}),r=typeof w=="boolean"?w:re,E=y?new Set(y):pe,be=e=>{let o=new Set(E);o.has(e)?o.delete(e):o.add(e),y||fe(o),S==null||S(Array.from(o));},M=e=>E.has(e),ue=e=>{ce(o=>{let i=new Set(o);return i.has(e)?i.delete(e):i.add(e),i});},ge=typeof v=="boolean"?v:ae,l=e=>{h==null||h(e),typeof v!="boolean"&&ie(e);};a.useEffect(()=>{let e=()=>se(window.innerWidth<=k);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[k]);let me=()=>{let e=!r;ne(e),b==null||b(e);},T=r?q:G,A=e$1=>{let o=M(e$1.id),i=de===e$1.id,ve=I?e(I):{backgroundColor:"var(--color-accent, #eef2ff)",color:"var(--color-accent-foreground, #4338ca)"},he=R?e(R):{color:"var(--color-muted-foreground, #475569)"},H={display:"flex",width:"100%",alignItems:"center",justifyContent:r?"center":void 0,borderRadius:"0.5rem",paddingLeft:r?"0.5rem":"0.75rem",paddingRight:r?"0.5rem":"0.75rem",paddingTop:"0.5rem",paddingBottom:"0.5rem",fontSize:"0.875rem",fontWeight:500,transition:"background-color 150ms",cursor:"pointer",border:"none",textAlign:"left",background:"transparent",textDecoration:"none",...e$1.active?ve:he},B=jsxs(Fragment,{children:[e$1.icon&&jsx("span",{style:{marginRight:r?0:"0.75rem",flexShrink:0},children:typeof e$1.icon=="string"?jsx(m,{name:e$1.icon,dot:"h-5 w-5",variant:"inherit"}):e$1.icon}),!r&&jsxs(Fragment,{children:[jsx("span",{style:{flex:1,textAlign:"left",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e$1.label}),e$1.badge&&!i&&jsx("span",{style:{fontSize:"0.75rem",color:"var(--color-muted-foreground, #94a3b8)",flexShrink:0},children:e$1.badge})]})]}),W=()=>{x&&l(false);},ye=c=>jsxs("div",{style:{position:"relative"},onMouseEnter:()=>D(e$1.id),onMouseLeave:()=>D(null),children:[c,!r&&(o||i)&&jsx("button",{type:"button",onClick:O=>{O.preventDefault(),O.stopPropagation(),be(e$1.id);},"aria-label":o?"Unpin":"Pin",style:{position:"absolute",right:"0.5rem",top:"50%",transform:"translateY(-50%)",display:"inline-flex",alignItems:"center",justifyContent:"center",width:"1.25rem",height:"1.25rem",borderRadius:"0.25rem",border:"none",background:"transparent",color:o?"var(--color-accent-foreground, #4338ca)":"var(--color-muted-foreground, #94a3b8)",cursor:"pointer",opacity:o?.8:.4},children:jsx(m,{name:"bookmark",dot:"h-3 w-3"})})]},e$1.id),j=e$1.href?jsx("a",{href:e$1.href,style:H,"aria-current":e$1.active?"page":void 0,onClick:W,children:B}):jsx("button",{type:"button",onClick:()=>{var c;(c=e$1.onClick)==null||c.call(e$1),W();},style:H,"aria-pressed":e$1.active,children:B});return r?jsx(a$1,{content:e$1.label,children:j},e$1.id):ye(j)},z=jsxs("aside",{ref:oe,role:"navigation","aria-label":"Dashboard navigation",style:d({position:"relative",display:"flex",height:"100%",flexDirection:"column",overflow:"hidden",paddingLeft:"0.75rem",paddingRight:"0.75rem",paddingTop:"1rem",paddingBottom:"1rem",transition:"width 200ms",width:T,minWidth:T,borderRight:u==="transparent"?"1px solid var(--color-border, rgba(226, 232, 240, 0.4))":"1px solid var(--color-border, rgba(226, 232, 240, 0.6))",backgroundColor:u==="transparent"?void 0:"var(--color-background, rgba(255, 255, 255, 0.95))",boxShadow:u==="transparent"?void 0:"0 1px 3px rgba(0,0,0,0.1)"},e($),ee),...te,children:[jsxs("div",{style:{marginBottom:"1.5rem",display:"flex",alignItems:"center",justifyContent:r?"center":"flex-start",gap:"0.5rem",paddingLeft:"0.25rem",paddingRight:"0.25rem",overflow:"hidden",whiteSpace:"nowrap"},children:[Y,!r&&_]}),jsx("div",{style:{flex:1,overflowY:r?"hidden":"auto"},children:r?jsx("nav",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:d$1.flatMap(e=>e.items).filter(e=>M(e.id)||e.active).map(A)}):d$1.map(e=>{let o=le.has(e.id);return jsxs("div",{style:{marginBottom:"1.5rem"},children:[e.label&&jsxs("button",{type:"button",onClick:()=>ue(e.id),style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",padding:"0.25rem 0.75rem",fontSize:"0.75rem",fontWeight:500,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--color-muted-foreground, #94a3b8)",marginBottom:o?0:"0.5rem",background:"transparent",border:"none",cursor:"pointer",textAlign:"left",borderRadius:"0.25rem"},"aria-expanded":!o,children:[jsx("span",{children:e.label}),jsx(m,{name:o?"chevronRight":"chevronDown",dot:"h-3 w-3",style:{opacity:.5}})]}),!o&&jsx("nav",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},"aria-label":e.label||"Navigation",children:e.items.map(A)})]},e.id)})}),jsxs("div",{style:{marginTop:"1rem",borderTop:"1px solid var(--color-border, #f1f5f9)",paddingTop:"1rem",overflow:"hidden"},children:[P,!r&&jsx("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",color:"var(--color-muted-foreground, #94a3b8)"},children:jsx("span",{children:"\xA9 HUA Labs"})})]}),!K&&!x&&jsx("button",{type:"button",onClick:me,onMouseEnter:()=>L(true),onMouseLeave:()=>L(false),"aria-label":r?"Expand sidebar":"Collapse sidebar","aria-expanded":!r,style:{position:"absolute",right:0,top:"50%",transform:"translate(50%, -50%)",display:"flex",alignItems:"center",justifyContent:"center",width:"1.25rem",height:"2.5rem",borderRadius:"0.5rem",border:"1px solid var(--color-border, #e2e8f0)",backgroundColor:N?"var(--color-accent, #f1f5f9)":"var(--color-background, #ffffff)",color:"var(--color-muted-foreground, #64748b)",cursor:"pointer",zIndex:10,transition:"background-color 150ms, opacity 150ms",opacity:N?1:.6,boxShadow:"0 1px 3px rgba(0,0,0,0.08)"},children:jsx(m,{name:r?"chevronRight":"chevronLeft",dot:"h-3 w-3"})})]});return jsx(Fragment,{children:x?jsxs(Fragment,{children:[!Z&&jsx("button",{style:{position:"fixed",top:"0.75rem",left:"0.75rem",zIndex:30,display:"inline-flex",height:"2.5rem",width:"2.5rem",alignItems:"center",justifyContent:"center",borderRadius:"0.75rem",border:"1px solid var(--color-border, #e2e8f0)",backgroundColor:"var(--color-background, #ffffff)",boxShadow:"0 4px 6px -1px rgba(0,0,0,0.1)",cursor:"pointer"},onClick:()=>l(true),children:jsx(m,{name:"menu",dot:"h-5 w-5"})}),ge&&jsxs("div",{style:{position:"fixed",inset:0,zIndex:40,display:"flex"},children:[jsx("div",{style:{position:"absolute",inset:0,backgroundColor:J},onClick:()=>l(false)}),jsxs("div",{style:{position:"relative",zIndex:50,height:"100%",backgroundColor:"var(--color-background, #ffffff)"},children:[z,jsx("button",{style:{position:"absolute",top:"1rem",right:"1rem",display:"inline-flex",height:"2.5rem",width:"2.5rem",alignItems:"center",justifyContent:"center",borderRadius:"0.75rem",color:"var(--color-muted-foreground, #64748b)",transition:"background-color 150ms",cursor:"pointer",border:"none",background:"transparent"},onClick:()=>l(false),children:jsx(m,{name:"close",dot:"h-5 w-5"})})]})]})]}):z})});we.displayName="DashboardSidebar";export{we as a};//# sourceMappingURL=chunk-J46VEBVF.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-J46VEBVF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/dashboard/DashboardSidebar.tsx"],"names":["DEFAULT_COLLAPSED","DEFAULT_EXPANDED","DashboardSidebar","React","logo","productSwitcher","sections","footerActions","isCollapsed","defaultCollapsed","onToggleCollapsed","collapsedWidth","expandedWidth","mobileBreakpoint","overlayBackground","variant","hideToggle","itemDotProp","activeDotProp","itemClassName","activeClassName","externalMobileOpen","onMobileOpenChange","hideMobileToggle","externalPinned","defaultPinnedItems","onPinnedChange","dot","style","props","ref","itemDot","activeDot","internalCollapsed","setInternalCollapsed","internalMobileOpen","setInternalMobileOpen","isMobile","setIsMobile","handleHovered","setHandleHovered","hoveredItemId","setHoveredItemId","collapsedSections","setCollapsedSections","initial","s","internalPinned","setInternalPinned","first","i","collapsed","pinnedSet","togglePin","itemId","next","isItemPinned","toggleSection","sectionId","prev","isMobileOpen","setIsMobileOpen","open","checkMobile","toggleCollapsed","widthStyle","renderItem","item","pinned","isHovered","activeStyle","resolveDot","defaultItemStyle","baseStyle","content","jsxs","Fragment","jsx","Icon","handleItemClick","wrapWithHover","node","e","itemNode","_a","Tooltip","sidebarContent","mergeStyles","section","isSectionCollapsed"],"mappings":"+LA8DA,IAAMA,EAAAA,CAAoB,EAAA,CACpBC,EAAAA,CAAmB,IAEZC,EAAAA,CAAmBC,CAAAA,CAAM,UAAA,CAIpC,CACE,CACE,IAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,EACA,QAAA,CAAAC,GAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CAAmB,KAAA,CACnB,kBAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CAAiBX,EAAAA,CACjB,aAAA,CAAAY,CAAAA,CAAgBX,EAAAA,CAChB,gBAAA,CAAAY,EAAmB,IAAA,CACnB,iBAAA,CAAAC,CAAAA,CAAoB,wBAAA,CACpB,QAAAC,CAAAA,CAAU,SAAA,CACV,UAAA,CAAAC,CAAAA,CAAa,MACb,OAAA,CAASC,CAAAA,CACT,SAAA,CAAWC,GAAAA,CACX,aAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,aAAcC,CAAAA,CACd,kBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,EAAmB,KAAA,CACnB,WAAA,CAAaC,CAAAA,CACb,kBAAA,CAAAC,EACA,cAAA,CAAAC,CAAAA,CACA,GAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,EAAAA,CACA,GAAGC,EACL,EACAC,EAAAA,GACG,CACH,IAAMC,CAAAA,CAAUd,GAAA,IAAA,CAAAA,CAAAA,CAAeE,CAAAA,CACzBa,CAAAA,CAAYd,KAAA,IAAA,CAAAA,GAAAA,CAAiBE,CAAAA,CAE7B,CAACa,EAAAA,CAAmBC,EAAoB,CAAA,CAC5C/B,CAAAA,CAAM,SAASM,CAAgB,CAAA,CAC3B,CAAC0B,EAAAA,CAAoBC,EAAqB,CAAA,CAAIjC,CAAAA,CAAM,QAAA,CAAS,KAAK,EAClE,CAACkC,CAAAA,CAAUC,EAAW,CAAA,CAAInC,CAAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAC9C,CAACoC,CAAAA,CAAeC,CAAgB,CAAA,CAAIrC,CAAAA,CAAM,SAAS,KAAK,CAAA,CACxD,CAACsC,EAAAA,CAAeC,CAAgB,CAAA,CAAIvC,CAAAA,CAAM,QAAA,CAC9C,IACF,EACM,CAACwC,EAAAA,CAAmBC,EAAoB,CAAA,CAAIzC,EAAM,QAAA,CAEtD,IAAM,CACN,IAAM0C,EAAU,IAAI,GAAA,CACpB,IAAA,IAAWC,CAAAA,IAAKxC,IACVwC,CAAAA,CAAE,gBAAA,EAAkBD,CAAAA,CAAQ,GAAA,CAAIC,CAAAA,CAAE,EAAE,CAAA,CAE1C,OAAOD,CACT,CAAC,CAAA,CACK,CAACE,EAAAA,CAAgBC,EAAiB,CAAA,CAAI7C,CAAAA,CAAM,QAAA,CAChD,IAAM,CACJ,GAAIsB,CAAAA,CAAoB,OAAO,IAAI,GAAA,CAAIA,CAAkB,CAAA,CAEzD,IAAMwB,EAAQ3C,GAAAA,CAAS,CAAC,CAAA,CACxB,OAAO2C,EAAQ,IAAI,GAAA,CAAIA,CAAAA,CAAM,KAAA,CAAM,IAAKC,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAC,CAAA,CAAI,IAAI,GAC7D,CACF,EACMC,CAAAA,CACJ,OAAO3C,CAAAA,EAAgB,SAAA,CAAYA,EAAcyB,EAAAA,CAC7CmB,CAAAA,CAAY5B,CAAAA,CAAiB,IAAI,IAAIA,CAAc,CAAA,CAAIuB,EAAAA,CAEvDM,EAAAA,CAAaC,CAAAA,EAAmB,CACpC,IAAMC,CAAAA,CAAO,IAAI,GAAA,CAAIH,CAAS,CAAA,CAC1BG,CAAAA,CAAK,IAAID,CAAM,CAAA,CAAGC,CAAAA,CAAK,MAAA,CAAOD,CAAM,CAAA,CACnCC,CAAAA,CAAK,GAAA,CAAID,CAAM,CAAA,CACf9B,CAAAA,EAAgBwB,EAAAA,CAAkBO,CAAI,EAC3C7B,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAiB,KAAA,CAAM,KAAK6B,CAAI,CAAA,EAClC,CAAA,CAEMC,CAAAA,CAAgBF,GAAmBF,CAAAA,CAAU,GAAA,CAAIE,CAAM,CAAA,CAEvDG,EAAAA,CAAiBC,CAAAA,EAAsB,CAC3Cd,EAAAA,CAAsBe,GAAS,CAC7B,IAAMJ,CAAAA,CAAO,IAAI,IAAII,CAAI,CAAA,CACzB,OAAIJ,CAAAA,CAAK,IAAIG,CAAS,CAAA,CAAGH,CAAAA,CAAK,MAAA,CAAOG,CAAS,CAAA,CACzCH,CAAAA,CAAK,GAAA,CAAIG,CAAS,CAAA,CAChBH,CACT,CAAC,EACH,EAEMK,EAAAA,CACJ,OAAOvC,CAAAA,EAAuB,SAAA,CAC1BA,EACAc,EAAAA,CACA0B,CAAAA,CAAmBC,CAAAA,EAAkB,CACzCxC,GAAA,IAAA,EAAAA,CAAAA,CAAqBwC,CAAAA,CAAAA,CACjB,OAAOzC,GAAuB,SAAA,EAAWe,EAAAA,CAAsB0B,CAAI,EACzE,EAEA3D,CAAAA,CAAM,SAAA,CAAU,IAAM,CACpB,IAAM4D,CAAAA,CAAc,IAClBzB,EAAAA,CAAY,MAAA,CAAO,UAAA,EAAczB,CAAgB,CAAA,CACnD,OAAAkD,GAAY,CACZ,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUA,CAAW,CAAA,CACtC,IAAM,MAAA,CAAO,mBAAA,CAAoB,SAAUA,CAAW,CAC/D,CAAA,CAAG,CAAClD,CAAgB,CAAC,CAAA,CAErB,IAAMmD,GAAkB,IAAM,CAC5B,IAAMT,CAAAA,CAAO,CAACJ,CAAAA,CACdjB,EAAAA,CAAqBqB,CAAI,CAAA,CACzB7C,GAAA,IAAA,EAAAA,CAAAA,CAAoB6C,CAAAA,EACtB,CAAA,CAEMU,CAAAA,CAAad,CAAAA,CAAYxC,CAAAA,CAAiBC,CAAAA,CAG1CsD,EAAcC,GAAAA,EAAyB,CAC3C,IAAMC,CAAAA,CAASZ,EAAaW,GAAAA,CAAK,EAAE,CAAA,CAC7BE,CAAAA,CAAY5B,KAAkB0B,GAAAA,CAAK,EAAA,CACnCG,EAAAA,CAAmCtC,CAAAA,CACrCuC,CAAAA,CAAWvC,CAAS,CAAA,CACpB,CACE,gBAAiB,8BAAA,CACjB,KAAA,CAAO,yCACT,CAAA,CACEwC,GAAwCzC,CAAAA,CAC1CwC,CAAAA,CAAWxC,CAAO,CAAA,CAClB,CAAE,KAAA,CAAO,wCAAyC,CAAA,CAChD0C,CAAAA,CAAiC,CACrC,OAAA,CAAS,MAAA,CACT,KAAA,CAAO,OACP,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgBtB,CAAAA,CAAY,SAAW,MAAA,CACvC,YAAA,CAAc,QAAA,CACd,WAAA,CAAaA,EAAY,QAAA,CAAW,SAAA,CACpC,YAAA,CAAcA,CAAAA,CAAY,QAAA,CAAW,SAAA,CACrC,UAAA,CAAY,QAAA,CACZ,cAAe,QAAA,CACf,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,IACZ,UAAA,CAAY,wBAAA,CACZ,MAAA,CAAQ,SAAA,CACR,OAAQ,MAAA,CACR,SAAA,CAAW,MAAA,CACX,UAAA,CAAY,aAAA,CACZ,cAAA,CAAgB,MAAA,CAChB,GAAIgB,IAAK,MAAA,CAASG,EAAAA,CAAcE,EAClC,CAAA,CAEME,EACJC,IAAAA,CAAAC,QAAAA,CAAA,CACG,QAAA,CAAA,CAAAT,IAAK,IAAA,EACJU,GAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CAAE,WAAA,CAAa1B,CAAAA,CAAY,CAAA,CAAI,SAAA,CAAW,WAAY,CAAE,CAAA,CAE9D,QAAA,CAAA,OAAOgB,GAAAA,CAAK,MAAS,QAAA,CACpBU,GAAAA,CAACC,CAAAA,CAAA,CACC,KAAMX,GAAAA,CAAK,IAAA,CACX,GAAA,CAAI,SAAA,CACJ,OAAA,CAAQ,SAAA,CACV,CAAA,CAEAA,GAAAA,CAAK,KAET,CAAA,CAED,CAAChB,CAAAA,EACAwB,IAAAA,CAAAC,SAAA,CACE,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CACC,MAAO,CACL,IAAA,CAAM,CAAA,CACN,SAAA,CAAW,MAAA,CACX,QAAA,CAAU,QAAA,CACV,YAAA,CAAc,WACd,UAAA,CAAY,QACd,CAAA,CAEC,QAAA,CAAAV,IAAK,KAAA,CACR,CAAA,CACCA,GAAAA,CAAK,KAAA,EAAS,CAACE,CAAAA,EACdQ,GAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,SAAA,CACV,KAAA,CAAO,yCACP,UAAA,CAAY,CACd,CAAA,CAEC,QAAA,CAAAV,IAAK,KAAA,CACR,CAAA,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAAA,CAGIY,EAAkB,IAAM,CACxB1C,CAAAA,EAAUwB,CAAAA,CAAgB,KAAK,EACrC,CAAA,CAEMmB,EAAAA,CAAiBC,GACrBN,IAAAA,CAAC,KAAA,CAAA,CAEC,KAAA,CAAO,CAAE,SAAU,UAAW,CAAA,CAC9B,YAAA,CAAc,IAAMjC,EAAiByB,GAAAA,CAAK,EAAE,CAAA,CAC5C,YAAA,CAAc,IAAMzB,CAAAA,CAAiB,IAAI,CAAA,CAExC,UAAAuC,CAAAA,CAEA,CAAC9B,CAAAA,GAAciB,CAAAA,EAAUC,IACxBQ,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAUK,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB7B,GAAUc,GAAAA,CAAK,EAAE,EACnB,CAAA,CACA,aAAYC,CAAAA,CAAS,OAAA,CAAU,KAAA,CAC/B,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,KAAA,CAAO,QAAA,CACP,GAAA,CAAK,KAAA,CACL,SAAA,CAAW,kBAAA,CACX,QAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,SAAA,CACR,aAAc,SAAA,CACd,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,cACZ,KAAA,CAAOA,CAAAA,CACH,yCAAA,CACA,wCAAA,CACJ,OAAQ,SAAA,CACR,OAAA,CAASA,CAAAA,CAAS,EAAA,CAAM,EAC1B,CAAA,CAEA,QAAA,CAAAS,GAAAA,CAACC,CAAAA,CAAA,CAAK,IAAA,CAAe,UAAA,CAAyB,GAAA,CAAI,SAAA,CAAU,CAAA,CAC9D,CAAA,CAAA,CAAA,CArCGX,GAAAA,CAAK,EAuCZ,EAGIgB,CAAAA,CAAWhB,GAAAA,CAAK,IAAA,CACpBU,GAAAA,CAAC,KACC,IAAA,CAAMV,GAAAA,CAAK,IAAA,CACX,KAAA,CAAOM,EACP,cAAA,CAAcN,GAAAA,CAAK,MAAA,CAAS,MAAA,CAAS,MAAA,CACrC,OAAA,CAASY,CAAAA,CAER,QAAA,CAAAL,EACH,CAAA,CAEAG,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,SACL,OAAA,CAAS,IAAM,CA5TzB,IAAAO,GA6TYA,CAAAA,CAAAjB,GAAAA,CAAK,OAAA,GAAL,IAAA,EAAAiB,CAAAA,CAAA,IAAA,CAAAjB,GAAAA,CAAAA,CACAY,CAAAA,GACF,CAAA,CACA,KAAA,CAAON,CAAAA,CACP,cAAA,CAAcN,IAAK,MAAA,CAElB,QAAA,CAAAO,CAAAA,CACH,CAAA,CAGF,OAAIvB,CAAAA,CAEA0B,GAAAA,CAACQ,GAAAA,CAAA,CAAsB,OAAA,CAASlB,GAAAA,CAAK,KAAA,CAClC,QAAA,CAAAgB,GADWhB,GAAAA,CAAK,EAEnB,CAAA,CAIGa,EAAAA,CAAcG,CAAQ,CAC/B,CAAA,CA4BMG,CAAAA,CACJX,IAAAA,CAAC,SACC,GAAA,CAAK7C,EAAAA,CACL,IAAA,CAAK,YAAA,CACL,YAAA,CAAW,sBAAA,CACX,KAAA,CAAOyD,CAAAA,CA9BmC,CAC5C,QAAA,CAAU,UAAA,CACV,OAAA,CAAS,MAAA,CACT,OAAQ,MAAA,CACR,aAAA,CAAe,QAAA,CACf,QAAA,CAAU,SACV,WAAA,CAAa,SAAA,CACb,YAAA,CAAc,SAAA,CACd,UAAA,CAAY,MAAA,CACZ,aAAA,CAAe,MAAA,CACf,WAAY,aAAA,CACZ,KAAA,CAAOtB,CAAAA,CACP,QAAA,CAAUA,EACV,WAAA,CACElD,CAAAA,GAAY,aAAA,CACR,yDAAA,CACA,0DACN,eAAA,CACEA,CAAAA,GAAY,aAAA,CACR,MAAA,CACA,oDAAA,CACN,SAAA,CACEA,CAAAA,GAAY,aAAA,CAAgB,OAAY,2BAC5C,CAAA,CAOyCwD,CAAAA,CAAW5C,CAAG,EAAGC,EAAK,CAAA,CAC1D,GAAGC,EAAAA,CAGJ,UAAA8C,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,aAAc,QAAA,CACd,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,SACZ,cAAA,CAAgBxB,CAAAA,CAAY,QAAA,CAAW,YAAA,CACvC,IAAK,QAAA,CACL,WAAA,CAAa,SAAA,CACb,YAAA,CAAc,UACd,QAAA,CAAU,QAAA,CACV,UAAA,CAAY,QACd,CAAA,CAEC,QAAA,CAAA,CAAA/C,CAAAA,CACA,CAAC+C,GAAa9C,CAAAA,CAAAA,CACjB,CAAA,CAGAwE,GAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,IAAA,CAAM,CAAA,CAAG,SAAA,CAAW1B,EAAY,QAAA,CAAW,MAAO,CAAA,CAC7D,QAAA,CAAAA,CAAAA,CAEC0B,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,IAAK,SACP,CAAA,CAEC,QAAA,CAAAvE,GAAAA,CACE,QAASwC,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAA,CACtB,MAAA,CAAQqB,CAAAA,EAASX,CAAAA,CAAaW,CAAAA,CAAK,EAAE,CAAA,EAAKA,CAAAA,CAAK,MAAM,CAAA,CACrD,IAAID,CAAU,CAAA,CACnB,CAAA,CAGA5D,GAAAA,CAAS,IAAKkF,CAAAA,EAAY,CACxB,IAAMC,CAAAA,CAAqB9C,EAAAA,CAAkB,GAAA,CAAI6C,CAAAA,CAAQ,EAAE,EAE3D,OACEb,IAAAA,CAAC,KAAA,CAAA,CAAqB,KAAA,CAAO,CAAE,YAAA,CAAc,QAAS,CAAA,CACnD,QAAA,CAAA,CAAAa,EAAQ,KAAA,EACPb,IAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMlB,EAAAA,CAAc+B,EAAQ,EAAE,CAAA,CACvC,KAAA,CAAO,CACL,QAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,gBAChB,KAAA,CAAO,MAAA,CACP,OAAA,CAAS,iBAAA,CACT,QAAA,CAAU,SAAA,CACV,UAAA,CAAY,GAAA,CACZ,cAAe,WAAA,CACf,aAAA,CAAe,QAAA,CACf,KAAA,CAAO,yCACP,YAAA,CAAcC,CAAAA,CAAqB,CAAA,CAAI,QAAA,CACvC,WAAY,aAAA,CACZ,MAAA,CAAQ,MAAA,CACR,MAAA,CAAQ,SAAA,CACR,SAAA,CAAW,MAAA,CACX,YAAA,CAAc,SAChB,CAAA,CACA,eAAA,CAAe,CAACA,CAAAA,CAEhB,UAAAZ,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAW,CAAAA,CAAQ,MAAM,CAAA,CACrBX,GAAAA,CAACC,CAAAA,CAAA,CACC,KACEW,CAAAA,CAAqB,cAAA,CAAiB,aAAA,CAExC,GAAA,CAAI,UACJ,KAAA,CAAO,CAAE,OAAA,CAAS,EAAI,EACxB,CAAA,CAAA,CACF,CAAA,CAGD,CAACA,CAAAA,EACAZ,IAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAA,CAAK,SACP,CAAA,CACA,YAAA,CAAYW,CAAAA,CAAQ,KAAA,EAAS,aAE5B,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAM,GAAA,CAAItB,CAAU,CAAA,CAC/B,CAAA,CAAA,CAAA,CA9CMsB,CAAAA,CAAQ,EAgDlB,CAEJ,CAAC,CAAA,CAEL,CAAA,CAGAb,KAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,SAAA,CAAW,OACX,SAAA,CAAW,wCAAA,CACX,UAAA,CAAY,MAAA,CACZ,SAAU,QACZ,CAAA,CAEC,QAAA,CAAA,CAAApE,CAAAA,CACA,CAAC4C,CAAAA,EACA0B,GAAAA,CAAC,KAAA,CAAA,CACC,MAAO,CACL,SAAA,CAAW,QAAA,CACX,QAAA,CAAU,UACV,KAAA,CAAO,wCACT,CAAA,CAEA,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,QAAA,CAAA,eAAA,CAAe,CAAA,CACvB,CAAA,CAAA,CAEJ,CAAA,CAGC,CAAC7D,CAAAA,EAAc,CAACqB,GACfwC,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAASb,EAAAA,CACT,YAAA,CAAc,IAAMxB,CAAAA,CAAiB,IAAI,CAAA,CACzC,YAAA,CAAc,IAAMA,CAAAA,CAAiB,KAAK,CAAA,CAC1C,YAAA,CAAYW,CAAAA,CAAY,iBAAmB,kBAAA,CAC3C,eAAA,CAAe,CAACA,CAAAA,CAChB,MAAO,CACL,QAAA,CAAU,UAAA,CACV,KAAA,CAAO,EACP,GAAA,CAAK,KAAA,CACL,SAAA,CAAW,sBAAA,CACX,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,SACR,YAAA,CAAc,QAAA,CACd,MAAA,CAAQ,wCAAA,CACR,gBAAiBZ,CAAAA,CACb,8BAAA,CACA,kCAAA,CACJ,KAAA,CAAO,wCAAA,CACP,MAAA,CAAQ,SAAA,CACR,MAAA,CAAQ,GACR,UAAA,CAAY,uCAAA,CACZ,OAAA,CAASA,CAAAA,CAAgB,EAAI,EAAA,CAC7B,SAAA,CAAW,4BACb,CAAA,CAEA,SAAAsC,GAAAA,CAACC,CAAAA,CAAA,CACC,IAAA,CAAM3B,EAAY,cAAA,CAAiB,aAAA,CACnC,GAAA,CAAI,SAAA,CACN,EACF,CAAA,CAAA,CAEJ,CAAA,CAIF,OACE0B,GAAAA,CAAAD,SAAA,CACG,QAAA,CAAAvC,CAAAA,CACCsC,IAAAA,CAAAC,SAAA,CACG,QAAA,CAAA,CAAA,CAACrD,CAAAA,EACAsD,GAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,QACV,GAAA,CAAK,SAAA,CACL,IAAA,CAAM,SAAA,CACN,OAAQ,EAAA,CACR,OAAA,CAAS,aAAA,CACT,MAAA,CAAQ,SACR,KAAA,CAAO,QAAA,CACP,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,YAAA,CAAc,SAAA,CACd,OAAQ,wCAAA,CACR,eAAA,CAAiB,kCAAA,CACjB,SAAA,CAAW,iCACX,MAAA,CAAQ,SACV,CAAA,CACA,OAAA,CAAS,IAAMhB,CAAAA,CAAgB,IAAI,CAAA,CAEnC,QAAA,CAAAgB,GAAAA,CAACC,CAAAA,CAAA,CAAK,IAAA,CAAK,OAAO,GAAA,CAAI,SAAA,CAAU,CAAA,CAClC,CAAA,CAEDlB,IACCe,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,SAAU,OAAA,CACV,KAAA,CAAO,CAAA,CACP,MAAA,CAAQ,GACR,OAAA,CAAS,MACX,CAAA,CAEA,QAAA,CAAA,CAAAE,IAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,WACV,KAAA,CAAO,CAAA,CACP,eAAA,CAAiB/D,CACnB,EACA,OAAA,CAAS,IAAM+C,CAAAA,CAAgB,KAAK,CAAA,CACtC,CAAA,CACAc,IAAAA,CAAC,KAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,UAAA,CACV,MAAA,CAAQ,GACR,MAAA,CAAQ,MAAA,CACR,eAAA,CAAiB,kCACnB,EAEC,QAAA,CAAA,CAAAW,CAAAA,CACDT,GAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,IAAK,MAAA,CACL,KAAA,CAAO,MAAA,CACP,OAAA,CAAS,cACT,MAAA,CAAQ,QAAA,CACR,KAAA,CAAO,QAAA,CACP,WAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,YAAA,CAAc,SAAA,CACd,KAAA,CAAO,wCAAA,CACP,UAAA,CAAY,yBACZ,MAAA,CAAQ,SAAA,CACR,MAAA,CAAQ,MAAA,CACR,WAAY,aACd,CAAA,CACA,OAAA,CAAS,IAAMhB,EAAgB,KAAK,CAAA,CAEpC,QAAA,CAAAgB,GAAAA,CAACC,EAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,CACnC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,EAEAQ,CAAAA,CAEJ,CAEJ,CACF,EAEApF,GAAiB,WAAA,CAAc,kBAAA","file":"chunk-J46VEBVF.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport { Tooltip } from \"../Tooltip\";\n\nexport interface SidebarNavItem {\n id: string;\n label: string;\n href?: string;\n icon?: IconName | React.ReactNode;\n badge?: React.ReactNode;\n active?: boolean;\n onClick?: () => void;\n}\n\nexport interface SidebarSection {\n id: string;\n label?: string;\n items: SidebarNavItem[];\n /** Default collapsed state for this section */\n defaultCollapsed?: boolean;\n}\n\nexport interface DashboardSidebarProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"className\"\n> {\n logo?: React.ReactNode;\n productSwitcher?: React.ReactNode;\n sections: SidebarSection[];\n footerActions?: React.ReactNode;\n isCollapsed?: boolean;\n defaultCollapsed?: boolean;\n onToggleCollapsed?: (collapsed: boolean) => void;\n collapsedWidth?: number;\n expandedWidth?: number;\n mobileBreakpoint?: number;\n overlayBackground?: string;\n variant?: \"default\" | \"transparent\";\n /** @deprecated Edge handle replaces toggle button */\n hideToggle?: boolean;\n itemDot?: string;\n activeDot?: string;\n /** @deprecated Use itemDot instead */\n itemClassName?: string;\n /** @deprecated Use activeDot instead */\n activeClassName?: string;\n isMobileOpen?: boolean;\n onMobileOpenChange?: (open: boolean) => void;\n hideMobileToggle?: boolean;\n /** Pinned item IDs — shown when sidebar is collapsed */\n pinnedItems?: string[];\n /** Default pinned items (used when pinnedItems is not controlled) */\n defaultPinnedItems?: string[];\n /** Called when pinned items change */\n onPinnedChange?: (pinnedIds: string[]) => void;\n dot?: string;\n}\n\nconst DEFAULT_COLLAPSED = 72;\nconst DEFAULT_EXPANDED = 264;\n\nexport const DashboardSidebar = React.forwardRef<\n HTMLElement,\n DashboardSidebarProps\n>(\n (\n {\n logo,\n productSwitcher,\n sections,\n footerActions,\n isCollapsed,\n defaultCollapsed = false,\n onToggleCollapsed,\n collapsedWidth = DEFAULT_COLLAPSED,\n expandedWidth = DEFAULT_EXPANDED,\n mobileBreakpoint = 1024,\n overlayBackground = \"rgba(15, 23, 42, 0.45)\",\n variant = \"default\",\n hideToggle = false,\n itemDot: itemDotProp,\n activeDot: activeDotProp,\n itemClassName,\n activeClassName,\n isMobileOpen: externalMobileOpen,\n onMobileOpenChange,\n hideMobileToggle = false,\n pinnedItems: externalPinned,\n defaultPinnedItems,\n onPinnedChange,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const itemDot = itemDotProp ?? itemClassName;\n const activeDot = activeDotProp ?? activeClassName;\n\n const [internalCollapsed, setInternalCollapsed] =\n React.useState(defaultCollapsed);\n const [internalMobileOpen, setInternalMobileOpen] = React.useState(false);\n const [isMobile, setIsMobile] = React.useState(false);\n const [handleHovered, setHandleHovered] = React.useState(false);\n const [hoveredItemId, setHoveredItemId] = React.useState<string | null>(\n null,\n );\n const [collapsedSections, setCollapsedSections] = React.useState<\n Set<string>\n >(() => {\n const initial = new Set<string>();\n for (const s of sections) {\n if (s.defaultCollapsed) initial.add(s.id);\n }\n return initial;\n });\n const [internalPinned, setInternalPinned] = React.useState<Set<string>>(\n () => {\n if (defaultPinnedItems) return new Set(defaultPinnedItems);\n // Smart default: pin first section's items\n const first = sections[0];\n return first ? new Set(first.items.map((i) => i.id)) : new Set();\n },\n );\n const collapsed =\n typeof isCollapsed === \"boolean\" ? isCollapsed : internalCollapsed;\n const pinnedSet = externalPinned ? new Set(externalPinned) : internalPinned;\n\n const togglePin = (itemId: string) => {\n const next = new Set(pinnedSet);\n if (next.has(itemId)) next.delete(itemId);\n else next.add(itemId);\n if (!externalPinned) setInternalPinned(next);\n onPinnedChange?.(Array.from(next));\n };\n\n const isItemPinned = (itemId: string) => pinnedSet.has(itemId);\n\n const toggleSection = (sectionId: string) => {\n setCollapsedSections((prev) => {\n const next = new Set(prev);\n if (next.has(sectionId)) next.delete(sectionId);\n else next.add(sectionId);\n return next;\n });\n };\n\n const isMobileOpen =\n typeof externalMobileOpen === \"boolean\"\n ? externalMobileOpen\n : internalMobileOpen;\n const setIsMobileOpen = (open: boolean) => {\n onMobileOpenChange?.(open);\n if (typeof externalMobileOpen !== \"boolean\") setInternalMobileOpen(open);\n };\n\n React.useEffect(() => {\n const checkMobile = () =>\n setIsMobile(window.innerWidth <= mobileBreakpoint);\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, [mobileBreakpoint]);\n\n const toggleCollapsed = () => {\n const next = !collapsed;\n setInternalCollapsed(next);\n onToggleCollapsed?.(next);\n };\n\n const widthStyle = collapsed ? collapsedWidth : expandedWidth;\n\n // ── Shared item renderer ──\n const renderItem = (item: SidebarNavItem) => {\n const pinned = isItemPinned(item.id);\n const isHovered = hoveredItemId === item.id;\n const activeStyle: React.CSSProperties = activeDot\n ? resolveDot(activeDot)\n : {\n backgroundColor: \"var(--color-accent, #eef2ff)\",\n color: \"var(--color-accent-foreground, #4338ca)\",\n };\n const defaultItemStyle: React.CSSProperties = itemDot\n ? resolveDot(itemDot)\n : { color: \"var(--color-muted-foreground, #475569)\" };\n const baseStyle: React.CSSProperties = {\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : undefined,\n borderRadius: \"0.5rem\",\n paddingLeft: collapsed ? \"0.5rem\" : \"0.75rem\",\n paddingRight: collapsed ? \"0.5rem\" : \"0.75rem\",\n paddingTop: \"0.5rem\",\n paddingBottom: \"0.5rem\",\n fontSize: \"0.875rem\",\n fontWeight: 500,\n transition: \"background-color 150ms\",\n cursor: \"pointer\",\n border: \"none\",\n textAlign: \"left\",\n background: \"transparent\",\n textDecoration: \"none\",\n ...(item.active ? activeStyle : defaultItemStyle),\n };\n\n const content = (\n <>\n {item.icon && (\n <span\n style={{ marginRight: collapsed ? 0 : \"0.75rem\", flexShrink: 0 }}\n >\n {typeof item.icon === \"string\" ? (\n <Icon\n name={item.icon as IconName}\n dot=\"h-5 w-5\"\n variant=\"inherit\"\n />\n ) : (\n item.icon\n )}\n </span>\n )}\n {!collapsed && (\n <>\n <span\n style={{\n flex: 1,\n textAlign: \"left\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n {item.badge && !isHovered && (\n <span\n style={{\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #94a3b8)\",\n flexShrink: 0,\n }}\n >\n {item.badge}\n </span>\n )}\n </>\n )}\n </>\n );\n\n const handleItemClick = () => {\n if (isMobile) setIsMobileOpen(false);\n };\n\n const wrapWithHover = (node: React.ReactElement) => (\n <div\n key={item.id}\n style={{ position: \"relative\" }}\n onMouseEnter={() => setHoveredItemId(item.id)}\n onMouseLeave={() => setHoveredItemId(null)}\n >\n {node}\n {/* Pin button — always visible when pinned, on hover when not */}\n {!collapsed && (pinned || isHovered) && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n togglePin(item.id);\n }}\n aria-label={pinned ? \"Unpin\" : \"Pin\"}\n style={{\n position: \"absolute\",\n right: \"0.5rem\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"1.25rem\",\n height: \"1.25rem\",\n borderRadius: \"0.25rem\",\n border: \"none\",\n background: \"transparent\",\n color: pinned\n ? \"var(--color-accent-foreground, #4338ca)\"\n : \"var(--color-muted-foreground, #94a3b8)\",\n cursor: \"pointer\",\n opacity: pinned ? 0.8 : 0.4,\n }}\n >\n <Icon name={pinned ? \"bookmark\" : \"bookmark\"} dot=\"h-3 w-3\" />\n </button>\n )}\n </div>\n );\n\n const itemNode = item.href ? (\n <a\n href={item.href}\n style={baseStyle}\n aria-current={item.active ? \"page\" : undefined}\n onClick={handleItemClick}\n >\n {content}\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={() => {\n item.onClick?.();\n handleItemClick();\n }}\n style={baseStyle}\n aria-pressed={item.active}\n >\n {content}\n </button>\n );\n\n if (collapsed) {\n return (\n <Tooltip key={item.id} content={item.label}>\n {itemNode}\n </Tooltip>\n );\n }\n\n return wrapWithHover(itemNode);\n };\n\n // ── Sidebar content ──\n const sidebarBaseStyle: React.CSSProperties = {\n position: \"relative\",\n display: \"flex\",\n height: \"100%\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n paddingLeft: \"0.75rem\",\n paddingRight: \"0.75rem\",\n paddingTop: \"1rem\",\n paddingBottom: \"1rem\",\n transition: \"width 200ms\",\n width: widthStyle,\n minWidth: widthStyle,\n borderRight:\n variant === \"transparent\"\n ? \"1px solid var(--color-border, rgba(226, 232, 240, 0.4))\"\n : \"1px solid var(--color-border, rgba(226, 232, 240, 0.6))\",\n backgroundColor:\n variant === \"transparent\"\n ? undefined\n : \"var(--color-background, rgba(255, 255, 255, 0.95))\",\n boxShadow:\n variant === \"transparent\" ? undefined : \"0 1px 3px rgba(0,0,0,0.1)\",\n };\n\n const sidebarContent = (\n <aside\n ref={ref}\n role=\"navigation\"\n aria-label=\"Dashboard navigation\"\n style={mergeStyles(sidebarBaseStyle, resolveDot(dot), style)}\n {...props}\n >\n {/* Logo */}\n <div\n style={{\n marginBottom: \"1.5rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n gap: \"0.5rem\",\n paddingLeft: \"0.25rem\",\n paddingRight: \"0.25rem\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n }}\n >\n {logo}\n {!collapsed && productSwitcher}\n </div>\n\n {/* Sections */}\n <div style={{ flex: 1, overflowY: collapsed ? \"hidden\" : \"auto\" }}>\n {collapsed ? (\n /* Collapsed: show only pinned + active items, no sections */\n <nav\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n }}\n >\n {sections\n .flatMap((s) => s.items)\n .filter((item) => isItemPinned(item.id) || item.active)\n .map(renderItem)}\n </nav>\n ) : (\n /* Expanded: full section view with collapsible groups */\n sections.map((section) => {\n const isSectionCollapsed = collapsedSections.has(section.id);\n\n return (\n <div key={section.id} style={{ marginBottom: \"1.5rem\" }}>\n {section.label && (\n <button\n type=\"button\"\n onClick={() => toggleSection(section.id)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n padding: \"0.25rem 0.75rem\",\n fontSize: \"0.75rem\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"var(--color-muted-foreground, #94a3b8)\",\n marginBottom: isSectionCollapsed ? 0 : \"0.5rem\",\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n borderRadius: \"0.25rem\",\n }}\n aria-expanded={!isSectionCollapsed}\n >\n <span>{section.label}</span>\n <Icon\n name={\n isSectionCollapsed ? \"chevronRight\" : \"chevronDown\"\n }\n dot=\"h-3 w-3\"\n style={{ opacity: 0.5 }}\n />\n </button>\n )}\n\n {!isSectionCollapsed && (\n <nav\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n }}\n aria-label={section.label || \"Navigation\"}\n >\n {section.items.map(renderItem)}\n </nav>\n )}\n </div>\n );\n })\n )}\n </div>\n\n {/* Footer */}\n <div\n style={{\n marginTop: \"1rem\",\n borderTop: \"1px solid var(--color-border, #f1f5f9)\",\n paddingTop: \"1rem\",\n overflow: \"hidden\",\n }}\n >\n {footerActions}\n {!collapsed && (\n <div\n style={{\n marginTop: \"0.5rem\",\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #94a3b8)\",\n }}\n >\n <span>© HUA Labs</span>\n </div>\n )}\n </div>\n\n {/* Edge handle — right side, vertically centered */}\n {!hideToggle && !isMobile && (\n <button\n type=\"button\"\n onClick={toggleCollapsed}\n onMouseEnter={() => setHandleHovered(true)}\n onMouseLeave={() => setHandleHovered(false)}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n aria-expanded={!collapsed}\n style={{\n position: \"absolute\",\n right: 0,\n top: \"50%\",\n transform: \"translate(50%, -50%)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"1.25rem\",\n height: \"2.5rem\",\n borderRadius: \"0.5rem\",\n border: \"1px solid var(--color-border, #e2e8f0)\",\n backgroundColor: handleHovered\n ? \"var(--color-accent, #f1f5f9)\"\n : \"var(--color-background, #ffffff)\",\n color: \"var(--color-muted-foreground, #64748b)\",\n cursor: \"pointer\",\n zIndex: 10,\n transition: \"background-color 150ms, opacity 150ms\",\n opacity: handleHovered ? 1 : 0.6,\n boxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n }}\n >\n <Icon\n name={collapsed ? \"chevronRight\" : \"chevronLeft\"}\n dot=\"h-3 w-3\"\n />\n </button>\n )}\n </aside>\n );\n\n // ── Mobile / Desktop render ──\n return (\n <>\n {isMobile ? (\n <>\n {!hideMobileToggle && (\n <button\n style={{\n position: \"fixed\",\n top: \"0.75rem\",\n left: \"0.75rem\",\n zIndex: 30,\n display: \"inline-flex\",\n height: \"2.5rem\",\n width: \"2.5rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"0.75rem\",\n border: \"1px solid var(--color-border, #e2e8f0)\",\n backgroundColor: \"var(--color-background, #ffffff)\",\n boxShadow: \"0 4px 6px -1px rgba(0,0,0,0.1)\",\n cursor: \"pointer\",\n }}\n onClick={() => setIsMobileOpen(true)}\n >\n <Icon name=\"menu\" dot=\"h-5 w-5\" />\n </button>\n )}\n {isMobileOpen && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 40,\n display: \"flex\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n backgroundColor: overlayBackground,\n }}\n onClick={() => setIsMobileOpen(false)}\n />\n <div\n style={{\n position: \"relative\",\n zIndex: 50,\n height: \"100%\",\n backgroundColor: \"var(--color-background, #ffffff)\",\n }}\n >\n {sidebarContent}\n <button\n style={{\n position: \"absolute\",\n top: \"1rem\",\n right: \"1rem\",\n display: \"inline-flex\",\n height: \"2.5rem\",\n width: \"2.5rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"0.75rem\",\n color: \"var(--color-muted-foreground, #64748b)\",\n transition: \"background-color 150ms\",\n cursor: \"pointer\",\n border: \"none\",\n background: \"transparent\",\n }}\n onClick={() => setIsMobileOpen(false)}\n >\n <Icon name=\"close\" dot=\"h-5 w-5\" />\n </button>\n </div>\n </div>\n )}\n </>\n ) : (\n sidebarContent\n )}\n </>\n );\n },\n);\n\nDashboardSidebar.displayName = \"DashboardSidebar\";\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {e}from'./chunk-UR3TIWBS.mjs';import {a}from'./chunk-7T3IUG3G.mjs';import {m}from'./chunk-NSDWT2JM.mjs';import {d,e as e$1}from'./chunk-OBMOTQEU.mjs';import N,{useState,useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var _={sm:"p-4",md:"p-6",lg:"p-8"},v={sm:30,md:36,lg:48},H={sm:{fontSize:"1.125rem"},md:{fontSize:"1.25rem"},lg:{fontSize:"1.5rem"}},M={sm:{fontSize:"0.875rem"},md:{fontSize:"0.875rem"},lg:{fontSize:"1rem"}},B={default:{backgroundColor:"var(--color-background, hsl(210 20% 98% / 0.9))",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)",border:"1px solid var(--color-border, hsl(210 15% 88% / 0.5))"},gradient:{border:"none"},glass:{backgroundColor:"rgba(255, 255, 255, 0.1)",backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)",border:"1px solid rgba(255, 255, 255, 0.2)"},neon:{backgroundColor:"rgba(17, 24, 39, 0.9)",border:"1px solid rgba(34, 211, 238, 0.3)",boxShadow:"0 10px 15px -3px rgba(34, 211, 238, 0.2)"}},y={blue:"linear-gradient(135deg, #6366f1, #06b6d4, #0891b2)",purple:"linear-gradient(135deg, #a855f7, #ec4899, #9333ea)",green:"linear-gradient(135deg, #22c55e, #10b981, #16a34a)",orange:"linear-gradient(135deg, #f97316, #ef4444, #ea580c)",pink:"linear-gradient(135deg, #ec4899, #f43f5e, #db2777)"},L={scale:{transform:"scale(1.05)"},glow:{boxShadow:"0 25px 50px -12px rgba(34, 211, 238, 0.25)"},slide:{transform:"translateY(-0.5rem)"},none:{}},O={borderRadius:"1rem",boxShadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)",display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",transition:"all 300ms ease-in-out"},W=N.forwardRef(({dot:i,icon:r,title:c,description:E,variant:e$2="default",size:o="md",hover:d$1="scale",gradient:g="blue",customGradient:a$1,animated:I,style:p,...k},A)=>{let l=e({role:"card",enabled:I}),[m$1,b]=useState(false),f=useMemo(()=>{var S;return e$2!=="gradient"?void 0:{background:(S=a$1!=null?a$1:y[g])!=null?S:y.blue}},[e$2,g,a$1]),u=l.className?{willChange:"opacity, transform"}:void 0,P=useMemo(()=>d(O,e$1(_[o]),B[e$2],f,d$1!=="none"&&m$1?L[d$1]:void 0,u,l.style,e$1(i),p),[o,e$2,f,d$1,m$1,u,l.style,i,p]),F=e$2==="neon"?{color:"rgb(34, 211, 238)"}:e$2==="gradient"?{color:"rgba(255, 255, 255, 0.9)"}:{},D=e$2==="gradient"?{color:"#ffffff"}:{color:"var(--color-foreground, hsl(210 10% 10%))"},T=e$2==="gradient"?{color:"rgba(255, 255, 255, 0.9)"}:{color:"var(--color-muted-foreground, hsl(210 10% 40%))"};return jsxs("div",{ref:a(A,l.ref),style:P,onMouseEnter:()=>b(true),onMouseLeave:()=>b(false),...k,children:[r&&jsx("div",{style:{...e$1("mb-4"),...F},children:typeof r=="string"&&r.startsWith("http")?jsx("img",{src:r,alt:c,style:{width:"100%",height:"100%",objectFit:"contain"}}):jsx(m,{name:r,size:v[o]})}),jsx("h3",{style:d({fontWeight:700,...e$1("mb-2")},H[o],D),children:c}),jsx("p",{style:d(M[o],T),children:E})]})});W.displayName="FeatureCard";export{W as a};//# sourceMappingURL=chunk-JNW3CLCA.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-JNW3CLCA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/FeatureCard.tsx"],"names":["SIZE_PADDING_DOT","ICON_PX","TITLE_SIZE","DESC_SIZE","VARIANT_BASE","GRADIENT_BACKGROUNDS","HOVER_EFFECTS","CARD_BASE","FeatureCard","React","dotProp","icon","title","description","variant","size","hover","gradient","customGradient","animated","style","props","ref","entrance","useAnimatedEntrance","isHovered","setIsHovered","useState","gradientBackground","useMemo","_a","entranceWillChange","computedStyle","mergeStyles","resolveDot","iconColor","titleColor","descColor","jsxs","composeRefs","jsx","Icon"],"mappings":"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","file":"chunk-JNW3CLCA.mjs","sourcesContent":["\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { composeRefs } from \"../lib/Slot\";\nimport { useAnimatedEntrance } from \"../hooks/useAnimatedEntrance\";\nimport { Icon } from \"./Icon\";\nimport type { AllIconName } from \"../lib/icon-names\";\n\n/**\n * FeatureCard 아이콘 타입 / FeatureCard icon type\n * - AllIconName: icons.ts + PROJECT_ICONS의 모든 아이콘 / All icons from icons.ts + PROJECT_ICONS\n * - `http${string}`: 이미지 URL / Image URL\n */\ntype FeatureCardIconType = AllIconName | `http${string}`;\n\n/**\n * FeatureCard 컴포넌트의 props / FeatureCard component props\n * @typedef {Object} FeatureCardProps\n * @property {FeatureCardIconType} [icon] - 아이콘 (IconName, ProjectIconName 또는 이미지 URL) / Icon (IconName, ProjectIconName or image URL)\n * @property {string} title - 카드 제목 / Card title\n * @property {string} description - 카드 설명 / Card description\n * @property {\"default\" | \"gradient\" | \"glass\" | \"neon\"} [variant=\"default\"] - FeatureCard 스타일 변형 / FeatureCard style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - FeatureCard 크기 / FeatureCard size\n * @property {\"scale\" | \"glow\" | \"slide\" | \"none\"} [hover=\"scale\"] - 호버 효과 / Hover effect\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"pink\" | \"custom\"} [gradient=\"blue\"] - 그라디언트 색상 / Gradient color\n * @property {string} [customGradient] - 커스텀 그라디언트 (CSS linear-gradient value) / Custom gradient CSS value\n * @property {string} [dot] - dot utility string for additional styles\n * @property {React.CSSProperties} [style] - inline style overrides\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface FeatureCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n icon?: FeatureCardIconType;\n title: string;\n description: string;\n variant?: \"default\" | \"gradient\" | \"glass\" | \"neon\";\n size?: \"sm\" | \"md\" | \"lg\";\n hover?: \"scale\" | \"glow\" | \"slide\" | \"none\";\n gradient?: \"blue\" | \"purple\" | \"green\" | \"orange\" | \"pink\" | \"custom\";\n customGradient?: string;\n /** Enable preset entrance animation (reads from MotionConfigContext) */\n animated?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ─── Size styles ──────────────────────────────────────────────────────────────\n\nconst SIZE_PADDING_DOT: Record<\"sm\" | \"md\" | \"lg\", string> = {\n sm: \"p-4\",\n md: \"p-6\",\n lg: \"p-8\",\n};\n\nconst ICON_PX: Record<\"sm\" | \"md\" | \"lg\", number> = {\n sm: 30,\n md: 36,\n lg: 48,\n};\n\nconst TITLE_SIZE: Record<\"sm\" | \"md\" | \"lg\", React.CSSProperties> = {\n sm: { fontSize: \"1.125rem\" },\n md: { fontSize: \"1.25rem\" },\n lg: { fontSize: \"1.5rem\" },\n};\n\nconst DESC_SIZE: Record<\"sm\" | \"md\" | \"lg\", React.CSSProperties> = {\n sm: { fontSize: \"0.875rem\" },\n md: { fontSize: \"0.875rem\" },\n lg: { fontSize: \"1rem\" },\n};\n\n// ─── Variant base styles ──────────────────────────────────────────────────────\n\nconst VARIANT_BASE: Record<\n \"default\" | \"gradient\" | \"glass\" | \"neon\",\n React.CSSProperties\n> = {\n default: {\n backgroundColor: \"var(--color-background, hsl(210 20% 98% / 0.9))\",\n backdropFilter: \"blur(4px)\",\n WebkitBackdropFilter: \"blur(4px)\",\n border: \"1px solid var(--color-border, hsl(210 15% 88% / 0.5))\",\n },\n gradient: {\n border: \"none\",\n },\n glass: {\n backgroundColor: \"rgba(255, 255, 255, 0.1)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n border: \"1px solid rgba(255, 255, 255, 0.2)\",\n },\n neon: {\n backgroundColor: \"rgba(17, 24, 39, 0.9)\",\n border: \"1px solid rgba(34, 211, 238, 0.3)\",\n boxShadow: \"0 10px 15px -3px rgba(34, 211, 238, 0.2)\",\n },\n};\n\n// ─── Gradient backgrounds ─────────────────────────────────────────────────────\n\nconst GRADIENT_BACKGROUNDS: Record<string, string> = {\n blue: \"linear-gradient(135deg, #6366f1, #06b6d4, #0891b2)\",\n purple: \"linear-gradient(135deg, #a855f7, #ec4899, #9333ea)\",\n green: \"linear-gradient(135deg, #22c55e, #10b981, #16a34a)\",\n orange: \"linear-gradient(135deg, #f97316, #ef4444, #ea580c)\",\n pink: \"linear-gradient(135deg, #ec4899, #f43f5e, #db2777)\",\n};\n\n// ─── Hover effect styles ──────────────────────────────────────────────────────\n\nconst HOVER_EFFECTS: Record<\n \"scale\" | \"glow\" | \"slide\" | \"none\",\n React.CSSProperties\n> = {\n scale: { transform: \"scale(1.05)\" },\n glow: { boxShadow: \"0 25px 50px -12px rgba(34, 211, 238, 0.25)\" },\n slide: { transform: \"translateY(-0.5rem)\" },\n none: {},\n};\n\n// ─── Shared card base ─────────────────────────────────────────────────────────\n\nconst CARD_BASE: React.CSSProperties = {\n borderRadius: \"1rem\",\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n textAlign: \"center\",\n transition: \"all 300ms ease-in-out\",\n};\n\n/**\n * FeatureCard 컴포넌트 / FeatureCard component\n *\n * 기능을 소개하는 카드 컴포넌트입니다.\n * 아이콘, 제목, 설명을 포함하며, 다양한 스타일과 호버 효과를 지원합니다.\n *\n * Card component that introduces features.\n * Includes icon, title, and description, supports various styles and hover effects.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <FeatureCard\n * icon=\"star\"\n * title=\"고급 기능\"\n * description=\"강력한 기능을 제공합니다\"\n * />\n *\n * @example\n * // Gradient 스타일 / Gradient style\n * <FeatureCard\n * icon=\"zap\"\n * title=\"빠른 성능\"\n * description=\"최적화된 성능\"\n * variant=\"gradient\"\n * gradient=\"purple\"\n * hover=\"glow\"\n * />\n *\n * @param {FeatureCardProps} props - FeatureCard 컴포넌트의 props / FeatureCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} FeatureCard 컴포넌트 / FeatureCard component\n */\nconst FeatureCard = React.forwardRef<HTMLDivElement, FeatureCardProps>(\n (\n {\n dot: dotProp,\n icon,\n title,\n description,\n variant = \"default\",\n size = \"md\",\n hover = \"scale\",\n gradient = \"blue\",\n customGradient,\n animated,\n style,\n ...props\n },\n ref,\n ) => {\n const entrance = useAnimatedEntrance<HTMLDivElement>({\n role: \"card\",\n enabled: animated,\n });\n const [isHovered, setIsHovered] = useState(false);\n\n const gradientBackground = useMemo<React.CSSProperties | undefined>(() => {\n if (variant !== \"gradient\") return undefined;\n const bg =\n customGradient ??\n GRADIENT_BACKGROUNDS[gradient] ??\n GRADIENT_BACKGROUNDS.blue;\n return { background: bg };\n }, [variant, gradient, customGradient]);\n\n const entranceWillChange = entrance.className\n ? ({ willChange: \"opacity, transform\" } as React.CSSProperties)\n : undefined;\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n CARD_BASE,\n resolveDot(SIZE_PADDING_DOT[size]),\n VARIANT_BASE[variant],\n gradientBackground,\n hover !== \"none\" && isHovered ? HOVER_EFFECTS[hover] : undefined,\n entranceWillChange,\n entrance.style,\n resolveDot(dotProp),\n style,\n ),\n [\n size,\n variant,\n gradientBackground,\n hover,\n isHovered,\n entranceWillChange,\n entrance.style,\n dotProp,\n style,\n ],\n );\n\n // Icon color: neon → cyan, gradient → white, others → inherit\n const iconColor: React.CSSProperties =\n variant === \"neon\"\n ? { color: \"rgb(34, 211, 238)\" }\n : variant === \"gradient\"\n ? { color: \"rgba(255, 255, 255, 0.9)\" }\n : {};\n\n const titleColor: React.CSSProperties =\n variant === \"gradient\"\n ? { color: \"#ffffff\" }\n : { color: \"var(--color-foreground, hsl(210 10% 10%))\" };\n\n const descColor: React.CSSProperties =\n variant === \"gradient\"\n ? { color: \"rgba(255, 255, 255, 0.9)\" }\n : { color: \"var(--color-muted-foreground, hsl(210 10% 40%))\" };\n\n return (\n <div\n ref={composeRefs(ref, entrance.ref)}\n style={computedStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n {icon && (\n <div\n style={{\n ...resolveDot(\"mb-4\"),\n ...iconColor,\n }}\n >\n {typeof icon === \"string\" && icon.startsWith(\"http\") ? (\n <img\n src={icon}\n alt={title}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"contain\" }}\n />\n ) : (\n <Icon name={icon as AllIconName} size={ICON_PX[size]} />\n )}\n </div>\n )}\n\n <h3\n style={mergeStyles(\n { fontWeight: 700, ...resolveDot(\"mb-2\") },\n TITLE_SIZE[size],\n titleColor,\n )}\n >\n {title}\n </h3>\n\n <p style={mergeStyles(DESC_SIZE[size], descColor)}>{description}</p>\n </div>\n );\n },\n);\n\nFeatureCard.displayName = \"FeatureCard\";\n\nexport { FeatureCard };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {c}from'./chunk-RICRFXFP.mjs';import {b}from'./chunk-LPHUWTQ2.mjs';import {d,c as c$1}from'./chunk-7T3IUG3G.mjs';import {a}from'./chunk-7CGJQSJO.mjs';import {d as d$1,e}from'./chunk-OBMOTQEU.mjs';import me,{useState,useMemo}from'react';import {dotVariants}from'@hua-labs/dot';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var Q=a.springy,Z=dotVariants({base:"inline-flex items-center justify-center whitespace-nowrap font-medium min-w-fit",variants:{variant:{default:"bg-[var(--color-primary)] text-[var(--color-primary-foreground)]",destructive:"bg-[var(--color-destructive)] text-[var(--color-destructive-foreground)]",outline:"border-2 border-[var(--color-border)] bg-transparent text-[var(--color-foreground)]",secondary:"bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",ghost:"bg-transparent text-[var(--color-foreground)]",link:"bg-transparent text-[var(--color-primary)]",gradient:"text-white",neon:"",glass:""},size:{sm:"h-8 px-4 py-2 text-sm",md:"h-10 px-6 py-2 text-base",lg:"h-12 px-8 py-3 text-lg",xl:"h-14 px-10 py-4 text-xl",icon:"h-10 w-10 p-0"},rounded:{sm:"rounded",md:"rounded-md",lg:"rounded-lg",full:"rounded-full"},shadow:{none:"",sm:"shadow-sm",md:"shadow-md",lg:"shadow-lg",xl:"shadow-xl"},fullWidth:{true:"w-full",false:""}},defaultVariants:{variant:"default",size:"md",rounded:"md",shadow:"md",fullWidth:false}}),ee={link:{textDecoration:"underline"},neon:{backgroundColor:"#0f172a",color:"#2dd4bf",border:"1px solid rgba(20, 184, 166, 0.5)",boxShadow:"0 10px 15px -3px rgba(20, 184, 166, 0.2)"},glass:{...b("heavy"),color:"var(--color-foreground)"}},T={default:{opacity:.9},destructive:{opacity:.9},outline:{backgroundColor:"var(--color-accent)",color:"var(--color-accent-foreground)"},secondary:{opacity:.8},ghost:{backgroundColor:"var(--color-accent)",color:"var(--color-accent-foreground)"},link:{opacity:.8},gradient:{boxShadow:"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)"},neon:{boxShadow:"0 10px 15px -3px rgba(20, 184, 166, 0.4)",borderColor:"#2dd4bf"},glass:{backgroundColor:"rgba(255, 255, 255, 0.7)"}},oe={springy:`transform 180ms ${Q}, box-shadow 200ms ease-out, opacity 200ms ease-out, background-color 200ms ease-out, color 200ms ease-out, border-color 200ms ease-out`,scale:"transform 150ms ease-out, box-shadow 200ms ease-out, opacity 200ms ease-out, background-color 200ms ease-out, color 200ms ease-out",glow:"box-shadow 200ms ease-out, opacity 200ms ease-out, background-color 200ms ease-out, color 200ms ease-out",slide:`transform 180ms ${Q}, box-shadow 200ms ease-out, opacity 200ms ease-out, background-color 200ms ease-out, color 200ms ease-out, border-color 200ms ease-out`,none:"opacity 200ms ease-out, background-color 200ms ease-out, color 200ms ease-out"},te={springy:{transform:"scale(1.015)"},scale:{transform:"scale(1.015)"},glow:{boxShadow:"0 10px 15px -3px color-mix(in srgb, var(--color-primary) 25%, transparent)"},slide:{transform:"translateY(-2px)"},none:{}},re={springy:{transform:"scale(0.985)"},scale:{transform:"scale(0.985)"},glow:{},slide:{transform:"translateY(0)"},none:{}};var ne={pointerEvents:"none",opacity:.5},B={blue:"linear-gradient(to right, #14b8a6, #06b6d4)",purple:"linear-gradient(to right, #a855f7, #ec4899)",green:"linear-gradient(to right, #22c55e, #10b981)",orange:"linear-gradient(to right, #f97316, #ef4444)",pink:"linear-gradient(to right, #ec4899, #f43f5e)"};var ge={position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},ae=me.forwardRef(function({variant:t="default",size:I="md",loading:s=false,icon:p,iconPosition:L="left",gradient:k="blue",customGradient:V,rounded:O="md",shadow:_="md",hover:ie="springy",fullWidth:f,iconOnly:le,dot:D,children:F,disabled:ce,asChild:de=false,style:Y,...i},b){let r=d()?"none":ie,o=!!ce||s,[z,G]=useState(false),[U,y]=useState(false),[X,l]=useState(false),h=useMemo(()=>{let e$1=Z({variant:t,size:I,rounded:O,shadow:_,fullWidth:f!=null?f:false}),m=ee[t],c=t==="gradient"?{backgroundImage:V||B[k]||B.blue}:void 0,C={transition:oe[r]};return d$1(e$1,m,c,C,r==="springy"||r==="scale"||r==="slide"?{willChange:"transform"}:void 0,e(D),Y)},[t,I,O,_,f,k,V,r,D,Y]),x=useMemo(()=>{if(o)return d$1(h,ne);let e=h;return X&&(e=d$1(e,c(t))),U?e=d$1(e,T[t],re[r]):z&&(e=d$1(e,T[t],te[r])),e},[h,o,z,U,X,t,r]),S=()=>{o||G(true);},v=()=>{G(false),y(false);},R=()=>{o||y(true);},E=()=>y(false),ue=jsxs("span",{role:"status","aria-live":"polite",style:{marginLeft:"-4px",...e("mr-2"),display:"inline-flex"},children:[jsxs("svg",{style:{animation:"spin 1s linear infinite",height:"16px",width:"16px"},viewBox:"0 0 24 24",fill:"none",children:[jsx("circle",{style:{opacity:.25},cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsx("path",{style:{opacity:.75},fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),jsx("span",{style:ge,children:"\uB85C\uB529 \uC911"})]}),$=jsxs(Fragment,{children:[s&&ue,!s&&p&&L==="left"&&jsx("span",{style:e("mr-2"),children:p}),F,!s&&p&&L==="right"&&jsx("span",{style:e("ml-2"),children:p})]});if(le&&!("aria-label"in i)&&process.env.NODE_ENV!=="production"&&console.warn("[Button] iconOnly \uC0AC\uC6A9 \uC2DC aria-label\uC744 \uC81C\uACF5\uD558\uC138\uC694."),de)return jsx(c$1,{ref:b,"aria-busy":s||void 0,"aria-disabled":o||void 0,...i,style:x,onMouseEnter:S,onMouseLeave:v,onMouseDown:R,onMouseUp:E,onFocus:()=>l(true),onBlur:()=>l(false),children:F});if("href"in i&&i.href){let{onClick:e,target:m,rel:c,href:C,onFocus:g,onBlur:H,...W}=i;return jsx("a",{...W,ref:b,href:C,style:x,onClick:a=>{if(o){a.preventDefault(),a.stopPropagation();return}e==null||e(a);},"aria-busy":s||void 0,"aria-disabled":o||void 0,tabIndex:o?-1:W.tabIndex,target:m,rel:m==="_blank"?c!=null?c:"noopener noreferrer":c,onMouseEnter:S,onMouseLeave:v,onMouseDown:R,onMouseUp:E,onFocus:a=>{l(true),g==null||g(a);},onBlur:a=>{l(false),H==null||H(a);},children:$})}let{onFocus:w,onBlur:A,...pe}=i;return jsx("button",{...pe,ref:b,style:x,type:"button",disabled:o,"aria-busy":s||void 0,"aria-disabled":o||void 0,onMouseEnter:S,onMouseLeave:v,onMouseDown:R,onMouseUp:E,onFocus:e=>{l(true),w==null||w(e);},onBlur:e=>{l(false),A==null||A(e);},children:$})});ae.displayName="Button";var Be=ae;export{Be as a};//# sourceMappingURL=chunk-JY3QVUGW.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-JY3QVUGW.mjs.map
|