@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
package/dist/interactive.d.ts
CHANGED
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
* import { Tabs, TabsList, TabsTrigger, TabsContent } from '@hua-labs/ui/interactive';
|
|
13
13
|
* import { Command, CommandInput, CommandList, CommandItem } from '@hua-labs/ui/interactive';
|
|
14
14
|
*/
|
|
15
|
-
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from
|
|
16
|
-
export { Tabs, TabsList, TabsTrigger, TabsContent, TabsPills, TabsUnderline, TabsCards } from
|
|
17
|
-
export { Menu, MenuItem, MenuSeparator, MenuLabel, MenuHorizontal, MenuVertical, MenuCompact } from
|
|
18
|
-
export { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuGroup } from
|
|
19
|
-
export { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandSeparator, CommandEmpty, CommandDialog } from
|
|
15
|
+
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from "./components/Accordion";
|
|
16
|
+
export { Tabs, TabsList, TabsTrigger, TabsContent, TabsPills, TabsUnderline, TabsCards, } from "./components/Tabs";
|
|
17
|
+
export { Menu, MenuItem, MenuSeparator, MenuLabel, MenuHorizontal, MenuVertical, MenuCompact, } from "./components/Menu";
|
|
18
|
+
export { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuGroup, } from "./components/ContextMenu";
|
|
19
|
+
export { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandSeparator, CommandEmpty, CommandDialog, } from "./components/Command";
|
|
20
|
+
export { DashboardToolbar as Toolbar } from "./components/dashboard/DashboardToolbar";
|
|
21
|
+
export type { DashboardToolbarProps as ToolbarProps, ToolbarAction, DateRangeConfig, DatePreset, } from "./components/dashboard/DashboardToolbar";
|
|
20
22
|
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,yCAAyC,CAAC;AACtF,YAAY,EACV,qBAAqB,IAAI,YAAY,EACrC,aAAa,EACb,eAAe,EACf,UAAU,GACX,MAAM,yCAAyC,CAAC"}
|
package/dist/interactive.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export{a as Accordion,d as AccordionContent,b as AccordionItem,c as AccordionTrigger,f as Tabs,k as TabsCards,e as TabsContent,g as TabsList,i as TabsPills,h as TabsTrigger,j as TabsUnderline}from'./chunk-N56BUOCD.mjs';import'./chunk-7OYT3QSY.mjs';import {b}from'./chunk-U6CTBZ2U.mjs';import l from'react';import {jsx,jsxs}from'react/jsx-runtime';var z=l.forwardRef(({className:n,children:e,variant:t="default",size:o="md",...m},d)=>{let c=()=>{switch(t){case "horizontal":return "flex items-center space-x-1";case "vertical":return "flex flex-col space-y-1";case "compact":return "flex flex-col space-y-0.5";default:return "flex flex-col space-y-1"}},p=()=>{switch(o){case "sm":return "text-sm";case "lg":return "text-base";default:return "text-sm"}};return jsx("div",{ref:d,className:b(c(),p(),n),...m,children:l.Children.map(e,f=>l.isValidElement(f)?l.cloneElement(f,{variant:t,size:o}):f)})});z.displayName="Menu";var K=l.forwardRef(({className:n,icon:e,variant:t="default",size:o="md",active:m=false,disabled:d=false,children:c,...p},f)=>{let S=()=>{switch(t){case "horizontal":return b("flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors",m?"bg-primary/10 text-primary":"text-foreground hover:text-foreground hover:bg-muted");case "vertical":return b("flex items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors",m?"bg-primary/10 text-primary":"text-foreground hover:text-foreground hover:bg-muted");case "compact":return b("flex items-center gap-2 px-2 py-1.5 rounded text-sm font-medium transition-colors",m?"bg-primary/10 text-primary":"text-foreground hover:text-foreground hover:bg-muted");default:return b("flex items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors",m?"bg-primary/10 text-primary":"text-foreground hover:text-foreground hover:bg-muted")}},k=()=>{switch(o){case "sm":return "text-xs";case "lg":return "text-base";default:return "text-sm"}};return jsxs("button",{ref:f,className:b(S(),k(),d&&"opacity-50 cursor-not-allowed",n),disabled:d,...p,children:[e&&jsx("div",{className:"flex-shrink-0 w-4 h-4",children:e}),jsx("span",{className:"flex-1 text-left",children:c})]})});K.displayName="MenuItem";var _=l.forwardRef(({className:n,variant:e="default",...t},o)=>jsx("div",{ref:o,className:b(e==="horizontal"?"w-px h-4 bg-border mx-1":"h-px bg-border my-2",n),...t}));_.displayName="MenuSeparator";var q=l.forwardRef(({className:n,variant:e="default",size:t="md",children:o,...m},d)=>{let c=()=>e==="horizontal"?"px-3 py-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide":"px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide",p=()=>{switch(t){case "sm":return "text-xs";case "lg":return "text-sm";default:return "text-xs"}};return jsx("div",{ref:d,className:b(c(),p(),n),...m,children:o})});q.displayName="MenuLabel";var U=l.forwardRef(({className:n,...e},t)=>jsx(z,{ref:t,variant:"horizontal",className:n,...e}));U.displayName="MenuHorizontal";var W=l.forwardRef(({className:n,...e},t)=>jsx(z,{ref:t,variant:"vertical",className:n,...e}));W.displayName="MenuVertical";var F=l.forwardRef(({className:n,...e},t)=>jsx(z,{ref:t,variant:"compact",className:n,...e}));F.displayName="MenuCompact";var X=l.forwardRef(({className:n,children:e,open:t,onOpenChange:o,trigger:m,placement:d="bottom",align:c="start",offset:p=8,disabled:f=false,...S},k)=>{let[V,B]=l.useState(false),[M,R]=l.useState({x:0,y:0}),g=l.useRef(null),T=l.useRef(null),H=t!==void 0,b$1=H?t:V,y=l.useCallback(i=>{f||(H||B(i),o==null||o(i));},[f,H,o]),C=i=>{if(i.preventDefault(),f)return;i.currentTarget.getBoundingClientRect();let D=i.clientX,r=i.clientY;R({x:D,y:r}),y(true);},L=l.useCallback(()=>{if(!T.current)return;let i=T.current.getBoundingClientRect(),w=window.innerWidth,D=window.innerHeight,r=M.x,s=M.y;r+i.width>w-8&&(r=w-i.width-8),s+i.height>D-8&&(s=D-i.height-8),r<8&&(r=8),s<8&&(s=8),R({x:r,y:s});},[M.x,M.y]);return l.useEffect(()=>{if(b$1)return L(),window.addEventListener("resize",L),window.addEventListener("scroll",L),()=>{window.removeEventListener("resize",L),window.removeEventListener("scroll",L);}},[b$1,L]),l.useEffect(()=>{let i=w=>{g.current&&T.current&&!g.current.contains(w.target)&&!T.current.contains(w.target)&&y(false);};if(b$1)return document.addEventListener("mousedown",i),()=>{document.removeEventListener("mousedown",i);}},[b$1,y]),jsxs("div",{ref:k,className:b("relative",n),...S,children:[m&&jsx("div",{ref:g,onContextMenu:C,className:"inline-block",children:m}),b$1&&jsx("div",{ref:T,className:b("fixed z-50 bg-popover text-popover-foreground rounded-lg shadow-xl backdrop-blur-sm","min-w-[200px] py-2","border-0"),style:{left:M.x,top:M.y,boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)"},children:e})]})});X.displayName="ContextMenu";var Y=l.forwardRef(({className:n,icon:e,variant:t="default",children:o,disabled:m,...d},c)=>jsxs("button",{ref:c,className:b("w-full flex items-center gap-3 px-4 py-3 text-sm font-medium transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:bg-muted",(()=>{switch(t){case "destructive":return "text-destructive hover:bg-destructive/10";case "disabled":return "text-muted-foreground cursor-not-allowed";default:return "text-foreground hover:bg-muted"}})(),n),disabled:m||t==="disabled",...d,children:[e&&jsx("div",{className:"flex-shrink-0 w-4 h-4",children:e}),jsx("span",{className:"flex-1 text-left",children:o})]}));Y.displayName="ContextMenuItem";var $=l.forwardRef(({className:n,...e},t)=>jsx("div",{ref:t,className:b("h-px bg-border my-2",n),...e}));$.displayName="ContextMenuSeparator";var J=l.forwardRef(({className:n,children:e,...t},o)=>jsx("div",{ref:o,className:b("px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide",n),...t,children:e}));J.displayName="ContextMenuLabel";var O=l.forwardRef(({className:n,children:e,...t},o)=>jsx("div",{ref:o,className:b("py-1",n),...t,children:e}));O.displayName="ContextMenuGroup";var G=l.forwardRef(({className:n,children:e,open:t,onOpenChange:o,placeholder:m="\uBA85\uB839\uC5B4\uB97C \uAC80\uC0C9\uD558\uC138\uC694...",searchValue:d,onSearchChange:c,disabled:p=false,...f},S)=>{let[k,V]=l.useState(false),[B,M]=l.useState(""),[R,g]=l.useState(0),T=l.useRef(null),H=l.useRef(null),b$1=l.useRef(null),y=t!==void 0,C=y?t:k,L=d!==void 0?d:B,i=l.useCallback(r=>{p||(y||V(r),o==null||o(r));},[p,y,o]),w=r=>{y||M(r),c==null||c(r),g(0);},D=r=>{var A;if(p)return;let s=(A=b$1.current)==null?void 0:A.querySelectorAll("[data-command-item]"),P=(s==null?void 0:s.length)||0;switch(r.key){case "ArrowDown":r.preventDefault(),g(N=>(N+1)%P);break;case "ArrowUp":r.preventDefault(),g(N=>(N-1+P)%P);break;case "Enter":{r.preventDefault();let N=s==null?void 0:s[R];N==null||N.click();break}case "Escape":r.preventDefault(),i(false);break}};return l.useEffect(()=>{var r;C&&((r=H.current)==null||r.focus(),g(0));},[C]),l.useEffect(()=>{let r=s=>{s.key==="k"&&(s.metaKey||s.ctrlKey)&&(s.preventDefault(),i(!C)),s.key==="Escape"&&C&&(s.preventDefault(),i(false));};return document.addEventListener("keydown",r),()=>{document.removeEventListener("keydown",r);}},[C,i]),l.useEffect(()=>{var s;let r=(s=b$1.current)==null?void 0:s.querySelector(`[data-command-item]:nth-child(${R+1})`);r==null||r.scrollIntoView({block:"nearest"});},[R]),jsx("div",{ref:S,className:b("relative",n),...f,children:C&&jsx("div",{ref:T,className:b("fixed inset-0 z-50 bg-black/50 backdrop-blur-sm","flex items-start justify-center pt-16"),onClick:()=>i(false),children:jsxs("div",{className:b("w-full max-w-2xl mx-4 bg-popover text-popover-foreground rounded-lg shadow-2xl","border-0 overflow-hidden"),onClick:r=>r.stopPropagation(),style:{boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"},children:[jsxs("div",{className:"p-4 border-b border-border",children:[" ",jsx("input",{ref:H,type:"text",placeholder:m,value:L,onChange:r=>w(r.target.value),onKeyDown:D,className:b("w-full bg-transparent text-lg font-medium outline-none","placeholder:text-muted-foreground","text-foreground")})]}),jsx("div",{ref:b$1,className:"max-h-96 overflow-y-auto py-2",children:l.Children.map(e,(r,s)=>l.isValidElement(r)?r.type===l.Fragment||typeof r.type=="symbol"?r:l.cloneElement(r,{selected:s===R,onSelect:()=>{var P,A;(A=(P=r.props).onSelect)==null||A.call(P),i(false);}}):r)})]})})})});G.displayName="Command";var Z=l.forwardRef(({className:n,...e},t)=>jsx("input",{ref:t,className:b("flex h-10 w-full rounded-md bg-transparent px-3 py-2 text-sm outline-none","placeholder:text-muted-foreground","disabled:cursor-not-allowed disabled:opacity-50",n),...e}));Z.displayName="CommandInput";var j=l.forwardRef(({className:n,...e},t)=>jsx("div",{ref:t,className:b("max-h-96 overflow-y-auto py-2",n),...e}));j.displayName="CommandList";var ee=l.forwardRef(({className:n,icon:e,selected:t=false,onSelect:o,children:m,...d},c)=>jsxs("button",{ref:c,"data-command-item":true,className:b("relative flex w-full items-center gap-3 rounded-sm px-4 py-3 text-sm","text-foreground","hover:bg-muted","focus:bg-muted","focus:outline-none",t&&"bg-muted","transition-colors",n),onClick:o,...d,children:[e&&jsx("div",{className:"flex-shrink-0 w-4 h-4 text-muted-foreground",children:e}),jsx("span",{className:"flex-1 text-left",children:m})]}));ee.displayName="CommandItem";var te=l.forwardRef(({className:n,heading:e,children:t,...o},m)=>jsxs("div",{ref:m,className:b("py-2",n),...o,children:[" ",e&&jsxs("div",{className:"px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide",children:[" ",e]}),jsxs("div",{className:"space-y-1",children:[" ",t]})]}));te.displayName="CommandGroup";var re=l.forwardRef(({className:n,...e},t)=>jsx("div",{ref:t,className:b("h-px bg-border my-2",n),...e}));re.displayName="CommandSeparator";var ne=l.forwardRef(({className:n,children:e="\uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",...t},o)=>jsx("div",{ref:o,className:b("py-8 text-center text-sm text-muted-foreground",n),...t,children:e}));ne.displayName="CommandEmpty";var oe=l.forwardRef(({className:n,...e},t)=>jsx(G,{ref:t,className:n,...e}));oe.displayName="CommandDialog";export{G as Command,oe as CommandDialog,ne as CommandEmpty,te as CommandGroup,Z as CommandInput,ee as CommandItem,j as CommandList,re as CommandSeparator,X as ContextMenu,O as ContextMenuGroup,Y as ContextMenuItem,J as ContextMenuLabel,$ as ContextMenuSeparator,z as Menu,F as MenuCompact,U as MenuHorizontal,K as MenuItem,q as MenuLabel,_ as MenuSeparator,W as MenuVertical};//# sourceMappingURL=interactive.mjs.map
|
|
2
|
+
export{a as Accordion,d as AccordionContent,b as AccordionItem,c as AccordionTrigger,f as Tabs,k as TabsCards,e as TabsContent,g as TabsList,i as TabsPills,h as TabsTrigger,j as TabsUnderline}from'./chunk-BOX4TONF.mjs';export{a as Toolbar}from'./chunk-HLBIIF4I.mjs';import'./chunk-CYAAAEPJ.mjs';import'./chunk-JY3QVUGW.mjs';import'./chunk-RICRFXFP.mjs';import {b}from'./chunk-LPHUWTQ2.mjs';import'./chunk-7T3IUG3G.mjs';import'./chunk-7CGJQSJO.mjs';import'./chunk-NSDWT2JM.mjs';import {e,d}from'./chunk-OBMOTQEU.mjs';import'./chunk-EAZEI74V.mjs';import c,{useMemo,useState}from'react';import {jsx,jsxs}from'react/jsx-runtime';var h=e=>`var(${e})`,Pe={default:{display:"flex",flexDirection:"column",...e("gap-1")},horizontal:{display:"flex",flexDirection:"row",alignItems:"center",...e("gap-1")},vertical:{display:"flex",flexDirection:"column",...e("gap-1")},compact:{display:"flex",flexDirection:"column",...e("gap-0.5")}},he={sm:{fontSize:"0.875rem"},md:{fontSize:"0.875rem"},lg:{fontSize:"1rem"}},He={default:{display:"flex",alignItems:"center",...e("gap-3 px-4 py-3 rounded-md"),fontSize:"0.875rem",fontWeight:"500",transition:"background-color 150ms ease-in-out, color 150ms ease-in-out",border:"none",cursor:"pointer",width:"100%",textAlign:"left",background:"none"},horizontal:{display:"flex",alignItems:"center",...e("gap-2 px-3 py-2 rounded-md"),fontSize:"0.875rem",fontWeight:"500",transition:"background-color 150ms ease-in-out, color 150ms ease-in-out",border:"none",cursor:"pointer",width:"auto",textAlign:"left",background:"none"},vertical:{display:"flex",alignItems:"center",...e("gap-3 px-4 py-3 rounded-md"),fontSize:"0.875rem",fontWeight:"500",transition:"background-color 150ms ease-in-out, color 150ms ease-in-out",border:"none",cursor:"pointer",width:"100%",textAlign:"left",background:"none"},compact:{display:"flex",alignItems:"center",...e("gap-2 px-2 py-1.5 rounded-sm"),fontSize:"0.875rem",fontWeight:"500",transition:"background-color 150ms ease-in-out, color 150ms ease-in-out",border:"none",cursor:"pointer",width:"100%",textAlign:"left",background:"none"}},Ie={sm:{fontSize:"0.75rem"},md:{fontSize:"0.875rem"},lg:{fontSize:"1rem"}},we={backgroundColor:h("--color-primary-10, color-mix(in srgb, var(--color-primary) 10%, transparent)"),color:h("--color-primary")},Ae={color:h("--color-foreground")},De={backgroundColor:h("--color-muted"),color:h("--color-foreground")},Ne={opacity:.5,cursor:"not-allowed"},_e={flexShrink:0,width:"16px",height:"16px"},ke={flex:1,textAlign:"left"},ze={width:"1px",height:"16px",backgroundColor:h("--color-border"),...e("mx-1")},Oe={height:"1px",backgroundColor:h("--color-border"),...e("my-2")},Ye={...e("px-3 py-1"),fontSize:"0.75rem",fontWeight:"600",color:h("--color-muted-foreground"),textTransform:"uppercase",letterSpacing:"0.05em"},Ve={...e("px-4 py-2"),fontSize:"0.75rem",fontWeight:"600",color:h("--color-muted-foreground"),textTransform:"uppercase",letterSpacing:"0.05em"},We={sm:{fontSize:"0.75rem"},md:{fontSize:"0.75rem"},lg:{fontSize:"0.875rem"}},Y=c.forwardRef(({dot:e$1,children:o,variant:r="default",size:n="md",style:s,...i},u)=>{let x=useMemo(()=>d(Pe[r],he[n],e(e$1),s),[r,n,e$1,s]);return jsx("div",{ref:u,style:x,...i,children:c.Children.map(o,g=>c.isValidElement(g)?c.cloneElement(g,{variant:r,size:n}):g)})});Y.displayName="Menu";var X=c.forwardRef(({dot:e$1,icon:o,variant:r="default",size:n="md",active:s=false,disabled:i=false,children:u,style:x,onMouseEnter:g,onMouseLeave:C,onFocus:H,onBlur:I,...D},N)=>{let[y,M]=useState(false),[f,b]=useState(false),p=useMemo(()=>d(He[r],Ie[n],s?we:Ae,!s&&y?De:void 0,f?{outline:"none",boxShadow:`0 0 0 2px ${h("--color-ring")}`}:void 0,i?Ne:void 0,e(e$1),x),[r,n,s,y,f,i,e$1,x]);return jsxs("button",{ref:N,style:p,disabled:i,onMouseEnter:d=>{M(true),g==null||g(d);},onMouseLeave:d=>{M(false),C==null||C(d);},onFocus:d=>{b(true),H==null||H(d);},onBlur:d=>{b(false),I==null||I(d);},...D,children:[o&&jsx("div",{style:_e,children:o}),jsx("span",{style:ke,children:u})]})});X.displayName="MenuItem";var F=c.forwardRef(({dot:e$1,variant:o="default",style:r,...n},s)=>{let i=useMemo(()=>d(o==="horizontal"?ze:Oe,e(e$1),r),[o,e$1,r]);return jsx("div",{ref:s,style:i,...n})});F.displayName="MenuSeparator";var J=c.forwardRef(({dot:e$1,variant:o="default",size:r="md",children:n,style:s,...i},u)=>{let x=useMemo(()=>d(o==="horizontal"?Ye:Ve,We[r],e(e$1),s),[o,r,e$1,s]);return jsx("div",{ref:u,style:x,...i,children:n})});J.displayName="MenuLabel";var Q=c.forwardRef(({...e},o)=>jsx(Y,{ref:o,variant:"horizontal",...e}));Q.displayName="MenuHorizontal";var j=c.forwardRef(({...e},o)=>jsx(Y,{ref:o,variant:"vertical",...e}));j.displayName="MenuVertical";var ee=c.forwardRef(({...e},o)=>jsx(Y,{ref:o,variant:"compact",...e}));ee.displayName="MenuCompact";var Ge={position:"relative"},Ke={display:"inline-block"},Ue={position:"fixed",zIndex:50,minWidth:"200px",...e("py-2 rounded-lg"),...b("light"),backgroundColor:"var(--context-menu-bg, #fff)",color:"var(--context-menu-foreground)",boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)"},Ze={width:"100%",display:"flex",alignItems:"center",...e("gap-3 px-4 py-3"),fontSize:"0.875rem",fontWeight:500,transition:"background-color 200ms ease-in-out, color 200ms ease-in-out",background:"none",border:"none",textAlign:"left",cursor:"pointer",outline:"none",color:"var(--context-menu-item-default-color)"},te={default:{color:"var(--context-menu-item-default-color)"},destructive:{color:"var(--context-menu-item-destructive-color)"},disabled:{color:"var(--context-menu-item-muted-color)",cursor:"not-allowed"}},B={default:{backgroundColor:"var(--context-menu-item-hover-bg)"},destructive:{backgroundColor:"var(--context-menu-item-destructive-hover-bg)"},disabled:{}},$e={flexShrink:0,width:"1rem",height:"1rem",display:"flex",alignItems:"center",justifyContent:"center"},qe={flex:1,textAlign:"left"},Xe={height:"1px",backgroundColor:"var(--context-menu-separator-color)",...e("my-2")},Fe={...e("px-4 py-2"),fontSize:"0.75rem",fontWeight:600,color:"var(--context-menu-label-color)",textTransform:"uppercase",letterSpacing:"0.05em"},Je={...e("py-1")},oe=c.forwardRef(({dot:e$1,style:o,children:r,open:n,onOpenChange:s,trigger:i,placement:u="bottom",align:x="start",offset:g=8,disabled:C=false,...H},I)=>{let[D,N]=useState(false),[y,M]=c.useState({x:0,y:0}),f=c.useRef(null),b=c.useRef(null),p=n!==void 0,d$1=p?n:D,w=useMemo(()=>d(Ge,e(e$1),o),[e$1,o]),L=c.useCallback(S=>{C||(p||N(S),s==null||s(S));},[C,p,s]),G=S=>{if(S.preventDefault(),C)return;let A=S.clientX,a=S.clientY;M({x:A,y:a}),L(true);},v=c.useCallback(()=>{if(!b.current)return;let S=b.current.getBoundingClientRect(),A=window.innerWidth,a=window.innerHeight,l=y.x,E=y.y;l+S.width>A-8&&(l=A-S.width-8),E+S.height>a-8&&(E=a-S.height-8),l<8&&(l=8),E<8&&(E=8),M({x:l,y:E});},[y.x,y.y]);return c.useEffect(()=>{if(d$1)return v(),window.addEventListener("resize",v),window.addEventListener("scroll",v),()=>{window.removeEventListener("resize",v),window.removeEventListener("scroll",v);}},[d$1,v]),c.useEffect(()=>{let S=A=>{f.current&&b.current&&!f.current.contains(A.target)&&!b.current.contains(A.target)&&L(false);};if(d$1)return document.addEventListener("mousedown",S),()=>{document.removeEventListener("mousedown",S);}},[d$1,L]),jsxs("div",{ref:I,style:w,...H,children:[i&&jsx("div",{ref:f,onContextMenu:G,style:Ke,children:i}),d$1&&jsx("div",{ref:b,"data-testid":"context-menu-panel",style:{...Ue,left:y.x,top:y.y},children:r})]})});oe.displayName="ContextMenu";var re=c.forwardRef(({dot:e$1,style:o,icon:r,variant:n="default",children:s,disabled:i,onMouseEnter:u,onMouseLeave:x,onFocus:g,onBlur:C,...H},I)=>{let[D,N]=useState(false),[y,M]=useState(false),f=i||n==="disabled",b=useMemo(()=>{var p,d$1,w;return d(Ze,(p=te[n])!=null?p:te.default,!f&&D?(d$1=B[n])!=null?d$1:B.default:void 0,!f&&y?(w=B[n])!=null?w:B.default:void 0,e(e$1),o)},[n,D,y,f,e$1,o]);return jsxs("button",{ref:I,style:b,disabled:f,onMouseEnter:p=>{N(true),u==null||u(p);},onMouseLeave:p=>{N(false),x==null||x(p);},onFocus:p=>{M(true),g==null||g(p);},onBlur:p=>{M(false),C==null||C(p);},...H,children:[r&&jsx("span",{style:$e,children:r}),jsx("span",{style:qe,children:s})]})});re.displayName="ContextMenuItem";var ne=c.forwardRef(({dot:e$1,style:o,...r},n)=>{let s=useMemo(()=>d(Xe,e(e$1),o),[e$1,o]);return jsx("div",{ref:n,style:s,...r})});ne.displayName="ContextMenuSeparator";var ae=c.forwardRef(({dot:e$1,style:o,children:r,...n},s)=>{let i=useMemo(()=>d(Fe,e(e$1),o),[e$1,o]);return jsx("div",{ref:s,style:i,...n,children:r})});ae.displayName="ContextMenuLabel";var se=c.forwardRef(({dot:e$1,style:o,children:r,...n},s)=>{let i=useMemo(()=>d(Je,e(e$1),o),[e$1,o]);return jsx("div",{ref:s,style:i,...n,children:r})});se.displayName="ContextMenuGroup";var U=c.forwardRef(({children:e$1,open:o,onOpenChange:r,placeholder:n="\uBA85\uB839\uC5B4\uB97C \uAC80\uC0C9\uD558\uC138\uC694...",searchValue:s,onSearchChange:i,disabled:u=false,dot:x,style:g,...C},H)=>{let[I,D]=c.useState(false),[N,y]=c.useState(""),[M,f]=c.useState(0),b=c.useRef(null),p=c.useRef(null),d$1=c.useRef(null),w=o!==void 0,L=w?o:I,G=s!==void 0?s:N,v=c.useCallback(a=>{u||(w||D(a),r==null||r(a));},[u,w,r]),S=a=>{w||y(a),i==null||i(a),f(0);},A=a=>{var O;if(u)return;let l=(O=d$1.current)==null?void 0:O.querySelectorAll("[data-command-item]"),E=(l==null?void 0:l.length)||0;switch(a.key){case "ArrowDown":a.preventDefault(),f(k=>(k+1)%E);break;case "ArrowUp":a.preventDefault(),f(k=>(k-1+E)%E);break;case "Enter":{a.preventDefault();let k=l==null?void 0:l[M];k==null||k.click();break}case "Escape":a.preventDefault(),v(false);break}};return c.useEffect(()=>{var a;L&&((a=p.current)==null||a.focus(),f(0));},[L]),c.useEffect(()=>{let a=l=>{l.key==="k"&&(l.metaKey||l.ctrlKey)&&(l.preventDefault(),v(!L)),l.key==="Escape"&&L&&(l.preventDefault(),v(false));};return document.addEventListener("keydown",a),()=>{document.removeEventListener("keydown",a);}},[L,v]),c.useEffect(()=>{var l;let a=(l=d$1.current)==null?void 0:l.querySelector(`[data-command-item]:nth-child(${M+1})`);a==null||a.scrollIntoView({block:"nearest"});},[M]),jsx("div",{ref:H,style:d(e("relative"),e(x),g),...C,children:L&&jsx("div",{ref:b,style:{position:"fixed",inset:0,zIndex:50,backgroundColor:"rgba(0,0,0,0.5)",backdropFilter:"blur(4px)",display:"flex",alignItems:"flex-start",justifyContent:"center",...e("pt-16")},onClick:()=>v(false),children:jsxs("div",{style:d(e("rounded-lg"),{width:"100%",maxWidth:"42rem",margin:"0 1rem",backgroundColor:"var(--color-popover)",color:"var(--color-popover-foreground)",overflow:"hidden",boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25)",border:"none"}),onClick:a=>a.stopPropagation(),children:[jsx("div",{style:{...e("p-4"),borderBottom:"1px solid var(--color-border)"},children:jsx("input",{ref:p,type:"text",placeholder:n,value:G,onChange:a=>S(a.target.value),onKeyDown:A,style:{width:"100%",backgroundColor:"transparent",fontSize:"1.125rem",fontWeight:500,outline:"none",border:"none",color:"var(--color-foreground)"}})}),jsx("div",{ref:d$1,style:{maxHeight:"24rem",overflowY:"auto",...e("py-2")},children:c.Children.map(e$1,(a,l)=>c.isValidElement(a)?a.type===c.Fragment||typeof a.type=="symbol"?a:c.cloneElement(a,{selected:l===M,onSelect:()=>{var E,O;(O=(E=a.props).onSelect)==null||O.call(E),v(false);}}):a)})]})})})});U.displayName="Command";var le=c.forwardRef(({dot:e$1,style:o,...r},n)=>jsx("input",{ref:n,style:d(e("rounded-md py-2 px-3"),{display:"flex",height:"2.5rem",width:"100%",backgroundColor:"transparent",fontSize:"0.875rem",outline:"none",border:"none",color:"var(--color-foreground)"},e(e$1),o),...r}));le.displayName="CommandInput";var ce=c.forwardRef(({dot:e$1,style:o,...r},n)=>jsx("div",{ref:n,style:d({maxHeight:"24rem",overflowY:"auto",...e("py-2")},e(e$1),o),...r}));ce.displayName="CommandList";var de=c.forwardRef(({icon:e$1,selected:o=false,onSelect:r,children:n,dot:s,style:i,...u},x)=>jsxs("button",{ref:x,"data-command-item":true,style:d({position:"relative",display:"flex",width:"100%",alignItems:"center",...e("gap-3"),borderRadius:"0.125rem",...e("py-3 px-4"),fontSize:"0.875rem",color:"var(--color-foreground)",backgroundColor:o?"var(--color-muted)":"transparent",border:"none",cursor:"pointer",transition:"background-color 150ms",textAlign:"left"},e(s),i),onClick:r,...u,children:[e$1&&jsx("div",{style:{flexShrink:0,width:"1rem",height:"1rem",color:"var(--color-muted-foreground)"},children:e$1}),jsx("span",{style:{flex:1,textAlign:"left"},children:n})]}));de.displayName="CommandItem";var me=c.forwardRef(({heading:e$1,children:o,dot:r,style:n,...s},i)=>jsxs("div",{ref:i,style:d(e("py-2"),e(r),n),...s,children:[e$1&&jsx("div",{style:{...e("py-2 px-4"),fontSize:"0.75rem",fontWeight:600,color:"var(--color-muted-foreground)",textTransform:"uppercase",letterSpacing:"0.05em"},children:e$1}),jsx("div",{style:{display:"flex",flexDirection:"column",...e("gap-1")},children:o})]}));me.displayName="CommandGroup";var pe=c.forwardRef(({dot:e$1,style:o,...r},n)=>jsx("div",{ref:n,style:d({height:"1px",backgroundColor:"var(--color-border)",...e("my-2")},e(e$1),o),...r}));pe.displayName="CommandSeparator";var ue=c.forwardRef(({children:e$1="\uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",dot:o,style:r,...n},s)=>jsx("div",{ref:s,style:d({...e("py-8"),textAlign:"center",fontSize:"0.875rem",color:"var(--color-muted-foreground)"},e(o),r),...n,children:e$1}));ue.displayName="CommandEmpty";var fe=c.forwardRef(({dot:e,style:o,...r},n)=>jsx(U,{ref:n,dot:e,style:o,...r}));fe.displayName="CommandDialog";export{U as Command,fe as CommandDialog,ue as CommandEmpty,me as CommandGroup,le as CommandInput,de as CommandItem,ce as CommandList,pe as CommandSeparator,oe as ContextMenu,se as ContextMenuGroup,re as ContextMenuItem,ae as ContextMenuLabel,ne as ContextMenuSeparator,Y as Menu,ee as MenuCompact,Q as MenuHorizontal,X as MenuItem,J as MenuLabel,F as MenuSeparator,j as MenuVertical};//# sourceMappingURL=interactive.mjs.map
|
|
3
3
|
//# sourceMappingURL=interactive.mjs.map
|
package/dist/interactive.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Menu.tsx","../src/components/ContextMenu.tsx","../src/components/Command.tsx"],"names":["Menu","React","className","children","variant","size","props","ref","getVariantClasses","getSizeClasses","jsx","merge","child","MenuItem","icon","active","disabled","jsxs","MenuSeparator","MenuLabel","MenuHorizontal","MenuVertical","MenuCompact","ContextMenu","controlledOpen","onOpenChange","trigger","_placement","_align","_offset","internalOpen","setInternalOpen","coords","setCoords","triggerRef","menuRef","isControlled","isOpen","handleOpenChange","newOpen","handleContextMenu","event","x","y","updatePosition","menuRect","viewportWidth","viewportHeight","handleClickOutside","ContextMenuItem","ContextMenuSeparator","ContextMenuLabel","ContextMenuGroup","Command","placeholder","controlledSearchValue","onSearchChange","internalSearchValue","setInternalSearchValue","selectedIndex","setSelectedIndex","commandRef","inputRef","listRef","searchValue","handleSearchChange","value","handleKeyDown","_a","items","itemCount","prev","selectedItem","e","index","_b","CommandInput","CommandList","CommandItem","selected","onSelect","CommandGroup","heading","CommandSeparator","CommandEmpty","CommandDialog"],"mappings":"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","file":"interactive.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Menu 컴포넌트의 props / Menu component props\n * @typedef {Object} MenuProps\n * @property {React.ReactNode} children - MenuItem, MenuSeparator, MenuLabel 컴포넌트들 / MenuItem, MenuSeparator, MenuLabel components\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant=\"default\"] - 메뉴 방향 및 스타일 / Menu direction and style\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 메뉴 아이템 크기 / Menu item size\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * Menu 컴포넌트 / Menu component\n * \n * 메뉴 리스트를 제공하는 컴포넌트입니다.\n * MenuItem, MenuSeparator, MenuLabel과 함께 사용합니다.\n * \n * Component that provides menu lists.\n * Used with MenuItem, MenuSeparator, and MenuLabel.\n * \n * @component\n * @example\n * // 기본 수직 메뉴 / Basic vertical menu\n * <Menu>\n * <MenuItem icon={<Icon name=\"home\" />}>홈</MenuItem>\n * <MenuItem icon={<Icon name=\"settings\" />}>설정</MenuItem>\n * <MenuSeparator />\n * <MenuItem>로그아웃</MenuItem>\n * </Menu>\n * \n * @example\n * // 수평 메뉴 / Horizontal menu\n * <Menu variant=\"horizontal\">\n * <MenuItem>메뉴 1</MenuItem>\n * <MenuItem>메뉴 2</MenuItem>\n * </Menu>\n * \n * @param {MenuProps} props - Menu 컴포넌트의 props / Menu component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Menu 컴포넌트 / Menu component\n */\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>(\n ({ \n className, \n children,\n variant = \"default\",\n size = \"md\",\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return \"flex items-center space-x-1\" // 4px 간격\n case \"vertical\":\n return \"flex flex-col space-y-1\" // 4px 간격\n case \"compact\":\n return \"flex flex-col space-y-0.5\" // 2px 간격\n default:\n return \"flex flex-col space-y-1\" // 4px 간격\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-sm\"\n case \"lg\":\n return \"text-base\"\n default:\n return \"text-sm\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n variant,\n size\n } as Partial<MenuItemProps | MenuSeparatorProps | MenuLabelProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nMenu.displayName = \"Menu\"\n\n/**\n * MenuItem 컴포넌트의 props / MenuItem component props\n * @typedef {Object} MenuItemProps\n * @property {React.ReactNode} [icon] - 메뉴 아이템 아이콘 / Menu item icon\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - 메뉴 변형 (Menu에서 자동 전달) / Menu variant (auto-passed from Menu)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 메뉴 크기 (Menu에서 자동 전달) / Menu size (auto-passed from Menu)\n * @property {boolean} [active=false] - 활성화 상태 / Active state\n * @property {boolean} [disabled=false] - 비활성화 상태 / Disabled state\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface MenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n size?: \"sm\" | \"md\" | \"lg\"\n active?: boolean\n disabled?: boolean\n}\n\n/**\n * MenuItem 컴포넌트 / MenuItem component\n * 메뉴의 개별 아이템을 표시합니다.\n * Displays an individual menu item.\n * \n * @component\n * @param {MenuItemProps} props - MenuItem 컴포넌트의 props / MenuItem component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} MenuItem 컴포넌트 / MenuItem component\n */\nconst MenuItem = React.forwardRef<HTMLButtonElement, MenuItemProps>(\n ({ \n className, \n icon,\n variant = \"default\",\n size = \"md\",\n active = false,\n disabled = false,\n children,\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return merge(\n \"flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors\", // 12px, 8px 패딩\n active \n ? \"bg-primary/10 text-primary\"\n : \"text-foreground hover:text-foreground hover:bg-muted\"\n )\n case \"vertical\":\n return merge(\n \"flex items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors\", // 16px, 12px 패딩\n active\n ? \"bg-primary/10 text-primary\"\n : \"text-foreground hover:text-foreground hover:bg-muted\"\n )\n case \"compact\":\n return merge(\n \"flex items-center gap-2 px-2 py-1.5 rounded text-sm font-medium transition-colors\", // 8px, 6px 패딩\n active\n ? \"bg-primary/10 text-primary\"\n : \"text-foreground hover:text-foreground hover:bg-muted\"\n )\n default:\n return merge(\n \"flex items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors\", // 16px, 12px 패딩\n active\n ? \"bg-primary/10 text-primary\"\n : \"text-foreground hover:text-foreground hover:bg-muted\"\n )\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-xs\"\n case \"lg\":\n return \"text-base\"\n default:\n return \"text-sm\"\n }\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n disabled={disabled}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nMenuItem.displayName = \"MenuItem\"\n\n/**\n * MenuSeparator 컴포넌트의 props / MenuSeparator component props\n * @typedef {Object} MenuSeparatorProps\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - 메뉴 변형 (Menu에서 자동 전달) / Menu variant (auto-passed from Menu)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface MenuSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n}\n\n/**\n * MenuSeparator 컴포넌트 / MenuSeparator component\n * 메뉴 아이템들을 구분하는 구분선을 표시합니다.\n * Displays a separator line between menu items.\n * \n * @component\n * @param {MenuSeparatorProps} props - MenuSeparator 컴포넌트의 props / MenuSeparator component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} MenuSeparator 컴포넌트 / MenuSeparator component\n */\nconst MenuSeparator = React.forwardRef<HTMLDivElement, MenuSeparatorProps>(\n ({ className, variant = \"default\", ...props }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return \"w-px h-4 bg-border mx-1\" // 4px 여백\n case \"vertical\":\n case \"compact\":\n default:\n return \"h-px bg-border my-2\" // 8px 여백\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(getVariantClasses(), className)}\n {...props}\n />\n )\n }\n)\nMenuSeparator.displayName = \"MenuSeparator\"\n\n/**\n * MenuLabel 컴포넌트의 props / MenuLabel component props\n * @typedef {Object} MenuLabelProps\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - 메뉴 변형 (Menu에서 자동 전달) / Menu variant (auto-passed from Menu)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 메뉴 크기 (Menu에서 자동 전달) / Menu size (auto-passed from Menu)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface MenuLabelProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * MenuLabel 컴포넌트 / MenuLabel component\n * 메뉴 섹션의 레이블을 표시합니다.\n * Displays a label for a menu section.\n * \n * @component\n * @param {MenuLabelProps} props - MenuLabel 컴포넌트의 props / MenuLabel component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} MenuLabel 컴포넌트 / MenuLabel component\n */\nconst MenuLabel = React.forwardRef<HTMLDivElement, MenuLabelProps>(\n ({ className, variant = \"default\", size = \"md\", children, ...props }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return \"px-3 py-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\" // 12px, 4px 패딩\n case \"vertical\":\n case \"compact\":\n default:\n return \"px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\" // 16px, 8px 패딩\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-xs\"\n case \"lg\":\n return \"text-sm\"\n default:\n return \"text-xs\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nMenuLabel.displayName = \"MenuLabel\"\n\n// 편의 컴포넌트들\nexport const MenuHorizontal = React.forwardRef<HTMLDivElement, Omit<MenuProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Menu ref={ref} variant=\"horizontal\" className={className} {...props} />\n )\n)\nMenuHorizontal.displayName = \"MenuHorizontal\"\n\nexport const MenuVertical = React.forwardRef<HTMLDivElement, Omit<MenuProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Menu ref={ref} variant=\"vertical\" className={className} {...props} />\n )\n)\nMenuVertical.displayName = \"MenuVertical\"\n\nexport const MenuCompact = React.forwardRef<HTMLDivElement, Omit<MenuProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Menu ref={ref} variant=\"compact\" className={className} {...props} />\n )\n)\nMenuCompact.displayName = \"MenuCompact\"\n\nexport { Menu, MenuItem, MenuSeparator, MenuLabel } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * ContextMenu 컴포넌트의 props / ContextMenu component props\n * @typedef {Object} ContextMenuProps\n * @property {React.ReactNode} children - ContextMenu 내용 / ContextMenu content\n * @property {boolean} [open] - 제어 모드에서 열림/닫힘 상태 / Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - 상태 변경 콜백 / State change callback\n * @property {React.ReactNode} [trigger] - ContextMenu를 열기 위한 트리거 요소 (우클릭 이벤트) / Trigger element to open context menu (right-click event)\n * @property {\"top\" | \"bottom\" | \"left\" | \"right\"} [placement=\"bottom\"] - ContextMenu 표시 위치 / ContextMenu display position\n * @property {\"start\" | \"center\" | \"end\"} [align=\"start\"] - ContextMenu 정렬 / ContextMenu alignment\n * @property {number} [offset=8] - 트리거와 ContextMenu 사이 간격 (px) / Spacing between trigger and context menu (px)\n * @property {boolean} [disabled=false] - ContextMenu 비활성화 여부 / Disable context menu\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ContextMenuProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n trigger?: React.ReactNode\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\"\n align?: \"start\" | \"center\" | \"end\"\n offset?: number\n disabled?: boolean\n}\n\n/**\n * ContextMenu 컴포넌트 / ContextMenu component\n * \n * 우클릭 시 표시되는 컨텍스트 메뉴 컴포넌트입니다.\n * 트리거 요소에 우클릭 이벤트를 자동으로 연결합니다.\n * \n * Context menu component that appears on right-click.\n * Automatically connects right-click events to the trigger element.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ContextMenu trigger={<div>우클릭하세요</div>}>\n * <div className=\"p-2\">\n * <button>항목 1</button>\n * <button>항목 2</button>\n * </div>\n * </ContextMenu>\n * \n * @example\n * // 제어 모드 / Controlled mode\n * const [open, setOpen] = useState(false)\n * <ContextMenu \n * open={open}\n * onOpenChange={setOpen}\n * trigger={<div>우클릭</div>}\n * >\n * <Menu>\n * <MenuItem>복사</MenuItem>\n * <MenuItem>삭제</MenuItem>\n * </Menu>\n * </ContextMenu>\n * \n * @param {ContextMenuProps} props - ContextMenu 컴포넌트의 props / ContextMenu component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ContextMenu 컴포넌트 / ContextMenu component\n */\nconst ContextMenu = React.forwardRef<HTMLDivElement, ContextMenuProps>(\n ({ \n className, \n children,\n open: controlledOpen,\n onOpenChange,\n trigger,\n placement: _placement = \"bottom\",\n align: _align = \"start\",\n offset: _offset = 8,\n disabled = false,\n ...props \n }, ref) => {\n const [internalOpen, setInternalOpen] = React.useState(false)\n const [coords, setCoords] = React.useState({ x: 0, y: 0 })\n const triggerRef = React.useRef<HTMLDivElement>(null)\n const menuRef = React.useRef<HTMLDivElement>(null)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n if (disabled) return\n\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [disabled, isControlled, onOpenChange])\n\n const handleContextMenu = (event: React.MouseEvent) => {\n event.preventDefault()\n if (disabled) return\n\n const _rect = event.currentTarget.getBoundingClientRect()\n const x = event.clientX\n const y = event.clientY\n\n setCoords({ x, y })\n handleOpenChange(true)\n }\n\n const updatePosition = React.useCallback(() => {\n if (!menuRef.current) return\n\n const menuRect = menuRef.current.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n let x = coords.x\n let y = coords.y\n\n // 뷰포트 경계 확인 및 조정\n if (x + menuRect.width > viewportWidth - 8) {\n x = viewportWidth - menuRect.width - 8 // 8px 여백\n }\n if (y + menuRect.height > viewportHeight - 8) {\n y = viewportHeight - menuRect.height - 8 // 8px 여백\n }\n if (x < 8) x = 8 // 8px 여백\n if (y < 8) y = 8 // 8px 여백\n\n setCoords({ x, y })\n }, [coords.x, coords.y])\n\n React.useEffect(() => {\n if (isOpen) {\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition)\n \n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition)\n }\n }\n }, [isOpen, updatePosition])\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n menuRef.current &&\n !triggerRef.current.contains(event.target as Node) &&\n !menuRef.current.contains(event.target as Node)\n ) {\n handleOpenChange(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }\n }, [isOpen, handleOpenChange])\n\n return (\n <div ref={ref} className={merge(\"relative\", className)} {...props}>\n {/* 트리거 */}\n {trigger && (\n <div\n ref={triggerRef}\n onContextMenu={handleContextMenu}\n className=\"inline-block\"\n >\n {trigger}\n </div>\n )}\n\n {/* 컨텍스트 메뉴 */}\n {isOpen && (\n <div\n ref={menuRef}\n className={merge(\n \"fixed z-50 bg-popover text-popover-foreground rounded-lg shadow-xl backdrop-blur-sm\", // 보더 대신 섀도우 사용\n \"min-w-[200px] py-2\", // 16px 패딩\n \"border-0\" // 보더 제거\n )}\n style={{\n left: coords.x,\n top: coords.y,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\"\n }}\n >\n {children}\n </div>\n )}\n </div>\n )\n }\n)\nContextMenu.displayName = \"ContextMenu\"\n\nexport interface ContextMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n variant?: \"default\" | \"destructive\" | \"disabled\"\n}\n\nconst ContextMenuItem = React.forwardRef<HTMLButtonElement, ContextMenuItemProps>(\n ({ \n className, \n icon,\n variant = \"default\",\n children,\n disabled,\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"destructive\":\n return \"text-destructive hover:bg-destructive/10\"\n case \"disabled\":\n return \"text-muted-foreground cursor-not-allowed\"\n default:\n return \"text-foreground hover:bg-muted\"\n }\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n \"w-full flex items-center gap-3 px-4 py-3 text-sm font-medium transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:bg-muted\", // 16px, 12px 패딩\n getVariantClasses(),\n className\n )}\n disabled={disabled || variant === \"disabled\"}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nContextMenuItem.displayName = \"ContextMenuItem\"\n\nexport interface ContextMenuSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst ContextMenuSeparator = React.forwardRef<HTMLDivElement, ContextMenuSeparatorProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"h-px bg-border my-2\", className)} // 8px 여백\n {...props}\n />\n )\n)\nContextMenuSeparator.displayName = \"ContextMenuSeparator\"\n\nexport interface ContextMenuLabelProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst ContextMenuLabel = React.forwardRef<HTMLDivElement, ContextMenuLabelProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\", className)} // 16px, 8px 패딩\n {...props}\n >\n {children}\n </div>\n )\n)\nContextMenuLabel.displayName = \"ContextMenuLabel\"\n\n// 편의 컴포넌트들\nconst ContextMenuGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"py-1\", className)} // 4px 패딩\n {...props}\n >\n {children}\n </div>\n )\n)\nContextMenuGroup.displayName = \"ContextMenuGroup\"\n\nexport { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuGroup } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Command 컴포넌트의 props / Command component props\n * @typedef {Object} CommandProps\n * @property {React.ReactNode} children - CommandList, CommandItem 등 / CommandList, CommandItem, etc.\n * @property {boolean} [open] - 제어 모드에서 열림/닫힘 상태 / Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - 상태 변경 콜백 / State change callback\n * @property {string} [placeholder=\"명령어를 검색하세요...\"] - 검색 입력 플레이스홀더 / Search input placeholder\n * @property {string} [searchValue] - 제어 모드에서 검색 값 / Search value in controlled mode\n * @property {(value: string) => void} [onSearchChange] - 검색 값 변경 콜백 / Search value change callback\n * @property {boolean} [disabled=false] - Command 비활성화 여부 / Disable command\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n placeholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n disabled?: boolean\n}\n\n/**\n * Command 컴포넌트 / Command component\n * \n * 명령 팔레트(Command Palette) 컴포넌트입니다.\n * Cmd+K (Mac) 또는 Ctrl+K (Windows)로 열 수 있습니다.\n * 키보드 네비게이션(Arrow keys, Enter, Escape)을 지원합니다.\n * \n * Command Palette component.\n * Can be opened with Cmd+K (Mac) or Ctrl+K (Windows).\n * Supports keyboard navigation (Arrow keys, Enter, Escape).\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Command>\n * <CommandInput placeholder=\"검색...\" />\n * <CommandList>\n * <CommandItem>항목 1</CommandItem>\n * <CommandItem>항목 2</CommandItem>\n * </CommandList>\n * </Command>\n * \n * @example\n * // 제어 모드 / Controlled mode\n * const [open, setOpen] = useState(false)\n * <Command \n * open={open}\n * onOpenChange={setOpen}\n * >\n * <CommandList>\n * <CommandGroup heading=\"파일\">\n * <CommandItem>새 파일</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </Command>\n * \n * @param {CommandProps} props - Command 컴포넌트의 props / Command component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Command 컴포넌트 / Command component\n */\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\n ({ \n className, \n children,\n open: controlledOpen,\n onOpenChange,\n placeholder = \"명령어를 검색하세요...\",\n searchValue: controlledSearchValue,\n onSearchChange,\n disabled = false,\n ...props \n }, ref) => {\n const [internalOpen, setInternalOpen] = React.useState(false)\n const [internalSearchValue, setInternalSearchValue] = React.useState(\"\")\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n const commandRef = React.useRef<HTMLDivElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const listRef = React.useRef<HTMLDivElement>(null)\n \n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n const searchValue = controlledSearchValue !== undefined ? controlledSearchValue : internalSearchValue\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n if (disabled) return\n\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [disabled, isControlled, onOpenChange])\n\n const handleSearchChange = (value: string) => {\n if (!isControlled) {\n setInternalSearchValue(value)\n }\n onSearchChange?.(value)\n setSelectedIndex(0)\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n\n const items = listRef.current?.querySelectorAll('[data-command-item]')\n const itemCount = items?.length || 0\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setSelectedIndex((prev) => (prev + 1) % itemCount)\n break\n case 'ArrowUp':\n event.preventDefault()\n setSelectedIndex((prev) => (prev - 1 + itemCount) % itemCount)\n break\n case 'Enter': {\n event.preventDefault()\n const selectedItem = items?.[selectedIndex] as HTMLElement\n selectedItem?.click()\n break\n }\n case 'Escape':\n event.preventDefault()\n handleOpenChange(false)\n break\n }\n }\n\n React.useEffect(() => {\n if (isOpen) {\n inputRef.current?.focus()\n setSelectedIndex(0)\n }\n }, [isOpen])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n handleOpenChange(!isOpen)\n }\n // 전역 ESC 키 처리\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault()\n handleOpenChange(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [isOpen, handleOpenChange])\n\n React.useEffect(() => {\n const selectedItem = listRef.current?.querySelector(`[data-command-item]:nth-child(${selectedIndex + 1})`) as HTMLElement\n selectedItem?.scrollIntoView({ block: 'nearest' })\n }, [selectedIndex])\n\n return (\n <div ref={ref} className={merge(\"relative\", className)} {...props}>\n {isOpen && (\n <div\n ref={commandRef}\n className={merge(\n \"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\", // 50% 투명도\n \"flex items-start justify-center pt-16\" // 64px 상단 여백\n )}\n onClick={() => handleOpenChange(false)}\n >\n <div\n className={merge(\n \"w-full max-w-2xl mx-4 bg-popover text-popover-foreground rounded-lg shadow-2xl\", // 보더 대신 섀도우\n \"border-0 overflow-hidden\" // 보더 제거\n )}\n onClick={(e) => e.stopPropagation()}\n style={{\n boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n }}\n >\n <div className=\"p-4 border-b border-border\"> {/* 16px 패딩 */}\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => handleSearchChange(e.target.value)}\n onKeyDown={handleKeyDown}\n className={merge(\n \"w-full bg-transparent text-lg font-medium outline-none\", // 18px 텍스트\n \"placeholder:text-muted-foreground\",\n \"text-foreground\"\n )}\n />\n </div>\n \n <div\n ref={listRef}\n className=\"max-h-96 overflow-y-auto py-2\" // 384px 최대 높이, 8px 패딩\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement<CommandItemProps>(child)) {\n // Fragment나 다른 컴포넌트에 selected prop 전달 방지\n if (child.type === React.Fragment || typeof child.type === 'symbol') {\n return child\n }\n return React.cloneElement(child, {\n selected: index === selectedIndex,\n onSelect: () => {\n child.props.onSelect?.()\n handleOpenChange(false)\n }\n })\n }\n return child\n })}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n)\nCommand.displayName = \"Command\"\n\n/**\n * CommandInput 컴포넌트의 props / CommandInput component props\n * @typedef {Object} CommandInputProps\n * @extends {React.InputHTMLAttributes<HTMLInputElement>}\n */\nexport interface CommandInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(\n ({ className, ...props }, ref) => (\n <input\n ref={ref}\n className={merge(\n \"flex h-10 w-full rounded-md bg-transparent px-3 py-2 text-sm outline-none\", // 40px 높이, 12px, 8px 패딩\n \"placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n)\nCommandInput.displayName = \"CommandInput\"\n\nexport interface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"max-h-96 overflow-y-auto py-2\", className)} // 384px 최대 높이, 8px 패딩\n {...props}\n />\n )\n)\nCommandList.displayName = \"CommandList\"\n\n/**\n * CommandItem 컴포넌트의 props / CommandItem component props\n * @typedef {Object} CommandItemProps\n * @property {React.ReactNode} [icon] - 항목 아이콘 / Item icon\n * @property {boolean} [selected=false] - 선택 상태 / Selected state\n * @property {() => void} [onSelect] - 선택 시 콜백 / Selection callback\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface CommandItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n selected?: boolean\n onSelect?: () => void\n}\n\nconst CommandItem = React.forwardRef<HTMLButtonElement, CommandItemProps>(\n ({ \n className, \n icon,\n selected = false,\n onSelect,\n children,\n ...props \n }, ref) => {\n return (\n <button\n ref={ref}\n data-command-item\n className={merge(\n \"relative flex w-full items-center gap-3 rounded-sm px-4 py-3 text-sm\", // 16px, 12px 패딩\n \"text-foreground\",\n \"hover:bg-muted\",\n \"focus:bg-muted\",\n \"focus:outline-none\",\n selected && \"bg-muted\",\n \"transition-colors\",\n className\n )}\n onClick={onSelect}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4 text-muted-foreground\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nCommandItem.displayName = \"CommandItem\"\n\n/**\n * CommandGroup 컴포넌트의 props / CommandGroup component props\n * @typedef {Object} CommandGroupProps\n * @property {React.ReactNode} [heading] - 그룹 제목 / Group heading\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n heading?: React.ReactNode\n}\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n ({ className, heading, children, ...props }, ref) => (\n <div ref={ref} className={merge(\"py-2\", className)} {...props}> {/* 8px 패딩 */}\n {heading && (\n <div className=\"px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\"> {/* 16px, 8px 패딩 */}\n {heading}\n </div>\n )}\n <div className=\"space-y-1\"> {/* 4px 간격 */}\n {children}\n </div>\n </div>\n )\n)\nCommandGroup.displayName = \"CommandGroup\"\n\n/**\n * CommandSeparator 컴포넌트의 props / CommandSeparator component props\n * @typedef {Object} CommandSeparatorProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"h-px bg-border my-2\", className)} // 8px 여백\n {...props}\n />\n )\n)\nCommandSeparator.displayName = \"CommandSeparator\"\n\n/**\n * CommandEmpty 컴포넌트의 props / CommandEmpty component props\n * @typedef {Object} CommandEmptyProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n ({ className, children = \"결과가 없습니다.\", ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\n \"py-8 text-center text-sm text-muted-foreground\", // 32px 패딩\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n)\nCommandEmpty.displayName = \"CommandEmpty\"\n\n// 편의 컴포넌트들\nexport const CommandDialog = React.forwardRef<HTMLDivElement, CommandProps>(\n ({ className, ...props }, ref) => (\n <Command ref={ref} className={className} {...props} />\n )\n)\nCommandDialog.displayName = \"CommandDialog\"\n\nexport { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandSeparator, CommandEmpty } "]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Menu.tsx","../src/components/ContextMenu.tsx","../src/components/Command.tsx"],"names":["cssVar","v","MENU_VARIANT_STYLE","resolveDot","MENU_SIZE_STYLE","ITEM_VARIANT_BASE","ITEM_SIZE_STYLE","ITEM_ACTIVE_STYLE","ITEM_INACTIVE_STYLE","ITEM_HOVER_STYLE","ITEM_DISABLED_STYLE","ICON_WRAPPER_STYLE","TEXT_STYLE","SEPARATOR_HORIZONTAL_STYLE","SEPARATOR_VERTICAL_STYLE","LABEL_HORIZONTAL_STYLE","LABEL_DEFAULT_STYLE","LABEL_SIZE_STYLE","Menu","React","dotProp","children","variant","size","style","props","ref","computedStyle","useMemo","mergeStyles","jsx","child","MenuItem","icon","active","disabled","onMouseEnter","onMouseLeave","onFocus","onBlur","isHovered","setIsHovered","useState","isFocused","setIsFocused","jsxs","e","MenuSeparator","MenuLabel","MenuHorizontal","MenuVertical","MenuCompact","WRAPPER_STYLE","TRIGGER_WRAPPER_STYLE","PANEL_BASE_STYLE","createGlassStyle","ITEM_BASE_STYLE","ITEM_VARIANT_STYLE","ITEM_ICON_WRAPPER_STYLE","ITEM_LABEL_STYLE","SEPARATOR_STYLE","LABEL_STYLE","GROUP_STYLE","ContextMenu","controlledOpen","onOpenChange","trigger","_placement","_align","_offset","internalOpen","setInternalOpen","coords","setCoords","triggerRef","menuRef","isControlled","isOpen","wrapperStyle","handleOpenChange","newOpen","handleContextMenu","event","x","y","updatePosition","menuRect","viewportWidth","viewportHeight","handleClickOutside","ContextMenuItem","isDisabled","_a","_b","_c","ContextMenuSeparator","ContextMenuLabel","ContextMenuGroup","Command","placeholder","controlledSearchValue","onSearchChange","internalSearchValue","setInternalSearchValue","selectedIndex","setSelectedIndex","commandRef","inputRef","listRef","searchValue","handleSearchChange","value","handleKeyDown","items","itemCount","prev","selectedItem","index","CommandInput","CommandList","CommandItem","selected","onSelect","CommandGroup","heading","CommandSeparator","CommandEmpty","CommandDialog"],"mappings":"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","file":"interactive.mjs","sourcesContent":["\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ---------------------------------------------------------------------------\n// CSS variable helpers\n// ---------------------------------------------------------------------------\n\n/** Resolves a CSS variable string to a value usable in CSSProperties */\nconst cssVar = (v: string) => `var(${v})`;\n\n// ---------------------------------------------------------------------------\n// Static style constants\n// ---------------------------------------------------------------------------\n\ntype MenuVariant = \"default\" | \"horizontal\" | \"vertical\" | \"compact\";\ntype MenuSize = \"sm\" | \"md\" | \"lg\";\n\n/** Menu container base layout per variant */\nconst MENU_VARIANT_STYLE: Record<MenuVariant, React.CSSProperties> = {\n default: { display: \"flex\", flexDirection: \"column\", ...resolveDot(\"gap-1\") },\n horizontal: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n },\n vertical: {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-1\"),\n },\n compact: {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-0.5\"),\n },\n};\n\n/** Menu container font-size per size */\nconst MENU_SIZE_STYLE: Record<MenuSize, React.CSSProperties> = {\n sm: { fontSize: \"0.875rem\" },\n md: { fontSize: \"0.875rem\" },\n lg: { fontSize: \"1rem\" },\n};\n\n/** MenuItem base layout per variant */\nconst ITEM_VARIANT_BASE: Record<MenuVariant, React.CSSProperties> = {\n default: {\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3 px-4 py-3 rounded-md\"),\n fontSize: \"0.875rem\",\n fontWeight: \"500\",\n transition: \"background-color 150ms ease-in-out, color 150ms ease-in-out\",\n border: \"none\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n background: \"none\",\n },\n horizontal: {\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2 px-3 py-2 rounded-md\"),\n fontSize: \"0.875rem\",\n fontWeight: \"500\",\n transition: \"background-color 150ms ease-in-out, color 150ms ease-in-out\",\n border: \"none\",\n cursor: \"pointer\",\n width: \"auto\",\n textAlign: \"left\",\n background: \"none\",\n },\n vertical: {\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3 px-4 py-3 rounded-md\"),\n fontSize: \"0.875rem\",\n fontWeight: \"500\",\n transition: \"background-color 150ms ease-in-out, color 150ms ease-in-out\",\n border: \"none\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n background: \"none\",\n },\n compact: {\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2 px-2 py-1.5 rounded-sm\"),\n fontSize: \"0.875rem\",\n fontWeight: \"500\",\n transition: \"background-color 150ms ease-in-out, color 150ms ease-in-out\",\n border: \"none\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n background: \"none\",\n },\n};\n\n/** MenuItem font-size per size */\nconst ITEM_SIZE_STYLE: Record<MenuSize, React.CSSProperties> = {\n sm: { fontSize: \"0.75rem\" },\n md: { fontSize: \"0.875rem\" },\n lg: { fontSize: \"1rem\" },\n};\n\n/** MenuItem active state styles */\nconst ITEM_ACTIVE_STYLE: React.CSSProperties = {\n backgroundColor: cssVar(\n \"--color-primary-10, color-mix(in srgb, var(--color-primary) 10%, transparent)\",\n ),\n color: cssVar(\"--color-primary\"),\n};\n\n/** MenuItem inactive default styles */\nconst ITEM_INACTIVE_STYLE: React.CSSProperties = {\n color: cssVar(\"--color-foreground\"),\n};\n\n/** MenuItem hover overlay (inactive) */\nconst ITEM_HOVER_STYLE: React.CSSProperties = {\n backgroundColor: cssVar(\"--color-muted\"),\n color: cssVar(\"--color-foreground\"),\n};\n\n/** MenuItem disabled styles */\nconst ITEM_DISABLED_STYLE: React.CSSProperties = {\n opacity: 0.5,\n cursor: \"not-allowed\",\n};\n\n/** Icon wrapper styles */\nconst ICON_WRAPPER_STYLE: React.CSSProperties = {\n flexShrink: 0,\n width: \"16px\",\n height: \"16px\",\n};\n\n/** Text span styles */\nconst TEXT_STYLE: React.CSSProperties = {\n flex: 1,\n textAlign: \"left\",\n};\n\n/** MenuSeparator horizontal variant */\nconst SEPARATOR_HORIZONTAL_STYLE: React.CSSProperties = {\n width: \"1px\",\n height: \"16px\",\n backgroundColor: cssVar(\"--color-border\"),\n ...resolveDot(\"mx-1\"),\n};\n\n/** MenuSeparator vertical/default variant */\nconst SEPARATOR_VERTICAL_STYLE: React.CSSProperties = {\n height: \"1px\",\n backgroundColor: cssVar(\"--color-border\"),\n ...resolveDot(\"my-2\"),\n};\n\n/** MenuLabel horizontal variant */\nconst LABEL_HORIZONTAL_STYLE: React.CSSProperties = {\n ...resolveDot(\"px-3 py-1\"),\n fontSize: \"0.75rem\",\n fontWeight: \"600\",\n color: cssVar(\"--color-muted-foreground\"),\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n};\n\n/** MenuLabel vertical/default variant */\nconst LABEL_DEFAULT_STYLE: React.CSSProperties = {\n ...resolveDot(\"px-4 py-2\"),\n fontSize: \"0.75rem\",\n fontWeight: \"600\",\n color: cssVar(\"--color-muted-foreground\"),\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n};\n\n/** MenuLabel font-size per size */\nconst LABEL_SIZE_STYLE: Record<MenuSize, React.CSSProperties> = {\n sm: { fontSize: \"0.75rem\" },\n md: { fontSize: \"0.75rem\" },\n lg: { fontSize: \"0.875rem\" },\n};\n\n// ---------------------------------------------------------------------------\n// Menu\n// ---------------------------------------------------------------------------\n\n/**\n * Menu component props\n * @typedef {Object} MenuProps\n * @property {React.ReactNode} children - MenuItem, MenuSeparator, MenuLabel components\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant=\"default\"] - Menu direction and style\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Menu item size\n * @property {string} [dot] - dot utility string for additional styles\n * @property {React.CSSProperties} [style] - Inline style overrides\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface MenuProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n children: React.ReactNode;\n variant?: MenuVariant;\n size?: MenuSize;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Menu component\n *\n * Component that provides menu lists.\n * Used with MenuItem, MenuSeparator, and MenuLabel.\n *\n * @component\n * @example\n * // Basic vertical menu\n * <Menu>\n * <MenuItem icon={<Icon name=\"home\" />}>Home</MenuItem>\n * <MenuItem icon={<Icon name=\"settings\" />}>Settings</MenuItem>\n * <MenuSeparator />\n * <MenuItem>Logout</MenuItem>\n * </Menu>\n *\n * @example\n * // Horizontal menu\n * <Menu variant=\"horizontal\">\n * <MenuItem>Menu 1</MenuItem>\n * <MenuItem>Menu 2</MenuItem>\n * </Menu>\n */\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>(\n (\n {\n dot: dotProp,\n children,\n variant = \"default\",\n size = \"md\",\n style,\n ...props\n },\n ref,\n ) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n MENU_VARIANT_STYLE[variant],\n MENU_SIZE_STYLE[size],\n resolveDot(dotProp),\n style,\n ),\n [variant, size, dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n variant,\n size,\n } as Partial<MenuItemProps | MenuSeparatorProps | MenuLabelProps>);\n }\n return child;\n })}\n </div>\n );\n },\n);\nMenu.displayName = \"Menu\";\n\n// ---------------------------------------------------------------------------\n// MenuItem\n// ---------------------------------------------------------------------------\n\n/**\n * MenuItem component props\n * @typedef {Object} MenuItemProps\n * @property {React.ReactNode} [icon] - Menu item icon\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - Menu variant (auto-passed from Menu)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - Menu size (auto-passed from Menu)\n * @property {boolean} [active=false] - Active state\n * @property {boolean} [disabled=false] - Disabled state\n * @property {string} [dot] - dot utility string for additional styles\n * @property {React.CSSProperties} [style] - Inline style overrides\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'className'>}\n */\nexport interface MenuItemProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n icon?: React.ReactNode;\n variant?: MenuVariant;\n size?: MenuSize;\n active?: boolean;\n disabled?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * MenuItem component\n * Displays an individual menu item.\n *\n * @component\n */\nconst MenuItem = React.forwardRef<HTMLButtonElement, MenuItemProps>(\n (\n {\n dot: dotProp,\n icon,\n variant = \"default\",\n size = \"md\",\n active = false,\n disabled = false,\n children,\n style,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n ITEM_VARIANT_BASE[variant],\n ITEM_SIZE_STYLE[size],\n active ? ITEM_ACTIVE_STYLE : ITEM_INACTIVE_STYLE,\n !active && isHovered ? ITEM_HOVER_STYLE : undefined,\n isFocused\n ? {\n outline: \"none\",\n boxShadow: `0 0 0 2px ${cssVar(\"--color-ring\")}`,\n }\n : undefined,\n disabled ? ITEM_DISABLED_STYLE : undefined,\n resolveDot(dotProp),\n style,\n ),\n [variant, size, active, isHovered, isFocused, disabled, dotProp, style],\n );\n\n return (\n <button\n ref={ref}\n style={computedStyle}\n disabled={disabled}\n onMouseEnter={(e) => {\n setIsHovered(true);\n onMouseEnter?.(e);\n }}\n onMouseLeave={(e) => {\n setIsHovered(false);\n onMouseLeave?.(e);\n }}\n onFocus={(e) => {\n setIsFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setIsFocused(false);\n onBlur?.(e);\n }}\n {...props}\n >\n {icon && <div style={ICON_WRAPPER_STYLE}>{icon}</div>}\n <span style={TEXT_STYLE}>{children}</span>\n </button>\n );\n },\n);\nMenuItem.displayName = \"MenuItem\";\n\n// ---------------------------------------------------------------------------\n// MenuSeparator\n// ---------------------------------------------------------------------------\n\n/**\n * MenuSeparator component props\n * @typedef {Object} MenuSeparatorProps\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - Menu variant (auto-passed from Menu)\n * @property {string} [dot] - dot utility string for additional styles\n * @property {React.CSSProperties} [style] - Inline style overrides\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface MenuSeparatorProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n variant?: MenuVariant;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * MenuSeparator component\n * Displays a separator line between menu items.\n *\n * @component\n */\nconst MenuSeparator = React.forwardRef<HTMLDivElement, MenuSeparatorProps>(\n ({ dot: dotProp, variant = \"default\", style, ...props }, ref) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n variant === \"horizontal\"\n ? SEPARATOR_HORIZONTAL_STYLE\n : SEPARATOR_VERTICAL_STYLE,\n resolveDot(dotProp),\n style,\n ),\n [variant, dotProp, style],\n );\n\n return <div ref={ref} style={computedStyle} {...props} />;\n },\n);\nMenuSeparator.displayName = \"MenuSeparator\";\n\n// ---------------------------------------------------------------------------\n// MenuLabel\n// ---------------------------------------------------------------------------\n\n/**\n * MenuLabel component props\n * @typedef {Object} MenuLabelProps\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - Menu variant (auto-passed from Menu)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - Menu size (auto-passed from Menu)\n * @property {string} [dot] - dot utility string for additional styles\n * @property {React.CSSProperties} [style] - Inline style overrides\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface MenuLabelProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n variant?: MenuVariant;\n size?: MenuSize;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * MenuLabel component\n * Displays a label for a menu section.\n *\n * @component\n */\nconst MenuLabel = React.forwardRef<HTMLDivElement, MenuLabelProps>(\n (\n {\n dot: dotProp,\n variant = \"default\",\n size = \"md\",\n children,\n style,\n ...props\n },\n ref,\n ) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n variant === \"horizontal\"\n ? LABEL_HORIZONTAL_STYLE\n : LABEL_DEFAULT_STYLE,\n LABEL_SIZE_STYLE[size],\n resolveDot(dotProp),\n style,\n ),\n [variant, size, dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n },\n);\nMenuLabel.displayName = \"MenuLabel\";\n\n// ---------------------------------------------------------------------------\n// Convenience components\n// ---------------------------------------------------------------------------\n\nexport const MenuHorizontal = React.forwardRef<\n HTMLDivElement,\n Omit<MenuProps, \"variant\">\n>(({ ...props }, ref) => <Menu ref={ref} variant=\"horizontal\" {...props} />);\nMenuHorizontal.displayName = \"MenuHorizontal\";\n\nexport const MenuVertical = React.forwardRef<\n HTMLDivElement,\n Omit<MenuProps, \"variant\">\n>(({ ...props }, ref) => <Menu ref={ref} variant=\"vertical\" {...props} />);\nMenuVertical.displayName = \"MenuVertical\";\n\nexport const MenuCompact = React.forwardRef<\n HTMLDivElement,\n Omit<MenuProps, \"variant\">\n>(({ ...props }, ref) => <Menu ref={ref} variant=\"compact\" {...props} />);\nMenuCompact.displayName = \"MenuCompact\";\n\nexport { Menu, MenuItem, MenuSeparator, MenuLabel };\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { createGlassStyle } from \"../lib/styles/glass\";\n\n// ---------------------------------------------------------------------------\n// Static style objects\n// ---------------------------------------------------------------------------\n\nconst WRAPPER_STYLE: React.CSSProperties = {\n position: \"relative\",\n};\n\nconst TRIGGER_WRAPPER_STYLE: React.CSSProperties = {\n display: \"inline-block\",\n};\n\nconst PANEL_BASE_STYLE: React.CSSProperties = {\n position: \"fixed\",\n zIndex: 50,\n minWidth: \"200px\",\n ...resolveDot(\"py-2 rounded-lg\"),\n ...createGlassStyle(\"light\"),\n backgroundColor: \"var(--context-menu-bg, #fff)\",\n color: \"var(--context-menu-foreground)\",\n boxShadow:\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n};\n\nconst ITEM_BASE_STYLE: React.CSSProperties = {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3 px-4 py-3\"),\n fontSize: \"0.875rem\",\n fontWeight: 500,\n transition: \"background-color 200ms ease-in-out, color 200ms ease-in-out\",\n background: \"none\",\n border: \"none\",\n textAlign: \"left\" as const,\n cursor: \"pointer\",\n outline: \"none\",\n color: \"var(--context-menu-item-default-color)\",\n};\n\nconst ITEM_VARIANT_STYLE: Record<string, React.CSSProperties> = {\n default: {\n color: \"var(--context-menu-item-default-color)\",\n },\n destructive: {\n color: \"var(--context-menu-item-destructive-color)\",\n },\n disabled: {\n color: \"var(--context-menu-item-muted-color)\",\n cursor: \"not-allowed\",\n },\n};\n\nconst ITEM_HOVER_STYLE: Record<string, React.CSSProperties> = {\n default: {\n backgroundColor: \"var(--context-menu-item-hover-bg)\",\n },\n destructive: {\n backgroundColor: \"var(--context-menu-item-destructive-hover-bg)\",\n },\n disabled: {},\n};\n\nconst ITEM_ICON_WRAPPER_STYLE: React.CSSProperties = {\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n};\n\nconst ITEM_LABEL_STYLE: React.CSSProperties = {\n flex: 1,\n textAlign: \"left\" as const,\n};\n\nconst SEPARATOR_STYLE: React.CSSProperties = {\n height: \"1px\",\n backgroundColor: \"var(--context-menu-separator-color)\",\n ...resolveDot(\"my-2\"),\n};\n\nconst LABEL_STYLE: React.CSSProperties = {\n ...resolveDot(\"px-4 py-2\"),\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--context-menu-label-color)\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.05em\",\n};\n\nconst GROUP_STYLE: React.CSSProperties = {\n ...resolveDot(\"py-1\"),\n};\n\n// ---------------------------------------------------------------------------\n// ContextMenu\n// ---------------------------------------------------------------------------\n\n/**\n * ContextMenu component props\n * @typedef {Object} ContextMenuProps\n * @property {React.ReactNode} children - ContextMenu content\n * @property {boolean} [open] - Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - State change callback\n * @property {React.ReactNode} [trigger] - Trigger element to open context menu (right-click event)\n * @property {\"top\" | \"bottom\" | \"left\" | \"right\"} [placement=\"bottom\"] - ContextMenu display position\n * @property {\"start\" | \"center\" | \"end\"} [align=\"start\"] - ContextMenu alignment\n * @property {number} [offset=8] - Spacing between trigger and context menu (px)\n * @property {boolean} [disabled=false] - Disable context menu\n */\nexport interface ContextMenuProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n offset?: number;\n disabled?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * ContextMenu component\n *\n * Context menu component that appears on right-click.\n * Automatically connects right-click events to the trigger element.\n *\n * @component\n * @example\n * // Basic usage\n * <ContextMenu trigger={<div>Right-click here</div>}>\n * <ContextMenuItem>Item 1</ContextMenuItem>\n * <ContextMenuItem>Item 2</ContextMenuItem>\n * </ContextMenu>\n *\n * @example\n * // Controlled mode\n * const [open, setOpen] = useState(false)\n * <ContextMenu\n * open={open}\n * onOpenChange={setOpen}\n * trigger={<div>Right-click</div>}\n * >\n * <ContextMenuItem>Copy</ContextMenuItem>\n * <ContextMenuItem>Delete</ContextMenuItem>\n * </ContextMenu>\n */\nconst ContextMenu = React.forwardRef<HTMLDivElement, ContextMenuProps>(\n (\n {\n dot: dotProp,\n style,\n children,\n open: controlledOpen,\n onOpenChange,\n trigger,\n placement: _placement = \"bottom\",\n align: _align = \"start\",\n offset: _offset = 8,\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [coords, setCoords] = React.useState({ x: 0, y: 0 });\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const wrapperStyle = useMemo(\n () => mergeStyles(WRAPPER_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (disabled) return;\n\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [disabled, isControlled, onOpenChange],\n );\n\n const handleContextMenu = (event: React.MouseEvent) => {\n event.preventDefault();\n if (disabled) return;\n\n const x = event.clientX;\n const y = event.clientY;\n\n setCoords({ x, y });\n handleOpenChange(true);\n };\n\n const updatePosition = React.useCallback(() => {\n if (!menuRef.current) return;\n\n const menuRect = menuRef.current.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n let x = coords.x;\n let y = coords.y;\n\n if (x + menuRect.width > viewportWidth - 8) {\n x = viewportWidth - menuRect.width - 8;\n }\n if (y + menuRect.height > viewportHeight - 8) {\n y = viewportHeight - menuRect.height - 8;\n }\n if (x < 8) x = 8;\n if (y < 8) y = 8;\n\n setCoords({ x, y });\n }, [coords.x, coords.y]);\n\n React.useEffect(() => {\n if (isOpen) {\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition);\n };\n }\n }, [isOpen, updatePosition]);\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n menuRef.current &&\n !triggerRef.current.contains(event.target as Node) &&\n !menuRef.current.contains(event.target as Node)\n ) {\n handleOpenChange(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }\n }, [isOpen, handleOpenChange]);\n\n return (\n <div ref={ref} style={wrapperStyle} {...props}>\n {/* Trigger */}\n {trigger && (\n <div\n ref={triggerRef}\n onContextMenu={handleContextMenu}\n style={TRIGGER_WRAPPER_STYLE}\n >\n {trigger}\n </div>\n )}\n\n {/* Context menu panel */}\n {isOpen && (\n <div\n ref={menuRef}\n data-testid=\"context-menu-panel\"\n style={{\n ...PANEL_BASE_STYLE,\n left: coords.x,\n top: coords.y,\n }}\n >\n {children}\n </div>\n )}\n </div>\n );\n },\n);\nContextMenu.displayName = \"ContextMenu\";\n\n// ---------------------------------------------------------------------------\n// ContextMenuItem\n// ---------------------------------------------------------------------------\n\nexport interface ContextMenuItemProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n icon?: React.ReactNode;\n variant?: \"default\" | \"destructive\" | \"disabled\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst ContextMenuItem = React.forwardRef<\n HTMLButtonElement,\n ContextMenuItemProps\n>(\n (\n {\n dot: dotProp,\n style,\n icon,\n variant = \"default\",\n children,\n disabled,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const isDisabled = disabled || variant === \"disabled\";\n\n const computedStyle = useMemo(() => {\n return mergeStyles(\n ITEM_BASE_STYLE,\n ITEM_VARIANT_STYLE[variant] ?? ITEM_VARIANT_STYLE.default,\n !isDisabled && isHovered\n ? (ITEM_HOVER_STYLE[variant] ?? ITEM_HOVER_STYLE.default)\n : undefined,\n !isDisabled && isFocused\n ? (ITEM_HOVER_STYLE[variant] ?? ITEM_HOVER_STYLE.default)\n : undefined,\n resolveDot(dotProp),\n style,\n );\n }, [variant, isHovered, isFocused, isDisabled, dotProp, style]);\n\n return (\n <button\n ref={ref}\n style={computedStyle}\n disabled={isDisabled}\n onMouseEnter={(e) => {\n setIsHovered(true);\n onMouseEnter?.(e);\n }}\n onMouseLeave={(e) => {\n setIsHovered(false);\n onMouseLeave?.(e);\n }}\n onFocus={(e) => {\n setIsFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setIsFocused(false);\n onBlur?.(e);\n }}\n {...props}\n >\n {icon && <span style={ITEM_ICON_WRAPPER_STYLE}>{icon}</span>}\n <span style={ITEM_LABEL_STYLE}>{children}</span>\n </button>\n );\n },\n);\nContextMenuItem.displayName = \"ContextMenuItem\";\n\n// ---------------------------------------------------------------------------\n// ContextMenuSeparator\n// ---------------------------------------------------------------------------\n\nexport interface ContextMenuSeparatorProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst ContextMenuSeparator = React.forwardRef<\n HTMLDivElement,\n ContextMenuSeparatorProps\n>(({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(SEPARATOR_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return <div ref={ref} style={computedStyle} {...props} />;\n});\nContextMenuSeparator.displayName = \"ContextMenuSeparator\";\n\n// ---------------------------------------------------------------------------\n// ContextMenuLabel\n// ---------------------------------------------------------------------------\n\nexport interface ContextMenuLabelProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst ContextMenuLabel = React.forwardRef<\n HTMLDivElement,\n ContextMenuLabelProps\n>(({ dot: dotProp, style, children, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(LABEL_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n});\nContextMenuLabel.displayName = \"ContextMenuLabel\";\n\n// ---------------------------------------------------------------------------\n// ContextMenuGroup\n// ---------------------------------------------------------------------------\n\nexport interface ContextMenuGroupProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst ContextMenuGroup = React.forwardRef<\n HTMLDivElement,\n ContextMenuGroupProps\n>(({ dot: dotProp, style, children, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(GROUP_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n});\nContextMenuGroup.displayName = \"ContextMenuGroup\";\n\nexport {\n ContextMenu,\n ContextMenuItem,\n ContextMenuSeparator,\n ContextMenuLabel,\n ContextMenuGroup,\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n/**\n * Command 컴포넌트의 props / Command component props\n * @typedef {Object} CommandProps\n * @property {React.ReactNode} children - CommandList, CommandItem 등 / CommandList, CommandItem, etc.\n * @property {boolean} [open] - 제어 모드에서 열림/닫힘 상태 / Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - 상태 변경 콜백 / State change callback\n * @property {string} [placeholder=\"명령어를 검색하세요...\"] - 검색 입력 플레이스홀더 / Search input placeholder\n * @property {string} [searchValue] - 제어 모드에서 검색 값 / Search value in controlled mode\n * @property {(value: string) => void} [onSearchChange] - 검색 값 변경 콜백 / Search value change callback\n * @property {boolean} [disabled=false] - Command 비활성화 여부 / Disable command\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface CommandProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n disabled?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Command 컴포넌트 / Command component\n *\n * 명령 팔레트(Command Palette) 컴포넌트입니다.\n * Cmd+K (Mac) 또는 Ctrl+K (Windows)로 열 수 있습니다.\n * 키보드 네비게이션(Arrow keys, Enter, Escape)을 지원합니다.\n *\n * Command Palette component.\n * Can be opened with Cmd+K (Mac) or Ctrl+K (Windows).\n * Supports keyboard navigation (Arrow keys, Enter, Escape).\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Command>\n * <CommandInput placeholder=\"검색...\" />\n * <CommandList>\n * <CommandItem>항목 1</CommandItem>\n * <CommandItem>항목 2</CommandItem>\n * </CommandList>\n * </Command>\n *\n * @example\n * // 제어 모드 / Controlled mode\n * const [open, setOpen] = useState(false)\n * <Command\n * open={open}\n * onOpenChange={setOpen}\n * >\n * <CommandList>\n * <CommandGroup heading=\"파일\">\n * <CommandItem>새 파일</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </Command>\n *\n * @param {CommandProps} props - Command 컴포넌트의 props / Command component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Command 컴포넌트 / Command component\n */\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\n (\n {\n children,\n open: controlledOpen,\n onOpenChange,\n placeholder = \"명령어를 검색하세요...\",\n searchValue: controlledSearchValue,\n onSearchChange,\n disabled = false,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const [internalSearchValue, setInternalSearchValue] = React.useState(\"\");\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const commandRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n const searchValue =\n controlledSearchValue !== undefined\n ? controlledSearchValue\n : internalSearchValue;\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (disabled) return;\n\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [disabled, isControlled, onOpenChange],\n );\n\n const handleSearchChange = (value: string) => {\n if (!isControlled) {\n setInternalSearchValue(value);\n }\n onSearchChange?.(value);\n setSelectedIndex(0);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n const items = listRef.current?.querySelectorAll(\"[data-command-item]\");\n const itemCount = items?.length || 0;\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setSelectedIndex((prev) => (prev + 1) % itemCount);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n setSelectedIndex((prev) => (prev - 1 + itemCount) % itemCount);\n break;\n case \"Enter\": {\n event.preventDefault();\n const selectedItem = items?.[selectedIndex] as HTMLElement;\n selectedItem?.click();\n break;\n }\n case \"Escape\":\n event.preventDefault();\n handleOpenChange(false);\n break;\n }\n };\n\n React.useEffect(() => {\n if (isOpen) {\n inputRef.current?.focus();\n setSelectedIndex(0);\n }\n }, [isOpen]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"k\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n handleOpenChange(!isOpen);\n }\n // 전역 ESC 키 처리\n if (event.key === \"Escape\" && isOpen) {\n event.preventDefault();\n handleOpenChange(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isOpen, handleOpenChange]);\n\n React.useEffect(() => {\n const selectedItem = listRef.current?.querySelector(\n `[data-command-item]:nth-child(${selectedIndex + 1})`,\n ) as HTMLElement;\n selectedItem?.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n return (\n <div\n ref={ref}\n style={mergeStyles(resolveDot(\"relative\"), resolveDot(dotProp), style)}\n {...props}\n >\n {isOpen && (\n <div\n ref={commandRef}\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 50,\n backgroundColor: \"rgba(0,0,0,0.5)\",\n backdropFilter: \"blur(4px)\",\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n ...resolveDot(\"pt-16\"),\n }}\n onClick={() => handleOpenChange(false)}\n >\n <div\n style={mergeStyles(resolveDot(\"rounded-lg\"), {\n width: \"100%\",\n maxWidth: \"42rem\",\n margin: \"0 1rem\",\n backgroundColor: \"var(--color-popover)\",\n color: \"var(--color-popover-foreground)\",\n overflow: \"hidden\",\n boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n border: \"none\",\n })}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n style={{\n ...resolveDot(\"p-4\"),\n borderBottom: \"1px solid var(--color-border)\",\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => handleSearchChange(e.target.value)}\n onKeyDown={handleKeyDown}\n style={{\n width: \"100%\",\n backgroundColor: \"transparent\",\n fontSize: \"1.125rem\",\n fontWeight: 500,\n outline: \"none\",\n border: \"none\",\n color: \"var(--color-foreground)\",\n }}\n />\n </div>\n\n <div\n ref={listRef}\n style={{\n maxHeight: \"24rem\",\n overflowY: \"auto\",\n ...resolveDot(\"py-2\"),\n }}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement<CommandItemProps>(child)) {\n // Fragment나 다른 컴포넌트에 selected prop 전달 방지\n if (\n child.type === React.Fragment ||\n typeof child.type === \"symbol\"\n ) {\n return child;\n }\n return React.cloneElement(child, {\n selected: index === selectedIndex,\n onSelect: () => {\n child.props.onSelect?.();\n handleOpenChange(false);\n },\n });\n }\n return child;\n })}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n },\n);\nCommand.displayName = \"Command\";\n\n/**\n * CommandInput 컴포넌트의 props / CommandInput component props\n * @typedef {Object} CommandInputProps\n * @extends {Omit<React.InputHTMLAttributes<HTMLInputElement>, 'className'>}\n */\nexport interface CommandInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(\n ({ dot: dotProp, style, ...props }, ref) => (\n <input\n ref={ref}\n style={mergeStyles(\n resolveDot(\"rounded-md py-2 px-3\"),\n {\n display: \"flex\",\n height: \"2.5rem\",\n width: \"100%\",\n backgroundColor: \"transparent\",\n fontSize: \"0.875rem\",\n outline: \"none\",\n border: \"none\",\n color: \"var(--color-foreground)\",\n },\n resolveDot(dotProp),\n style,\n )}\n {...props}\n />\n ),\n);\nCommandInput.displayName = \"CommandInput\";\n\nexport interface CommandListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n ({ dot: dotProp, style, ...props }, ref) => (\n <div\n ref={ref}\n style={mergeStyles(\n { maxHeight: \"24rem\", overflowY: \"auto\", ...resolveDot(\"py-2\") },\n resolveDot(dotProp),\n style,\n )}\n {...props}\n />\n ),\n);\nCommandList.displayName = \"CommandList\";\n\n/**\n * CommandItem 컴포넌트의 props / CommandItem component props\n * @typedef {Object} CommandItemProps\n * @property {React.ReactNode} [icon] - 항목 아이콘 / Item icon\n * @property {boolean} [selected=false] - 선택 상태 / Selected state\n * @property {() => void} [onSelect] - 선택 시 콜백 / Selection callback\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'className'>}\n */\nexport interface CommandItemProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n icon?: React.ReactNode;\n selected?: boolean;\n onSelect?: () => void;\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst CommandItem = React.forwardRef<HTMLButtonElement, CommandItemProps>(\n (\n {\n icon,\n selected = false,\n onSelect,\n children,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n return (\n <button\n ref={ref}\n data-command-item\n style={mergeStyles(\n {\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3\"),\n borderRadius: \"0.125rem\",\n ...resolveDot(\"py-3 px-4\"),\n fontSize: \"0.875rem\",\n color: \"var(--color-foreground)\",\n backgroundColor: selected ? \"var(--color-muted)\" : \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 150ms\",\n textAlign: \"left\",\n },\n resolveDot(dotProp),\n style,\n )}\n onClick={onSelect}\n {...props}\n >\n {icon && (\n <div\n style={{\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n color: \"var(--color-muted-foreground)\",\n }}\n >\n {icon}\n </div>\n )}\n <span style={{ flex: 1, textAlign: \"left\" }}>{children}</span>\n </button>\n );\n },\n);\nCommandItem.displayName = \"CommandItem\";\n\n/**\n * CommandGroup 컴포넌트의 props / CommandGroup component props\n * @typedef {Object} CommandGroupProps\n * @property {React.ReactNode} [heading] - 그룹 제목 / Group heading\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface CommandGroupProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n heading?: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n ({ heading, children, dot: dotProp, style, ...props }, ref) => (\n <div\n ref={ref}\n style={mergeStyles(resolveDot(\"py-2\"), resolveDot(dotProp), style)}\n {...props}\n >\n {heading && (\n <div\n style={{\n ...resolveDot(\"py-2 px-4\"),\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--color-muted-foreground)\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }}\n >\n {heading}\n </div>\n )}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-1\"),\n }}\n >\n {children}\n </div>\n </div>\n ),\n);\nCommandGroup.displayName = \"CommandGroup\";\n\n/**\n * CommandSeparator 컴포넌트의 props / CommandSeparator component props\n * @typedef {Object} CommandSeparatorProps\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface CommandSeparatorProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst CommandSeparator = React.forwardRef<\n HTMLDivElement,\n CommandSeparatorProps\n>(({ dot: dotProp, style, ...props }, ref) => (\n <div\n ref={ref}\n style={mergeStyles(\n {\n height: \"1px\",\n backgroundColor: \"var(--color-border)\",\n ...resolveDot(\"my-2\"),\n },\n resolveDot(dotProp),\n style,\n )}\n {...props}\n />\n));\nCommandSeparator.displayName = \"CommandSeparator\";\n\n/**\n * CommandEmpty 컴포넌트의 props / CommandEmpty component props\n * @typedef {Object} CommandEmptyProps\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface CommandEmptyProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n ({ children = \"결과가 없습니다.\", dot: dotProp, style, ...props }, ref) => (\n <div\n ref={ref}\n style={mergeStyles(\n {\n ...resolveDot(\"py-8\"),\n textAlign: \"center\",\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground)\",\n },\n resolveDot(dotProp),\n style,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\nCommandEmpty.displayName = \"CommandEmpty\";\n\n// 편의 컴포넌트들\nexport const CommandDialog = React.forwardRef<HTMLDivElement, CommandProps>(\n ({ dot: dotProp, style, ...props }, ref) => (\n <Command ref={ref} dot={dotProp} style={style} {...props} />\n ),\n);\nCommandDialog.displayName = \"CommandDialog\";\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandItem,\n CommandGroup,\n CommandSeparator,\n CommandEmpty,\n};\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingAboutProps } from
|
|
2
|
-
export declare function LandingAbout({ name, role, bio, avatar, socialLinks, motion: motionOverride,
|
|
1
|
+
import type { LandingAboutProps } from "./types";
|
|
2
|
+
export declare function LandingAbout({ name, role, bio, avatar, socialLinks, motion: motionOverride, dot: dotProp, ...rest }: LandingAboutProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingAbout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingAbout.d.ts","sourceRoot":"","sources":["../../src/landing/LandingAbout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingAbout.d.ts","sourceRoot":"","sources":["../../src/landing/LandingAbout.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAyB,MAAM,SAAS,CAAC;AAyBxE,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,MAAM,EACN,WAAW,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACR,EAAE,iBAAiB,2CA2EnB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingCTAProps } from
|
|
2
|
-
export declare function LandingCTA({ title, subtitle, primaryAction, secondaryAction, background: bgProp, gradientColors, motion: motionOverride,
|
|
1
|
+
import type { LandingCTAProps } from "./types";
|
|
2
|
+
export declare function LandingCTA({ title, subtitle, primaryAction, secondaryAction, background: bgProp, gradientColors, motion: motionOverride, dot: dotProp, ...rest }: LandingCTAProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingCTA.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingCTA.d.ts","sourceRoot":"","sources":["../../src/landing/LandingCTA.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingCTA.d.ts","sourceRoot":"","sources":["../../src/landing/LandingCTA.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,SAAS,CAAC;AAyCtE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,aAAa,EACb,eAAe,EACf,UAAU,EAAE,MAAM,EAClB,cAAc,EACd,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACR,EAAE,eAAe,2CAmGjB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingContactProps } from
|
|
2
|
-
export declare function LandingContact({ title, subtitle, email, socialLinks, motion: motionOverride,
|
|
1
|
+
import type { LandingContactProps } from "./types";
|
|
2
|
+
export declare function LandingContact({ title, subtitle, email, socialLinks, motion: motionOverride, dot: dotProp, ...rest }: LandingContactProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingContact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingContact.d.ts","sourceRoot":"","sources":["../../src/landing/LandingContact.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingContact.d.ts","sourceRoot":"","sources":["../../src/landing/LandingContact.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,SAAS,CAAC;AAyB1E,wBAAgB,cAAc,CAAC,EAC7B,KAAsB,EACtB,QAAQ,EACR,KAAK,EACL,WAAW,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACR,EAAE,mBAAmB,2CA4ErB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingExperienceProps } from
|
|
1
|
+
import type { LandingExperienceProps } from "./types";
|
|
2
2
|
export declare function LandingExperience({ items, title, subtitle, motion: motionOverride, staggerDelay: staggerProp, className, ...rest }: LandingExperienceProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingExperience.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingExperience.d.ts","sourceRoot":"","sources":["../../src/landing/LandingExperience.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"LandingExperience.d.ts","sourceRoot":"","sources":["../../src/landing/LandingExperience.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AA2EjB,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,WAAW,EACzB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,sBAAsB,2CA2BxB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingFeaturesProps } from
|
|
1
|
+
import type { LandingFeaturesProps } from "./types";
|
|
2
2
|
export declare function LandingFeatures({ items, title, subtitle, columns: columnsProp, card: cardProp, sectionProps, motion: motionOverride, staggerDelay: staggerDelayProp, decorator: decoratorProp, className, ...rest }: LandingFeaturesProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingFeatures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingFeatures.d.ts","sourceRoot":"","sources":["../../src/landing/LandingFeatures.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"LandingFeatures.d.ts","sourceRoot":"","sources":["../../src/landing/LandingFeatures.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,SAAS,CAAC;AAsEjB,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,oBAAoB,2CA2CtB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingHeroProps } from
|
|
2
|
-
export declare function LandingHero({ title, subtitle, description, primaryAction, secondaryAction, size: sizeProp, background: bgProp, gradientColors, scrollIndicator, motion: motionOverride,
|
|
1
|
+
import type { LandingHeroProps } from "./types";
|
|
2
|
+
export declare function LandingHero({ title, subtitle, description, primaryAction, secondaryAction, size: sizeProp, background: bgProp, gradientColors, scrollIndicator, motion: motionOverride, dot: dotProp, ...rest }: LandingHeroProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingHero.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingHero.d.ts","sourceRoot":"","sources":["../../src/landing/LandingHero.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingHero.d.ts","sourceRoot":"","sources":["../../src/landing/LandingHero.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,SAAS,CAAC;AA2BvE,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,cAAc,EACd,eAAuB,EACvB,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACR,EAAE,gBAAgB,2CAmHlB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingLogoCloudProps } from
|
|
2
|
-
export declare function LandingLogoCloud({ logos, title, variant: variantProp, speed: speedProp, logoHeight, motion: motionOverride,
|
|
1
|
+
import type { LandingLogoCloudProps } from "./types";
|
|
2
|
+
export declare function LandingLogoCloud({ logos, title, variant: variantProp, speed: speedProp, logoHeight, motion: motionOverride, dot: dotProp, ...rest }: LandingLogoCloudProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingLogoCloud.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingLogoCloud.d.ts","sourceRoot":"","sources":["../../src/landing/LandingLogoCloud.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingLogoCloud.d.ts","sourceRoot":"","sources":["../../src/landing/LandingLogoCloud.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,SAAS,CAAC;AA0C5E,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,UAAe,EACf,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACR,EAAE,qBAAqB,2CAgFvB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingMetricsProps } from
|
|
1
|
+
import type { LandingMetricsProps } from "./types";
|
|
2
2
|
export declare function LandingMetrics({ items, title, subtitle, tabs, motion: motionOverride, className, ...rest }: LandingMetricsProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingMetrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingMetrics.d.ts","sourceRoot":"","sources":["../../src/landing/LandingMetrics.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingMetrics.d.ts","sourceRoot":"","sources":["../../src/landing/LandingMetrics.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AA4EjB,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,MAAM,EAAE,cAAc,EACtB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,mBAAmB,2CAwErB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingProjectsProps } from
|
|
1
|
+
import type { LandingProjectsProps } from "./types";
|
|
2
2
|
export declare function LandingProjects({ items, title, subtitle, columns, filter, motion: motionOverride, staggerDelay: staggerProp, className, ...rest }: LandingProjectsProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingProjects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingProjects.d.ts","sourceRoot":"","sources":["../../src/landing/LandingProjects.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"LandingProjects.d.ts","sourceRoot":"","sources":["../../src/landing/LandingProjects.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,SAAS,CAAC;AA8GjB,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAW,EACX,MAAc,EACd,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,WAAW,EACzB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,oBAAoB,2CAuEtB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingShowcaseProps } from
|
|
2
|
-
export declare function LandingShowcase({ items, title, subtitle, motion: motionOverride, staggerDelay: staggerProp,
|
|
1
|
+
import type { LandingShowcaseProps } from "./types";
|
|
2
|
+
export declare function LandingShowcase({ items, title, subtitle, motion: motionOverride, staggerDelay: staggerProp, dot: dotProp, ...rest }: LandingShowcaseProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingShowcase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingShowcase.d.ts","sourceRoot":"","sources":["../../src/landing/LandingShowcase.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingShowcase.d.ts","sourceRoot":"","sources":["../../src/landing/LandingShowcase.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAyB,MAAM,SAAS,CAAC;AAuB3E,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,WAAW,EACzB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACR,EAAE,oBAAoB,2CAiFtB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingSkillsProps } from
|
|
1
|
+
import type { LandingSkillsProps } from "./types";
|
|
2
2
|
export declare function LandingSkills({ items, title, subtitle, variant, motion: motionOverride, staggerDelay: staggerProp, className, ...rest }: LandingSkillsProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingSkills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingSkills.d.ts","sourceRoot":"","sources":["../../src/landing/LandingSkills.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LandingSkills.d.ts","sourceRoot":"","sources":["../../src/landing/LandingSkills.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AA8BjB,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAgB,EAChB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,WAAW,EACzB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,kBAAkB,2CAwHpB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingStatsProps } from
|
|
1
|
+
import type { LandingStatsProps } from "./types";
|
|
2
2
|
export declare function LandingStats({ items, title, subtitle, countUp: countUpProp, numberSize: numberSizeProp, sectionProps, motion: motionOverride, staggerDelay: staggerDelayProp, className, ...rest }: LandingStatsProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingStats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingStats.d.ts","sourceRoot":"","sources":["../../src/landing/LandingStats.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"LandingStats.d.ts","sourceRoot":"","sources":["../../src/landing/LandingStats.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,SAAS,CAAC;AAoHlE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,cAAc,EAC1B,YAAY,EACZ,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,2CAsDnB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LandingTestimonialsProps } from
|
|
1
|
+
import type { LandingTestimonialsProps } from "./types";
|
|
2
2
|
export declare function LandingTestimonials({ items, title, subtitle, variant: variantProp, columns: colsProp, autoPlay, interval, motion: motionOverride, staggerDelay: staggerProp, className, ...rest }: LandingTestimonialsProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=LandingTestimonials.d.ts.map
|