@hua-labs/ui 2.1.1 → 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-DrZpz0yv.d.mts → ComponentLayout-Clf6C2jV.d.mts} +38 -4
- 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 +144 -61
- package/dist/advanced-motion.mjs +1 -1
- package/dist/advanced.d.mts +70 -37
- 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-A5YOVVM5.mjs +3 -0
- package/dist/chunk-A5YOVVM5.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-EAZEI74V.mjs +3 -0
- package/dist/chunk-EAZEI74V.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-QEMPERUK.mjs +3 -0
- package/dist/chunk-QEMPERUK.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 -57
- 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 +12 -7
- 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 +9 -4
- 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/{icons-DmhQEH_E.d.mts → icons-DcOBy9Hf.d.mts} +4 -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 +360 -210
- 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 +25 -27
- package/dist/lib/icon-providers.d.ts.map +1 -1
- package/dist/lib/icons.d.ts +4 -0
- package/dist/lib/icons.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/lib/utils.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 +49 -22
- 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 -87
- 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/dist/theme.d.mts +85 -0
- package/dist/theme.d.ts +14 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.mjs +3 -0
- package/dist/theme.mjs.map +1 -0
- package/package.json +50 -22
- 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/advanced-dashboard.js +0 -39
- package/dist/advanced-dashboard.js.map +0 -1
- package/dist/advanced-emotion.js +0 -2
- package/dist/advanced-emotion.js.map +0 -1
- package/dist/advanced-motion.js +0 -82
- package/dist/advanced-motion.js.map +0 -1
- package/dist/advanced.js +0 -112
- package/dist/advanced.js.map +0 -1
- package/dist/chunk-3CCF7U3P.mjs +0 -3
- package/dist/chunk-3CCF7U3P.mjs.map +0 -1
- package/dist/chunk-3GAUTZXQ.mjs +0 -3
- package/dist/chunk-3GAUTZXQ.mjs.map +0 -1
- package/dist/chunk-42RGFEL2.mjs +0 -3
- package/dist/chunk-42RGFEL2.mjs.map +0 -1
- package/dist/chunk-4NJE7D6X.mjs +0 -3
- package/dist/chunk-4NJE7D6X.mjs.map +0 -1
- package/dist/chunk-6HVJFEDA.mjs +0 -3
- package/dist/chunk-6HVJFEDA.mjs.map +0 -1
- package/dist/chunk-7OYT3QSY.mjs +0 -3
- package/dist/chunk-7OYT3QSY.mjs.map +0 -1
- package/dist/chunk-ANYZ56VB.mjs +0 -3
- package/dist/chunk-ANYZ56VB.mjs.map +0 -1
- package/dist/chunk-AOSXB5JJ.mjs +0 -4
- package/dist/chunk-AOSXB5JJ.mjs.map +0 -1
- package/dist/chunk-B544MRF7.mjs +0 -3
- package/dist/chunk-B544MRF7.mjs.map +0 -1
- package/dist/chunk-CVWWS25A.mjs +0 -3
- package/dist/chunk-CVWWS25A.mjs.map +0 -1
- package/dist/chunk-DYNBM24D.mjs +0 -3
- package/dist/chunk-DYNBM24D.mjs.map +0 -1
- package/dist/chunk-FX57OSYG.mjs +0 -3
- package/dist/chunk-FX57OSYG.mjs.map +0 -1
- package/dist/chunk-IJSYSNM5.mjs +0 -3
- package/dist/chunk-IJSYSNM5.mjs.map +0 -1
- package/dist/chunk-KJZGOL2Z.mjs +0 -3
- package/dist/chunk-KJZGOL2Z.mjs.map +0 -1
- package/dist/chunk-KYRIUUQP.mjs +0 -3
- package/dist/chunk-KYRIUUQP.mjs.map +0 -1
- package/dist/chunk-LSA7DU3N.mjs +0 -73
- package/dist/chunk-LSA7DU3N.mjs.map +0 -1
- package/dist/chunk-MDLCJASB.mjs +0 -3
- package/dist/chunk-MDLCJASB.mjs.map +0 -1
- package/dist/chunk-N56BUOCD.mjs +0 -3
- package/dist/chunk-N56BUOCD.mjs.map +0 -1
- package/dist/chunk-OFYITQXI.mjs +0 -13
- package/dist/chunk-OFYITQXI.mjs.map +0 -1
- package/dist/chunk-OZNST3EZ.mjs +0 -3
- package/dist/chunk-OZNST3EZ.mjs.map +0 -1
- package/dist/chunk-RS6RKW5U.mjs +0 -13
- package/dist/chunk-RS6RKW5U.mjs.map +0 -1
- package/dist/chunk-TXBZZJNR.mjs +0 -3
- package/dist/chunk-TXBZZJNR.mjs.map +0 -1
- package/dist/chunk-TZ4YSHMC.mjs +0 -3
- package/dist/chunk-TZ4YSHMC.mjs.map +0 -1
- package/dist/chunk-U6CTBZ2U.mjs +0 -3
- package/dist/chunk-U6CTBZ2U.mjs.map +0 -1
- package/dist/chunk-WP7VFE77.mjs +0 -3
- package/dist/chunk-WP7VFE77.mjs.map +0 -1
- package/dist/chunk-XCZMLKPK.mjs +0 -3
- package/dist/chunk-XCZMLKPK.mjs.map +0 -1
- package/dist/chunk-XGHT7WMO.mjs +0 -3
- package/dist/chunk-XGHT7WMO.mjs.map +0 -1
- package/dist/chunk-XL4KTJ4L.mjs +0 -3
- package/dist/chunk-XL4KTJ4L.mjs.map +0 -1
- package/dist/chunk-Z74YUUVT.mjs +0 -3
- package/dist/chunk-Z74YUUVT.mjs.map +0 -1
- package/dist/chunk-ZXZIHU7J.mjs +0 -8
- package/dist/chunk-ZXZIHU7J.mjs.map +0 -1
- package/dist/components/EmptyState.d.ts +0 -62
- package/dist/components/EmptyState.d.ts.map +0 -1
- package/dist/data.js +0 -3
- package/dist/data.js.map +0 -1
- package/dist/feedback.js +0 -12
- package/dist/feedback.js.map +0 -1
- package/dist/form.js +0 -8
- package/dist/form.js.map +0 -1
- package/dist/iconsax-extended.js +0 -3
- package/dist/iconsax-extended.js.map +0 -1
- package/dist/iconsax.js +0 -3
- package/dist/iconsax.js.map +0 -1
- package/dist/index.js +0 -51
- package/dist/index.js.map +0 -1
- package/dist/interactive.js +0 -2
- package/dist/interactive.js.map +0 -1
- package/dist/landing.js +0 -100
- package/dist/landing.js.map +0 -1
- package/dist/lib/phosphor-icons.d.ts +0 -6
- package/dist/lib/phosphor-icons.d.ts.map +0 -1
- package/dist/navigation.js +0 -12
- package/dist/navigation.js.map +0 -1
- package/dist/overlay.js +0 -3
- package/dist/overlay.js.map +0 -1
- package/dist/sdui.js +0 -9
- package/dist/sdui.js.map +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {d,e}from'./chunk-OBMOTQEU.mjs';import L,{useId,useState,useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var Y={sm:{input:{height:"2rem",padding:"0.25rem 0.5rem",fontSize:"0.875rem"},button:{width:"2rem",height:"2rem",fontSize:"0.875rem"},wrapper:{gap:"0.25rem"}},md:{input:{height:"2.5rem",padding:"0.5rem 0.75rem",fontSize:"0.875rem"},button:{width:"2.5rem",height:"2.5rem",fontSize:"0.875rem"},wrapper:{gap:"0.5rem"}},lg:{input:{height:"3rem",padding:"0.625rem 1rem",fontSize:"1rem"},button:{width:"3rem",height:"3rem",fontSize:"1rem"},wrapper:{gap:"0.5rem"}}},Z={display:"inline-flex",alignItems:"center"},q=d(e("rounded-md"),{display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--color-input)",backgroundColor:"var(--color-background)",cursor:"pointer",transition:"all 150ms ease",flexShrink:0}),G={backgroundColor:"var(--color-secondary)",borderColor:"color-mix(in srgb, var(--color-primary) 50%, transparent)"},J={transform:"scale(0.95)"},Q={opacity:.5,cursor:"not-allowed",backgroundColor:"var(--color-background)"},X={outline:"none",boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)"},$=d(e("rounded-md"),{width:"4rem",textAlign:"center",border:"1px solid var(--color-input)",backgroundColor:"var(--color-background)",color:"var(--color-foreground)",transition:"all 150ms ease",appearance:"textfield",MozAppearance:"textfield",WebkitAppearance:"textfield"}),ee={outline:"none",boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)"},te={opacity:.5,cursor:"not-allowed"};function R({onClick:i,disabled:p,ariaLabel:t,sizeStyle:s,extraStyle:S,children:c}){let[o,b]=useState(false),[f,m]=useState(false),[h,v]=useState(false),k=useMemo(()=>d(q,s,S,p?Q:d(o?G:void 0,f?J:void 0),h?X:void 0),[s,S,p,o,f,h]);return jsx("button",{type:"button",onClick:i,disabled:p,style:k,"aria-label":t,onMouseEnter:()=>b(true),onMouseLeave:()=>{b(false),m(false);},onMouseDown:()=>m(true),onMouseUp:()=>m(false),onFocus:()=>v(true),onBlur:()=>v(false),children:c})}var re=L.forwardRef(({value:i,defaultValue:p=0,min:t,max:s,step:S=1,onChange:c,disabled:o=false,size:b="md",showButtons:f=true,buttonLayout:m="horizontal",dot:h,style:v,id:k,...C},M)=>{let O=useId(),D=k||O,[W,j]=L.useState(p),[N,w]=useState(false),I=i!==void 0,a=I?i:W,u=Y[b],d$1=L.useCallback(n=>{let r=n;t!==void 0&&(r=Math.max(t,r)),s!==void 0&&(r=Math.min(s,r)),I||j(r),c==null||c(r);},[I,t,s,c]),B=()=>{o||d$1(a+S);},x=()=>{o||d$1(a-S);},z=n=>{let r=n.target.value;if(r===""||r==="-")return;let g=parseFloat(r);isNaN(g)||(t!==void 0&&g<t?d$1(t):d$1(g));},A=n=>{var r;w(false),t!==void 0&&a<t&&d$1(t),s!==void 0&&a>s&&d$1(s),(r=C.onBlur)==null||r.call(C,n);},U=n=>{n.key==="ArrowUp"?(n.preventDefault(),B()):n.key==="ArrowDown"&&(n.preventDefault(),x());},F=t===void 0||a>t,H=s===void 0||a<s,V=useMemo(()=>d(Z,u.wrapper,e(h),v),[u.wrapper,h,v]),_=useMemo(()=>d($,u.input,o?te:void 0,N?ee:void 0),[u.input,o,N]);if(m==="vertical"){let n={...u.button,height:"calc(50% - 1px)"};return jsxs("div",{style:V,children:[jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.125rem"},children:[jsx(R,{onClick:B,disabled:o||!H,ariaLabel:"Increase",sizeStyle:n,extraStyle:{borderBottomLeftRadius:0,borderBottomRightRadius:0},children:jsx(ie,{style:{width:"0.75rem",height:"0.75rem"}})}),jsx(R,{onClick:x,disabled:o||!F,ariaLabel:"Decrease",sizeStyle:n,extraStyle:{borderTopLeftRadius:0,borderTopRightRadius:0},children:jsx(se,{style:{width:"0.75rem",height:"0.75rem"}})})]}),jsx("input",{ref:M,id:D,type:"text",inputMode:"numeric",pattern:t!==void 0&&t>=0?"[0-9]*":"-?[0-9]*",value:a,onChange:z,onKeyDown:U,onBlur:A,onFocus:()=>w(true),disabled:o,style:_,...C})]})}return jsxs("div",{style:V,children:[f&&jsx(R,{onClick:x,disabled:o||!F,ariaLabel:"Decrease",sizeStyle:u.button,children:jsx(oe,{style:{width:"0.875rem",height:"0.875rem"}})}),jsx("input",{ref:M,id:D,type:"text",inputMode:"numeric",pattern:t!==void 0&&t>=0?"[0-9]*":"-?[0-9]*",value:a,onChange:z,onKeyDown:U,onBlur:A,onFocus:()=>w(true),disabled:o,style:_,...C}),f&&jsx(R,{onClick:B,disabled:o||!H,ariaLabel:"Increase",sizeStyle:u.button,children:jsx(ne,{style:{width:"0.875rem",height:"0.875rem"}})})]})});re.displayName="NumberInput";function oe({style:i}){return jsx("svg",{style:i,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20 12H4"})})}function ne({style:i}){return jsx("svg",{style:i,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4v16m8-8H4"})})}function ie({style:i}){return jsx("svg",{style:i,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 15l7-7 7 7"})})}function se({style:i}){return jsx("svg",{style:i,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})}export{re as a};//# sourceMappingURL=chunk-MEDKGNLV.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-MEDKGNLV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/NumberInput.tsx"],"names":["SIZE_STYLES","WRAPPER_BASE","BUTTON_BASE","mergeStyles","resolveDot","BUTTON_HOVER","BUTTON_ACTIVE","BUTTON_DISABLED","BUTTON_FOCUS","INPUT_BASE","INPUT_FOCUS","INPUT_DISABLED","StepButton","onClick","disabled","ariaLabel","sizeStyle","extraStyle","children","isHovered","setIsHovered","useState","isActive","setIsActive","isFocused","setIsFocused","style","useMemo","jsx","NumberInput","React","controlledValue","defaultValue","min","max","step","onChange","size","showButtons","buttonLayout","dotProp","idProp","props","ref","autoId","useId","id","internalValue","setInternalValue","isInputFocused","setIsInputFocused","isControlled","currentValue","sizes","updateValue","newValue","clampedValue","increment","decrement","handleInputChange","e","inputValue","handleBlur","_a","handleKeyDown","canDecrement","canIncrement","wrapperStyle","inputStyle","halfButtonStyle","jsxs","ChevronUp","ChevronDown","Minus","Plus"],"mappings":"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","file":"chunk-MEDKGNLV.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState, useId } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ---------------------------------------------------------------------------\n// Size tokens\n// ---------------------------------------------------------------------------\nconst SIZE_STYLES = {\n sm: {\n input: {\n height: \"2rem\", // h-8 = 32px\n padding: \"0.25rem 0.5rem\", // py-1 px-2\n fontSize: \"0.875rem\", // text-sm\n } satisfies React.CSSProperties,\n button: {\n width: \"2rem\", // w-8\n height: \"2rem\", // h-8\n fontSize: \"0.875rem\", // text-sm\n } satisfies React.CSSProperties,\n wrapper: {\n gap: \"0.25rem\", // gap-1\n } satisfies React.CSSProperties,\n },\n md: {\n input: {\n height: \"2.5rem\", // h-10 = 40px\n padding: \"0.5rem 0.75rem\", // py-2 px-3\n fontSize: \"0.875rem\", // text-sm\n } satisfies React.CSSProperties,\n button: {\n width: \"2.5rem\", // w-10\n height: \"2.5rem\", // h-10\n fontSize: \"0.875rem\", // text-sm\n } satisfies React.CSSProperties,\n wrapper: {\n gap: \"0.5rem\", // gap-2\n } satisfies React.CSSProperties,\n },\n lg: {\n input: {\n height: \"3rem\", // h-12 = 48px\n padding: \"0.625rem 1rem\", // py-2.5 px-4\n fontSize: \"1rem\", // text-base\n } satisfies React.CSSProperties,\n button: {\n width: \"3rem\", // w-12\n height: \"3rem\", // h-12\n fontSize: \"1rem\", // text-base\n } satisfies React.CSSProperties,\n wrapper: {\n gap: \"0.5rem\", // gap-2\n } satisfies React.CSSProperties,\n },\n} as const;\n\n// ---------------------------------------------------------------------------\n// Base style objects\n// ---------------------------------------------------------------------------\nconst WRAPPER_BASE: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n};\n\nconst BUTTON_BASE: React.CSSProperties = mergeStyles(resolveDot(\"rounded-md\"), {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px solid var(--color-input)\",\n backgroundColor: \"var(--color-background)\",\n cursor: \"pointer\",\n transition: \"all 150ms ease\",\n flexShrink: 0,\n});\n\nconst BUTTON_HOVER: React.CSSProperties = {\n backgroundColor: \"var(--color-secondary)\",\n borderColor: \"color-mix(in srgb, var(--color-primary) 50%, transparent)\",\n};\n\nconst BUTTON_ACTIVE: React.CSSProperties = {\n transform: \"scale(0.95)\",\n};\n\nconst BUTTON_DISABLED: React.CSSProperties = {\n opacity: 0.5,\n cursor: \"not-allowed\",\n backgroundColor: \"var(--color-background)\",\n};\n\nconst BUTTON_FOCUS: React.CSSProperties = {\n outline: \"none\",\n boxShadow:\n \"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)\",\n};\n\nconst INPUT_BASE: React.CSSProperties = mergeStyles(resolveDot(\"rounded-md\"), {\n width: \"4rem\",\n textAlign: \"center\",\n border: \"1px solid var(--color-input)\",\n backgroundColor: \"var(--color-background)\",\n color: \"var(--color-foreground)\",\n transition: \"all 150ms ease\",\n // Hide browser spinners\n appearance: \"textfield\",\n MozAppearance: \"textfield\",\n WebkitAppearance: \"textfield\",\n});\n\nconst INPUT_FOCUS: React.CSSProperties = {\n outline: \"none\",\n boxShadow:\n \"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)\",\n};\n\nconst INPUT_DISABLED: React.CSSProperties = {\n opacity: 0.5,\n cursor: \"not-allowed\",\n};\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n/**\n * NumberInput 컴포넌트의 props / NumberInput component props\n * @typedef {Object} NumberInputProps\n * @property {number} [value] - 현재 값 / Current value\n * @property {number} [defaultValue=0] - 기본 값 / Default value\n * @property {number} [min] - 최소 값 / Minimum value\n * @property {number} [max] - 최대 값 / Maximum value\n * @property {number} [step=1] - 증감 단위 / Step amount\n * @property {(value: number) => void} [onChange] - 값 변경 콜백 / Value change callback\n * @property {boolean} [disabled=false] - 비활성화 / Disabled state\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 크기 / Size\n * @property {boolean} [showButtons=true] - +/- 버튼 표시 / Show +/- buttons\n * @property {\"horizontal\" | \"vertical\"} [buttonLayout=\"horizontal\"] - 버튼 배치 / Button layout\n * @property {string} [dot] - dot utility string for additional styles / dot 유틸리티 문자열\n * @property {React.CSSProperties} [style] - 추가 인라인 스타일 / Additional inline style\n */\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"value\" | \"defaultValue\" | \"size\" | \"type\" | \"className\"\n> {\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number) => void;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n showButtons?: boolean;\n buttonLayout?: \"horizontal\" | \"vertical\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-components: interactive button with hover/active/focus state\n// ---------------------------------------------------------------------------\nfunction StepButton({\n onClick,\n disabled,\n ariaLabel,\n sizeStyle,\n extraStyle,\n children,\n}: {\n onClick: () => void;\n disabled: boolean;\n ariaLabel: string;\n sizeStyle: React.CSSProperties;\n extraStyle?: React.CSSProperties;\n children: React.ReactNode;\n}) {\n const [isHovered, setIsHovered] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const style = useMemo(\n (): React.CSSProperties =>\n mergeStyles(\n BUTTON_BASE,\n sizeStyle,\n extraStyle,\n disabled\n ? BUTTON_DISABLED\n : mergeStyles(\n isHovered ? BUTTON_HOVER : undefined,\n isActive ? BUTTON_ACTIVE : undefined,\n ),\n isFocused ? BUTTON_FOCUS : undefined,\n ),\n [sizeStyle, extraStyle, disabled, isHovered, isActive, isFocused],\n );\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n style={style}\n aria-label={ariaLabel}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsActive(false);\n }}\n onMouseDown={() => setIsActive(true)}\n onMouseUp={() => setIsActive(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n >\n {children}\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n/**\n * NumberInput 컴포넌트 / NumberInput component\n *\n * 숫자 입력을 위한 컴포넌트로, 커스텀 +/- 버튼을 제공합니다.\n * 브라우저 기본 스피너 대신 스타일링된 버튼을 사용합니다.\n *\n * Number input component with custom +/- buttons.\n * Uses styled buttons instead of browser default spinners.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <NumberInput value={count} onChange={setCount} />\n *\n * @example\n * // 범위 지정 / With range\n * <NumberInput min={0} max={100} step={5} />\n *\n * @example\n * // 세로 버튼 / Vertical buttons\n * <NumberInput buttonLayout=\"vertical\" />\n */\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n min,\n max,\n step = 1,\n onChange,\n disabled = false,\n size = \"md\",\n showButtons = true,\n buttonLayout = \"horizontal\",\n dot: dotProp,\n style,\n id: idProp,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const id = idProp || autoId;\n\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [isInputFocused, setIsInputFocused] = useState(false);\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n const sizes = SIZE_STYLES[size];\n\n const updateValue = React.useCallback(\n (newValue: number) => {\n let clampedValue = newValue;\n if (min !== undefined) clampedValue = Math.max(min, clampedValue);\n if (max !== undefined) clampedValue = Math.min(max, clampedValue);\n\n if (!isControlled) {\n setInternalValue(clampedValue);\n }\n onChange?.(clampedValue);\n },\n [isControlled, min, max, onChange],\n );\n\n const increment = () => {\n if (disabled) return;\n updateValue(currentValue + step);\n };\n\n const decrement = () => {\n if (disabled) return;\n updateValue(currentValue - step);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (inputValue === \"\" || inputValue === \"-\") return;\n const newValue = parseFloat(inputValue);\n if (!isNaN(newValue)) {\n if (min !== undefined && newValue < min) {\n updateValue(min);\n } else {\n updateValue(newValue);\n }\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsInputFocused(false);\n if (min !== undefined && currentValue < min) updateValue(min);\n if (max !== undefined && currentValue > max) updateValue(max);\n props.onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n increment();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n decrement();\n }\n };\n\n const canDecrement = min === undefined || currentValue > min;\n const canIncrement = max === undefined || currentValue < max;\n\n // Wrapper style\n const wrapperStyle = useMemo(\n (): React.CSSProperties =>\n mergeStyles(WRAPPER_BASE, sizes.wrapper, resolveDot(dotProp), style),\n [sizes.wrapper, dotProp, style],\n );\n\n // Input style\n const inputStyle = useMemo(\n (): React.CSSProperties =>\n mergeStyles(\n INPUT_BASE,\n sizes.input,\n disabled ? INPUT_DISABLED : undefined,\n isInputFocused ? INPUT_FOCUS : undefined,\n ),\n [sizes.input, disabled, isInputFocused],\n );\n\n if (buttonLayout === \"vertical\") {\n const halfButtonStyle: React.CSSProperties = {\n ...sizes.button,\n height: \"calc(50% - 1px)\",\n };\n const topButtonExtra: React.CSSProperties = {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n };\n const bottomButtonExtra: React.CSSProperties = {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n };\n\n return (\n <div style={wrapperStyle}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.125rem\",\n }}\n >\n <StepButton\n onClick={increment}\n disabled={disabled || !canIncrement}\n ariaLabel=\"Increase\"\n sizeStyle={halfButtonStyle}\n extraStyle={topButtonExtra}\n >\n <ChevronUp style={{ width: \"0.75rem\", height: \"0.75rem\" }} />\n </StepButton>\n <StepButton\n onClick={decrement}\n disabled={disabled || !canDecrement}\n ariaLabel=\"Decrease\"\n sizeStyle={halfButtonStyle}\n extraStyle={bottomButtonExtra}\n >\n <ChevronDown style={{ width: \"0.75rem\", height: \"0.75rem\" }} />\n </StepButton>\n </div>\n <input\n ref={ref}\n id={id}\n type=\"text\"\n inputMode=\"numeric\"\n pattern={min !== undefined && min >= 0 ? \"[0-9]*\" : \"-?[0-9]*\"}\n value={currentValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n onFocus={() => setIsInputFocused(true)}\n disabled={disabled}\n style={inputStyle}\n {...props}\n />\n </div>\n );\n }\n\n return (\n <div style={wrapperStyle}>\n {showButtons && (\n <StepButton\n onClick={decrement}\n disabled={disabled || !canDecrement}\n ariaLabel=\"Decrease\"\n sizeStyle={sizes.button}\n >\n <Minus style={{ width: \"0.875rem\", height: \"0.875rem\" }} />\n </StepButton>\n )}\n <input\n ref={ref}\n id={id}\n type=\"text\"\n inputMode=\"numeric\"\n pattern={min !== undefined && min >= 0 ? \"[0-9]*\" : \"-?[0-9]*\"}\n value={currentValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n onFocus={() => setIsInputFocused(true)}\n disabled={disabled}\n style={inputStyle}\n {...props}\n />\n {showButtons && (\n <StepButton\n onClick={increment}\n disabled={disabled || !canIncrement}\n ariaLabel=\"Increase\"\n sizeStyle={sizes.button}\n >\n <Plus style={{ width: \"0.875rem\", height: \"0.875rem\" }} />\n </StepButton>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = \"NumberInput\";\n\n// ---------------------------------------------------------------------------\n// Icon sub-components (inline style for SVG sizing)\n// ---------------------------------------------------------------------------\nfunction Minus({ style }: { style?: React.CSSProperties }) {\n return (\n <svg style={style} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M20 12H4\"\n />\n </svg>\n );\n}\n\nfunction Plus({ style }: { style?: React.CSSProperties }) {\n return (\n <svg style={style} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n );\n}\n\nfunction ChevronUp({ style }: { style?: React.CSSProperties }) {\n return (\n <svg style={style} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n );\n}\n\nfunction ChevronDown({ style }: { style?: React.CSSProperties }) {\n return (\n <svg style={style} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n );\n}\n\nexport { NumberInput };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {d,e}from'./chunk-OBMOTQEU.mjs';import P from'react';import {dot}from'@hua-labs/dot';import {jsxs,jsx}from'react/jsx-runtime';var H=P.forwardRef(({title:s,items:i,columns:n=4,loading:c=false,dot:b,style:v,...u},h)=>{let l="rounded-2xl border border-[var(--border-subtle)] bg-[var(--surface)] text-[var(--text-strong)] shadow-sm transition-colors",d$1={primary:{card:`${l} ring-1 ring-[rgba(0,82,204,0.18)] dark:ring-[rgba(59,130,246,0.28)] bg-gradient-to-br from-[rgba(0,82,204,0.08)] via-transparent to-transparent dark:from-[rgba(59,130,246,0.18)]`,label:"text-[var(--brand-primary)]",value:"text-[var(--text-strong)]",icon:"text-[var(--brand-primary)]",iconWrapper:"bg-[rgba(0,82,204,0.12)] dark:bg-[rgba(59,130,246,0.25)]"},secondary:{card:`${l} ring-1 ring-[rgba(11,122,91,0.18)] dark:ring-[rgba(52,211,153,0.25)] bg-gradient-to-br from-[rgba(0,200,151,0.08)] via-transparent to-transparent dark:from-[rgba(52,211,153,0.16)]`,label:"text-[var(--brand-secondary)]",value:"text-[var(--text-strong)]",icon:"text-[var(--brand-secondary)]",iconWrapper:"bg-[rgba(0,200,151,0.12)] dark:bg-[rgba(52,211,153,0.22)]"},warning:{card:`${l} ring-1 ring-[rgba(245,158,11,0.2)] dark:ring-[rgba(251,191,36,0.32)] bg-gradient-to-br from-[rgba(245,158,11,0.1)] via-transparent to-transparent dark:from-[rgba(251,191,36,0.2)]`,label:"text-amber-600",value:"text-[var(--text-strong)]",icon:"text-amber-600",iconWrapper:"bg-[rgba(245,158,11,0.15)] dark:bg-[rgba(251,191,36,0.25)]"},neutral:{card:l,label:"text-[var(--text-muted)]",value:"text-[var(--text-strong)]",icon:"text-[var(--text-muted)]",iconWrapper:"bg-[var(--surface-muted)]"}},k={1:"grid-cols-1",2:"grid-cols-1 lg:grid-cols-2",3:"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3",4:"grid-cols-1 lg:grid-cols-2 xl:grid-cols-4"}[n];return jsxs("div",{ref:h,style:d(dot("w-full"),e(b),v),...u,children:[s&&jsx("h2",{style:dot("mb-4 text-lg font-semibold text-foreground"),children:s}),jsx("div",{style:dot(`grid gap-5 ${k}`),children:c?Array.from({length:n}).map((e,p)=>jsxs("div",{style:dot("animate-pulse rounded-2xl border border-[var(--border-subtle)] bg-[var(--surface)] p-6"),children:[jsx("div",{style:dot("mb-2 h-4 w-20 rounded bg-[var(--surface-muted)]/80")}),jsx("div",{style:dot("mb-1 h-8 w-24 rounded bg-[var(--surface-muted)]/80")}),jsx("div",{style:dot("h-3 w-32 rounded bg-[var(--surface-muted)]/80")})]},p)):i.map((e,p)=>{var m,f,y,R,S;return jsxs("div",{style:dot(`rounded-xl transition-all duration-200 p-6 ${d$1[(m=e.accent)!=null?m:"neutral"].card}`),children:[jsxs("div",{style:dot("mb-3 flex items-start justify-between gap-4"),children:[jsx("div",{style:dot(`text-sm font-medium ${d$1[(f=e.accent)!=null?f:"neutral"].label}`),children:e.label}),e.icon&&jsx("div",{style:dot(`inline-flex h-10 w-10 items-center justify-center rounded-xl text-base font-semibold ${d$1[(y=e.accent)!=null?y:"neutral"].iconWrapper} ${d$1[(R=e.accent)!=null?R:"neutral"].icon}`),children:e.icon})]}),jsx("div",{style:dot(`text-2xl font-semibold leading-tight mb-2 ${d$1[(S=e.accent)!=null?S:"neutral"].value}`),children:e.value}),e.description&&jsx("div",{style:dot("mt-1 text-xs text-muted-foreground"),children:e.description}),e.trend&&e.trendValue&&jsxs("div",{style:dot(`mt-2 flex items-center gap-1 text-xs ${e.trend==="up"?"text-green-600":e.trend==="down"?"text-red-600":"text-muted-foreground"}`),children:[e.trend==="up"&&"\u2191",e.trend==="down"&&"\u2193",e.trendValue]})]},p)})})]})});H.displayName="StatsPanel";var $=P.forwardRef(({title:s,description:i,action:n,dot:c,style:b,...v},u)=>jsxs("div",{ref:u,style:d(e("flex items-center justify-between border-b border-border bg-transparent px-6 py-4 text-foreground"),e(c),b),...v,children:[jsxs("div",{style:e("flex-1"),children:[jsx("h3",{style:e("text-base font-semibold text-inherit"),children:s}),i&&jsx("p",{style:e("mt-1 text-sm text-muted-foreground"),children:i})]}),n&&jsx("div",{style:e("flex-shrink-0 ml-4"),children:n})]}));$.displayName="SectionHeader";export{H as a,$ as b};//# sourceMappingURL=chunk-MR46CSMC.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-MR46CSMC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/StatsPanel.tsx","../src/components/SectionHeader.tsx"],"names":["StatsPanel","React","title","items","columns","loading","dotProp","style","props","ref","baseCardClass","accentStyles","gridCols","jsxs","mergeStyles","dot","resolveDot","jsx","_","i","item","index","_a","_b","_c","_d","_e","SectionHeader","description","action","styleProp"],"mappings":"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","file":"chunk-MR46CSMC.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { dot } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n/**\n * StatsPanelItem 인터페이스 / StatsPanelItem interface\n * @typedef {Object} StatsPanelItem\n * @property {string} label - 통계 항목 라벨 / Stat item label\n * @property {string | React.ReactNode} value - 통계 값 / Stat value\n * @property {string | React.ReactNode} [description] - 통계 설명 / Stat description\n * @property {\"up\" | \"down\" | \"neutral\"} [trend] - 추세 방향 / Trend direction\n * @property {string} [trendValue] - 추세 값 / Trend value\n * @property {\"primary\" | \"secondary\" | \"neutral\" | \"warning\"} [accent] - 강조 색상 / Accent color\n * @property {React.ReactNode} [icon] - 아이콘 / Icon\n */\nexport interface StatsPanelItem {\n label: string;\n value: string | React.ReactNode;\n description?: string | React.ReactNode;\n trend?: \"up\" | \"down\" | \"neutral\";\n trendValue?: string;\n accent?: \"primary\" | \"secondary\" | \"neutral\" | \"warning\";\n icon?: React.ReactNode;\n}\n\n/**\n * StatsPanel 컴포넌트의 props / StatsPanel component props\n * @typedef {Object} StatsPanelProps\n * @property {string} [title] - 패널 제목 / Panel title\n * @property {StatsPanelItem[]} items - 통계 항목 배열 / Stat items array\n * @property {1 | 2 | 3 | 4} [columns=4] - 그리드 컬럼 수 / Grid column count\n * @property {boolean} [loading=false] - 로딩 상태 / Loading state\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface StatsPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> {\n title?: string;\n items: StatsPanelItem[];\n columns?: 1 | 2 | 3 | 4;\n loading?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * StatsPanel 컴포넌트 / StatsPanel component\n * \n * 통계 정보를 표시하는 패널 컴포넌트입니다.\n * 여러 통계 항목을 그리드 형태로 표시하며, 추세 정보를 포함할 수 있습니다.\n * \n * Panel component that displays statistics.\n * Shows multiple stat items in grid format and can include trend information.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <StatsPanel\n * items={[\n * { label: \"총 사용자\", value: \"1,234\", trend: \"up\", trendValue: \"+12%\" },\n * { label: \"활성 사용자\", value: \"567\", trend: \"down\", trendValue: \"-5%\" }\n * ]}\n * />\n * \n * @example\n * // 2열 그리드, 제목 포함 / 2-column grid with title\n * <StatsPanel\n * title=\"통계\"\n * columns={2}\n * items={[\n * { label: \"항목 1\", value: \"100\", accent: \"primary\" },\n * { label: \"항목 2\", value: \"200\", accent: \"secondary\" }\n * ]}\n * />\n * \n * @param {StatsPanelProps} props - StatsPanel 컴포넌트의 props / StatsPanel component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} StatsPanel 컴포넌트 / StatsPanel component\n */\nexport const StatsPanel = React.forwardRef<HTMLDivElement, StatsPanelProps>(\n (\n {\n title,\n items,\n columns = 4,\n loading = false,\n dot: dotProp,\n style,\n ...props\n },\n ref\n ) => {\n const baseCardClass =\n \"rounded-2xl border border-[var(--border-subtle)] bg-[var(--surface)] text-[var(--text-strong)] shadow-sm transition-colors\";\n\n const accentStyles: Record<\n NonNullable<StatsPanelItem[\"accent\"]>,\n {\n card: string;\n label: string;\n value: string;\n icon: string;\n iconWrapper: string;\n }\n > = {\n primary: {\n card: `${baseCardClass} ring-1 ring-[rgba(0,82,204,0.18)] dark:ring-[rgba(59,130,246,0.28)] bg-gradient-to-br from-[rgba(0,82,204,0.08)] via-transparent to-transparent dark:from-[rgba(59,130,246,0.18)]`,\n label: \"text-[var(--brand-primary)]\",\n value: \"text-[var(--text-strong)]\",\n icon: \"text-[var(--brand-primary)]\",\n iconWrapper: \"bg-[rgba(0,82,204,0.12)] dark:bg-[rgba(59,130,246,0.25)]\",\n },\n secondary: {\n card: `${baseCardClass} ring-1 ring-[rgba(11,122,91,0.18)] dark:ring-[rgba(52,211,153,0.25)] bg-gradient-to-br from-[rgba(0,200,151,0.08)] via-transparent to-transparent dark:from-[rgba(52,211,153,0.16)]`,\n label: \"text-[var(--brand-secondary)]\",\n value: \"text-[var(--text-strong)]\",\n icon: \"text-[var(--brand-secondary)]\",\n iconWrapper: \"bg-[rgba(0,200,151,0.12)] dark:bg-[rgba(52,211,153,0.22)]\",\n },\n warning: {\n card: `${baseCardClass} ring-1 ring-[rgba(245,158,11,0.2)] dark:ring-[rgba(251,191,36,0.32)] bg-gradient-to-br from-[rgba(245,158,11,0.1)] via-transparent to-transparent dark:from-[rgba(251,191,36,0.2)]`,\n label: \"text-amber-600\",\n value: \"text-[var(--text-strong)]\",\n icon: \"text-amber-600\",\n iconWrapper: \"bg-[rgba(245,158,11,0.15)] dark:bg-[rgba(251,191,36,0.25)]\",\n },\n neutral: {\n card: baseCardClass,\n label: \"text-[var(--text-muted)]\",\n value: \"text-[var(--text-strong)]\",\n icon: \"text-[var(--text-muted)]\",\n iconWrapper: \"bg-[var(--surface-muted)]\",\n },\n };\n\n const gridCols = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 lg:grid-cols-2\",\n 3: \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3\",\n 4: \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-4\",\n }[columns];\n\n return (\n <div\n ref={ref}\n style={mergeStyles(dot(\"w-full\"), resolveDot(dotProp), style)}\n {...props}\n >\n {title && (\n <h2 style={dot(\"mb-4 text-lg font-semibold text-foreground\")}>\n {title}\n </h2>\n )}\n <div\n style={dot(`grid gap-5 ${gridCols}`)}\n >\n {loading ? (\n Array.from({ length: columns }).map((_, i) => (\n <div\n key={i}\n style={dot(\"animate-pulse rounded-2xl border border-[var(--border-subtle)] bg-[var(--surface)] p-6\")}\n >\n <div style={dot(\"mb-2 h-4 w-20 rounded bg-[var(--surface-muted)]/80\")} />\n <div style={dot(\"mb-1 h-8 w-24 rounded bg-[var(--surface-muted)]/80\")} />\n <div style={dot(\"h-3 w-32 rounded bg-[var(--surface-muted)]/80\")} />\n </div>\n ))\n ) : (\n items.map((item, index) => (\n <div\n key={index}\n style={dot(`rounded-xl transition-all duration-200 p-6 ${accentStyles[item.accent ?? \"neutral\"].card}`)}\n >\n <div style={dot(\"mb-3 flex items-start justify-between gap-4\")}>\n <div\n style={dot(`text-sm font-medium ${accentStyles[item.accent ?? \"neutral\"].label}`)}\n >\n {item.label}\n </div>\n {item.icon && (\n <div\n style={dot(`inline-flex h-10 w-10 items-center justify-center rounded-xl text-base font-semibold ${accentStyles[item.accent ?? \"neutral\"].iconWrapper} ${accentStyles[item.accent ?? \"neutral\"].icon}`)}\n >\n {item.icon}\n </div>\n )}\n </div>\n <div\n style={dot(`text-2xl font-semibold leading-tight mb-2 ${accentStyles[item.accent ?? \"neutral\"].value}`)}\n >\n {item.value}\n </div>\n {item.description && (\n <div style={dot(\"mt-1 text-xs text-muted-foreground\")}>\n {item.description}\n </div>\n )}\n {item.trend && item.trendValue && (\n <div\n style={dot(`mt-2 flex items-center gap-1 text-xs ${\n item.trend === \"up\"\n ? \"text-green-600\"\n : item.trend === \"down\"\n ? \"text-red-600\"\n : \"text-muted-foreground\"\n }`)}\n >\n {item.trend === \"up\" && \"↑\"}\n {item.trend === \"down\" && \"↓\"}\n {item.trendValue}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n );\n }\n);\n\nStatsPanel.displayName = \"StatsPanel\";\n\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n/**\n * SectionHeader 컴포넌트의 props / SectionHeader component props\n * @typedef {Object} SectionHeaderProps\n * @property {string} title - 섹션 제목 / Section title\n * @property {string} [description] - 섹션 설명 / Section description\n * @property {React.ReactNode} [action] - 액션 버튼 또는 요소 / Action button or element\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'className'> {\n title: string;\n description?: string;\n action?: React.ReactNode;\n dot?: string;\n}\n\n/**\n * SectionHeader 컴포넌트 / SectionHeader component\n *\n * 섹션의 헤더를 표시하는 컴포넌트입니다.\n * 제목, 설명, 액션 버튼을 포함할 수 있습니다.\n *\n * Component that displays section header.\n * Can include title, description, and action button.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <SectionHeader title=\"섹션 제목\" />\n *\n * @example\n * // 설명과 액션 포함 / With description and action\n * <SectionHeader\n * title=\"알림\"\n * description=\"최근 알림 목록\"\n * action={<Button>모두 읽음</Button>}\n * />\n *\n * @param {SectionHeaderProps} props - SectionHeader 컴포넌트의 props / SectionHeader component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} SectionHeader 컴포넌트 / SectionHeader component\n */\nexport const SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n (\n {\n title,\n description,\n action,\n dot: dotProp,\n style: styleProp,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n style={mergeStyles(\n resolveDot(\"flex items-center justify-between border-b border-border bg-transparent px-6 py-4 text-foreground\"),\n resolveDot(dotProp),\n styleProp\n )}\n {...props}\n >\n <div style={resolveDot(\"flex-1\")}>\n <h3 style={resolveDot(\"text-base font-semibold text-inherit\")}>\n {title}\n </h3>\n {description && (\n <p style={resolveDot(\"mt-1 text-sm text-muted-foreground\")}>\n {description}\n </p>\n )}\n </div>\n {action && (\n <div style={resolveDot(\"flex-shrink-0 ml-4\")}>\n {action}\n </div>\n )}\n </div>\n );\n }\n);\n\nSectionHeader.displayName = \"SectionHeader\";\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {e,d}from'./chunk-OBMOTQEU.mjs';import {House}from'@phosphor-icons/react/dist/ssr/House';import {ArrowLeft}from'@phosphor-icons/react/dist/ssr/ArrowLeft';import {ArrowRight}from'@phosphor-icons/react/dist/ssr/ArrowRight';import {ArrowUp}from'@phosphor-icons/react/dist/ssr/ArrowUp';import {ArrowDown}from'@phosphor-icons/react/dist/ssr/ArrowDown';import {List}from'@phosphor-icons/react/dist/ssr/List';import {X}from'@phosphor-icons/react/dist/ssr/X';import {MagnifyingGlass}from'@phosphor-icons/react/dist/ssr/MagnifyingGlass';import {Gear}from'@phosphor-icons/react/dist/ssr/Gear';import {ArrowSquareOut}from'@phosphor-icons/react/dist/ssr/ArrowSquareOut';import {CaretLeft}from'@phosphor-icons/react/dist/ssr/CaretLeft';import {CaretRight}from'@phosphor-icons/react/dist/ssr/CaretRight';import {CaretDown}from'@phosphor-icons/react/dist/ssr/CaretDown';import {CaretUp}from'@phosphor-icons/react/dist/ssr/CaretUp';import {Pencil}from'@phosphor-icons/react/dist/ssr/Pencil';import {Trash}from'@phosphor-icons/react/dist/ssr/Trash';import {Plus}from'@phosphor-icons/react/dist/ssr/Plus';import {Minus}from'@phosphor-icons/react/dist/ssr/Minus';import {Download}from'@phosphor-icons/react/dist/ssr/Download';import {Upload}from'@phosphor-icons/react/dist/ssr/Upload';import {ArrowClockwise}from'@phosphor-icons/react/dist/ssr/ArrowClockwise';import {FloppyDisk}from'@phosphor-icons/react/dist/ssr/FloppyDisk';import {Copy}from'@phosphor-icons/react/dist/ssr/Copy';import {TextB}from'@phosphor-icons/react/dist/ssr/TextB';import {TextItalic}from'@phosphor-icons/react/dist/ssr/TextItalic';import {TextStrikethrough}from'@phosphor-icons/react/dist/ssr/TextStrikethrough';import {TextHOne}from'@phosphor-icons/react/dist/ssr/TextHOne';import {Link}from'@phosphor-icons/react/dist/ssr/Link';import {Code}from'@phosphor-icons/react/dist/ssr/Code';import {FileCode}from'@phosphor-icons/react/dist/ssr/FileCode';import {Quotes}from'@phosphor-icons/react/dist/ssr/Quotes';import {ListNumbers}from'@phosphor-icons/react/dist/ssr/ListNumbers';import {SpinnerGap}from'@phosphor-icons/react/dist/ssr/SpinnerGap';import {CheckCircle}from'@phosphor-icons/react/dist/ssr/CheckCircle';import {XCircle}from'@phosphor-icons/react/dist/ssr/XCircle';import {WarningCircle}from'@phosphor-icons/react/dist/ssr/WarningCircle';import {Info}from'@phosphor-icons/react/dist/ssr/Info';import {Check}from'@phosphor-icons/react/dist/ssr/Check';import {Circle}from'@phosphor-icons/react/dist/ssr/Circle';import {Question}from'@phosphor-icons/react/dist/ssr/Question';import {User}from'@phosphor-icons/react/dist/ssr/User';import {Users}from'@phosphor-icons/react/dist/ssr/Users';import {UserPlus}from'@phosphor-icons/react/dist/ssr/UserPlus';import {SignIn}from'@phosphor-icons/react/dist/ssr/SignIn';import {SignOut}from'@phosphor-icons/react/dist/ssr/SignOut';import {Eye}from'@phosphor-icons/react/dist/ssr/Eye';import {EyeSlash}from'@phosphor-icons/react/dist/ssr/EyeSlash';import {ChartBar}from'@phosphor-icons/react/dist/ssr/ChartBar';import {TrendUp}from'@phosphor-icons/react/dist/ssr/TrendUp';import {Pulse}from'@phosphor-icons/react/dist/ssr/Pulse';import {Database}from'@phosphor-icons/react/dist/ssr/Database';import {Lightning}from'@phosphor-icons/react/dist/ssr/Lightning';import {FileText}from'@phosphor-icons/react/dist/ssr/FileText';import {File}from'@phosphor-icons/react/dist/ssr/File';import {Folder}from'@phosphor-icons/react/dist/ssr/Folder';import {Book}from'@phosphor-icons/react/dist/ssr/Book';import {BookOpen}from'@phosphor-icons/react/dist/ssr/BookOpen';import {Envelope}from'@phosphor-icons/react/dist/ssr/Envelope';import {ChatCircle}from'@phosphor-icons/react/dist/ssr/ChatCircle';import {Phone}from'@phosphor-icons/react/dist/ssr/Phone';import {Image}from'@phosphor-icons/react/dist/ssr/Image';import {Video}from'@phosphor-icons/react/dist/ssr/Video';import {Camera}from'@phosphor-icons/react/dist/ssr/Camera';import {Smiley}from'@phosphor-icons/react/dist/ssr/Smiley';import {SmileySad}from'@phosphor-icons/react/dist/ssr/SmileySad';import {SmileyMeh}from'@phosphor-icons/react/dist/ssr/SmileyMeh';import {Lock}from'@phosphor-icons/react/dist/ssr/Lock';import {LockOpen}from'@phosphor-icons/react/dist/ssr/LockOpen';import {Shield}from'@phosphor-icons/react/dist/ssr/Shield';import {Wallet}from'@phosphor-icons/react/dist/ssr/Wallet';import {Key}from'@phosphor-icons/react/dist/ssr/Key';import {CurrencyDollar}from'@phosphor-icons/react/dist/ssr/CurrencyDollar';import {Clock}from'@phosphor-icons/react/dist/ssr/Clock';import {Calendar}from'@phosphor-icons/react/dist/ssr/Calendar';import {CalendarPlus}from'@phosphor-icons/react/dist/ssr/CalendarPlus';import {Bell}from'@phosphor-icons/react/dist/ssr/Bell';import {Heart}from'@phosphor-icons/react/dist/ssr/Heart';import {Star}from'@phosphor-icons/react/dist/ssr/Star';import {Bookmark}from'@phosphor-icons/react/dist/ssr/Bookmark';import {Share}from'@phosphor-icons/react/dist/ssr/Share';import {Monitor}from'@phosphor-icons/react/dist/ssr/Monitor';import {Sun}from'@phosphor-icons/react/dist/ssr/Sun';import {Moon}from'@phosphor-icons/react/dist/ssr/Moon';import {Lightbulb}from'@phosphor-icons/react/dist/ssr/Lightbulb';import {Brain}from'@phosphor-icons/react/dist/ssr/Brain';import {Flag}from'@phosphor-icons/react/dist/ssr/Flag';import {Square}from'@phosphor-icons/react/dist/ssr/Square';import {Sparkle}from'@phosphor-icons/react/dist/ssr/Sparkle';import {Globe}from'@phosphor-icons/react/dist/ssr/Globe';import {DeviceMobile}from'@phosphor-icons/react/dist/ssr/DeviceMobile';import {Ticket}from'@phosphor-icons/react/dist/ssr/Ticket';import {Clipboard}from'@phosphor-icons/react/dist/ssr/Clipboard';import {WifiHigh}from'@phosphor-icons/react/dist/ssr/WifiHigh';import {WifiSlash}from'@phosphor-icons/react/dist/ssr/WifiSlash';import {Cpu}from'@phosphor-icons/react/dist/ssr/Cpu';import {MaskHappy}from'@phosphor-icons/react/dist/ssr/MaskHappy';import {Rocket}from'@phosphor-icons/react/dist/ssr/Rocket';import {Layout}from'@phosphor-icons/react/dist/ssr/Layout';import {Megaphone}from'@phosphor-icons/react/dist/ssr/Megaphone';import {Stack}from'@phosphor-icons/react/dist/ssr/Stack';import {Prohibit}from'@phosphor-icons/react/dist/ssr/Prohibit';import n,{createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';import {dot}from'@hua-labs/dot';var Z={home:House,arrowLeft:ArrowLeft,arrowRight:ArrowRight,arrowUp:ArrowUp,arrowDown:ArrowDown,menu:List,x:X,close:X,search:MagnifyingGlass,settings:Gear,externalLink:ArrowSquareOut,chevronLeft:CaretLeft,chevronRight:CaretRight,chevronDown:CaretDown,chevronUp:CaretUp,edit:Pencil,delete:Trash,add:Plus,remove:Minus,download:Download,upload:Upload,refresh:ArrowClockwise,save:FloppyDisk,copy:Copy,loader:SpinnerGap,success:CheckCircle,error:XCircle,alertCircle:WarningCircle,warning:WarningCircle,info:Info,check:Check,circle:Circle,helpCircle:Question,user:User,users:Users,userPlus:UserPlus,logIn:SignIn,logOut:SignOut,eye:Eye,eyeOff:EyeSlash,chart:ChartBar,barChart:ChartBar,trendingUp:TrendUp,activity:Pulse,database:Database,zap:Lightning,fileText:FileText,file:File,folder:Folder,book:Book,bookOpen:BookOpen,mail:Envelope,message:ChatCircle,phone:Phone,image:Image,video:Video,camera:Camera,smile:Smiley,frown:SmileySad,meh:SmileyMeh,lock:Lock,unlock:LockOpen,shield:Shield,wallet:Wallet,key:Key,dollar:CurrencyDollar,dollarSign:CurrencyDollar,currency:CurrencyDollar,clock:Clock,calendar:Calendar,calendarPlus:CalendarPlus,bell:Bell,heart:Heart,star:Star,bookmark:Bookmark,share:Share,monitor:Monitor,sun:Sun,moon:Moon,lightbulb:Lightbulb,brain:Brain,flag:Flag,square:Square,sparkle:Sparkle,sparkles:Sparkle,globe:Globe,smartphone:DeviceMobile,deviceMobile:DeviceMobile,floppyDisk:FloppyDisk,ticket:Ticket,clipboard:Clipboard,wifi:WifiHigh,wifiOff:WifiSlash,cpu:Cpu,mask:MaskHappy,rocket:Rocket,layout:Layout,megaphone:Megaphone,layers:Stack,ban:Prohibit,bold:TextB,italic:TextItalic,strikethrough:TextStrikethrough,heading:TextHOne,link:Link,code:Code,fileCode:FileCode,quote:Quotes,list:List,listOrdered:ListNumbers,minus:Minus},Y={happy:"smile",sad:"frown",neutral:"meh",excited:"smile",angry:"frown",love:"heart",like:"heart",dislike:"frown"},oo={loading:"loader",success:"success",error:"error",warning:"warning",info:"info",locked:"lock",unlocked:"unlock",visible:"eye",hidden:"eyeOff"},ct={navigation:["home","arrowLeft","arrowRight","arrowUp","arrowDown","menu","close","search","settings","externalLink","chevronLeft","chevronRight","chevronDown","chevronUp"],actions:["edit","delete","add","remove","download","upload","refresh","save","copy"],status:["loader","success","error","alertCircle","warning","info","check","circle"],user:["user","users","userPlus","logIn","logOut","eye","eyeOff"],data:["chart","barChart","trendingUp","activity","database","zap"],files:["fileText","file","folder","book"],communication:["mail","message","phone"],media:["image","video","camera"],emotions:["smile","frown","meh"],security:["lock","unlock","shield"],time:["clock","calendar"],ui:["bell","heart","star","bookmark","share"],theme:["monitor","sun","moon"]};function eo(o){return !o||!/[-_]/.test(o)&&/^[a-z]/.test(o)?o:/^[A-Z]+$/.test(o)?o.toLowerCase():/^[A-Z]/.test(o)&&!/[-_]/.test(o)?o.charAt(0).toLowerCase()+o.slice(1):o.split(/[-_]/).map((e,r)=>r===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function x(o){return !o||/^[A-Z]/.test(o)&&!/[-_]/.test(o)?o:/[-_]/.test(o)?o.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(""):o.charAt(0).toUpperCase()+o.slice(1)}var U="__hua_icon_resolvers__";function v(){let o=globalThis;return o[U]||(o[U]={lucide:null,iconsax:null}),o[U]}function ut(o){v().lucide=o;}function ro(){return v().lucide}function W(){return v().iconsax}var E={home:{lucide:"Home",phosphor:"House",iconsax:"Home2"},"layout-dashboard":{lucide:"LayoutDashboard",phosphor:"SquaresFour"},folder:{lucide:"Folder",phosphor:"Folder",iconsax:"Folder"},"alert-circle":{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Danger"},alertCircle:{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Danger"},columns:{lucide:"Columns",phosphor:"Columns"},users:{lucide:"Users",phosphor:"Users",iconsax:"People"},settings:{lucide:"Settings",phosphor:"Gear"},menu:{lucide:"Menu",phosphor:"List",iconsax:"Menu"},close:{lucide:"X",phosphor:"X",iconsax:"CloseCircle"},chevronLeft:{lucide:"ChevronLeft",phosphor:"CaretLeft",iconsax:"ArrowLeft2"},chevronRight:{lucide:"ChevronRight",phosphor:"CaretRight",iconsax:"ArrowRight2"},chevronDown:{lucide:"ChevronDown",phosphor:"CaretDown",iconsax:"ArrowDown2"},chevronUp:{lucide:"ChevronUp",phosphor:"CaretUp",iconsax:"ArrowUp2"},arrowLeft:{lucide:"ArrowLeft",phosphor:"ArrowLeft",iconsax:"ArrowLeft"},arrowRight:{lucide:"ArrowRight",phosphor:"ArrowRight",iconsax:"ArrowRight"},arrowUp:{lucide:"ArrowUp",phosphor:"ArrowUp",iconsax:"ArrowUp"},arrowDown:{lucide:"ArrowDown",phosphor:"ArrowDown",iconsax:"ArrowDown"},add:{lucide:"Plus",phosphor:"Plus",iconsax:"Add"},edit:{lucide:"Edit",phosphor:"Pencil"},pencil:{lucide:"Pencil",phosphor:"Pencil"},delete:{lucide:"Trash2",phosphor:"Trash",iconsax:"Trash"},trash:{lucide:"Trash2",phosphor:"Trash",iconsax:"Trash"},upload:{lucide:"Upload",phosphor:"Upload",iconsax:"Upload"},download:{lucide:"Download",phosphor:"Download",iconsax:"Download"},x:{lucide:"X",phosphor:"X"},check:{lucide:"Check",phosphor:"Check",iconsax:"Check"},search:{lucide:"Search",phosphor:"MagnifyingGlass",iconsax:"SearchNormal"},share:{lucide:"Share",phosphor:"Share"},copy:{lucide:"Copy",phosphor:"Copy"},save:{lucide:"Save",phosphor:"FloppyDisk"},loader:{lucide:"Loader2",phosphor:"Spinner"},loader2:{lucide:"Loader2",phosphor:"Spinner"},"check-circle":{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},checkCircle:{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},success:{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},error:{lucide:"XCircle",phosphor:"XCircle",iconsax:"CloseCircle"},warning:{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Warning2"},info:{lucide:"Info",phosphor:"Info",iconsax:"InfoCircle"},refresh:{lucide:"RefreshCw",phosphor:"ArrowClockwise",iconsax:"Refresh"},refreshCw:{lucide:"RefreshCw",phosphor:"ArrowClockwise",iconsax:"Refresh"},bell:{lucide:"Bell",phosphor:"Bell",iconsax:"Bell"},heart:{lucide:"Heart",phosphor:"Heart",iconsax:"Heart"},star:{lucide:"Star",phosphor:"Star",iconsax:"Star"},bookmark:{lucide:"Bookmark",phosphor:"Bookmark"},user:{lucide:"User",phosphor:"User",iconsax:"User"},userPlus:{lucide:"UserPlus",phosphor:"UserPlus",iconsax:"UserAdd"},logIn:{lucide:"LogIn",phosphor:"SignIn",iconsax:"Login"},logOut:{lucide:"LogOut",phosphor:"SignOut",iconsax:"Logout"},chrome:{lucide:"Chrome",phosphor:"ChromeLogo",iconsax:"Chrome"},github:{lucide:"Github",phosphor:"GithubLogo"},message:{lucide:"MessageCircle",phosphor:"ChatCircle"},messageSquare:{lucide:"MessageSquare",phosphor:"ChatSquare"},"message-square":{lucide:"MessageSquare",phosphor:"ChatSquare"},inbox:{lucide:"Inbox",phosphor:"Inbox"},calendar:{lucide:"Calendar",phosphor:"Calendar"},calendarPlus:{lucide:"CalendarPlus",phosphor:"CalendarPlus"},checkSquare:{lucide:"CheckSquare",phosphor:"CheckSquare",iconsax:"TickSquare"},clock:{lucide:"Clock",phosphor:"Clock"},book:{lucide:"Book",phosphor:"Book",iconsax:"Book"},bookOpen:{lucide:"BookOpen",phosphor:"BookOpen",iconsax:"Book"},monitor:{lucide:"Monitor",phosphor:"Monitor",iconsax:"Monitor"},sun:{lucide:"Sun",phosphor:"Sun",iconsax:"Sun"},moon:{lucide:"Moon",phosphor:"Moon",iconsax:"Moon"},sparkle:{lucide:"Sparkle",phosphor:"Sparkle"},sparkles:{lucide:"Sparkles",phosphor:"Sparkle"},lightbulb:{lucide:"Lightbulb",phosphor:"Lightbulb"},brain:{lucide:"Brain",phosphor:"Brain"},zap:{lucide:"Zap",phosphor:"Lightning"},globe:{lucide:"Globe",phosphor:"Globe",iconsax:"Global"},deviceMobile:{lucide:"Smartphone",phosphor:"DeviceMobile"},smartphone:{lucide:"Smartphone",phosphor:"DeviceMobile"},floppyDisk:{lucide:"Save",phosphor:"FloppyDisk"},chart:{lucide:"BarChart3",phosphor:"ChartBar"},barChart:{lucide:"BarChart",phosphor:"ChartBar"},trendingUp:{lucide:"TrendingUp",phosphor:"TrendUp"},trendingDown:{lucide:"TrendingDown",phosphor:"TrendDown"},activity:{lucide:"Activity",phosphor:"Pulse"},database:{lucide:"Database",phosphor:"Database"},dollarSign:{lucide:"DollarSign",phosphor:"CurrencyDollar"},dollar:{lucide:"DollarSign",phosphor:"CurrencyDollar"},currency:{lucide:"DollarSign",phosphor:"CurrencyDollar"},layers:{lucide:"Layers",phosphor:"Stack"},ban:{lucide:"Ban",phosphor:"Prohibit"},lock:{lucide:"Lock",phosphor:"Lock",iconsax:"Lock"},unlock:{lucide:"Unlock",phosphor:"LockOpen",iconsax:"Unlock"},shield:{lucide:"Shield",phosphor:"Shield",iconsax:"Shield"},key:{lucide:"Key",phosphor:"Key"},play:{lucide:"Play",phosphor:"Play",iconsax:"Play"},pause:{lucide:"Pause",phosphor:"Pause",iconsax:"Pause"},image:{lucide:"Image",phosphor:"Image",iconsax:"Image"},video:{lucide:"Video",phosphor:"Video",iconsax:"Video"},camera:{lucide:"Camera",phosphor:"Camera",iconsax:"Camera"},fileText:{lucide:"FileText",phosphor:"FileText"},file:{lucide:"File",phosphor:"File"},externalLink:{lucide:"ExternalLink",phosphor:"ArrowSquareOut"},link:{lucide:"Link",phosphor:"Link",iconsax:"Link"},moreHorizontal:{lucide:"MoreHorizontal",phosphor:"DotsThreeOutline"},moreVertical:{lucide:"MoreVertical",phosphor:"DotsThreeVertical"},remove:{lucide:"Minus",phosphor:"Minus",iconsax:"Minus"},eye:{lucide:"Eye",phosphor:"Eye",iconsax:"Eye"},eyeOff:{lucide:"EyeOff",phosphor:"EyeSlash",iconsax:"EyeSlash"},smile:{lucide:"Smile",phosphor:"Smiley",iconsax:"EmojiHappy"},frown:{lucide:"Frown",phosphor:"SmileySad",iconsax:"EmojiSad"},meh:{lucide:"Meh",phosphor:"SmileyMeh",iconsax:"EmojiNormal"},mail:{lucide:"Mail",phosphor:"Envelope"},phone:{lucide:"Phone",phosphor:"Phone"},flag:{lucide:"Flag",phosphor:"Flag",iconsax:"Flag"},rocket:{lucide:"Rocket",phosphor:"Rocket",iconsax:"Rocket"},ticket:{lucide:"Ticket",phosphor:"Ticket",iconsax:"Ticket"},clipboard:{lucide:"ClipboardList",phosphor:"Clipboard",iconsax:"Sticker"},wifi:{lucide:"Wifi",phosphor:"WifiHigh",iconsax:"Wifi"},wifiOff:{lucide:"WifiOff",phosphor:"WifiSlash"},cpu:{lucide:"Cpu",phosphor:"Cpu",iconsax:"Computing"},mask:{lucide:"Drama",phosphor:"MaskHappy",iconsax:"EmojiHappy"},bold:{lucide:"Bold",phosphor:"TextB"},italic:{lucide:"Italic",phosphor:"TextItalic"},strikethrough:{lucide:"Strikethrough",phosphor:"TextStrikethrough"},heading:{lucide:"Heading",phosphor:"TextHOne"},code:{lucide:"Code",phosphor:"Code",iconsax:"Code"},fileCode:{lucide:"FileCode",phosphor:"FileCode"},quote:{lucide:"Quote",phosphor:"Quotes",iconsax:"QuoteUp"},list:{lucide:"List",phosphor:"List"},listOrdered:{lucide:"ListOrdered",phosphor:"ListNumbers"},minus:{lucide:"Minus",phosphor:"Minus",iconsax:"Minus"}};function L(o,e="phosphor"){let r=v();if(e==="lucide"){if(!r.lucide)return null;let h=E[o],d=h?h.lucide||x(o):x(o);return r.lucide(d)||null}if(e!=="iconsax"||!r.iconsax)return null;let s=E[o],u=s?s.iconsax||x(o):x(o);return r.iconsax(u)||null}function io(o,e){let r=E[o];if(r){let s=r[e];if(s)return s}return o}var C={"arrow-left":"arrowLeft","arrow-right":"arrowRight","arrow-up":"arrowUp","arrow-down":"arrowDown","chevron-left":"chevronLeft","chevron-right":"chevronRight","chevron-up":"chevronUp","chevron-down":"chevronDown","external-link":"externalLink","more-horizontal":"moreHorizontal","more-vertical":"moreVertical","user-plus":"userPlus","log-in":"logIn","log-out":"logOut","check-circle":"checkCircle","check-square":"checkSquare","alert-circle":"alertCircle","eye-off":"eyeOff","file-text":"fileText","book-open":"bookOpen","bar-chart":"barChart","trending-up":"trendingUp","trending-down":"trendingDown","message-square":"messageSquare","calendar-plus":"calendarPlus","refresh-cw":"refreshCw","dollar-sign":"dollarSign","layout-dashboard":"layoutDashboard","device-mobile":"deviceMobile","floppy-disk":"floppyDisk",back:"arrowLeft",prev:"arrowLeft",previous:"arrowLeft",forward:"arrowRight",next:"arrowRight",close:"x",cancel:"x",remove:"delete",trash:"delete",plus:"add",new:"add",pencil:"edit",modify:"edit",store:"save",floppy:"save",magnify:"search",person:"user",account:"user",profile:"user",gear:"settings",config:"settings",preferences:"settings",house:"home",main:"home",done:"check",complete:"check",tick:"check",information:"info",help:"info",alert:"warning",caution:"warning",checkmark:"success",checkCircle:"success",fail:"error",cross:"error",xCircle:"error",spinner:"loader",loading:"loader",wait:"loader",reload:"refresh",update:"refresh",sync:"refresh",show:"eye",view:"eye",hide:"eyeOff",hidden:"eyeOff",secure:"lock",locked:"lock",unsecure:"unlock",unlocked:"unlock",get:"download",fetch:"download",post:"upload",send:"share",export:"share",duplicate:"copy",clone:"copy",email:"mail",envelope:"mail",chat:"message",comment:"message",talk:"message",date:"calendar",schedule:"calendar",time:"clock",watch:"clock",document:"fileText",doc:"fileText",text:"fileText",directory:"folder",dir:"folder",picture:"image",img:"image",movie:"video",film:"video",photo:"camera",capture:"camera",start:"play",run:"play",stop:"pause",halt:"pause",like:"heart",love:"heart",favorite:"star",saveBookmark:"bookmark",notification:"bell",notify:"bell",alarm:"bell",prefs:"settings",lookup:"search",dots:"moreHorizontal",moreMenu:"moreHorizontal",moreOptions:"moreVertical",external:"externalLink",outbound:"externalLink",open:"externalLink",url:"link",hyperlink:"link",graph:"barChart",stats:"barChart",analytics:"barChart",db:"database",storage:"database",pulse:"activity",monitor:"activity",up:"trendingUp",down:"trendingDown",lightning:"zap",bolt:"zap",flash:"zap",security:"shield",protect:"shield",password:"key",secret:"key",signin:"logIn",login:"logIn",enter:"logIn",signout:"logOut",logout:"logOut",exit:"logOut",people:"users",group:"users",team:"users",addUser:"userPlus",invite:"userPlus",read:"book",library:"book",reading:"bookOpen",openBook:"bookOpen",light:"sun",day:"sun",dark:"moon",night:"moon",screen:"monitor",display:"monitor",ai:"brain",intelligence:"brain",think:"brain",idea:"lightbulb",bulb:"lightbulb",inspiration:"lightbulb",magic:"sparkles",stars:"sparkles",glitter:"sparkles"};function mt(o){if(typeof o!="string")throw new TypeError("iconName must be a string");return C[o]||o}function ft(o){if(typeof o!="string")throw new TypeError("iconName must be a string");return Object.entries(C).filter(([e,r])=>r===o).map(([e])=>e)}var l={set:"phosphor",weight:"regular",size:20,color:"currentColor",strokeWidth:1.25,iconsaxVariant:"line"},lr=o=>{switch(o){case "lucide":return 1.25;case "phosphor":return 1.25;case "iconsax":return 1.5;default:return 1.25}};var to=createContext(l);function ur({set:o=l.set,weight:e=l.weight,iconsaxVariant:r=l.iconsaxVariant,size:s=l.size,color:u=l.color,strokeWidth:h=l.strokeWidth,children:d}){let P={set:o,weight:e,iconsaxVariant:r,size:s,color:u,strokeWidth:h};return jsx(to.Provider,{value:P,children:d})}function B(){return useContext(to)}function no(o){if(!o||typeof o!="string")return {normalized:o||"",wasAlias:false};let e=eo(o),r=C[o]||C[e];return r?{normalized:r,wasAlias:true,originalAlias:o}:{normalized:e,wasAlias:false}}var so=n.forwardRef(({name:o,size:e$1,className:r,dot:s,style:u,emotion:h,status:d$1,provider:P,weight:uo,animated:mo=false,pulse:fo=false,spin:go=false,bounce:xo=false,variant:m="default","aria-label":y,"aria-hidden":I},N)=>{var V,F;let g=B(),i=P||g.set,t=e$1!=null?e$1:g.size,ko=uo||g.weight,Co=g.color,yo=(V=g.strokeWidth)!=null?V:1.25,z=(F=g.iconsaxVariant)!=null?F:"line",[T,Io]=n.useState(false);n.useEffect(()=>{Io(true);},[]);let D=n.useMemo(()=>{let b=h?Y[h]:d$1?oo[d$1]:o,{normalized:H}=no(b),So=io(H,i);return {normalized:H,providerName:So}},[o,h,d$1,i]),a=D.normalized,wo=n.useMemo(()=>{if(i==="iconsax"&&T){let b=W();if(b)return b(D.providerName,z)}return null},[i,D.providerName,T,z]),w=m==="default"?"text-current":m==="primary"?"text-primary":m==="secondary"||m==="muted"?"text-muted-foreground":m==="success"?"text-green-600 dark:text-green-400":m==="warning"?"text-yellow-600 dark:text-yellow-400":m==="error"?"text-destructive":"",O=n.useMemo(()=>s?e(s):void 0,[s]);if(!T)return jsx("span",{style:d(dot([w,r].filter(Boolean).join(" ")),{width:t,height:t},O,u),"aria-hidden":I!==void 0?I:true,"aria-label":y});let c;if(i==="phosphor"?c=Z[a]||null:i==="iconsax"?(c=wo,c||(c=L(a,i))):i==="lucide"?c=L(a,i):c=L(a,i),!c)return i==="iconsax"&&!W()?process.env.NODE_ENV==="development"&&console.warn(`Icon "${a}" \u2014 iconsax resolver not registered. Use HuaProvider with icons.set='iconsax', or add: import '@hua-labs/ui/iconsax'`):i==="lucide"&&!ro()?process.env.NODE_ENV==="development"&&console.warn(`Icon "${a}" \u2014 lucide resolver not registered. Add: import '@hua-labs/ui/lucide'`):console.warn(`Icon "${a}" not found for provider "${i}"`),jsx("span",{ref:N,style:d(dot(["inline-flex items-center justify-center rounded-full border-2 border-dashed border-border",w,r].filter(Boolean).join(" ")),{width:t,height:t},O,u),"aria-label":y||`\uC544\uC774\uCF58\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: ${a}`,title:`Icon not found: ${a}`,children:jsx("span",{style:dot("text-xs text-muted-foreground"),"aria-hidden":"true",children:"?"})});let A={size:typeof t=="number"?t:void 0,width:t,height:t,color:Co};i==="phosphor"?A.weight=ko:A.strokeWidth=yo;let bo=[fo?"animate-pulse":"",go?"animate-spin":"",xo?"animate-bounce":"",mo?"transition-all duration-200 ease-in-out":""].filter(Boolean).join(" "),k={};return y?(k["aria-label"]=y,k["aria-hidden"]=false):I!==void 0?k["aria-hidden"]=I:k["aria-hidden"]=true,jsx("span",{ref:N,style:d(dot(["inline-flex items-center justify-center",bo,w,r].filter(Boolean).join(" ")),{width:t,height:t},O,u),...k,children:c&&n.createElement(c,{...A,className:w,"aria-hidden":true})})});so.displayName="Icon";var mr=n.memo(so,(o,e)=>o.name===e.name&&o.size===e.size&&o.className===e.className&&o.dot===e.dot&&o.emotion===e.emotion&&o.status===e.status&&o.provider===e.provider&&o.animated===e.animated&&o.pulse===e.pulse&&o.spin===e.spin&&o.bounce===e.bounce&&o.variant===e.variant&&o.weight===e.weight&&o["aria-label"]===e["aria-label"]&&o["aria-hidden"]===e["aria-hidden"]),f=mr;f.displayName="Icon";var ao=n.forwardRef((o,e)=>jsx(f,{ref:e,name:"smile",...o}));ao.displayName="EmotionIcon";var co=n.forwardRef((o,e)=>jsx(f,{ref:e,name:"info",...o}));co.displayName="StatusIcon";var lo=n.forwardRef((o,e)=>jsx(f,{ref:e,name:"loader",status:"loading",spin:true,"aria-label":"\uB85C\uB529 \uC911",...o}));lo.displayName="LoadingIcon";var po=n.forwardRef((o,e)=>jsx(f,{ref:e,name:"check",status:"success",variant:"success","aria-label":"\uC131\uACF5",...o}));po.displayName="SuccessIcon";var ho=n.forwardRef((o,e)=>jsx(f,{ref:e,name:"alertCircle",status:"error",variant:"error","aria-label":"\uC624\uB958",...o}));ho.displayName="ErrorIcon";export{Y as a,oo as b,ct as c,ut as d,E as e,C as f,mt as g,ft as h,l as i,lr as j,ur as k,B as l,f as m,ao as n,co as o,lo as p,po as q,ho as r};//# sourceMappingURL=chunk-NSDWT2JM.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-NSDWT2JM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/icons.ts","../src/lib/case-utils.ts","../src/lib/icon-providers.ts","../src/lib/icon-aliases.ts","../src/components/Icon/icon-store.ts","../src/components/Icon/IconProvider.tsx","../src/lib/normalize-icon-name.ts","../src/components/Icon/Icon.tsx"],"names":["icons","House","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","List","X","MagnifyingGlass","Gear","ArrowSquareOut","CaretLeft","CaretRight","CaretDown","CaretUp","Pencil","Trash","Plus","Minus","Download","Upload","ArrowClockwise","FloppyDisk","Copy","SpinnerGap","CheckCircle","XCircle","WarningCircle","Info","Check","Circle","Question","User","Users","UserPlus","SignIn","SignOut","Eye","EyeSlash","ChartBar","TrendUp","Pulse","Database","Lightning","FileText","File","Folder","Book","BookOpen","Envelope","ChatCircle","Phone","Image","Video","Camera","Smiley","SmileySad","SmileyMeh","Lock","LockOpen","Shield","Wallet","Key","CurrencyDollar","Clock","Calendar","CalendarPlus","Bell","Heart","Star","Bookmark","Share","Monitor","Sun","Moon","Lightbulb","Brain","Flag","Square","Sparkle","Globe","DeviceMobile","Ticket","Clipboard","WifiHigh","WifiSlash","Cpu","MaskHappy","Rocket","Layout","Megaphone","Stack","Prohibit","TextB","TextItalic","TextStrikethrough","TextHOne","Link","Code","FileCode","Quotes","ListNumbers","emotionIcons","statusIcons","iconCategories","toCamelCase","str","word","index","toPascalCase","REGISTRY_KEY","getRegistry","g","registerLucideResolver","resolver","getLucideResolver","getIconsaxResolver","PROJECT_ICONS","getIconFromProvider","iconName","provider","registry","iconMapping","lucideName","iconsaxName","getIconNameForProvider","mappedName","ICON_ALIASES","resolveIconAlias","getIconAliases","_","target","alias","defaultIconConfig","getDefaultStrokeWidth","set","IconContext","createContext","IconProvider","weight","iconsaxVariant","size","color","strokeWidth","children","value","jsx","useIconContext","useContext","normalizeIconName","camelCased","aliasTarget","IconComponent","React","name","className","dotProp","styleProp","emotion","status","animated","pulse","spin","bounce","variant","ariaLabel","ariaHidden","ref","_a","_b","config","iconSet","iconSize","iconWeight","iconColor","iconStrokeWidth","isClient","setIsClient","resolvedIcon","baseName","normalized","providerName","iconsaxIcon","variantClasses","dotStyle","resolveDot","mergeStyles","dot","ResolvedIcon","iconProps","animationClasses","accessibilityProps","MemoizedIcon","prevProps","nextProps","Icon","EmotionIcon","props","StatusIcon","LoadingIcon","SuccessIcon","ErrorIcon"],"mappings":"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","file":"chunk-NSDWT2JM.mjs","sourcesContent":["/**\n * Core Icons (Phosphor Icons)\n *\n * 핵심 아이콘만 포함하여 번들 크기를 최적화합니다.\n * 나머지 아이콘은 동적 fallback으로 처리됩니다.\n *\n * 포함 기준:\n * 1. my-app에서 실제 사용 중인 아이콘\n * 2. UI 컴포넌트에서 자주 사용되는 아이콘\n * 3. 각 카테고리의 대표 아이콘\n *\n * 새로운 아이콘이 필요하면 동적 fallback이 자동으로 처리합니다.\n */\n\n// Navigation\nimport { House } from '@phosphor-icons/react/dist/ssr/House'\nimport { ArrowLeft } from '@phosphor-icons/react/dist/ssr/ArrowLeft'\nimport { ArrowRight } from '@phosphor-icons/react/dist/ssr/ArrowRight'\nimport { ArrowUp } from '@phosphor-icons/react/dist/ssr/ArrowUp'\nimport { ArrowDown } from '@phosphor-icons/react/dist/ssr/ArrowDown'\nimport { List } from '@phosphor-icons/react/dist/ssr/List'\nimport { X } from '@phosphor-icons/react/dist/ssr/X'\nimport { MagnifyingGlass } from '@phosphor-icons/react/dist/ssr/MagnifyingGlass'\nimport { Gear } from '@phosphor-icons/react/dist/ssr/Gear'\nimport { ArrowSquareOut } from '@phosphor-icons/react/dist/ssr/ArrowSquareOut'\nimport { CaretLeft } from '@phosphor-icons/react/dist/ssr/CaretLeft'\nimport { CaretRight } from '@phosphor-icons/react/dist/ssr/CaretRight'\nimport { CaretDown } from '@phosphor-icons/react/dist/ssr/CaretDown'\nimport { CaretUp } from '@phosphor-icons/react/dist/ssr/CaretUp'\n\n// Actions\nimport { Pencil } from '@phosphor-icons/react/dist/ssr/Pencil'\nimport { Trash } from '@phosphor-icons/react/dist/ssr/Trash'\nimport { Plus } from '@phosphor-icons/react/dist/ssr/Plus'\nimport { Minus } from '@phosphor-icons/react/dist/ssr/Minus'\nimport { Download } from '@phosphor-icons/react/dist/ssr/Download'\nimport { Upload } from '@phosphor-icons/react/dist/ssr/Upload'\nimport { ArrowClockwise } from '@phosphor-icons/react/dist/ssr/ArrowClockwise'\nimport { FloppyDisk } from '@phosphor-icons/react/dist/ssr/FloppyDisk'\nimport { Copy } from '@phosphor-icons/react/dist/ssr/Copy'\n\n// Text Formatting (Markdown Toolbar)\nimport { TextB } from '@phosphor-icons/react/dist/ssr/TextB'\nimport { TextItalic } from '@phosphor-icons/react/dist/ssr/TextItalic'\nimport { TextStrikethrough } from '@phosphor-icons/react/dist/ssr/TextStrikethrough'\nimport { TextHOne } from '@phosphor-icons/react/dist/ssr/TextHOne'\nimport { Link } from '@phosphor-icons/react/dist/ssr/Link'\nimport { Code } from '@phosphor-icons/react/dist/ssr/Code'\nimport { FileCode } from '@phosphor-icons/react/dist/ssr/FileCode'\nimport { Quotes } from '@phosphor-icons/react/dist/ssr/Quotes'\nimport { ListNumbers } from '@phosphor-icons/react/dist/ssr/ListNumbers'\n\n// Status & Feedback\nimport { SpinnerGap } from '@phosphor-icons/react/dist/ssr/SpinnerGap'\nimport { CheckCircle } from '@phosphor-icons/react/dist/ssr/CheckCircle'\nimport { XCircle } from '@phosphor-icons/react/dist/ssr/XCircle'\nimport { WarningCircle } from '@phosphor-icons/react/dist/ssr/WarningCircle'\nimport { Info } from '@phosphor-icons/react/dist/ssr/Info'\nimport { Check } from '@phosphor-icons/react/dist/ssr/Check'\nimport { Circle } from '@phosphor-icons/react/dist/ssr/Circle'\nimport { Question } from '@phosphor-icons/react/dist/ssr/Question'\n\n// User & Auth\nimport { User } from '@phosphor-icons/react/dist/ssr/User'\nimport { Users } from '@phosphor-icons/react/dist/ssr/Users'\nimport { UserPlus } from '@phosphor-icons/react/dist/ssr/UserPlus'\nimport { SignIn } from '@phosphor-icons/react/dist/ssr/SignIn'\nimport { SignOut } from '@phosphor-icons/react/dist/ssr/SignOut'\nimport { Eye } from '@phosphor-icons/react/dist/ssr/Eye'\nimport { EyeSlash } from '@phosphor-icons/react/dist/ssr/EyeSlash'\n\n// Data & Analytics\nimport { ChartBar } from '@phosphor-icons/react/dist/ssr/ChartBar'\nimport { TrendUp } from '@phosphor-icons/react/dist/ssr/TrendUp'\nimport { Pulse } from '@phosphor-icons/react/dist/ssr/Pulse'\nimport { Database } from '@phosphor-icons/react/dist/ssr/Database'\nimport { Lightning } from '@phosphor-icons/react/dist/ssr/Lightning'\n\n// Files & Content\nimport { FileText } from '@phosphor-icons/react/dist/ssr/FileText'\nimport { File } from '@phosphor-icons/react/dist/ssr/File'\nimport { Folder } from '@phosphor-icons/react/dist/ssr/Folder'\nimport { Book } from '@phosphor-icons/react/dist/ssr/Book'\nimport { BookOpen } from '@phosphor-icons/react/dist/ssr/BookOpen'\n\n// Communication\nimport { Envelope } from '@phosphor-icons/react/dist/ssr/Envelope'\nimport { ChatCircle } from '@phosphor-icons/react/dist/ssr/ChatCircle'\nimport { Phone } from '@phosphor-icons/react/dist/ssr/Phone'\n\n// Media\nimport { Image } from '@phosphor-icons/react/dist/ssr/Image'\nimport { Video } from '@phosphor-icons/react/dist/ssr/Video'\nimport { Camera } from '@phosphor-icons/react/dist/ssr/Camera'\n\n// Emotions\nimport { Smiley } from '@phosphor-icons/react/dist/ssr/Smiley'\nimport { SmileySad } from '@phosphor-icons/react/dist/ssr/SmileySad'\nimport { SmileyMeh } from '@phosphor-icons/react/dist/ssr/SmileyMeh'\n\n// Security & Finance\nimport { Lock } from '@phosphor-icons/react/dist/ssr/Lock'\nimport { LockOpen } from '@phosphor-icons/react/dist/ssr/LockOpen'\nimport { Shield } from '@phosphor-icons/react/dist/ssr/Shield'\nimport { Wallet } from '@phosphor-icons/react/dist/ssr/Wallet'\nimport { Key } from '@phosphor-icons/react/dist/ssr/Key'\nimport { CurrencyDollar } from '@phosphor-icons/react/dist/ssr/CurrencyDollar'\n\n// Time & Date\nimport { Clock } from '@phosphor-icons/react/dist/ssr/Clock'\nimport { Calendar } from '@phosphor-icons/react/dist/ssr/Calendar'\nimport { CalendarPlus } from '@phosphor-icons/react/dist/ssr/CalendarPlus'\n\n// UI Elements\nimport { Bell } from '@phosphor-icons/react/dist/ssr/Bell'\nimport { Heart } from '@phosphor-icons/react/dist/ssr/Heart'\nimport { Star } from '@phosphor-icons/react/dist/ssr/Star'\nimport { Bookmark } from '@phosphor-icons/react/dist/ssr/Bookmark'\nimport { Share } from '@phosphor-icons/react/dist/ssr/Share'\n\n// Theme\nimport { Monitor } from '@phosphor-icons/react/dist/ssr/Monitor'\nimport { Sun } from '@phosphor-icons/react/dist/ssr/Sun'\nimport { Moon } from '@phosphor-icons/react/dist/ssr/Moon'\n\n// Additional\nimport { Lightbulb } from '@phosphor-icons/react/dist/ssr/Lightbulb'\nimport { Brain } from '@phosphor-icons/react/dist/ssr/Brain'\nimport { Flag } from '@phosphor-icons/react/dist/ssr/Flag'\nimport { Square } from '@phosphor-icons/react/dist/ssr/Square'\nimport { Sparkle } from '@phosphor-icons/react/dist/ssr/Sparkle'\nimport { Globe } from '@phosphor-icons/react/dist/ssr/Globe'\nimport { DeviceMobile } from '@phosphor-icons/react/dist/ssr/DeviceMobile'\nimport { Ticket } from '@phosphor-icons/react/dist/ssr/Ticket'\nimport { Clipboard } from '@phosphor-icons/react/dist/ssr/Clipboard'\nimport { WifiHigh } from '@phosphor-icons/react/dist/ssr/WifiHigh'\nimport { WifiSlash } from '@phosphor-icons/react/dist/ssr/WifiSlash'\nimport { Cpu } from '@phosphor-icons/react/dist/ssr/Cpu'\nimport { MaskHappy } from '@phosphor-icons/react/dist/ssr/MaskHappy'\nimport { Rocket } from '@phosphor-icons/react/dist/ssr/Rocket'\n\n// Admin\nimport { Layout } from '@phosphor-icons/react/dist/ssr/Layout'\nimport { Megaphone } from '@phosphor-icons/react/dist/ssr/Megaphone'\nimport { Stack } from '@phosphor-icons/react/dist/ssr/Stack'\nimport { Prohibit } from '@phosphor-icons/react/dist/ssr/Prohibit'\n\n// 핵심 아이콘 객체 (키는 기존과 동일, 값만 Phosphor로 교체)\nexport const icons = {\n // Navigation\n home: House,\n arrowLeft: ArrowLeft,\n arrowRight: ArrowRight,\n arrowUp: ArrowUp,\n arrowDown: ArrowDown,\n menu: List,\n x: X,\n close: X,\n search: MagnifyingGlass,\n settings: Gear,\n externalLink: ArrowSquareOut,\n chevronLeft: CaretLeft,\n chevronRight: CaretRight,\n chevronDown: CaretDown,\n chevronUp: CaretUp,\n\n // Actions\n edit: Pencil,\n delete: Trash,\n add: Plus,\n remove: Minus,\n download: Download,\n upload: Upload,\n refresh: ArrowClockwise,\n save: FloppyDisk,\n copy: Copy,\n\n // Status & Feedback\n loader: SpinnerGap,\n success: CheckCircle,\n error: XCircle,\n alertCircle: WarningCircle,\n warning: WarningCircle,\n info: Info,\n check: Check,\n circle: Circle,\n helpCircle: Question,\n\n // User & Auth\n user: User,\n users: Users,\n userPlus: UserPlus,\n logIn: SignIn,\n logOut: SignOut,\n eye: Eye,\n eyeOff: EyeSlash,\n\n // Data & Analytics\n chart: ChartBar,\n barChart: ChartBar,\n trendingUp: TrendUp,\n activity: Pulse,\n database: Database,\n zap: Lightning,\n\n // Files & Content\n fileText: FileText,\n file: File,\n folder: Folder,\n book: Book,\n bookOpen: BookOpen,\n\n // Communication\n mail: Envelope,\n message: ChatCircle,\n phone: Phone,\n\n // Media\n image: Image,\n video: Video,\n camera: Camera,\n\n // Emotions\n smile: Smiley,\n frown: SmileySad,\n meh: SmileyMeh,\n\n // Security\n lock: Lock,\n unlock: LockOpen,\n shield: Shield,\n wallet: Wallet,\n key: Key,\n dollar: CurrencyDollar,\n dollarSign: CurrencyDollar,\n currency: CurrencyDollar,\n\n // Time & Date\n clock: Clock,\n calendar: Calendar,\n calendarPlus: CalendarPlus,\n\n // UI Elements\n bell: Bell,\n heart: Heart,\n star: Star,\n bookmark: Bookmark,\n share: Share,\n\n // Theme\n monitor: Monitor,\n sun: Sun,\n moon: Moon,\n\n // Additional\n lightbulb: Lightbulb,\n brain: Brain,\n flag: Flag,\n square: Square,\n sparkle: Sparkle,\n sparkles: Sparkle,\n globe: Globe,\n smartphone: DeviceMobile,\n deviceMobile: DeviceMobile,\n floppyDisk: FloppyDisk,\n\n // Connectivity\n ticket: Ticket,\n clipboard: Clipboard,\n wifi: WifiHigh,\n wifiOff: WifiSlash,\n cpu: Cpu,\n mask: MaskHappy,\n rocket: Rocket,\n\n // Admin\n layout: Layout,\n megaphone: Megaphone,\n layers: Stack,\n ban: Prohibit,\n\n // Text Formatting (Markdown Toolbar)\n bold: TextB,\n italic: TextItalic,\n strikethrough: TextStrikethrough,\n heading: TextHOne,\n link: Link,\n code: Code,\n fileCode: FileCode,\n quote: Quotes,\n list: List,\n listOrdered: ListNumbers,\n minus: Minus,\n} as const\n\n// 아이콘 이름 타입\nexport type IconName = keyof typeof icons\n\n// 감정별 아이콘 매핑\nexport const emotionIcons = {\n happy: 'smile',\n sad: 'frown',\n neutral: 'meh',\n excited: 'smile',\n angry: 'frown',\n love: 'heart',\n like: 'heart',\n dislike: 'frown',\n} as const\n\n// 상태별 아이콘 매핑\nexport const statusIcons = {\n loading: 'loader',\n success: 'success',\n error: 'error',\n warning: 'warning',\n info: 'info',\n locked: 'lock',\n unlocked: 'unlock',\n visible: 'eye',\n hidden: 'eyeOff',\n} as const\n\n// 아이콘 카테고리별 그룹화 (참고용)\nexport const iconCategories = {\n navigation: ['home', 'arrowLeft', 'arrowRight', 'arrowUp', 'arrowDown', 'menu', 'close', 'search', 'settings', 'externalLink', 'chevronLeft', 'chevronRight', 'chevronDown', 'chevronUp'],\n actions: ['edit', 'delete', 'add', 'remove', 'download', 'upload', 'refresh', 'save', 'copy'],\n status: ['loader', 'success', 'error', 'alertCircle', 'warning', 'info', 'check', 'circle'],\n user: ['user', 'users', 'userPlus', 'logIn', 'logOut', 'eye', 'eyeOff'],\n data: ['chart', 'barChart', 'trendingUp', 'activity', 'database', 'zap'],\n files: ['fileText', 'file', 'folder', 'book'],\n communication: ['mail', 'message', 'phone'],\n media: ['image', 'video', 'camera'],\n emotions: ['smile', 'frown', 'meh'],\n security: ['lock', 'unlock', 'shield'],\n time: ['clock', 'calendar'],\n ui: ['bell', 'heart', 'star', 'bookmark', 'share'],\n theme: ['monitor', 'sun', 'moon'],\n} as const\n","/**\n * Case Conversion Utilities\n *\n * 문자열 케이스 변환 유틸리티 함수들입니다.\n * Utility functions for string case conversion.\n */\n\n/**\n * 문자열을 camelCase로 변환합니다.\n * Converts a string to camelCase.\n *\n * @param str - 변환할 문자열 / String to convert\n * @returns camelCase 문자열 / camelCase string\n *\n * @example\n * toCamelCase('arrow-left') // 'arrowLeft'\n * toCamelCase('arrow_left') // 'arrowLeft'\n * toCamelCase('ArrowLeft') // 'arrowLeft'\n * toCamelCase('arrowLeft') // 'arrowLeft'\n * toCamelCase('HEART') // 'heart'\n */\nexport function toCamelCase(str: string): string {\n if (!str) return str\n\n // 이미 camelCase인지 확인 (kebab/snake가 아니고 첫 글자가 소문자)\n if (!/[-_]/.test(str) && /^[a-z]/.test(str)) {\n return str\n }\n\n // 전체가 대문자인 경우 (HEART, USER 등) → 전체 소문자로\n if (/^[A-Z]+$/.test(str)) {\n return str.toLowerCase()\n }\n\n // PascalCase를 camelCase로 변환 (ArrowLeft → arrowLeft)\n if (/^[A-Z]/.test(str) && !/[-_]/.test(str)) {\n return str.charAt(0).toLowerCase() + str.slice(1)\n }\n\n // kebab-case 또는 snake_case를 camelCase로 변환\n return str\n .split(/[-_]/)\n .map((word, index) => {\n if (index === 0) {\n return word.toLowerCase()\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n })\n .join('')\n}\n\n/**\n * 문자열을 PascalCase로 변환합니다.\n * Converts a string to PascalCase.\n *\n * @param str - 변환할 문자열 / String to convert\n * @returns PascalCase 문자열 / PascalCase string\n *\n * @example\n * toPascalCase('arrow-left') // 'ArrowLeft'\n * toPascalCase('arrow_left') // 'ArrowLeft'\n * toPascalCase('arrowLeft') // 'ArrowLeft'\n * toPascalCase('ArrowLeft') // 'ArrowLeft'\n */\nexport function toPascalCase(str: string): string {\n if (!str) return str\n\n // 이미 PascalCase인지 확인\n if (/^[A-Z]/.test(str) && !/[-_]/.test(str)) {\n return str\n }\n\n // kebab-case 또는 snake_case가 포함된 경우\n if (/[-_]/.test(str)) {\n return str\n .split(/[-_]/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n }\n\n // camelCase를 PascalCase로 변환\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n","/**\n * Icon Provider System\n *\n * 각 프로바이더별 로딩 전략 / Loading strategies per provider:\n *\n * 1. Phosphor Icons (https://phosphoricons.com) - default\n * - Official package: @phosphor-icons/react (MIT License)\n * - icons.ts에서 정적 subpath import (SSR-safe /dist/ssr)\n * - PROJECT_ICONS 매핑으로 통합 이름 지원\n * - 정적 맵에 없는 아이콘은 \"?\" fallback UI 표시\n *\n * 2. Iconsax Icons (https://iconsax.io) - separate entry\n * - '@hua-labs/ui/iconsax'에서 import 시 자동 등록\n * - 코어 번들에 포함되지 않음 / Not in core bundle\n * - registerIconsaxResolver()로 lazy 연결\n *\n * 3. Lucide Icons (https://lucide.dev) - separate entry\n * - '@hua-labs/ui/lucide'에서 import 시 자동 등록\n * - 코어 번들에 포함되지 않음 / Not in core bundle\n * - registerLucideResolver()로 lazy 연결\n * Note: 동적 barrel import (import('@phosphor-icons/react'))는 Turbopack에서\n * 전체 라이브러리(4.6MB)를 번들하므로 사용 금지.\n */\n\nimport { toPascalCase } from './case-utils'\n\n// ── Global Resolver Registry ────────────────────────────────────\n// globalThis 기반 레지스트리: 별도 번들(iconsax.mjs, index.mjs)간\n// 모듈 인스턴스가 분리되어도 동일한 resolver에 접근 가능.\nconst REGISTRY_KEY = '__hua_icon_resolvers__'\n\ninterface IconResolverRegistry {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lucide: ((name: string) => any) | null\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n iconsax: ((name: string, variant?: string) => any) | null\n}\n\nfunction getRegistry(): IconResolverRegistry {\n const g = globalThis as unknown as Record<string, IconResolverRegistry>\n if (!g[REGISTRY_KEY]) {\n g[REGISTRY_KEY] = { lucide: null, iconsax: null }\n }\n return g[REGISTRY_KEY]\n}\n\n/**\n * Register lucide resolver (called from app-level setup).\n */\nexport function registerLucideResolver(resolver: IconResolverRegistry['lucide']) {\n getRegistry().lucide = resolver\n}\n\n/**\n * Get registered lucide resolver\n */\nexport function getLucideResolver() {\n return getRegistry().lucide\n}\n\n/**\n * Register iconsax resolver (called from iconsax entry point).\n * Allows the core Icon component to resolve iconsax icons\n * without statically importing the iconsax bundle.\n */\nexport function registerIconsaxResolver(resolver: IconResolverRegistry['iconsax']) {\n getRegistry().iconsax = resolver\n}\n\n/**\n * Get registered iconsax resolver\n */\nexport function getIconsaxResolver() {\n return getRegistry().iconsax\n}\n\n// Icon Provider Type\nexport type IconProvider = 'lucide' | 'phosphor' | 'iconsax'\n\n// Icon Provider Configuration\nexport interface IconProviderConfig {\n provider: IconProvider\n prefix?: string\n}\n\n/**\n * Project-specific icon list\n * These are the icons actually used in SumUp project\n * Only these icons will be loaded for optimal bundle size\n */\nexport const PROJECT_ICONS = {\n // Navigation & Layout\n 'home': { lucide: 'Home', phosphor: 'House', iconsax: 'Home2' },\n 'layout-dashboard': { lucide: 'LayoutDashboard', phosphor: 'SquaresFour' },\n 'folder': { lucide: 'Folder', phosphor: 'Folder', iconsax: 'Folder' },\n 'alert-circle': { lucide: 'AlertCircle', phosphor: 'WarningCircle', iconsax: 'Danger' },\n 'alertCircle': { lucide: 'AlertCircle', phosphor: 'WarningCircle', iconsax: 'Danger' },\n 'columns': { lucide: 'Columns', phosphor: 'Columns' },\n 'users': { lucide: 'Users', phosphor: 'Users', iconsax: 'People' },\n 'settings': { lucide: 'Settings', phosphor: 'Gear' },\n 'menu': { lucide: 'Menu', phosphor: 'List', iconsax: 'Menu' },\n 'close': { lucide: 'X', phosphor: 'X', iconsax: 'CloseCircle' },\n 'chevronLeft': { lucide: 'ChevronLeft', phosphor: 'CaretLeft', iconsax: 'ArrowLeft2' },\n 'chevronRight': { lucide: 'ChevronRight', phosphor: 'CaretRight', iconsax: 'ArrowRight2' },\n 'chevronDown': { lucide: 'ChevronDown', phosphor: 'CaretDown', iconsax: 'ArrowDown2' },\n 'chevronUp': { lucide: 'ChevronUp', phosphor: 'CaretUp', iconsax: 'ArrowUp2' },\n 'arrowLeft': { lucide: 'ArrowLeft', phosphor: 'ArrowLeft', iconsax: 'ArrowLeft' },\n 'arrowRight': { lucide: 'ArrowRight', phosphor: 'ArrowRight', iconsax: 'ArrowRight' },\n 'arrowUp': { lucide: 'ArrowUp', phosphor: 'ArrowUp', iconsax: 'ArrowUp' },\n 'arrowDown': { lucide: 'ArrowDown', phosphor: 'ArrowDown', iconsax: 'ArrowDown' },\n\n // Actions\n 'add': { lucide: 'Plus', phosphor: 'Plus', iconsax: 'Add' },\n 'edit': { lucide: 'Edit', phosphor: 'Pencil' },\n 'pencil': { lucide: 'Pencil', phosphor: 'Pencil' },\n 'delete': { lucide: 'Trash2', phosphor: 'Trash', iconsax: 'Trash' },\n 'trash': { lucide: 'Trash2', phosphor: 'Trash', iconsax: 'Trash' },\n 'upload': { lucide: 'Upload', phosphor: 'Upload', iconsax: 'Upload' },\n 'download': { lucide: 'Download', phosphor: 'Download', iconsax: 'Download' },\n 'x': { lucide: 'X', phosphor: 'X' },\n 'check': { lucide: 'Check', phosphor: 'Check', iconsax: 'Check' },\n 'search': { lucide: 'Search', phosphor: 'MagnifyingGlass', iconsax: 'SearchNormal' },\n 'share': { lucide: 'Share', phosphor: 'Share' },\n 'copy': { lucide: 'Copy', phosphor: 'Copy' },\n 'save': { lucide: 'Save', phosphor: 'FloppyDisk' },\n\n // Status & Feedback\n 'loader': { lucide: 'Loader2', phosphor: 'Spinner' },\n 'loader2': { lucide: 'Loader2', phosphor: 'Spinner' },\n 'check-circle': { lucide: 'CheckCircle', phosphor: 'CheckCircle', iconsax: 'TickCircle' },\n 'checkCircle': { lucide: 'CheckCircle', phosphor: 'CheckCircle', iconsax: 'TickCircle' },\n 'success': { lucide: 'CheckCircle', phosphor: 'CheckCircle', iconsax: 'TickCircle' },\n 'error': { lucide: 'XCircle', phosphor: 'XCircle', iconsax: 'CloseCircle' },\n 'warning': { lucide: 'AlertCircle', phosphor: 'WarningCircle', iconsax: 'Warning2' },\n 'info': { lucide: 'Info', phosphor: 'Info', iconsax: 'InfoCircle' },\n 'refresh': { lucide: 'RefreshCw', phosphor: 'ArrowClockwise', iconsax: 'Refresh' },\n 'refreshCw': { lucide: 'RefreshCw', phosphor: 'ArrowClockwise', iconsax: 'Refresh' },\n 'bell': { lucide: 'Bell', phosphor: 'Bell', iconsax: 'Bell' },\n 'heart': { lucide: 'Heart', phosphor: 'Heart', iconsax: 'Heart' },\n 'star': { lucide: 'Star', phosphor: 'Star', iconsax: 'Star' },\n 'bookmark': { lucide: 'Bookmark', phosphor: 'Bookmark' },\n\n // User & Auth\n 'user': { lucide: 'User', phosphor: 'User', iconsax: 'User' },\n 'userPlus': { lucide: 'UserPlus', phosphor: 'UserPlus', iconsax: 'UserAdd' },\n 'logIn': { lucide: 'LogIn', phosphor: 'SignIn', iconsax: 'Login' },\n 'logOut': { lucide: 'LogOut', phosphor: 'SignOut', iconsax: 'Logout' },\n 'chrome': { lucide: 'Chrome', phosphor: 'ChromeLogo', iconsax: 'Chrome' },\n 'github': { lucide: 'Github', phosphor: 'GithubLogo' },\n 'message': { lucide: 'MessageCircle', phosphor: 'ChatCircle' },\n\n // Content\n 'messageSquare': { lucide: 'MessageSquare', phosphor: 'ChatSquare' },\n 'message-square': { lucide: 'MessageSquare', phosphor: 'ChatSquare' },\n 'inbox': { lucide: 'Inbox', phosphor: 'Inbox' },\n 'calendar': { lucide: 'Calendar', phosphor: 'Calendar' },\n 'calendarPlus': { lucide: 'CalendarPlus', phosphor: 'CalendarPlus' },\n 'checkSquare': { lucide: 'CheckSquare', phosphor: 'CheckSquare', iconsax: 'TickSquare' },\n 'clock': { lucide: 'Clock', phosphor: 'Clock' },\n 'book': { lucide: 'Book', phosphor: 'Book', iconsax: 'Book' },\n 'bookOpen': { lucide: 'BookOpen', phosphor: 'BookOpen', iconsax: 'Book' },\n\n // Theme & UI\n 'monitor': { lucide: 'Monitor', phosphor: 'Monitor', iconsax: 'Monitor' },\n 'sun': { lucide: 'Sun', phosphor: 'Sun', iconsax: 'Sun' },\n 'moon': { lucide: 'Moon', phosphor: 'Moon', iconsax: 'Moon' },\n\n // AI & Features\n 'sparkle': { lucide: 'Sparkle', phosphor: 'Sparkle' },\n 'sparkles': { lucide: 'Sparkles', phosphor: 'Sparkle' },\n 'lightbulb': { lucide: 'Lightbulb', phosphor: 'Lightbulb' },\n 'brain': { lucide: 'Brain', phosphor: 'Brain' },\n 'zap': { lucide: 'Zap', phosphor: 'Lightning' },\n\n // Device & Platform\n 'globe': { lucide: 'Globe', phosphor: 'Globe', iconsax: 'Global' },\n 'deviceMobile': { lucide: 'Smartphone', phosphor: 'DeviceMobile' },\n 'smartphone': { lucide: 'Smartphone', phosphor: 'DeviceMobile' },\n 'floppyDisk': { lucide: 'Save', phosphor: 'FloppyDisk' },\n\n // Data & Analytics\n 'chart': { lucide: 'BarChart3', phosphor: 'ChartBar' },\n 'barChart': { lucide: 'BarChart', phosphor: 'ChartBar' },\n 'trendingUp': { lucide: 'TrendingUp', phosphor: 'TrendUp' },\n 'trendingDown': { lucide: 'TrendingDown', phosphor: 'TrendDown' },\n 'activity': { lucide: 'Activity', phosphor: 'Pulse' },\n 'database': { lucide: 'Database', phosphor: 'Database' },\n 'dollarSign': { lucide: 'DollarSign', phosphor: 'CurrencyDollar' },\n 'dollar': { lucide: 'DollarSign', phosphor: 'CurrencyDollar' },\n 'currency': { lucide: 'DollarSign', phosphor: 'CurrencyDollar' },\n\n 'layers': { lucide: 'Layers', phosphor: 'Stack' },\n 'ban': { lucide: 'Ban', phosphor: 'Prohibit' },\n\n // Security\n 'lock': { lucide: 'Lock', phosphor: 'Lock', iconsax: 'Lock' },\n 'unlock': { lucide: 'Unlock', phosphor: 'LockOpen', iconsax: 'Unlock' },\n 'shield': { lucide: 'Shield', phosphor: 'Shield', iconsax: 'Shield' },\n 'key': { lucide: 'Key', phosphor: 'Key' },\n\n // Media\n 'play': { lucide: 'Play', phosphor: 'Play', iconsax: 'Play' },\n 'pause': { lucide: 'Pause', phosphor: 'Pause', iconsax: 'Pause' },\n 'image': { lucide: 'Image', phosphor: 'Image', iconsax: 'Image' },\n 'video': { lucide: 'Video', phosphor: 'Video', iconsax: 'Video' },\n 'camera': { lucide: 'Camera', phosphor: 'Camera', iconsax: 'Camera' },\n\n // Files\n 'fileText': { lucide: 'FileText', phosphor: 'FileText' },\n 'file': { lucide: 'File', phosphor: 'File' },\n\n // Navigation\n 'externalLink': { lucide: 'ExternalLink', phosphor: 'ArrowSquareOut' },\n 'link': { lucide: 'Link', phosphor: 'Link', iconsax: 'Link' },\n 'moreHorizontal': { lucide: 'MoreHorizontal', phosphor: 'DotsThreeOutline' },\n 'moreVertical': { lucide: 'MoreVertical', phosphor: 'DotsThreeVertical' },\n\n // Priority\n 'remove': { lucide: 'Minus', phosphor: 'Minus', iconsax: 'Minus' },\n\n // Eye (password)\n 'eye': { lucide: 'Eye', phosphor: 'Eye', iconsax: 'Eye' },\n 'eyeOff': { lucide: 'EyeOff', phosphor: 'EyeSlash', iconsax: 'EyeSlash' },\n\n // Emotions\n 'smile': { lucide: 'Smile', phosphor: 'Smiley', iconsax: 'EmojiHappy' },\n 'frown': { lucide: 'Frown', phosphor: 'SmileySad', iconsax: 'EmojiSad' },\n 'meh': { lucide: 'Meh', phosphor: 'SmileyMeh', iconsax: 'EmojiNormal' },\n\n // Social\n 'mail': { lucide: 'Mail', phosphor: 'Envelope' },\n 'phone': { lucide: 'Phone', phosphor: 'Phone' },\n\n // Additional\n 'flag': { lucide: 'Flag', phosphor: 'Flag', iconsax: 'Flag' },\n 'rocket': { lucide: 'Rocket', phosphor: 'Rocket', iconsax: 'Rocket' },\n\n // Connectivity & Misc\n 'ticket': { lucide: 'Ticket', phosphor: 'Ticket', iconsax: 'Ticket' },\n 'clipboard': { lucide: 'ClipboardList', phosphor: 'Clipboard', iconsax: 'Sticker' },\n 'wifi': { lucide: 'Wifi', phosphor: 'WifiHigh', iconsax: 'Wifi' },\n 'wifiOff': { lucide: 'WifiOff', phosphor: 'WifiSlash' },\n 'cpu': { lucide: 'Cpu', phosphor: 'Cpu', iconsax: 'Computing' },\n 'mask': { lucide: 'Drama', phosphor: 'MaskHappy', iconsax: 'EmojiHappy' },\n\n // Text Formatting (Markdown Toolbar)\n 'bold': { lucide: 'Bold', phosphor: 'TextB' },\n 'italic': { lucide: 'Italic', phosphor: 'TextItalic' },\n 'strikethrough': { lucide: 'Strikethrough', phosphor: 'TextStrikethrough' },\n 'heading': { lucide: 'Heading', phosphor: 'TextHOne' },\n 'code': { lucide: 'Code', phosphor: 'Code', iconsax: 'Code' },\n 'fileCode': { lucide: 'FileCode', phosphor: 'FileCode' },\n 'quote': { lucide: 'Quote', phosphor: 'Quotes', iconsax: 'QuoteUp' },\n 'list': { lucide: 'List', phosphor: 'List' },\n 'listOrdered': { lucide: 'ListOrdered', phosphor: 'ListNumbers' },\n 'minus': { lucide: 'Minus', phosphor: 'Minus', iconsax: 'Minus' },\n} as const\n\n/**\n * Get icon from provider (iconsax only)\n *\n * Phosphor/Lucide는 정적 맵(icons.ts)으로 해결. 이 함수는 iconsax fallback용.\n */\nexport function getIconFromProvider(\n iconName: string,\n provider: IconProvider = 'phosphor'\n): React.ComponentType<Record<string, unknown>> | null {\n const registry = getRegistry()\n\n if (provider === 'lucide') {\n if (!registry.lucide) return null\n const iconMapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n const lucideName = iconMapping\n ? (iconMapping as Record<string, string | undefined>)['lucide'] || toPascalCase(iconName)\n : toPascalCase(iconName)\n return registry.lucide(lucideName) || null\n }\n\n if (provider !== 'iconsax' || !registry.iconsax) return null\n\n const iconMapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n const iconsaxName = iconMapping\n ? (iconMapping as Record<string, string | undefined>)['iconsax'] || toPascalCase(iconName)\n : toPascalCase(iconName)\n\n return registry.iconsax(iconsaxName) || null\n}\n\n/**\n * Get icon name for provider\n */\nexport function getIconNameForProvider(\n iconName: string,\n provider: IconProvider\n): string {\n const iconMapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n if (iconMapping) {\n const mappedName = (iconMapping as Record<string, string | undefined>)[provider]\n if (mappedName) {\n return mappedName\n }\n }\n return iconName\n}\n\n/**\n * Get all project icon names\n */\nexport function getProjectIconNames(): string[] {\n return Object.keys(PROJECT_ICONS)\n}\n","/**\n * Icon Aliases\n * \n * 여러 이름이 같은 아이콘을 가리키도록 하는 alias 시스템\n * DX 향상을 위해 직관적인 이름들을 지원합니다.\n */\n\nexport const ICON_ALIASES: Record<string, string> = {\n // kebab-case → camelCase mappings (자동 변환 지원)\n 'arrow-left': 'arrowLeft',\n 'arrow-right': 'arrowRight',\n 'arrow-up': 'arrowUp',\n 'arrow-down': 'arrowDown',\n 'chevron-left': 'chevronLeft',\n 'chevron-right': 'chevronRight',\n 'chevron-up': 'chevronUp',\n 'chevron-down': 'chevronDown',\n 'external-link': 'externalLink',\n 'more-horizontal': 'moreHorizontal',\n 'more-vertical': 'moreVertical',\n 'user-plus': 'userPlus',\n 'log-in': 'logIn',\n 'log-out': 'logOut',\n 'check-circle': 'checkCircle',\n 'check-square': 'checkSquare',\n 'alert-circle': 'alertCircle',\n 'eye-off': 'eyeOff',\n 'file-text': 'fileText',\n 'book-open': 'bookOpen',\n 'bar-chart': 'barChart',\n 'trending-up': 'trendingUp',\n 'trending-down': 'trendingDown',\n 'message-square': 'messageSquare',\n 'calendar-plus': 'calendarPlus',\n 'refresh-cw': 'refreshCw',\n 'dollar-sign': 'dollarSign',\n 'layout-dashboard': 'layoutDashboard',\n 'device-mobile': 'deviceMobile',\n 'floppy-disk': 'floppyDisk',\n\n // Navigation aliases\n 'back': 'arrowLeft',\n 'prev': 'arrowLeft',\n 'previous': 'arrowLeft',\n 'forward': 'arrowRight',\n 'next': 'arrowRight',\n \n // Close aliases\n 'close': 'x',\n 'cancel': 'x',\n \n // Delete aliases\n 'remove': 'delete',\n 'trash': 'delete',\n \n // Add aliases\n 'plus': 'add',\n 'new': 'add',\n \n // Edit aliases\n 'pencil': 'edit',\n 'modify': 'edit',\n \n // Save aliases\n 'store': 'save',\n 'floppy': 'save',\n \n // Search aliases\n 'magnify': 'search',\n \n // User aliases\n 'person': 'user',\n 'account': 'user',\n 'profile': 'user',\n \n // Settings aliases\n 'gear': 'settings',\n 'config': 'settings',\n 'preferences': 'settings',\n \n // Home aliases\n 'house': 'home',\n 'main': 'home',\n \n // Check aliases\n 'done': 'check',\n 'complete': 'check',\n 'tick': 'check',\n \n // Info aliases\n 'information': 'info',\n 'help': 'info',\n \n // Warning aliases\n 'alert': 'warning',\n 'caution': 'warning',\n \n // Success aliases\n 'checkmark': 'success',\n 'checkCircle': 'success',\n \n // Error aliases\n 'fail': 'error',\n 'cross': 'error',\n 'xCircle': 'error',\n \n // Loading aliases\n 'spinner': 'loader',\n 'loading': 'loader',\n 'wait': 'loader',\n \n // Refresh aliases\n 'reload': 'refresh',\n 'update': 'refresh',\n 'sync': 'refresh',\n \n // Eye aliases\n 'show': 'eye',\n 'view': 'eye',\n 'hide': 'eyeOff',\n 'hidden': 'eyeOff',\n \n // Lock aliases\n 'secure': 'lock',\n 'locked': 'lock',\n 'unsecure': 'unlock',\n 'unlocked': 'unlock',\n \n // Download aliases\n 'get': 'download',\n 'fetch': 'download',\n \n // Upload aliases\n 'post': 'upload',\n \n // Share aliases\n 'send': 'share',\n 'export': 'share',\n \n // Copy aliases\n 'duplicate': 'copy',\n 'clone': 'copy',\n \n // Mail aliases\n 'email': 'mail',\n 'envelope': 'mail',\n \n // Message aliases\n 'chat': 'message',\n 'comment': 'message',\n 'talk': 'message',\n \n // Calendar aliases\n 'date': 'calendar',\n 'schedule': 'calendar',\n \n // Clock aliases\n 'time': 'clock',\n 'watch': 'clock',\n \n // File aliases\n 'document': 'fileText',\n 'doc': 'fileText',\n 'text': 'fileText',\n \n // Folder aliases\n 'directory': 'folder',\n 'dir': 'folder',\n \n // Image aliases\n 'picture': 'image',\n 'img': 'image',\n \n // Video aliases\n 'movie': 'video',\n 'film': 'video',\n \n // Camera aliases\n 'photo': 'camera',\n 'capture': 'camera',\n \n // Play aliases\n 'start': 'play',\n 'run': 'play',\n \n // Pause aliases\n 'stop': 'pause',\n 'halt': 'pause',\n \n // Heart aliases\n 'like': 'heart',\n 'love': 'heart',\n \n // Star aliases\n 'favorite': 'star',\n \n // Bookmark aliases\n 'saveBookmark': 'bookmark',\n \n // Bell aliases\n 'notification': 'bell',\n 'notify': 'bell',\n 'alarm': 'bell',\n \n // Settings aliases\n 'prefs': 'settings',\n \n // Search aliases (duplicate removed - see line 37)\n 'lookup': 'search',\n \n // More aliases\n 'dots': 'moreHorizontal',\n 'moreMenu': 'moreHorizontal',\n 'moreOptions': 'moreVertical',\n \n // External link aliases\n 'external': 'externalLink',\n 'outbound': 'externalLink',\n 'open': 'externalLink',\n \n // Link aliases\n 'url': 'link',\n 'hyperlink': 'link',\n \n // Chart aliases\n 'graph': 'barChart',\n 'stats': 'barChart',\n 'analytics': 'barChart',\n \n // Database aliases\n 'db': 'database',\n 'storage': 'database',\n \n // Activity aliases\n 'pulse': 'activity',\n 'monitor': 'activity',\n \n // Trending aliases\n 'up': 'trendingUp',\n 'down': 'trendingDown',\n \n // Zap aliases\n 'lightning': 'zap',\n 'bolt': 'zap',\n 'flash': 'zap',\n \n // Shield aliases\n 'security': 'shield',\n 'protect': 'shield',\n \n // Key aliases\n 'password': 'key',\n 'secret': 'key',\n \n // Log in aliases\n 'signin': 'logIn',\n 'login': 'logIn',\n 'enter': 'logIn',\n \n // Log out aliases\n 'signout': 'logOut',\n 'logout': 'logOut',\n 'exit': 'logOut',\n \n // Users aliases\n 'people': 'users',\n 'group': 'users',\n 'team': 'users',\n \n // User plus aliases\n 'addUser': 'userPlus',\n 'invite': 'userPlus',\n \n // Book aliases\n 'read': 'book',\n 'library': 'book',\n \n // Book open aliases\n 'reading': 'bookOpen',\n 'openBook': 'bookOpen',\n \n // Sun aliases\n 'light': 'sun',\n 'day': 'sun',\n \n // Moon aliases\n 'dark': 'moon',\n 'night': 'moon',\n \n // Monitor aliases\n 'screen': 'monitor',\n 'display': 'monitor',\n \n // Brain aliases\n 'ai': 'brain',\n 'intelligence': 'brain',\n 'think': 'brain',\n \n // Lightbulb aliases\n 'idea': 'lightbulb',\n 'bulb': 'lightbulb',\n 'inspiration': 'lightbulb',\n \n // Sparkles aliases\n 'magic': 'sparkles',\n 'stars': 'sparkles',\n 'glitter': 'sparkles',\n} as const\n\n/**\n * Resolve icon alias to actual icon name\n * \n * @param iconName - 아이콘 이름 또는 별칭 / Icon name or alias\n * @returns 실제 아이콘 이름 / Actual icon name\n * @throws {TypeError} iconName이 문자열이 아닌 경우\n */\nexport function resolveIconAlias(iconName: string): string {\n if (typeof iconName !== 'string') {\n throw new TypeError('iconName must be a string');\n }\n return ICON_ALIASES[iconName] || iconName;\n}\n\n/**\n * Get all aliases for an icon name\n * \n * @param iconName - 아이콘 이름 / Icon name\n * @returns 해당 아이콘의 모든 별칭 배열 / Array of all aliases for the icon\n * @throws {TypeError} iconName이 문자열이 아닌 경우\n */\nexport function getIconAliases(iconName: string): string[] {\n if (typeof iconName !== 'string') {\n throw new TypeError('iconName must be a string');\n }\n return Object.entries(ICON_ALIASES)\n .filter(([_, target]) => target === iconName)\n .map(([alias]) => alias);\n}\n\n\n","/**\n * Icon Config Types\n *\n * Icon 시스템의 설정 타입 정의\n * 상태관리는 서비스 레벨에서 관리 (Zustand 등)\n */\n\nexport type IconSet = 'lucide' | 'phosphor' | 'iconsax'\n\nexport type PhosphorWeight = 'thin' | 'light' | 'regular' | 'bold' | 'duotone' | 'fill'\n\nexport type IconsaxVariant = 'line' | 'bold'\n\nexport interface IconConfig {\n set: IconSet\n weight: PhosphorWeight\n size: number\n color: string\n strokeWidth?: number // Lucide용\n iconsaxVariant?: IconsaxVariant // Iconsax용 (line | bold)\n}\n\nexport const defaultIconConfig: IconConfig = {\n set: 'phosphor',\n weight: 'regular',\n size: 20,\n color: 'currentColor',\n strokeWidth: 1.25,\n iconsaxVariant: 'line',\n}\n\n/**\n * 세트별 기본 strokeWidth\n */\nexport const getDefaultStrokeWidth = (set: IconSet): number => {\n switch (set) {\n case 'lucide':\n return 1.25\n case 'phosphor':\n return 1.25 // Phosphor는 weight 사용\n case 'iconsax':\n return 1.5\n default:\n return 1.25\n }\n}\n","'use client'\n\n/**\n * IconProvider - Icon 시스템 전역 설정 Provider\n *\n * React Context를 사용하여 전역 아이콘 설정을 제공합니다.\n *\n * @example\n * ```tsx\n * <IconProvider set=\"phosphor\" weight=\"regular\" size={20}>\n * <App />\n * </IconProvider>\n * ```\n */\n\nimport React, { createContext, useContext } from 'react'\nimport { type IconConfig, type IconSet, type PhosphorWeight, type IconsaxVariant, defaultIconConfig } from './icon-store'\n\n/**\n * IconProvider 컴포넌트 Props\n */\nexport interface IconProviderProps {\n /** 아이콘 세트 (lucide, phosphor, iconsax) */\n set?: IconSet\n /** Phosphor 아이콘 weight */\n weight?: PhosphorWeight\n /** Iconsax 아이콘 변형 (line, bold) */\n iconsaxVariant?: IconsaxVariant\n /** 기본 아이콘 크기 */\n size?: number\n /** 기본 아이콘 색상 */\n color?: string\n /** Lucide/Iconsax 아이콘 stroke width */\n strokeWidth?: number\n /** 자식 컴포넌트 */\n children: React.ReactNode\n}\n\ninterface IconContextValue extends IconConfig {}\n\nconst IconContext = createContext<IconContextValue>(defaultIconConfig)\n\nexport function IconProvider({\n set = defaultIconConfig.set,\n weight = defaultIconConfig.weight,\n iconsaxVariant = defaultIconConfig.iconsaxVariant,\n size = defaultIconConfig.size,\n color = defaultIconConfig.color,\n strokeWidth = defaultIconConfig.strokeWidth,\n children,\n}: IconProviderProps) {\n const value: IconContextValue = {\n set,\n weight,\n iconsaxVariant,\n size,\n color,\n strokeWidth,\n }\n\n return (\n <IconContext.Provider value={value}>\n {children}\n </IconContext.Provider>\n )\n}\n\nexport function useIconContext(): IconContextValue {\n return useContext(IconContext)\n}\n\n// Re-export types for convenience\nexport type { IconSet, PhosphorWeight, IconsaxVariant, IconConfig } from './icon-store'\nexport { defaultIconConfig, getDefaultStrokeWidth } from './icon-store'\n","/**\n * Icon Name Normalization System\n *\n * 아이콘 이름 정규화를 위한 통합 시스템입니다.\n *\n * Features:\n * - kebab-case → camelCase conversion\n * - snake_case → camelCase conversion\n * - PascalCase → camelCase conversion\n * - Alias resolution\n * - Provider-specific name mapping\n */\n\nimport { ICON_ALIASES } from './icon-aliases'\nimport { toCamelCase, toPascalCase } from './case-utils'\n\n// Re-export case utils for backward compatibility\nexport { toCamelCase, toPascalCase } from './case-utils'\n\n// IconProvider type (avoid circular dependency with icon-providers.ts)\nexport type IconProviderType = 'lucide' | 'phosphor' | 'iconsax'\n\n/**\n * 정규화 결과 인터페이스\n */\nexport interface NormalizeResult {\n /** 정규화된 아이콘 이름 (camelCase) */\n normalized: string\n /** 원본 이름이 alias였는지 여부 */\n wasAlias: boolean\n /** 원본 alias 이름 (alias였던 경우) */\n originalAlias?: string\n}\n\n/**\n * 아이콘 이름을 정규화합니다.\n *\n * @example\n * normalizeIconName('arrow-left') // { normalized: 'arrowLeft', wasAlias: false }\n * normalizeIconName('back') // { normalized: 'arrowLeft', wasAlias: true, originalAlias: 'back' }\n * normalizeIconName('ArrowLeft') // { normalized: 'arrowLeft', wasAlias: false }\n */\nexport function normalizeIconName(iconName: string): NormalizeResult {\n if (!iconName || typeof iconName !== 'string') {\n return { normalized: iconName || '', wasAlias: false }\n }\n\n const camelCased = toCamelCase(iconName)\n const aliasTarget = ICON_ALIASES[iconName] || ICON_ALIASES[camelCased]\n\n if (aliasTarget) {\n return {\n normalized: aliasTarget,\n wasAlias: true,\n originalAlias: iconName\n }\n }\n\n return {\n normalized: camelCased,\n wasAlias: false\n }\n}\n\n/**\n * 프로바이더별 아이콘 이름을 반환합니다.\n *\n * @example\n * getProviderIconName('arrowLeft', 'lucide') // 'ArrowLeft'\n * getProviderIconName('heart', 'iconsax') // 'Heart'\n */\nexport function getProviderIconName(\n normalizedName: string,\n provider: IconProviderType\n): string {\n switch (provider) {\n case 'lucide':\n case 'phosphor':\n case 'iconsax':\n return toPascalCase(normalizedName)\n default:\n return normalizedName\n }\n}\n","import React from \"react\";\nimport type { IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport { dot } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { icons, IconName, emotionIcons, statusIcons } from \"../../lib/icons\";\nimport {\n getIconFromProvider,\n getIconsaxResolver,\n getLucideResolver,\n getIconNameForProvider,\n} from \"../../lib/icon-providers\";\nimport { normalizeIconName } from \"../../lib/normalize-icon-name\";\nimport { useIconContext, type IconSet } from \"./IconProvider\";\nimport { type PhosphorWeight } from \"./icon-store\";\nimport type { AllIconName } from \"../../lib/icon-names\";\n\n/**\n * Icon 컴포넌트 Props\n */\nexport interface IconProps {\n /** 아이콘 이름 / Icon name */\n name: AllIconName;\n /** 아이콘 크기 (숫자 또는 문자열) / Icon size (number or string) */\n size?: number | string;\n /** 추가 CSS 클래스 / Additional CSS classes */\n className?: string;\n /** dot 스타일 유틸리티 문자열 / Dot style utility string */\n dot?: string;\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties;\n /** 감정 아이콘 타입 / Emotion icon type */\n emotion?: keyof typeof emotionIcons;\n /** 상태 아이콘 타입 / Status icon type */\n status?: keyof typeof statusIcons;\n /** 아이콘 프로바이더 오버라이드 / Icon provider override */\n provider?: IconSet;\n /** 부드러운 애니메이션 효과 / Smooth animation effect */\n animated?: boolean;\n /** 펄스 애니메이션 / Pulse animation */\n pulse?: boolean;\n /** 회전 애니메이션 / Spin animation */\n spin?: boolean;\n /** 바운스 애니메이션 / Bounce animation */\n bounce?: boolean;\n /** 색상 변형 / Color variant */\n variant?:\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"muted\"\n | \"inherit\";\n /** Phosphor 아이콘 weight 오버라이드 / Phosphor icon weight override */\n weight?: PhosphorWeight;\n /** 스크린 리더용 라벨 / Screen reader label */\n \"aria-label\"?: string;\n /** 장식용 아이콘 / Decorative icon (hidden from screen readers) */\n \"aria-hidden\"?: boolean;\n}\n\n/**\n * Icon 컴포넌트\n *\n * 다중 아이콘 라이브러리(Phosphor, Lucide, Iconsax)를 지원하는 통합 아이콘 컴포넌트.\n * IconProvider를 통해 전역 설정을 관리하며, 개별 아이콘에서도 오버라이드 가능.\n *\n * Iconsax는 별도 entry('@hua-labs/ui/iconsax')를 import해야 동작합니다.\n *\n * @example\n * ```tsx\n * <Icon name=\"heart\" />\n * <Icon name=\"user\" size={24} />\n * <Icon name=\"check\" variant=\"success\" />\n * <Icon name=\"loader\" spin />\n * ```\n */\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n (\n {\n name,\n size,\n className,\n dot: dotProp,\n style: styleProp,\n emotion,\n status,\n provider,\n weight,\n animated = false,\n pulse = false,\n spin = false,\n bounce = false,\n variant = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-hidden\": ariaHidden,\n },\n ref,\n ) => {\n const config = useIconContext();\n\n const iconSet = provider || config.set;\n const iconSize = size ?? config.size;\n const iconWeight = weight || config.weight;\n const iconColor = config.color;\n const iconStrokeWidth = config.strokeWidth ?? 1.25;\n const iconsaxVariant = config.iconsaxVariant ?? \"line\";\n\n const [isClient, setIsClient] = React.useState(false);\n\n React.useEffect(() => {\n setIsClient(true);\n }, []);\n\n // 통합 정규화\n const resolvedIcon = React.useMemo(() => {\n const baseName = emotion\n ? emotionIcons[emotion]\n : status\n ? statusIcons[status]\n : name;\n const { normalized } = normalizeIconName(baseName);\n const providerName = getIconNameForProvider(normalized, iconSet);\n return { normalized, providerName };\n }, [name, emotion, status, iconSet]);\n\n const iconName = resolvedIcon.normalized as AllIconName;\n\n // Iconsax: resolver를 통해 가져오기 (iconsax entry import 시 자동 등록됨)\n const iconsaxIcon = React.useMemo(() => {\n if (iconSet === \"iconsax\" && isClient) {\n const resolver = getIconsaxResolver();\n if (resolver) {\n return resolver(resolvedIcon.providerName, iconsaxVariant);\n }\n }\n return null;\n }, [iconSet, resolvedIcon.providerName, isClient, iconsaxVariant]);\n\n // 색상 변형 클래스\n const variantClasses =\n variant === \"default\"\n ? \"text-current\"\n : variant === \"primary\"\n ? \"text-primary\"\n : variant === \"secondary\" || variant === \"muted\"\n ? \"text-muted-foreground\"\n : variant === \"success\"\n ? \"text-green-600 dark:text-green-400\"\n : variant === \"warning\"\n ? \"text-yellow-600 dark:text-yellow-400\"\n : variant === \"error\"\n ? \"text-destructive\"\n : \"\";\n\n const dotStyle = React.useMemo(\n () => (dotProp ? resolveDot(dotProp) : undefined),\n [dotProp],\n );\n\n // 서버사이드에서는 빈 span 반환\n if (!isClient) {\n return (\n <span\n style={mergeStyles(\n dot([variantClasses, className].filter(Boolean).join(\" \")),\n { width: iconSize, height: iconSize },\n dotStyle,\n styleProp,\n )}\n aria-hidden={ariaHidden !== undefined ? ariaHidden : true}\n aria-label={ariaLabel}\n />\n );\n }\n\n // Provider에 따라 아이콘 가져오기\n type IconComponentType = React.ComponentType<\n | PhosphorIconProps\n | React.SVGProps<SVGSVGElement>\n | Record<string, unknown>\n >;\n let ResolvedIcon: IconComponentType | null;\n\n if (iconSet === \"phosphor\") {\n // 1. icons.ts에서 먼저 찾기 (Phosphor 아이콘이 기본, 정적 import)\n ResolvedIcon = (icons[iconName as IconName] ||\n null) as IconComponentType | null;\n // 2. 정적 맵에 없으면 null (fallback UI \"?\" 표시)\n // getIconFromProvider는 iconsax 전용, phosphor는 정적 맵만 사용\n } else if (iconSet === \"iconsax\") {\n ResolvedIcon = iconsaxIcon as IconComponentType | null;\n if (!ResolvedIcon) {\n ResolvedIcon = getIconFromProvider(\n iconName,\n iconSet,\n ) as IconComponentType | null;\n }\n } else if (iconSet === \"lucide\") {\n ResolvedIcon = getIconFromProvider(\n iconName,\n iconSet,\n ) as IconComponentType | null;\n } else {\n ResolvedIcon = getIconFromProvider(\n iconName,\n iconSet,\n ) as IconComponentType | null;\n }\n\n if (!ResolvedIcon) {\n if (iconSet === \"iconsax\" && !getIconsaxResolver()) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `Icon \"${iconName}\" — iconsax resolver not registered. ` +\n `Use HuaProvider with icons.set='iconsax', or add: import '@hua-labs/ui/iconsax'`,\n );\n }\n } else if (iconSet === \"lucide\" && !getLucideResolver()) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `Icon \"${iconName}\" — lucide resolver not registered. ` +\n `Add: import '@hua-labs/ui/lucide'`,\n );\n }\n } else {\n console.warn(`Icon \"${iconName}\" not found for provider \"${iconSet}\"`);\n }\n return (\n <span\n ref={ref}\n style={mergeStyles(\n dot(\n [\n \"inline-flex items-center justify-center rounded-full border-2 border-dashed border-border\",\n variantClasses,\n className,\n ]\n .filter(Boolean)\n .join(\" \"),\n ),\n { width: iconSize, height: iconSize },\n dotStyle,\n styleProp,\n )}\n aria-label={ariaLabel || `아이콘을 찾을 수 없음: ${iconName}`}\n title={`Icon not found: ${iconName}`}\n >\n <span style={dot(\"text-xs text-muted-foreground\")} aria-hidden=\"true\">\n ?\n </span>\n </span>\n );\n }\n\n // 세트별 props 준비\n type IconPropsType = PhosphorIconProps & {\n size?: number;\n width?: number | string;\n height?: number | string;\n color?: string;\n weight?: PhosphorWeight;\n strokeWidth?: number;\n };\n\n const iconProps: IconPropsType = {\n size: typeof iconSize === \"number\" ? iconSize : undefined,\n width: typeof iconSize === \"string\" ? iconSize : iconSize,\n height: typeof iconSize === \"string\" ? iconSize : iconSize,\n color: iconColor,\n } as IconPropsType;\n\n if (iconSet === \"phosphor\") {\n iconProps.weight = iconWeight;\n } else {\n iconProps.strokeWidth = iconStrokeWidth;\n }\n\n const animationClasses = [\n pulse ? \"animate-pulse\" : \"\",\n spin ? \"animate-spin\" : \"\",\n bounce ? \"animate-bounce\" : \"\",\n animated ? \"transition-all duration-200 ease-in-out\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const accessibilityProps: React.AriaAttributes = {};\n\n if (ariaLabel) {\n accessibilityProps[\"aria-label\"] = ariaLabel;\n accessibilityProps[\"aria-hidden\"] = false;\n } else if (ariaHidden !== undefined) {\n accessibilityProps[\"aria-hidden\"] = ariaHidden;\n } else {\n accessibilityProps[\"aria-hidden\"] = true;\n }\n\n return (\n <span\n ref={ref}\n style={mergeStyles(\n dot(\n [\n \"inline-flex items-center justify-center\",\n animationClasses,\n variantClasses,\n className,\n ]\n .filter(Boolean)\n .join(\" \"),\n ),\n { width: iconSize, height: iconSize },\n dotStyle,\n styleProp,\n )}\n {...accessibilityProps}\n >\n {ResolvedIcon &&\n React.createElement(ResolvedIcon, {\n ...iconProps,\n className: variantClasses,\n \"aria-hidden\": true,\n } as React.ComponentProps<typeof ResolvedIcon>)}\n </span>\n );\n },\n);\n\nIconComponent.displayName = \"Icon\";\n\nconst MemoizedIcon = React.memo(IconComponent, (prevProps, nextProps) => {\n return (\n prevProps.name === nextProps.name &&\n prevProps.size === nextProps.size &&\n prevProps.className === nextProps.className &&\n prevProps.dot === nextProps.dot &&\n prevProps.emotion === nextProps.emotion &&\n prevProps.status === nextProps.status &&\n prevProps.provider === nextProps.provider &&\n prevProps.animated === nextProps.animated &&\n prevProps.pulse === nextProps.pulse &&\n prevProps.spin === nextProps.spin &&\n prevProps.bounce === nextProps.bounce &&\n prevProps.variant === nextProps.variant &&\n prevProps.weight === nextProps.weight &&\n prevProps[\"aria-label\"] === nextProps[\"aria-label\"] &&\n prevProps[\"aria-hidden\"] === nextProps[\"aria-hidden\"]\n );\n});\n\nexport const Icon = MemoizedIcon as typeof IconComponent;\nIcon.displayName = \"Icon\";\n\nexport const EmotionIcon = React.forwardRef<\n HTMLSpanElement,\n Omit<IconProps, \"name\"> & { emotion: keyof typeof emotionIcons }\n>((props, ref) => <Icon ref={ref} name=\"smile\" {...props} />);\nEmotionIcon.displayName = \"EmotionIcon\";\n\nexport const StatusIcon = React.forwardRef<\n HTMLSpanElement,\n Omit<IconProps, \"name\"> & { status: keyof typeof statusIcons }\n>((props, ref) => <Icon ref={ref} name=\"info\" {...props} />);\nStatusIcon.displayName = \"StatusIcon\";\n\nexport const LoadingIcon = React.forwardRef<\n HTMLDivElement,\n Omit<IconProps, \"name\" | \"status\">\n>((props, ref) => (\n <Icon\n ref={ref}\n name=\"loader\"\n status=\"loading\"\n spin\n aria-label=\"로딩 중\"\n {...props}\n />\n));\nLoadingIcon.displayName = \"LoadingIcon\";\n\nexport const SuccessIcon = React.forwardRef<\n HTMLDivElement,\n Omit<IconProps, \"name\" | \"status\">\n>((props, ref) => (\n <Icon\n ref={ref}\n name=\"check\"\n status=\"success\"\n variant=\"success\"\n aria-label=\"성공\"\n {...props}\n />\n));\nSuccessIcon.displayName = \"SuccessIcon\";\n\nexport const ErrorIcon = React.forwardRef<\n HTMLDivElement,\n Omit<IconProps, \"name\" | \"status\">\n>((props, ref) => (\n <Icon\n ref={ref}\n name=\"alertCircle\"\n status=\"error\"\n variant=\"error\"\n aria-label=\"오류\"\n {...props}\n />\n));\nErrorIcon.displayName = \"ErrorIcon\";\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {useState,useEffect,useMemo}from'react';import {dotMap,dot}from'@hua-labs/dot';var c={sm:640,md:768,lg:1024,xl:1280,"2xl":1536};function f(){let[e,t]=useState(typeof window!="undefined"?d():"lg");return useEffect(()=>{let s=()=>t(d());return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[]),e}function d(){let e=window.innerWidth;if(e>=c["2xl"])return "2xl";if(e>=c.xl)return "xl";if(e>=c.lg)return "lg";if(e>=c.md)return "md";if(e>=c.sm)return "sm"}function g(){let[e,t]=useState(()=>typeof document=="undefined"?false:document.documentElement.classList.contains("dark"));return useEffect(()=>{let s=document.documentElement,r=()=>t(s.classList.contains("dark"));r();let o=new MutationObserver(r);return o.observe(s,{attributes:true,attributeFilter:["class"]}),()=>o.disconnect()},[]),e}function b(){let e=f(),t=g();return useMemo(()=>({dark:t,breakpoint:e}),[t,e])}function I(e,t){let[s,r]=useState(false),[o,a]=useState(false),l=b(),n=useMemo(()=>e?dotMap(e,l):{base:{}},[e,l]),p=useMemo(()=>{let i={...n.base};return t!=null&&t.disabled&&n.disabled?Object.assign(i,n.disabled):(s&&n.hover&&Object.assign(i,n.hover),o&&(n["focus-visible"]?Object.assign(i,n["focus-visible"]):n.focus&&Object.assign(i,n.focus))),i},[n,s,o,t==null?void 0:t.disabled]),S=useMemo(()=>({onMouseEnter:()=>r(true),onMouseLeave:()=>r(false),onFocus:()=>a(true),onBlur:()=>a(false)}),[]);return {style:p,handlers:S}}function L(...e){let t={};for(let s of e)s&&Object.assign(t,s);return t}function z(e){return e?dot(e):{}}export{f as a,b,I as c,L as d,z as e};//# sourceMappingURL=chunk-OBMOTQEU.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-OBMOTQEU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useBreakpoint.ts","../src/hooks/useDotEnv.ts","../src/hooks/useDotMap.ts"],"names":["BREAKPOINTS","useBreakpoint","bp","setBp","useState","getBreakpoint","useEffect","check","w","useIsDark","isDark","setIsDark","el","sync","observer","useDotEnv","breakpoint","useMemo","useDotMap","input","options","isHovered","setIsHovered","isFocused","setIsFocused","env","styleMap","dotMap","style","result","handlers","mergeStyles","sources","source","resolveDot","dotFn"],"mappings":"sFAKA,IAAMA,CAAAA,CAAc,CAClB,EAAA,CAAI,GAAA,CACJ,GAAI,GAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,MAAO,IACT,CAAA,CAcO,SAASC,CAAAA,EAAwC,CACtD,GAAM,CAACC,CAAAA,CAAIC,CAAK,CAAA,CAAIC,QAAAA,CAClB,OAAO,MAAA,EAAW,WAAA,CAAcC,GAAc,CAAI,IACpD,EAEA,OAAAC,SAAAA,CAAU,IAAM,CACd,IAAMC,EAAQ,IAAMJ,CAAAA,CAAME,CAAAA,EAAe,CAAA,CACzC,OAAAE,GAAM,CACN,MAAA,CAAO,iBAAiB,QAAA,CAAUA,CAAK,EAChC,IAAM,MAAA,CAAO,oBAAoB,QAAA,CAAUA,CAAK,CACzD,CAAA,CAAG,EAAE,CAAA,CAEEL,CACT,CAEA,SAASG,CAAAA,EAAwC,CAC/C,IAAMG,CAAAA,CAAI,OAAO,UAAA,CACjB,GAAIA,GAAKR,CAAAA,CAAY,KAAK,EAAG,OAAO,KAAA,CACpC,GAAIQ,CAAAA,EAAKR,CAAAA,CAAY,GAAI,OAAO,IAAA,CAChC,GAAIQ,CAAAA,EAAKR,CAAAA,CAAY,GAAI,OAAO,IAAA,CAChC,GAAIQ,CAAAA,EAAKR,CAAAA,CAAY,EAAA,CAAI,OAAO,IAAA,CAChC,GAAIQ,GAAKR,CAAAA,CAAY,EAAA,CAAI,OAAO,IAElC,CCtCA,SAASS,GAAqB,CAC5B,GAAM,CAACC,CAAAA,CAAQC,CAAS,EAAIP,QAAAA,CAAS,IAC/B,OAAO,QAAA,EAAa,WAAA,CAAoB,MACrC,QAAA,CAAS,eAAA,CAAgB,UAAU,QAAA,CAAS,MAAM,CAC1D,CAAA,CAED,OAAAE,UAAU,IAAM,CACd,IAAMM,CAAAA,CAAK,QAAA,CAAS,eAAA,CACdC,CAAAA,CAAO,IAAMF,CAAAA,CAAUC,EAAG,SAAA,CAAU,QAAA,CAAS,MAAM,CAAC,CAAA,CAC1DC,GAAK,CACL,IAAMC,EAAW,IAAI,gBAAA,CAAiBD,CAAI,CAAA,CAC1C,OAAAC,EAAS,OAAA,CAAQF,CAAAA,CAAI,CAAE,UAAA,CAAY,IAAA,CAAM,eAAA,CAAiB,CAAC,OAAO,CAAE,CAAC,CAAA,CAC9D,IAAME,EAAS,UAAA,EACxB,EAAG,EAAE,EAEEJ,CACT,CAWO,SAASK,CAAAA,EAAwB,CACtC,IAAMC,CAAAA,CAAaf,CAAAA,GACbS,CAAAA,CAASD,CAAAA,EAAU,CACzB,OAAOQ,OAAAA,CAAQ,KAAO,CAAE,IAAA,CAAMP,CAAAA,CAAQ,WAAAM,CAAW,CAAA,CAAA,CAAI,CAACN,CAAAA,CAAQM,CAAU,CAAC,CAC3E,CCpBO,SAASE,CAAAA,CACdC,CAAAA,CACAC,EASA,CACA,GAAM,CAACC,CAAAA,CAAWC,CAAY,EAAIlB,QAAAA,CAAS,KAAK,EAC1C,CAACmB,CAAAA,CAAWC,CAAY,CAAA,CAAIpB,QAAAA,CAAS,KAAK,CAAA,CAC1CqB,CAAAA,CAAMV,CAAAA,EAAU,CAEhBW,CAAAA,CAAWT,OAAAA,CAAQ,IAClBE,CAAAA,CACEQ,MAAAA,CAAOR,EAAOM,CAAG,CAAA,CADL,CAAE,IAAA,CAAM,EAAG,CAAA,CAE7B,CAACN,EAAOM,CAAG,CAAC,EAETG,CAAAA,CAAQX,OAAAA,CAAQ,IAAmB,CACvC,IAAMY,EAAsB,CAAE,GAAIH,EAAS,IAAqB,CAAA,CAEhE,OAAIN,CAAAA,EAAA,IAAA,EAAAA,EAAS,QAAA,EAAYM,CAAAA,CAAS,SAChC,MAAA,CAAO,MAAA,CAAOG,EAAQH,CAAAA,CAAS,QAAuB,GAElDL,CAAAA,EAAaK,CAAAA,CAAS,OACxB,MAAA,CAAO,MAAA,CAAOG,CAAAA,CAAQH,CAAAA,CAAS,KAAoB,CAAA,CAEjDH,IACEG,CAAAA,CAAS,eAAe,EAC1B,MAAA,CAAO,MAAA,CAAOG,EAAQH,CAAAA,CAAS,eAAe,CAAgB,CAAA,CACrDA,CAAAA,CAAS,OAClB,MAAA,CAAO,MAAA,CAAOG,EAAQH,CAAAA,CAAS,KAAoB,IAKlDG,CACT,CAAA,CAAG,CAACH,CAAAA,CAAUL,CAAAA,CAAWE,EAAWH,CAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,EAAS,QAAQ,CAAC,EAEhDU,CAAAA,CAAWb,OAAAA,CAAQ,KAAO,CAC9B,YAAA,CAAc,IAAMK,CAAAA,CAAa,IAAI,EACrC,YAAA,CAAc,IAAMA,EAAa,KAAK,CAAA,CACtC,OAAA,CAAS,IAAME,CAAAA,CAAa,IAAI,EAChC,MAAA,CAAQ,IAAMA,EAAa,KAAK,CAClC,GAAI,EAAE,EAEN,OAAO,CAAE,MAAAI,CAAAA,CAAO,QAAA,CAAAE,CAAS,CAC3B,CAMO,SAASC,CAAAA,CAAAA,GACXC,CAAAA,CACkB,CACrB,IAAMH,CAAAA,CAAkC,GACxC,IAAA,IAAWI,CAAAA,IAAUD,EACfC,CAAAA,EAAQ,MAAA,CAAO,OAAOJ,CAAAA,CAAQI,CAAM,EAE1C,OAAOJ,CACT,CAMO,SAASK,CAAAA,CAAWf,EAAqC,CAC9D,OAAKA,EACEgB,GAAAA,CAAMhB,CAAK,CAAA,CADC,EAErB","file":"chunk-OBMOTQEU.mjs","sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\n\n/** Breakpoint thresholds (Tailwind defaults) */\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\ntype Breakpoint = keyof typeof BREAKPOINTS\n\n/**\n * useBreakpoint — 현재 뷰포트에 맞는 breakpoint 반환\n *\n * dot()의 breakpoint 옵션과 함께 사용하여 반응형 인라인 스타일 적용.\n * SSR에서는 기본값 'lg' 반환 (데스크톱 우선).\n *\n * @example\n * const bp = useBreakpoint()\n * const styles = dot('p-4 sm:p-6 lg:p-8', { breakpoint: bp })\n */\nexport function useBreakpoint(): Breakpoint | undefined {\n const [bp, setBp] = useState<Breakpoint | undefined>(\n typeof window !== 'undefined' ? getBreakpoint() : 'lg' // SSR default\n )\n\n useEffect(() => {\n const check = () => setBp(getBreakpoint())\n check()\n window.addEventListener('resize', check)\n return () => window.removeEventListener('resize', check)\n }, [])\n\n return bp\n}\n\nfunction getBreakpoint(): Breakpoint | undefined {\n const w = window.innerWidth\n if (w >= BREAKPOINTS['2xl']) return '2xl'\n if (w >= BREAKPOINTS.xl) return 'xl'\n if (w >= BREAKPOINTS.lg) return 'lg'\n if (w >= BREAKPOINTS.md) return 'md'\n if (w >= BREAKPOINTS.sm) return 'sm'\n return undefined\n}\n","\"use client\"\n\nimport { useState, useEffect, useMemo } from \"react\"\nimport { useBreakpoint } from \"./useBreakpoint\"\nimport type { DotOptions } from \"@hua-labs/dot\"\n\n/**\n * Detect dark mode by observing `document.documentElement.classList`.\n * Works with any theme provider (ThemeProvider, next-themes, manual toggle).\n */\nfunction useIsDark(): boolean {\n const [isDark, setIsDark] = useState(() => {\n if (typeof document === 'undefined') return false\n return document.documentElement.classList.contains('dark')\n })\n\n useEffect(() => {\n const el = document.documentElement\n const sync = () => setIsDark(el.classList.contains('dark'))\n sync()\n const observer = new MutationObserver(sync)\n observer.observe(el, { attributes: true, attributeFilter: ['class'] })\n return () => observer.disconnect()\n }, [])\n\n return isDark\n}\n\n/**\n * useDotEnv — dot()에 전달할 환경 옵션 (breakpoint + dark) 반환\n *\n * Box/Text/Pressable 내부에서 사용하여 responsive/dark 자동 적용.\n *\n * @example\n * const env = useDotEnv()\n * const styles = dot('p-4 md:p-8 dark:bg-gray-900', env)\n */\nexport function useDotEnv(): DotOptions {\n const breakpoint = useBreakpoint()\n const isDark = useIsDark()\n return useMemo(() => ({ dark: isDark, breakpoint }), [isDark, breakpoint])\n}\n","\"use client\"\n\nimport { useState, useMemo, useCallback } from \"react\"\nimport { dotMap, dot as dotFn } from \"@hua-labs/dot\"\nimport type { DotStyleMap, StyleObject } from \"@hua-labs/dot\"\nimport { useDotEnv } from \"./useDotEnv\"\n\n/**\n * useDotMap — dotMap() 기반 interactive style 관리 훅\n *\n * hover/focus/active/disabled 상태에 따라 inline style을 자동 전환합니다.\n * className 없이 순수 inline style로 동작하여 RN 호환 가능.\n * dark mode + responsive breakpoint 자동 감지.\n *\n * @example\n * const { style, handlers } = useDotMap(\n * 'bg-white hover:bg-gray-100 focus:ring-2 dark:bg-gray-900 md:p-8',\n * { disabled: isDisabled }\n * );\n * <div style={style} {...handlers} />\n */\nexport function useDotMap(\n input: string,\n options?: { disabled?: boolean },\n): {\n style: StyleObject;\n handlers: {\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n onFocus: () => void;\n onBlur: () => void;\n };\n} {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const env = useDotEnv();\n\n const styleMap = useMemo((): DotStyleMap => {\n if (!input) return { base: {} };\n return dotMap(input, env);\n }, [input, env]);\n\n const style = useMemo((): StyleObject => {\n const result: StyleObject = { ...(styleMap.base as StyleObject) };\n\n if (options?.disabled && styleMap.disabled) {\n Object.assign(result, styleMap.disabled as StyleObject);\n } else {\n if (isHovered && styleMap.hover) {\n Object.assign(result, styleMap.hover as StyleObject);\n }\n if (isFocused) {\n if (styleMap['focus-visible']) {\n Object.assign(result, styleMap['focus-visible'] as StyleObject);\n } else if (styleMap.focus) {\n Object.assign(result, styleMap.focus as StyleObject);\n }\n }\n }\n\n return result;\n }, [styleMap, isHovered, isFocused, options?.disabled]);\n\n const handlers = useMemo(() => ({\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n }), []);\n\n return { style, handlers };\n}\n\n/**\n * Merge multiple style sources: variant base styles + dot prop + explicit style.\n * Later sources override earlier ones (CSS cascade equivalent).\n */\nexport function mergeStyles(\n ...sources: (StyleObject | React.CSSProperties | undefined)[]\n): React.CSSProperties {\n const result: Record<string, unknown> = {};\n for (const source of sources) {\n if (source) Object.assign(result, source);\n }\n return result as React.CSSProperties;\n}\n\n/**\n * Resolve a dot utility string to a CSSProperties object.\n * Thin wrapper around dot() for React component usage.\n */\nexport function resolveDot(input?: string): React.CSSProperties {\n if (!input) return {};\n return dotFn(input) as React.CSSProperties;\n}\n\nexport type { DotStyleMap, StyleObject };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function u(...r){return twMerge(clsx(r))}function h(r,t,e){return u(r?t:e||"")}function p(r,t="ko-KR"){let e=typeof r=="string"?new Date(r):r,a=new Date().getTime()-e.getTime(),n=Math.floor(a/6e4),o=Math.floor(a/36e5),s=Math.floor(a/864e5);if(s>=7)return e.toLocaleDateString(t);if(n<1)return t.startsWith("ko")?"\uBC29\uAE08 \uC804":"just now";try{let i=new Intl.RelativeTimeFormat(t,{numeric:"always"});return n<60?i.format(-n,"minute"):o<24?i.format(-o,"hour"):i.format(-s,"day")}catch{return n<60?t.startsWith("ko")?`${n}\uBD84 \uC804`:`${n}m ago`:o<24?t.startsWith("ko")?`${o}\uC2DC\uAC04 \uC804`:`${o}h ago`:t.startsWith("ko")?`${s}\uC77C \uC804`:`${s}d ago`}}function d(r){let t=Object.entries(r).filter(([,e])=>e).map(([e])=>e);return u(...t)}var w=u;export{u as a,h as b,p as c,d,w as e};//# sourceMappingURL=chunk-QEMPERUK.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-QEMPERUK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts"],"names":["merge","inputs","twMerge","clsx","mergeIf","condition","trueClass","falseClass","formatRelativeTime","timestamp","locale","date","diff","minutes","hours","days","rtf","mergeMap","classMap","classes","className","cn"],"mappings":"6DAiBO,SAASA,CAAAA,CAAAA,GAASC,CAAAA,CAAsB,CAC7C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CAiBO,SAASG,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACA,CACA,OAAOP,CAAAA,CAAMK,EAAYC,CAAAA,CAAYC,CAAAA,EAAc,EAAE,CACvD,CAwBO,SAASC,CAAAA,CAAmBC,CAAAA,CAA0BC,CAAAA,CAAS,QAAiB,CACrF,IAAMC,EAAO,OAAOF,CAAAA,EAAc,SAAW,IAAI,IAAA,CAAKA,CAAS,CAAA,CAAIA,CAAAA,CAE7DG,CAAAA,CADM,IAAI,IAAA,EAAK,CACJ,SAAQ,CAAID,CAAAA,CAAK,SAAQ,CACpCE,CAAAA,CAAU,KAAK,KAAA,CAAMD,CAAAA,CAAO,GAAK,CAAA,CACjCE,CAAAA,CAAQ,KAAK,KAAA,CAAMF,CAAAA,CAAO,IAAO,CAAA,CACjCG,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMH,CAAAA,CAAO,KAAQ,EAGvC,GAAIG,CAAAA,EAAQ,EAAG,OAAOJ,CAAAA,CAAK,mBAAmBD,CAAM,CAAA,CAGpD,GAAIG,CAAAA,CAAU,CAAA,CAAG,OAAOH,EAAO,UAAA,CAAW,IAAI,EAAI,qBAAA,CAAS,UAAA,CAG3D,GAAI,CACF,IAAMM,CAAAA,CAAM,IAAI,IAAA,CAAK,kBAAA,CAAmBN,EAAQ,CAAE,OAAA,CAAS,QAAS,CAAC,CAAA,CACrE,OAAIG,CAAAA,CAAU,EAAA,CAAWG,EAAI,MAAA,CAAO,CAACH,EAAS,QAAQ,CAAA,CAClDC,EAAQ,EAAA,CAAWE,CAAAA,CAAI,OAAO,CAACF,CAAAA,CAAO,MAAM,CAAA,CACzCE,CAAAA,CAAI,MAAA,CAAO,CAACD,CAAAA,CAAM,KAAK,CAChC,CAAA,KAAQ,CAEN,OAAIF,CAAAA,CAAU,EAAA,CAAWH,CAAAA,CAAO,UAAA,CAAW,IAAI,CAAA,CAAI,GAAGG,CAAO,CAAA,aAAA,CAAA,CAAQ,GAAGA,CAAO,CAAA,KAAA,CAAA,CAC3EC,EAAQ,EAAA,CAAWJ,CAAAA,CAAO,UAAA,CAAW,IAAI,CAAA,CAAI,CAAA,EAAGI,CAAK,CAAA,mBAAA,CAAA,CAAS,CAAA,EAAGA,CAAK,CAAA,KAAA,CAAA,CACnEJ,CAAAA,CAAO,WAAW,IAAI,CAAA,CAAI,GAAGK,CAAI,CAAA,aAAA,CAAA,CAAQ,GAAGA,CAAI,CAAA,KAAA,CACzD,CACF,CAmBO,SAASE,EAASC,CAAAA,CAAsD,CAC7E,IAAMC,CAAAA,CAAU,MAAA,CAAO,OAAA,CAAQD,CAAQ,CAAA,CACpC,MAAA,CAAO,CAAC,EAAGb,CAAS,CAAA,GAAMA,CAAS,CAAA,CACnC,GAAA,CAAI,CAAC,CAACe,CAAS,CAAA,GAAMA,CAAS,EAEjC,OAAOpB,CAAAA,CAAM,GAAGmB,CAAO,CACzB,CAGO,IAAME,CAAAA,CAAKrB","file":"chunk-QEMPERUK.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\n/**\n * HUA UI의 스마트 클래스 병합 유틸리티\n * clsx와 tailwind-merge를 결합하여 중복 클래스를 자동으로 해결합니다.\n * \n * @param inputs - 병합할 클래스 값들\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * merge(\"px-2 py-1\", \"px-4\") // \"py-1 px-4\"\n * merge(\"text-red-500\", \"text-blue-500\") // \"text-blue-500\"\n * merge(\"bg-white\", \"dark:bg-slate-900\") // \"bg-white dark:bg-slate-900\"\n * ```\n */\nexport function merge(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/**\n * 조건부 클래스 병합 유틸리티\n * 조건에 따라 클래스를 선택적으로 병합합니다.\n * \n * @param condition - 클래스를 적용할 조건\n * @param trueClass - 조건이 true일 때 적용할 클래스\n * @param falseClass - 조건이 false일 때 적용할 클래스 (선택사항)\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * mergeIf(isActive, \"bg-blue-500\", \"bg-gray-200\")\n * mergeIf(isLoading, \"opacity-50 cursor-not-allowed\")\n * ```\n */\nexport function mergeIf(\n condition: boolean,\n trueClass: ClassValue,\n falseClass?: ClassValue\n) {\n return merge(condition ? trueClass : falseClass || \"\")\n}\n\n/**\n * 상대 시간 포맷팅 유틸리티\n * \n * 날짜를 상대 시간 형식으로 포맷팅합니다 (예: \"방금 전\", \"5분 전\", \"2시간 전\", \"3일 전\").\n * 7일 이상 경과한 경우 절대 날짜를 반환합니다.\n * \n * Formats a date as relative time (e.g., \"방금 전\", \"5분 전\", \"2시간 전\", \"3일 전\").\n * Returns absolute date for dates older than 7 days.\n * \n * @param timestamp - 포맷팅할 날짜 (Date 객체 또는 ISO 문자열) / Date to format (Date object or ISO string)\n * @param locale - 로케일 (기본값: \"ko-KR\") / Locale (default: \"ko-KR\")\n * @returns 포맷팅된 상대 시간 문자열 / Formatted relative time string\n * \n * @example\n * ```tsx\n * formatRelativeTime(new Date()) // \"방금 전\"\n * formatRelativeTime(new Date(Date.now() - 5 * 60000)) // \"5분 전\"\n * formatRelativeTime(new Date(Date.now() - 2 * 3600000)) // \"2시간 전\"\n * formatRelativeTime(new Date(Date.now() - 3 * 86400000)) // \"3일 전\"\n * formatRelativeTime(new Date(\"2024-01-01\")) // \"2024. 1. 1.\" (7일 이상 경과)\n * ```\n */\nexport function formatRelativeTime(timestamp: Date | string, locale = \"ko-KR\"): string {\n const date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n // 7일 이상은 절대 날짜\n if (days >= 7) return date.toLocaleDateString(locale);\n\n // 1분 미만 — 하드코딩 폴백 유지 (후방 호환)\n if (minutes < 1) return locale.startsWith(\"ko\") ? \"방금 전\" : \"just now\";\n\n // Intl.RelativeTimeFormat 사용, 미지원 환경은 하드코딩 폴백\n try {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: \"always\" });\n if (minutes < 60) return rtf.format(-minutes, \"minute\");\n if (hours < 24) return rtf.format(-hours, \"hour\");\n return rtf.format(-days, \"day\");\n } catch {\n // Intl 미지원 환경 폴백 — 기존 하드코딩 문자열\n if (minutes < 60) return locale.startsWith(\"ko\") ? `${minutes}분 전` : `${minutes}m ago`;\n if (hours < 24) return locale.startsWith(\"ko\") ? `${hours}시간 전` : `${hours}h ago`;\n return locale.startsWith(\"ko\") ? `${days}일 전` : `${days}d ago`;\n }\n}\n\n/**\n * 객체 기반 클래스 병합 유틸리티\n * 객체의 키-값 쌍을 기반으로 조건부 클래스를 병합합니다.\n * \n * @param classMap - 클래스 맵 객체\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * mergeMap({\n * \"bg-blue-500\": isPrimary,\n * \"bg-gray-500\": !isPrimary,\n * \"text-white\": true,\n * \"opacity-50\": isDisabled\n * })\n * ```\n */\nexport function mergeMap(classMap: Record<string, boolean | undefined | null>) {\n const classes = Object.entries(classMap)\n .filter(([, condition]) => condition)\n .map(([className]) => className)\n \n return merge(...classes)\n}\n\n// 하위 호환성을 위해 cn도 export (점진적 마이그레이션 지원)\nexport const cn = merge "]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var r={cursor:"not-allowed",opacity:.5};var e={outline:"none",boxShadow:"0 0 0 2px var(--color-background), 0 0 0 3px var(--color-ring)"},t={outline:"none",boxShadow:"0 0 0 1px var(--color-ring)"},n={outline:"none",boxShadow:"0 0 0 2px var(--color-background), 0 0 0 3px var(--color-destructive)"};function s(o){return o==="destructive"?n:o==="outline"||o==="ghost"||o==="link"?t:e}var S={outline:"none",boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)"},i={outline:"none",boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px var(--color-ring)"},p={outline:"none",boxShadow:"0 0 0 1px color-mix(in srgb, var(--color-ring) 50%, transparent)",borderColor:"var(--color-ring)"},l={outline:"none",boxShadow:"0 0 0 1px var(--color-destructive)",borderColor:"var(--color-destructive)"},x={outline:"none",boxShadow:"0 0 0 1px var(--color-success)",borderColor:"var(--color-success)"},a={borderColor:"var(--color-destructive)"},C={borderColor:"var(--color-success)"},u={default:"0 0 0 1px var(--color-ring)",outline:"0 0 0 1px var(--color-ring)",filled:"0 0 0 1px var(--color-ring)",glass:"0 0 0 1px rgba(var(--color-ring), 0.5)",error:"0 0 0 1px var(--color-destructive)",success:"0 0 0 1px var(--color-success)"};export{r as a,e as b,s as c,S as d,i as e,p as f,l as g,x as h,a as i,C as j,u as k};//# sourceMappingURL=chunk-RICRFXFP.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-RICRFXFP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/styles/disabled.ts","../src/lib/styles/focus.ts"],"names":["DISABLED_INPUT","FOCUS_RING_OFFSET","FOCUS_RING_THIN","FOCUS_RING_DESTRUCTIVE","getButtonFocusRing","variant","FOCUS_RING_CONTROL_SOFT","FOCUS_RING_CONTROL","FORM_FOCUS_BASE","FORM_FOCUS_ERROR","FORM_FOCUS_SUCCESS","FORM_BORDER_ERROR","FORM_BORDER_SUCCESS","RADIO_FOCUS_SHADOW"],"mappings":"AAmBO,IAAMA,CAAAA,CAAgC,CAC3C,MAAA,CAAQ,aAAA,CACR,OAAA,CAAS,EACX,ECTO,IAAMC,CAAAA,CAAmC,CAC9C,OAAA,CAAS,MAAA,CACT,UAAW,gEACb,CAAA,CAEaC,CAAAA,CAAiC,CAC5C,OAAA,CAAS,MAAA,CACT,UAAW,6BACb,CAAA,CAEaC,CAAAA,CAAwC,CACnD,OAAA,CAAS,MAAA,CACT,UACE,uEACJ,EAKO,SAASC,CAAAA,CAAmBC,CAAAA,CAAgC,CACjE,OAAIA,CAAAA,GAAY,aAAA,CAAsBF,CAAAA,CAClCE,CAAAA,GAAY,SAAA,EAAaA,CAAAA,GAAY,SAAWA,CAAAA,GAAY,MAAA,CACvDH,CAAAA,CACFD,CACT,CAKO,IAAMK,CAAAA,CAAyC,CACpD,OAAA,CAAS,MAAA,CACT,SAAA,CACE,+FACJ,CAAA,CAGaC,CAAAA,CAAoC,CAC/C,OAAA,CAAS,MAAA,CACT,SAAA,CAAW,0DACb,CAAA,CAKaC,CAAAA,CAAiC,CAC5C,OAAA,CAAS,MAAA,CACT,SAAA,CAAW,kEAAA,CACX,WAAA,CAAa,mBACf,EAGaC,CAAAA,CAAkC,CAC7C,OAAA,CAAS,MAAA,CACT,SAAA,CAAW,oCAAA,CACX,WAAA,CAAa,0BACf,CAAA,CAGaC,CAAAA,CAAoC,CAC/C,OAAA,CAAS,MAAA,CACT,SAAA,CAAW,iCACX,WAAA,CAAa,sBACf,CAAA,CAGaC,CAAAA,CAAmC,CAC9C,WAAA,CAAa,0BACf,CAAA,CAGaC,CAAAA,CAAqC,CAChD,WAAA,CAAa,sBACf,CAAA,CAOaC,EAA6C,CACxD,OAAA,CAAS,6BAAA,CACT,OAAA,CAAS,6BAAA,CACT,MAAA,CAAQ,6BAAA,CACR,KAAA,CAAO,wCAAA,CACP,KAAA,CAAO,oCAAA,CACP,OAAA,CAAS,gCACX","file":"chunk-RICRFXFP.mjs","sourcesContent":["/**\n * Shared disabled styles for HUA-UI components\n *\n * Two patterns:\n * - DISABLED_INTERACTIVE: For custom interactive elements (Button, Toggle)\n * Uses pointerEvents:none because there's no native disabled attribute.\n * - DISABLED_INPUT: For native form elements (Input, Select, Textarea, Checkbox, Radio, Switch)\n * Uses cursor:not-allowed because the browser's native disabled attribute handles event blocking.\n */\n\nimport type { CSSProperties } from \"react\";\n\n/** Button, Toggle — no native disabled, block events via pointerEvents */\nexport const DISABLED_INTERACTIVE: CSSProperties = {\n pointerEvents: \"none\",\n opacity: 0.5,\n};\n\n/** Form elements — native disabled blocks events, show not-allowed cursor */\nexport const DISABLED_INPUT: CSSProperties = {\n cursor: \"not-allowed\",\n opacity: 0.5,\n};\n","/**\n * Shared focus ring utilities for HUA-UI components\n *\n * Focus ring types by component category:\n * - button: Offset double-ring (Button, Toggle)\n * - form: Thin color-mix ring + borderColor (Input, Select, Textarea)\n * - control: Simple ring (Checkbox, Switch, Badge)\n */\n\nimport type { CSSProperties } from \"react\";\n\n// ── Button-style focus (offset double-ring) ────────────────────────────────\n\nexport const FOCUS_RING_OFFSET: CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 2px var(--color-background), 0 0 0 3px var(--color-ring)\",\n};\n\nexport const FOCUS_RING_THIN: CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px var(--color-ring)\",\n};\n\nexport const FOCUS_RING_DESTRUCTIVE: CSSProperties = {\n outline: \"none\",\n boxShadow:\n \"0 0 0 2px var(--color-background), 0 0 0 3px var(--color-destructive)\",\n};\n\n/**\n * Get focus ring for a Button/Toggle variant.\n */\nexport function getButtonFocusRing(variant: string): CSSProperties {\n if (variant === \"destructive\") return FOCUS_RING_DESTRUCTIVE;\n if (variant === \"outline\" || variant === \"ghost\" || variant === \"link\")\n return FOCUS_RING_THIN;\n return FOCUS_RING_OFFSET;\n}\n\n// ── Control-style focus ────────────────────────────────────────────────────\n\n/** Checkbox: 1px ring + 3px color-mix halo */\nexport const FOCUS_RING_CONTROL_SOFT: CSSProperties = {\n outline: \"none\",\n boxShadow:\n \"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)\",\n};\n\n/** Switch, Badge: 1px + 3px solid ring */\nexport const FOCUS_RING_CONTROL: CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px var(--color-ring), 0 0 0 3px var(--color-ring)\",\n};\n\n// ── Form-style focus (Input, Select, Textarea) ────────────────────────────\n\n/** Base form focus — used by default/outline variants */\nexport const FORM_FOCUS_BASE: CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px color-mix(in srgb, var(--color-ring) 50%, transparent)\",\n borderColor: \"var(--color-ring)\",\n};\n\n/** Form error focus */\nexport const FORM_FOCUS_ERROR: CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px var(--color-destructive)\",\n borderColor: \"var(--color-destructive)\",\n};\n\n/** Form success focus */\nexport const FORM_FOCUS_SUCCESS: CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px var(--color-success)\",\n borderColor: \"var(--color-success)\",\n};\n\n/** Form error border (non-focus) */\nexport const FORM_BORDER_ERROR: CSSProperties = {\n borderColor: \"var(--color-destructive)\",\n};\n\n/** Form success border (non-focus) */\nexport const FORM_BORDER_SUCCESS: CSSProperties = {\n borderColor: \"var(--color-success)\",\n};\n\n/** Form disabled style — re-exported from disabled.ts for backward compat */\nexport { DISABLED_INPUT as FORM_DISABLED } from \"./disabled\";\n\n// ── Radio focus shadow map ─────────────────────────────────────────────────\n\nexport const RADIO_FOCUS_SHADOW: Record<string, string> = {\n default: \"0 0 0 1px var(--color-ring)\",\n outline: \"0 0 0 1px var(--color-ring)\",\n filled: \"0 0 0 1px var(--color-ring)\",\n glass: \"0 0 0 1px rgba(var(--color-ring), 0.5)\",\n error: \"0 0 0 1px var(--color-destructive)\",\n success: \"0 0 0 1px var(--color-success)\",\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {d,e}from'./chunk-OBMOTQEU.mjs';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function c({size:i="md",variant:u="default",text:a,color:o="default",dot:m,style:f}){let b={sm:"w-6 h-6",md:"w-8 h-8",lg:"w-12 h-12",xl:"w-16 h-16"},t={default:"border-muted-foreground/30 border-t-muted-foreground dark:border-muted-foreground/20 dark:border-t-muted-foreground/80",primary:"border-primary/30 border-t-primary dark:border-primary/20 dark:border-t-primary/80",secondary:"border-muted-foreground/30 border-t-muted-foreground dark:border-muted-foreground/20 dark:border-t-muted-foreground/80",success:"border-green-300 border-t-green-600 dark:border-green-500/50 dark:border-t-green-300",warning:"border-yellow-300 border-t-yellow-600 dark:border-yellow-500/50 dark:border-t-yellow-300",error:"border-red-300 border-t-red-600 dark:border-red-500/50 dark:border-t-red-300",glass:"border-white/50 border-t-white/90 dark:border-slate-400/60 dark:border-t-slate-100"},l=i==="xl"?"border-[3px]":i==="lg"?"border-[2.5px]":"border-2",y=()=>{switch(u){case "dots":return jsxs(Fragment,{children:[jsx("style",{children:`
|
|
3
|
+
@keyframes dotPulse {
|
|
4
|
+
0%, 80%, 100% { opacity: 0.3; }
|
|
5
|
+
40% { opacity: 1; }
|
|
6
|
+
}
|
|
7
|
+
`}),jsxs("div",{style:e("flex space-x-1 items-center"),children:[jsx("div",{style:{...e("w-2 h-2 bg-current rounded-full"),animation:"dotPulse 1.4s ease-in-out infinite",animationDelay:"0ms"}}),jsx("div",{style:{...e("w-2 h-2 bg-current rounded-full"),animation:"dotPulse 1.4s ease-in-out infinite",animationDelay:"200ms"}}),jsx("div",{style:{...e("w-2 h-2 bg-current rounded-full"),animation:"dotPulse 1.4s ease-in-out infinite",animationDelay:"400ms"}})]})]});case "bars":return jsxs(Fragment,{children:[jsx("style",{children:`
|
|
8
|
+
@keyframes barWave {
|
|
9
|
+
0%, 40%, 100% { transform: scaleY(0.4); }
|
|
10
|
+
20% { transform: scaleY(1); }
|
|
11
|
+
}
|
|
12
|
+
`}),jsxs("div",{style:e("flex space-x-0.5 h-full items-center"),children:[jsx("div",{style:{...e("w-1 h-full bg-current rounded-sm origin-bottom"),animation:"barWave 1.2s ease-in-out infinite",animationDelay:"0ms"}}),jsx("div",{style:{...e("w-1 h-full bg-current rounded-sm origin-bottom"),animation:"barWave 1.2s ease-in-out infinite",animationDelay:"100ms"}}),jsx("div",{style:{...e("w-1 h-full bg-current rounded-sm origin-bottom"),animation:"barWave 1.2s ease-in-out infinite",animationDelay:"200ms"}}),jsx("div",{style:{...e("w-1 h-full bg-current rounded-sm origin-bottom"),animation:"barWave 1.2s ease-in-out infinite",animationDelay:"300ms"}}),jsx("div",{style:{...e("w-1 h-full bg-current rounded-sm origin-bottom"),animation:"barWave 1.2s ease-in-out infinite",animationDelay:"400ms"}})]})]});case "ring":return jsx("div",{style:d(e("w-full h-full animate-spin rounded-full"),e(l),e(t[o]||t.default))});case "ripple":return jsxs("div",{style:e("relative w-full h-full"),children:[jsx("div",{style:d(e("absolute inset-0 rounded-full border-2 animate-ping"),e(t[o]||t.default))}),jsx("div",{style:d(e("w-full h-full rounded-full border-2"),e(t[o]||t.default))})]});default:return jsx("div",{style:d(e("w-full h-full animate-spin rounded-full"),e(l),e(t[o]||t.default))})}};return jsxs("div",{style:d(e("flex flex-col items-center justify-center"),e(m),f),children:[jsx("div",{style:d(e(b[i]),e("text-muted-foreground")),children:y()}),a&&jsx("p",{style:e("mt-3 text-sm text-muted-foreground text-center"),children:a})]})}export{c as a};//# sourceMappingURL=chunk-SOK7VBSM.mjs.map
|
|
13
|
+
//# sourceMappingURL=chunk-SOK7VBSM.mjs.map
|