@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/sdui.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdui/registry.tsx","../src/sdui/SDUIRenderer.tsx"],"names":["Box","children","justify","align","className","style","backgroundColor","padding","margin","borderRadius","border","props","customStyle","jsx","cn","justifyMap","alignMap","Spacer","size","Flex","direction","gap","Grid","cols","textAlignMap","getTypographyStyle","Text","variant","fontSize","lineHeight","fontWeight","letterSpacing","variantClasses","typoStyle","mergedStyle","H1","H2","H3","H4","Link","href","isExternal","Image","alt","SDUIIcon","name","Icon","Section","Divider","Header","sticky","transparent","blur","overlay","SDUICheckbox","defaultChecked","onChange","checked","setChecked","useState","Checkbox","e","SDUISwitch","Switch","SDUIInput","defaultValue","value","setValue","Input","SDUITextarea","resize","Textarea","SDUIAccordion","items","type","collapsible","Accordion","item","index","jsxs","AccordionItem","AccordionTrigger","AccordionContent","SDUITabs","tabs","_a","firstValue","Tabs","TabsList","tab","TabsTrigger","TabsContent","defaultRegistry","Container","Button","Badge","Avatar","AvatarImage","AvatarFallback","Label","Skeleton","Progress","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Alert","HeroSection","ScrollProgress","extendRegistry","customComponents","hasComponent","registry","SDUIContextInternal","createContext","useSDUI","context","useContext","getByPath","obj","path","acc","key","setByPath","keys","result","current","i","evaluateCondition","condition","data","resolveProps","resolved","bindingMatch","_","val","NodeRenderer","node","handleAction","Component","resolvedProps","eventProps","child","SDUIRenderer","schema","components","initialData","onAction","onNavigate","isPageSchema","rootNode","schemaData","setDataState","useMemo","setData","useCallback","prev","navigate","action","_b","_c","contextValue","SDUIFromJSON","json","error"],"mappings":"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","file":"sdui.mjs","sourcesContent":["\"use client\";\n\n/**\n * SDUI Component Registry\n *\n * 컴포넌트 타입 문자열 → 실제 React 컴포넌트 매핑\n */\n\nimport React, { useState } from \"react\";\nimport type { SDUIComponentRegistry } from \"./types\";\nimport { cn } from \"../lib/utils\";\n\n// 기본 컴포넌트들\nimport { Button } from \"../components/Button\";\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"../components/Card\";\nimport { Badge } from \"../components/Badge\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../components/Avatar\";\nimport { Container } from \"../components/Container\";\nimport { Input } from \"../components/Input\";\nimport { Textarea } from \"../components/Textarea\";\nimport { Label } from \"../components/Label\";\nimport { Checkbox, type CheckboxProps } from \"../components/Checkbox\";\nimport { Switch, type SwitchProps } from \"../components/Switch\";\nimport { type InputProps } from \"../components/Input\";\nimport { type TextareaProps } from \"../components/Textarea\";\nimport { Skeleton } from \"../components/Skeleton\";\nimport { Progress } from \"../components/Progress\";\nimport { Alert } from \"../components/Alert\";\nimport { Icon } from \"../components/Icon\";\nimport type { IconName } from \"../lib/icons\";\n\n// Advanced 컴포넌트들\nimport { HeroSection } from \"../components/HeroSection\";\nimport { ScrollProgress } from \"../components/ScrollProgress\";\n\n// Interactive 컴포넌트들\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"../components/Accordion\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"../components/Tabs\";\n\n// 레이아웃 프리미티브\nconst Box: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n // 커스텀 스타일 props (DOM에 직접 전달하지 않음)\n backgroundColor?: string;\n padding?: string | number;\n margin?: string | number;\n borderRadius?: string | number;\n border?: string;\n}> = ({\n children,\n justify,\n align,\n className = \"\",\n style,\n // 커스텀 props 분리 (DOM에 전달 X)\n backgroundColor,\n padding,\n margin,\n borderRadius,\n border,\n ...props\n}) => {\n // 커스텀 props를 style 객체로 병합\n const customStyle: React.CSSProperties = {\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n ...(margin !== undefined && { margin: typeof margin === 'number' ? `${margin}px` : margin }),\n ...(borderRadius !== undefined && { borderRadius: typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius }),\n ...(border && { border }),\n };\n\n return (\n <div\n className={cn(\n (justify || align) && \"flex\",\n justify && justifyMap[justify],\n align && alignMap[align],\n className\n )}\n style={Object.keys(customStyle).length > 0 ? customStyle : undefined}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n// Spacer - 공백용 void 컴포넌트\nconst Spacer: React.FC<{ size?: number; className?: string }> = ({ size = 16, className = \"\" }) => (\n <div className={className} style={{ width: size, height: size, flexShrink: 0 }} />\n);\n\n// 정렬 매핑\nconst justifyMap = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\nconst alignMap = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n};\n\nconst Flex: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n direction?: \"row\" | \"column\";\n gap?: number;\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n backgroundColor?: string;\n padding?: string | number;\n}> = ({\n children,\n direction = \"row\",\n gap = 0,\n justify = \"start\",\n align = \"stretch\",\n className = \"\",\n style,\n backgroundColor,\n padding,\n ...props\n}) => {\n const customStyle: React.CSSProperties = {\n gap: `${gap * 4}px`,\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n };\n\n return (\n <div\n className={`flex ${direction === \"column\" ? \"flex-col\" : \"flex-row\"} ${justifyMap[justify]} ${alignMap[align]} ${className}`}\n style={customStyle}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nconst Grid: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n cols?: number;\n gap?: number;\n backgroundColor?: string;\n padding?: string | number;\n}> = ({\n children,\n cols = 1,\n gap = 4,\n className = \"\",\n style,\n backgroundColor,\n padding,\n ...props\n}) => {\n const customStyle: React.CSSProperties = {\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gap: `${gap * 4}px`,\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n };\n\n return (\n <div\n className={`grid ${className}`}\n style={customStyle}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n// 텍스트 정렬 매핑\nconst textAlignMap = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\n// 타이포그래피 스타일 props 타입\ninterface TypographyStyleProps {\n fontSize?: string;\n lineHeight?: string;\n fontWeight?: string;\n letterSpacing?: string;\n}\n\n// 타이포그래피 스타일 props를 style 객체로 변환\nfunction getTypographyStyle(props: TypographyStyleProps): React.CSSProperties {\n const style: React.CSSProperties = {};\n if (props.fontSize) style.fontSize = props.fontSize;\n if (props.lineHeight) style.lineHeight = props.lineHeight;\n if (props.fontWeight) style.fontWeight = props.fontWeight;\n if (props.letterSpacing) style.letterSpacing = props.letterSpacing;\n return style;\n}\n\nconst Text: React.FC<React.HTMLAttributes<HTMLParagraphElement> & {\n variant?: \"body\" | \"muted\" | \"lead\";\n align?: \"left\" | \"center\" | \"right\";\n} & TypographyStyleProps> = ({\n children,\n variant = \"body\",\n align = \"center\",\n className = \"\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n ...props\n}) => {\n const variantClasses = {\n body: \"text-foreground\",\n muted: \"text-muted-foreground text-sm\",\n lead: \"text-xl text-muted-foreground\",\n };\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n\n return (\n <p\n className={`${variantClasses[variant]} ${textAlignMap[align]} ${className}`}\n style={mergedStyle}\n {...props}\n >\n {children}\n </p>\n );\n};\n\n// Heading 컴포넌트들 (정렬 + 타이포그래피 스타일 지원)\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n align?: \"left\" | \"center\" | \"right\";\n} & TypographyStyleProps;\n\nconst H1: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h1 className={`text-4xl md:text-5xl font-bold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h1>\n );\n};\n\nconst H2: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h2 className={`text-3xl md:text-4xl font-bold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h2>\n );\n};\n\nconst H3: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h3 className={`text-2xl md:text-3xl font-semibold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h3>\n );\n};\n\nconst H4: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h4 className={`text-xl md:text-2xl font-semibold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h4>\n );\n};\n\nconst Link: React.FC<React.AnchorHTMLAttributes<HTMLAnchorElement>> = ({\n children,\n href = \"#\",\n className = \"\",\n ...props\n}) => {\n // 절대 경로 처리: http/https로 시작하지 않으면 그대로, 시작하면 외부 링크\n const isExternal = href.startsWith(\"http://\") || href.startsWith(\"https://\");\n\n return (\n <a\n href={href}\n className={`text-primary hover:underline ${className}`}\n {...(isExternal ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n {...props}\n >\n {children}\n </a>\n );\n};\n\nconst Image: React.FC<React.ImgHTMLAttributes<HTMLImageElement>> = ({ className = \"\", alt = \"\", ...props }) => (\n <img className={`max-w-full h-auto ${className}`} alt={alt} {...props} />\n);\n\n// SDUI용 Icon 래퍼 (name을 string으로 받음)\nconst SDUIIcon: React.FC<{ name?: string; size?: number; className?: string }> = ({\n name = \"star\",\n size = 24,\n className = \"\",\n}) => <Icon name={name as IconName} size={size} className={className} />;\n\nconst Section: React.FC<React.HTMLAttributes<HTMLElement>> = ({\n children,\n className = \"\",\n ...props\n}) => (\n <section className={`py-10 ${className}`} {...props}>\n {children}\n </section>\n);\n\nconst Divider: React.FC<React.HTMLAttributes<HTMLHRElement>> = ({ className = \"\", ...props }) => (\n <hr className={`border-border ${className}`} {...props} />\n);\n\n// Header - 네비게이션 헤더 (GNB)\nconst Header: React.FC<React.HTMLAttributes<HTMLElement> & {\n sticky?: boolean;\n transparent?: boolean;\n blur?: boolean;\n overlay?: boolean;\n}> = ({\n children,\n sticky = true,\n transparent = false,\n blur = true,\n overlay = false,\n className = \"\",\n ...props\n}) => (\n <header\n className={cn(\n \"w-full px-4 py-3 z-50\",\n overlay ? \"absolute top-0 left-0 right-0\" : sticky && \"sticky top-0\",\n transparent ? \"bg-transparent\" : \"bg-background/80\",\n blur && !transparent && \"backdrop-blur-md\",\n !transparent && \"border-b border-border\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto\">\n {children}\n </div>\n </header>\n);\n\n/**\n * SDUI용 Uncontrolled 래퍼 컴포넌트들\n * 프리뷰에서 인터랙션이 동작하도록 자체 상태 관리\n */\n\n// Uncontrolled Checkbox - 클릭하면 상태 토글\nconst SDUICheckbox: React.FC<CheckboxProps> = ({ defaultChecked = false, onChange, ...props }) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Checkbox\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Switch - 클릭하면 상태 토글\nconst SDUISwitch: React.FC<SwitchProps> = ({ defaultChecked = false, onChange, ...props }) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Switch\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Input - 자체 상태 관리\nconst SDUIInput: React.FC<InputProps> = ({ defaultValue = \"\", onChange, ...props }) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Input\n {...props}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Textarea - 자체 상태 관리 + resize 지원\nconst SDUITextarea: React.FC<TextareaProps> = ({ defaultValue = \"\", onChange, resize = \"vertical\", ...props }) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Textarea\n {...props}\n resize={resize}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n/**\n * SDUI용 간단한 Accordion - 데이터 기반\n * items 배열로 아코디언 생성\n */\ninterface SimpleAccordionItem {\n title: string;\n content: string;\n value?: string;\n}\n\nconst SDUIAccordion: React.FC<{\n items?: SimpleAccordionItem[];\n type?: \"single\" | \"multiple\";\n collapsible?: boolean;\n defaultValue?: string;\n className?: string;\n}> = ({\n items = [],\n type = \"single\",\n collapsible = true,\n defaultValue,\n className = \"\",\n}) => {\n return (\n <Accordion\n type={type}\n collapsible={collapsible}\n defaultValue={defaultValue}\n className={className}\n >\n {items.map((item, index) => {\n const value = item.value || `item-${index}`;\n return (\n <AccordionItem key={value} value={value}>\n <AccordionTrigger>{item.title}</AccordionTrigger>\n <AccordionContent>{item.content}</AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n );\n};\n\n/**\n * SDUI용 간단한 Tabs - 데이터 기반\n * tabs 배열로 탭 생성\n */\ninterface SimpleTabItem {\n label: string;\n content: string;\n value?: string;\n}\n\nconst SDUITabs: React.FC<{\n tabs?: SimpleTabItem[];\n defaultValue?: string;\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n className?: string;\n}> = ({\n tabs = [],\n defaultValue,\n variant = \"default\",\n className = \"\",\n}) => {\n const firstValue = tabs[0]?.value || \"tab-0\";\n\n return (\n <Tabs\n defaultValue={defaultValue || firstValue}\n variant={variant}\n className={className}\n >\n <TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsTrigger key={value} value={value}>\n {tab.label}\n </TabsTrigger>\n );\n })}\n </TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsContent key={value} value={value}>\n {tab.content}\n </TabsContent>\n );\n })}\n </Tabs>\n );\n};\n\n/**\n * 기본 컴포넌트 레지스트리\n */\nexport const defaultRegistry: SDUIComponentRegistry = {\n // 레이아웃\n Box,\n Spacer,\n Flex,\n Grid,\n Section,\n Container,\n Divider,\n\n // 타이포그래피\n Text,\n H1,\n H2,\n H3,\n H4,\n Link,\n\n // 미디어\n Image,\n Icon: SDUIIcon,\n\n // 기본 UI\n Button,\n Badge,\n Avatar,\n AvatarImage,\n AvatarFallback,\n Input: SDUIInput,\n Textarea: SDUITextarea,\n Label,\n Checkbox: SDUICheckbox,\n Switch: SDUISwitch,\n Skeleton,\n Progress,\n\n // 카드\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n\n // 피드백\n Alert,\n\n // Advanced (Pro)\n Header,\n HeroSection,\n ScrollProgress,\n\n // Interactive (Pro)\n Accordion: SDUIAccordion,\n Tabs: SDUITabs,\n};\n\n/**\n * 레지스트리 확장 헬퍼\n */\nexport function extendRegistry(\n customComponents: SDUIComponentRegistry\n): SDUIComponentRegistry {\n return {\n ...defaultRegistry,\n ...customComponents,\n };\n}\n\n/**\n * 컴포넌트 존재 여부 확인\n */\nexport function hasComponent(registry: SDUIComponentRegistry, type: string): boolean {\n return type in registry;\n}\n","\"use client\";\n\n/**\n * SDUI Renderer\n *\n * JSON 스키마를 받아서 실제 React 컴포넌트로 렌더링\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo } from \"react\";\nimport type {\n SDUINode,\n SDUIPageSchema,\n SDUIRendererProps,\n SDUIContext,\n SDUIAction,\n SDUICondition,\n SDUIComponentRegistry,\n} from \"./types\";\nimport { defaultRegistry } from \"./registry\";\n\n// SDUI Context\nconst SDUIContextInternal = createContext<SDUIContext | null>(null);\n\n/**\n * SDUI Context Hook\n */\nexport function useSDUI(): SDUIContext {\n const context = useContext(SDUIContextInternal);\n if (!context) {\n throw new Error(\"useSDUI must be used within SDUIRenderer\");\n }\n return context;\n}\n\n/**\n * 데이터 경로로 값 가져오기\n * 예: \"user.profile.name\" → data.user.profile.name\n */\nfunction getByPath(obj: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce((acc: unknown, key) => {\n if (acc && typeof acc === \"object\" && key in acc) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * 데이터 경로로 값 설정하기\n */\nfunction setByPath(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): Record<string, unknown> {\n const keys = path.split(\".\");\n const result = { ...obj };\n let current: Record<string, unknown> = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n current[key] = { ...(current[key] as Record<string, unknown> || {}) };\n current = current[key] as Record<string, unknown>;\n }\n\n current[keys[keys.length - 1]] = value;\n return result;\n}\n\n/**\n * 조건 평가\n */\nfunction evaluateCondition(\n condition: SDUICondition,\n data: Record<string, unknown>\n): boolean {\n const value = getByPath(data, condition.path);\n\n switch (condition.operator) {\n case \"eq\":\n return value === condition.value;\n case \"neq\":\n return value !== condition.value;\n case \"gt\":\n return typeof value === \"number\" && value > (condition.value as number);\n case \"lt\":\n return typeof value === \"number\" && value < (condition.value as number);\n case \"gte\":\n return typeof value === \"number\" && value >= (condition.value as number);\n case \"lte\":\n return typeof value === \"number\" && value <= (condition.value as number);\n case \"exists\":\n return value !== undefined && value !== null;\n case \"notExists\":\n return value === undefined || value === null;\n default:\n return true;\n }\n}\n\n/**\n * Props에서 데이터 바인딩 처리\n * {{ path }} 형식을 실제 데이터로 치환\n */\nfunction resolveProps(\n props: Record<string, unknown>,\n data: Record<string, unknown>\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n if (typeof value === \"string\") {\n // {{ path }} 패턴 처리\n const bindingMatch = value.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (bindingMatch) {\n resolved[key] = getByPath(data, bindingMatch[1]);\n } else {\n // 문자열 내 부분 바인딩: \"Hello, {{ user.name }}!\"\n resolved[key] = value.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n }\n } else if (Array.isArray(value)) {\n resolved[key] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? resolveProps(item as Record<string, unknown>, data)\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n resolved[key] = resolveProps(value as Record<string, unknown>, data);\n } else {\n resolved[key] = value;\n }\n }\n\n return resolved;\n}\n\n/**\n * 단일 노드 렌더러\n */\ninterface NodeRendererProps {\n node: SDUINode;\n registry: SDUIComponentRegistry;\n}\n\nfunction NodeRenderer({ node, registry }: NodeRendererProps) {\n const { data, handleAction } = useSDUI();\n\n // 조건부 렌더링 체크\n if (node.when && !evaluateCondition(node.when, data)) {\n return null;\n }\n\n // 컴포넌트 찾기\n const Component = registry[node.type];\n if (!Component) {\n console.warn(`[SDUI] Unknown component type: ${node.type}`);\n return (\n <div className=\"p-4 border border-destructive/50 bg-destructive/10 rounded text-sm text-destructive\">\n Unknown component: {node.type}\n </div>\n );\n }\n\n // Props 처리\n const resolvedProps = node.props ? resolveProps(node.props, data) : {};\n\n // 이벤트 핸들러 처리\n const eventProps: Record<string, unknown> = {};\n if (node.on) {\n if (node.on.click) {\n eventProps.onClick = () => handleAction(node.on!.click!);\n }\n if (node.on.submit) {\n eventProps.onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n handleAction(node.on!.submit!);\n };\n }\n }\n\n // Children 처리\n let children: React.ReactNode = null;\n if (node.children) {\n if (typeof node.children === \"string\") {\n // 문자열 바인딩 처리\n children = node.children.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n } else if (Array.isArray(node.children)) {\n children = node.children.map((child, index) => (\n <NodeRenderer\n key={child.key || `child-${index}`}\n node={child}\n registry={registry}\n />\n ));\n }\n }\n\n // void 엘리먼트는 children을 받지 않음\n const voidElements = ['Divider', 'Input', 'Textarea', 'Checkbox', 'Switch', 'Progress', 'Skeleton', 'Image', 'ScrollProgress'];\n const isVoidElement = voidElements.includes(node.type);\n\n if (isVoidElement || children === null) {\n return <Component {...resolvedProps} {...eventProps} />;\n }\n\n return (\n <Component {...resolvedProps} {...eventProps}>\n {children}\n </Component>\n );\n}\n\n/**\n * SDUI Renderer 메인 컴포넌트\n */\nexport function SDUIRenderer({\n schema,\n components,\n data: initialData = {},\n onAction,\n onNavigate,\n}: SDUIRendererProps) {\n // 페이지 스키마인지 노드인지 확인\n const isPageSchema = \"root\" in schema;\n const rootNode = isPageSchema ? (schema as SDUIPageSchema).root : (schema as SDUINode);\n const schemaData = isPageSchema ? (schema as SDUIPageSchema).data : {};\n\n // 데이터 상태\n const [data, setDataState] = useState<Record<string, unknown>>({\n ...schemaData,\n ...initialData,\n });\n\n // 레지스트리 병합\n const registry = useMemo(\n () => ({ ...defaultRegistry, ...components }),\n [components]\n );\n\n // 데이터 업데이트\n const setData = useCallback((path: string, value: unknown) => {\n setDataState((prev) => setByPath(prev, path, value));\n }, []);\n\n // 네비게이션\n const navigate = useCallback(\n (path: string) => {\n if (onNavigate) {\n onNavigate(path);\n } else if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n },\n [onNavigate]\n );\n\n // 액션 핸들러\n const handleAction = useCallback(\n (action: SDUIAction) => {\n switch (action.type) {\n case \"navigate\":\n navigate(action.payload?.path as string);\n break;\n case \"setState\":\n if (action.payload?.path && action.payload?.value !== undefined) {\n setData(action.payload.path as string, action.payload.value);\n }\n break;\n case \"api\":\n // API 호출은 외부에서 처리\n onAction?.(action);\n break;\n case \"custom\":\n onAction?.(action);\n break;\n default:\n onAction?.(action);\n }\n },\n [navigate, setData, onAction]\n );\n\n // Context 값\n const contextValue: SDUIContext = useMemo(\n () => ({\n data,\n setData,\n handleAction,\n navigate,\n }),\n [data, setData, handleAction, navigate]\n );\n\n return (\n <SDUIContextInternal.Provider value={contextValue}>\n <NodeRenderer node={rootNode} registry={registry} />\n </SDUIContextInternal.Provider>\n );\n}\n\n/**\n * JSON 문자열에서 렌더링 (편의용)\n */\nexport function SDUIFromJSON({\n json,\n ...props\n}: Omit<SDUIRendererProps, \"schema\"> & { json: string }) {\n try {\n const schema = JSON.parse(json);\n return <SDUIRenderer schema={schema} {...props} />;\n } catch (error) {\n return (\n <div className=\"p-4 border border-destructive bg-destructive/10 rounded\">\n <p className=\"font-semibold text-destructive\">SDUI Parse Error</p>\n <pre className=\"text-sm mt-2 text-destructive/80\">\n {(error as Error).message}\n </pre>\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/sdui/core.ts","../src/sdui/registry.tsx","../src/sdui/SDUIRenderer.tsx"],"names":["getByPath","obj","path","acc","key","setByPath","value","keys","result","current","i","evaluateCondition","condition","data","resolveProps","props","resolved","bindingMatch","resolveTextBindings","item","text","_","val","resolveDotString","dot","iterateEach","each","items","itemKey","indexKey","index","scopedData","keyVal","buildDot","parts","justifyDot","alignDot","textAlignDot","buildCustomStyle","base","overrides","s","buildTypoStyle","t","extra","Box","children","justify","align","style","backgroundColor","padding","margin","borderRadius","border","dotProp","rest","jsx","Spacer","size","Flex","direction","gap","Grid","cols","Section","Divider","mergeStyles","resolveDot","variantDotMap","Text","variant","fontSize","lineHeight","fontWeight","letterSpacing","H1","H2","H3","H4","Link","href","isExternal","Image","alt","SDUIIcon","name","Icon","Header","sticky","transparent","blur","overlay","SDUICheckbox","defaultChecked","onChange","checked","setChecked","useState","Checkbox","e","SDUISwitch","Switch","SDUIInput","defaultValue","setValue","Input","SDUITextarea","resize","Textarea","SDUIAccordion","type","collapsible","Accordion","jsxs","AccordionItem","AccordionTrigger","AccordionContent","SDUITabs","tabs","_a","firstValue","Tabs","TabsList","tab","TabsTrigger","TabsContent","SDUIStack","spacing","wrap","Stack","SDUIPanel","panelStyle","effect","rounded","Panel","SDUISectionHeader","title","description","SectionHeader","SDUIComponentLayout","ComponentLayout","SDUIPressable","disabled","Pressable","SDUIBreadcrumb","showHomeIcon","Breadcrumb","SDUIPagination","totalPages","shape","currentPage","setCurrentPage","Pagination","SDUINavigation","scale","NavigationComponent","SDUIPageNavigation","prevPage","nextPage","showOnMobile","PageNavigation","SDUIDotNav","position","DotNav","SDUIFeatureCard","icon","hover","gradient","FeatureCard","SDUIInfoCard","tone","InfoCard","SDUIStatsPanel","columns","loading","StatsPanel","SDUILanguageToggle","showLabel","currentLanguage","lang","setLang","LanguageToggle","SDUIThemeToggle","ThemeToggle","SDUIModal","triggerLabel","isOpen","setIsOpen","restStyle","restWithoutStyle","Modal","SDUITooltip","content","delay","Tooltip","SDUIPopover","Popover","SDUIDrawer","side","Drawer","SDUIBottomSheet","height","showDragHandle","BottomSheet","defaultRegistry","Container","Button","Badge","Avatar","AvatarImage","AvatarFallback","Label","Skeleton","Progress","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Alert","HeroSection","ScrollProgress","extendRegistry","customComponents","hasComponent","registry","SDUIContextInternal","createContext","useSDUI","context","useContext","ScopedDataProvider","parentCtx","scopedCtx","useMemo","resolveConstraints","constraints","attrs","NodeRenderer","node","handleAction","iterations","Fragment","NodeRendererInner","Component","resolvedProps","constraintStyle","eventProps","child","SDUIRenderer","schema","components","initialData","onAction","onNavigate","isPageSchema","rootNode","schemaData","setDataState","setData","useCallback","prev","navigate","action","_b","_c","contextValue","SDUIFromJSON","json","error"],"mappings":"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","file":"sdui.mjs","sourcesContent":["/**\n * SDUI Core — platform-agnostic logic\n *\n * SDUIRenderer에서 추출한 순수 함수 + v2 유틸리티\n */\n\nimport type { SDUICondition, SDUIEachBinding } from \"./types\";\n\n/**\n * 데이터 경로로 값 가져오기\n * 예: \"user.profile.name\" → data.user.profile.name\n */\nexport function getByPath(obj: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce((acc: unknown, key) => {\n if (acc && typeof acc === \"object\" && key in acc) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * 데이터 경로로 값 설정하기 (immutable)\n */\nexport function setByPath(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): Record<string, unknown> {\n const keys = path.split(\".\");\n const result = { ...obj };\n let current: Record<string, unknown> = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n current[key] = { ...(current[key] as Record<string, unknown> || {}) };\n current = current[key] as Record<string, unknown>;\n }\n\n current[keys[keys.length - 1]] = value;\n return result;\n}\n\n/**\n * 조건 평가\n */\nexport function evaluateCondition(\n condition: SDUICondition,\n data: Record<string, unknown>\n): boolean {\n const value = getByPath(data, condition.path);\n\n switch (condition.operator) {\n case \"eq\":\n return value === condition.value;\n case \"neq\":\n return value !== condition.value;\n case \"gt\":\n return typeof value === \"number\" && value > (condition.value as number);\n case \"lt\":\n return typeof value === \"number\" && value < (condition.value as number);\n case \"gte\":\n return typeof value === \"number\" && value >= (condition.value as number);\n case \"lte\":\n return typeof value === \"number\" && value <= (condition.value as number);\n case \"exists\":\n return value !== undefined && value !== null;\n case \"notExists\":\n return value === undefined || value === null;\n default:\n return true;\n }\n}\n\n/**\n * Props에서 데이터 바인딩 처리\n * {{ path }} 형식을 실제 데이터로 치환\n */\nexport function resolveProps(\n props: Record<string, unknown>,\n data: Record<string, unknown>\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n if (typeof value === \"string\") {\n // {{ path }} 패턴 처리\n const bindingMatch = value.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (bindingMatch) {\n resolved[key] = getByPath(data, bindingMatch[1]);\n } else {\n // 문자열 내 부분 바인딩: \"Hello, {{ user.name }}!\"\n resolved[key] = resolveTextBindings(value, data);\n }\n } else if (Array.isArray(value)) {\n resolved[key] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? resolveProps(item as Record<string, unknown>, data)\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n resolved[key] = resolveProps(value as Record<string, unknown>, data);\n } else {\n resolved[key] = value;\n }\n }\n\n return resolved;\n}\n\n/**\n * 텍스트 내 {{ path }} 바인딩을 데이터로 치환\n */\nexport function resolveTextBindings(\n text: string,\n data: Record<string, unknown>\n): string {\n return text.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n}\n\n/**\n * dot 문자열 내 {{ path }} 바인딩 resolve\n * 예: \"bg-{{ emotion.color }}\" + {emotion: {color: \"cyan-500\"}} → \"bg-cyan-500\"\n */\nexport function resolveDotString(\n dot: string,\n data: Record<string, unknown>\n): string {\n return resolveTextBindings(dot, data);\n}\n\n/**\n * each 반복 결과 항목\n */\nexport interface EachIterationItem {\n /** Scoped data (부모 data + item/index 주입) */\n scopedData: Record<string, unknown>;\n /** Stable React key (each.key path → item value, fallback: index) */\n key: string;\n}\n\n/**\n * each 바인딩을 처리하여 scoped data + key 배열 반환\n *\n * 각 항목은 부모 data를 복사 + item/index 변수 주입\n * each.key가 있으면 item에서 해당 경로의 값을 React key로 사용\n */\nexport function iterateEach(\n each: SDUIEachBinding,\n data: Record<string, unknown>\n): EachIterationItem[] {\n const items = getByPath(data, each.of);\n if (!Array.isArray(items)) {\n return [];\n }\n\n const itemKey = each.as || \"item\";\n const indexKey = each.indexAs || \"index\";\n\n return items.map((item, index) => {\n const scopedData = {\n ...data,\n [itemKey]: item,\n [indexKey]: index,\n };\n\n // Resolve stable key from item\n let key = String(index);\n if (each.key && item && typeof item === \"object\") {\n const keyVal = getByPath(item as Record<string, unknown>, each.key);\n if (keyVal !== undefined && keyVal !== null) {\n key = String(keyVal);\n }\n }\n\n return { scopedData, key };\n });\n}\n","\"use client\";\n\n/**\n * SDUI Component Registry\n *\n * 컴포넌트 타입 문자열 → 실제 React 컴포넌트 매핑\n * dot 기반 cross-platform 스타일링\n */\n\nimport React, { useState } from \"react\";\nimport type { SDUIComponentRegistry } from \"./types\";\nimport { resolveDot, mergeStyles } from \"../hooks/useDotMap\";\n\n// hua-ui primitives (dot 지원)\nimport { Box as PrimitiveBox } from \"../components/Box\";\nimport { Text as PrimitiveText } from \"../components/Text\";\n\n// 기본 컴포넌트들\nimport { Button } from \"../components/Button\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n} from \"../components/Card\";\nimport { Badge } from \"../components/Badge\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../components/Avatar\";\nimport { Container } from \"../components/Container\";\nimport { Input } from \"../components/Input\";\nimport { Textarea } from \"../components/Textarea\";\nimport { Label } from \"../components/Label\";\nimport { Checkbox, type CheckboxProps } from \"../components/Checkbox\";\nimport { Switch, type SwitchProps } from \"../components/Switch\";\nimport { type InputProps } from \"../components/Input\";\nimport { type TextareaProps } from \"../components/Textarea\";\nimport { Skeleton } from \"../components/Skeleton\";\nimport { Progress } from \"../components/Progress\";\nimport { Alert } from \"../components/Alert\";\nimport { Icon } from \"../components/Icon\";\nimport type { IconName } from \"../lib/icons\";\n\n// Advanced 컴포넌트들\nimport { HeroSection } from \"../components/HeroSection\";\nimport { ScrollProgress } from \"../components/ScrollProgress\";\n\n// Batch A1 — Layout\nimport { Stack } from \"../components/Stack\";\nimport { Panel } from \"../components/Panel\";\nimport { SectionHeader } from \"../components/SectionHeader\";\nimport { ComponentLayout } from \"../components/ComponentLayout\";\nimport { Pressable } from \"../components/Pressable\";\n\n// Batch A2 — Navigation\nimport { Breadcrumb } from \"../components/Breadcrumb\";\nimport { Pagination } from \"../components/Pagination\";\nimport { Navigation } from \"../components/Navigation\";\nimport { PageNavigation } from \"../components/PageNavigation\";\nimport { DotNav } from \"../components/advanced/DotNav\";\nimport type { DotNavItem } from \"../components/advanced/DotNav\";\n\n// Batch A3 — Display\nimport { FeatureCard } from \"../components/FeatureCard\";\nimport { InfoCard } from \"../components/InfoCard\";\nimport { StatsPanel } from \"../components/StatsPanel\";\nimport type { StatsPanelItem } from \"../components/StatsPanel\";\nimport { LanguageToggle } from \"../components/LanguageToggle\";\nimport { ThemeToggle } from \"../components/ThemeToggle\";\n\n// Batch A4 — Overlay\nimport { Modal } from \"../components/Modal\";\nimport { Tooltip } from \"../components/Tooltip\";\nimport { Popover } from \"../components/Popover\";\nimport { Drawer } from \"../components/Drawer\";\nimport { BottomSheet } from \"../components/BottomSheet\";\n\n// Interactive 컴포넌트들\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"../components/Accordion\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"../components/Tabs\";\n\n// ── Helpers ──────────────────────────────────────────────\n\n/** dot 토큰 조합 (falsy 자동 필터) */\nfunction buildDot(...parts: (string | false | undefined | null)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst justifyDot: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\nconst alignDot: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n};\nconst textAlignDot: Record<string, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\n/** 임의값 style props → CSSProperties */\nfunction buildCustomStyle(\n base: React.CSSProperties | undefined,\n overrides: {\n backgroundColor?: string;\n padding?: string | number;\n margin?: string | number;\n borderRadius?: string | number;\n border?: string;\n },\n): React.CSSProperties | undefined {\n const s: React.CSSProperties = {\n ...base,\n ...(overrides.backgroundColor && {\n backgroundColor: overrides.backgroundColor,\n }),\n ...(overrides.padding !== undefined && {\n padding:\n typeof overrides.padding === \"number\"\n ? `${overrides.padding}px`\n : overrides.padding,\n }),\n ...(overrides.margin !== undefined && {\n margin:\n typeof overrides.margin === \"number\"\n ? `${overrides.margin}px`\n : overrides.margin,\n }),\n ...(overrides.borderRadius !== undefined && {\n borderRadius:\n typeof overrides.borderRadius === \"number\"\n ? `${overrides.borderRadius}px`\n : overrides.borderRadius,\n }),\n ...(overrides.border && { border: overrides.border }),\n };\n return Object.keys(s).length > 0 ? s : undefined;\n}\n\n/** 타이포그래피 style props */\ninterface TypographyStyleProps {\n fontSize?: string;\n lineHeight?: string;\n fontWeight?: string;\n letterSpacing?: string;\n}\n\nfunction buildTypoStyle(\n base: React.CSSProperties | undefined,\n t: TypographyStyleProps,\n): React.CSSProperties | undefined {\n const extra: React.CSSProperties = {};\n if (t.fontSize) extra.fontSize = t.fontSize;\n if (t.lineHeight) extra.lineHeight = t.lineHeight;\n if (t.fontWeight) extra.fontWeight = t.fontWeight;\n if (t.letterSpacing) extra.letterSpacing = t.letterSpacing;\n if (Object.keys(extra).length === 0) return base;\n return base ? { ...base, ...extra } : extra;\n}\n\n// ── Layout ──────────────────────────────────────────────\n\nconst Box: React.FC<{\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n backgroundColor?: string;\n padding?: string | number;\n margin?: string | number;\n borderRadius?: string | number;\n border?: string;\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}> = ({\n children,\n justify,\n align,\n style,\n backgroundColor,\n padding,\n margin,\n borderRadius,\n border,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveBox\n dot={buildDot(\n (justify || align) && \"flex\",\n justify && justifyDot[justify],\n align && alignDot[align],\n dotProp,\n )}\n style={buildCustomStyle(style, {\n backgroundColor,\n padding,\n margin,\n borderRadius,\n border,\n })}\n {...rest}\n >\n {children}\n </PrimitiveBox>\n);\n\nconst Spacer: React.FC<{ size?: number; dot?: string }> = ({\n size = 16,\n dot: dotProp,\n}) => (\n <PrimitiveBox\n dot={buildDot(\"shrink-0\", dotProp)}\n style={{ width: size, height: size }}\n />\n);\n\nconst Flex: React.FC<{\n direction?: \"row\" | \"column\";\n gap?: number;\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n backgroundColor?: string;\n padding?: string | number;\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}> = ({\n children,\n direction = \"row\",\n gap = 0,\n justify = \"start\",\n align = \"stretch\",\n style,\n backgroundColor,\n padding,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveBox\n dot={buildDot(\n \"flex\",\n direction === \"column\" && \"flex-col\",\n gap > 0 && `gap-${gap}`,\n justifyDot[justify],\n alignDot[align],\n dotProp,\n )}\n style={buildCustomStyle(style, { backgroundColor, padding })}\n {...rest}\n >\n {children}\n </PrimitiveBox>\n);\n\nconst Grid: React.FC<{\n cols?: number;\n gap?: number;\n backgroundColor?: string;\n padding?: string | number;\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}> = ({\n children,\n cols = 1,\n gap = 4,\n style,\n backgroundColor,\n padding,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveBox\n dot={buildDot(\n \"grid\",\n `grid-cols-${cols}`,\n gap > 0 && `gap-${gap}`,\n dotProp,\n )}\n style={buildCustomStyle(style, { backgroundColor, padding })}\n {...rest}\n >\n {children}\n </PrimitiveBox>\n);\n\nconst Section: React.FC<{\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}> = ({ children, dot: dotProp, ...rest }) => (\n <PrimitiveBox as=\"section\" dot={buildDot(\"py-10\", dotProp)} {...rest}>\n {children}\n </PrimitiveBox>\n);\n\nconst Divider: React.FC<{\n dot?: string;\n style?: React.CSSProperties;\n}> = ({ dot: dotProp, style, ...rest }) => (\n <hr\n style={mergeStyles(resolveDot(buildDot(\"border-border\", dotProp)), style)}\n {...rest}\n />\n);\n\n// ── Typography ──────────────────────────────────────────\n\nconst variantDotMap: Record<string, string> = {\n body: \"text-foreground\",\n muted: \"text-muted-foreground text-sm\",\n lead: \"text-xl text-muted-foreground\",\n};\n\nconst Text: React.FC<\n {\n variant?: \"body\" | \"muted\" | \"lead\";\n align?: \"left\" | \"center\" | \"right\";\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n } & TypographyStyleProps\n> = ({\n children,\n variant = \"body\",\n align = \"center\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveText\n as=\"p\"\n dot={buildDot(variantDotMap[variant], textAlignDot[align], dotProp)}\n style={buildTypoStyle(style, {\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n })}\n {...rest}\n >\n {children}\n </PrimitiveText>\n);\n\ntype HeadingProps = {\n align?: \"left\" | \"center\" | \"right\";\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n} & TypographyStyleProps;\n\nconst H1: React.FC<HeadingProps> = ({\n children,\n align = \"center\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveText\n as=\"h1\"\n dot={buildDot(\"text-4xl font-bold\", textAlignDot[align], dotProp)}\n style={buildTypoStyle(style, {\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n })}\n {...rest}\n >\n {children}\n </PrimitiveText>\n);\n\nconst H2: React.FC<HeadingProps> = ({\n children,\n align = \"center\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveText\n as=\"h2\"\n dot={buildDot(\"text-3xl font-bold\", textAlignDot[align], dotProp)}\n style={buildTypoStyle(style, {\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n })}\n {...rest}\n >\n {children}\n </PrimitiveText>\n);\n\nconst H3: React.FC<HeadingProps> = ({\n children,\n align = \"center\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveText\n as=\"h3\"\n dot={buildDot(\"text-2xl font-semibold\", textAlignDot[align], dotProp)}\n style={buildTypoStyle(style, {\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n })}\n {...rest}\n >\n {children}\n </PrimitiveText>\n);\n\nconst H4: React.FC<HeadingProps> = ({\n children,\n align = \"center\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n dot: dotProp,\n ...rest\n}) => (\n <PrimitiveText\n as=\"h4\"\n dot={buildDot(\"text-xl font-semibold\", textAlignDot[align], dotProp)}\n style={buildTypoStyle(style, {\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n })}\n {...rest}\n >\n {children}\n </PrimitiveText>\n);\n\nconst Link: React.FC<{\n href?: string;\n target?: string;\n rel?: string;\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}> = ({ children, href = \"#\", dot: dotProp, style, ...rest }) => {\n const isExternal = href.startsWith(\"http://\") || href.startsWith(\"https://\");\n return (\n <a\n href={href}\n style={mergeStyles(resolveDot(buildDot(\"text-primary\", dotProp)), style)}\n {...(isExternal ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n {...rest}\n >\n {children}\n </a>\n );\n};\n\nconst Image: React.FC<{\n src?: string;\n alt?: string;\n width?: number | string;\n height?: number | string;\n dot?: string;\n style?: React.CSSProperties;\n}> = ({ alt = \"\", dot: dotProp, style, ...rest }) => (\n <img\n alt={alt}\n style={mergeStyles(\n { maxWidth: \"100%\", height: \"auto\" },\n resolveDot(dotProp),\n style,\n )}\n {...rest}\n />\n);\n\n// SDUI용 Icon 래퍼\nconst SDUIIcon: React.FC<{ name?: string; size?: number }> = ({\n name = \"star\",\n size = 24,\n}) => <Icon name={name as IconName} size={size} />;\n\n// ── Advanced ────────────────────────────────────────────\n\nconst Header: React.FC<{\n sticky?: boolean;\n transparent?: boolean;\n blur?: boolean;\n overlay?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}> = ({\n children,\n sticky = true,\n transparent = false,\n blur = true,\n overlay = false,\n dot: dotProp,\n style,\n ...rest\n}) => (\n <PrimitiveBox\n as=\"header\"\n dot={buildDot(\n \"w-full px-4 py-3 z-50\",\n overlay\n ? \"absolute top-0 left-0 right-0\"\n : sticky\n ? \"sticky top-0\"\n : undefined,\n transparent ? \"bg-transparent\" : \"bg-background/80\",\n blur && !transparent && \"backdrop-blur-md\",\n !transparent && \"border-b border-border\",\n dotProp,\n )}\n style={style}\n {...rest}\n >\n <PrimitiveBox dot=\"max-w-7xl mx-auto\">{children}</PrimitiveBox>\n </PrimitiveBox>\n);\n\n/**\n * SDUI용 Uncontrolled 래퍼 컴포넌트들\n * 프리뷰에서 인터랙션이 동작하도록 자체 상태 관리\n */\n\n// Uncontrolled Checkbox - 클릭하면 상태 토글\nconst SDUICheckbox: React.FC<CheckboxProps> = ({\n defaultChecked = false,\n onChange,\n ...props\n}) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Checkbox\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Switch - 클릭하면 상태 토글\nconst SDUISwitch: React.FC<SwitchProps> = ({\n defaultChecked = false,\n onChange,\n ...props\n}) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Switch\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Input - 자체 상태 관리\nconst SDUIInput: React.FC<InputProps> = ({\n defaultValue = \"\",\n onChange,\n ...props\n}) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Input\n {...props}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Textarea - 자체 상태 관리 + resize 지원\nconst SDUITextarea: React.FC<TextareaProps> = ({\n defaultValue = \"\",\n onChange,\n resize = \"vertical\",\n ...props\n}) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Textarea\n {...props}\n resize={resize}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n/**\n * SDUI용 간단한 Accordion - 데이터 기반\n */\ninterface SimpleAccordionItem {\n title: string;\n content: string;\n value?: string;\n}\n\nconst SDUIAccordion: React.FC<{\n items?: SimpleAccordionItem[];\n type?: \"single\" | \"multiple\";\n collapsible?: boolean;\n defaultValue?: string;\n}> = ({ items = [], type = \"single\", collapsible = true, defaultValue }) => {\n return (\n <Accordion\n type={type}\n collapsible={collapsible}\n defaultValue={defaultValue}\n >\n {items.map((item, index) => {\n const value = item.value || `item-${index}`;\n return (\n <AccordionItem key={value} value={value}>\n <AccordionTrigger>{item.title}</AccordionTrigger>\n <AccordionContent>{item.content}</AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n );\n};\n\n/**\n * SDUI용 간단한 Tabs - 데이터 기반\n */\ninterface SimpleTabItem {\n label: string;\n content: string;\n value?: string;\n}\n\nconst SDUITabs: React.FC<{\n tabs?: SimpleTabItem[];\n defaultValue?: string;\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n}> = ({ tabs = [], defaultValue, variant = \"default\" }) => {\n const firstValue = tabs[0]?.value || \"tab-0\";\n\n return (\n <Tabs defaultValue={defaultValue || firstValue} variant={variant}>\n <TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsTrigger key={value} value={value}>\n {tab.label}\n </TabsTrigger>\n );\n })}\n </TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsContent key={value} value={value}>\n {tab.content}\n </TabsContent>\n );\n })}\n </Tabs>\n );\n};\n\n// ── Batch A1 — Layout SDUI wrappers ─────────────────────────────────────────\n\nconst SDUIStack: React.FC<{\n direction?: \"vertical\" | \"horizontal\";\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n wrap?: boolean;\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n direction = \"vertical\",\n spacing = \"md\",\n align = \"start\",\n justify = \"start\",\n wrap = false,\n dot: dotProp,\n ...rest\n}) => (\n <Stack\n direction={direction}\n spacing={spacing}\n align={align}\n justify={justify}\n wrap={wrap}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </Stack>\n);\n\nconst SDUIPanel: React.FC<{\n style?:\n | \"default\"\n | \"solid\"\n | \"glass\"\n | \"outline\"\n | \"elevated\"\n | \"neon\"\n | \"holographic\"\n | \"cyberpunk\"\n | \"minimal\"\n | \"luxury\";\n effect?: \"none\" | \"glow\" | \"shadow\" | \"gradient\" | \"animated\";\n padding?:\n | \"none\"\n | \"small\"\n | \"sm\"\n | \"medium\"\n | \"md\"\n | \"large\"\n | \"lg\"\n | \"xl\"\n | \"custom\";\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\" | \"custom\";\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n style: panelStyle = \"default\",\n effect = \"none\",\n padding = \"md\",\n rounded = \"lg\",\n dot: dotProp,\n ...rest\n}) => (\n <Panel\n style={panelStyle}\n effect={effect}\n padding={padding}\n rounded={rounded}\n dot={dotProp}\n {...(rest as Omit<React.HTMLAttributes<HTMLDivElement>, \"style\">)}\n >\n {children}\n </Panel>\n);\n\nconst SDUISectionHeader: React.FC<{\n title?: string;\n description?: string;\n dot?: string;\n [key: string]: unknown;\n}> = ({ title = \"Section\", description, dot: dotProp, ...rest }) => (\n <SectionHeader\n title={title}\n description={description}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n />\n);\n\nconst SDUIComponentLayout: React.FC<{\n title?: string;\n description?: string;\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n title = \"Component\",\n description = \"\",\n dot: dotProp,\n ...rest\n}) => (\n <ComponentLayout\n title={title}\n description={description}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </ComponentLayout>\n);\n\nconst SDUIPressable: React.FC<{\n dot?: string;\n disabled?: boolean;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({ children, dot: dotProp, disabled, ...rest }) => (\n <Pressable\n dot={dotProp}\n disabled={disabled}\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {children}\n </Pressable>\n);\n\n// ── Batch A2 — Navigation SDUI wrappers ─────────────────────────────────────\n\nconst SDUIBreadcrumb: React.FC<{\n items?: Array<{ label: string; href?: string }>;\n showHomeIcon?: boolean;\n variant?: \"default\" | \"subtle\" | \"transparent\" | \"glass\";\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n items,\n showHomeIcon,\n variant = \"default\",\n dot: dotProp,\n children,\n ...rest\n}) => (\n <Breadcrumb\n items={items}\n showHomeIcon={showHomeIcon}\n variant={variant}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </Breadcrumb>\n);\n\nconst SDUIPagination: React.FC<{\n totalPages?: number;\n variant?: \"default\" | \"outlined\" | \"minimal\";\n size?: \"sm\" | \"md\" | \"lg\";\n shape?: \"square\" | \"circle\";\n dot?: string;\n [key: string]: unknown;\n}> = ({\n totalPages = 10,\n variant = \"default\",\n size = \"md\",\n shape = \"square\",\n dot: dotProp,\n ...rest\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n return (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setCurrentPage}\n variant={variant}\n size={size}\n shape={shape}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n />\n );\n};\n\nconst SDUINavigation: React.FC<{\n defaultValue?: string;\n variant?: \"pills\" | \"underline\" | \"cards\";\n scale?: \"small\" | \"medium\" | \"large\";\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n defaultValue,\n variant = \"pills\",\n scale = \"medium\",\n dot: dotProp,\n ...rest\n}) => (\n <Navigation\n defaultValue={defaultValue}\n variant={variant}\n scale={scale}\n dot={dotProp}\n {...(rest as Omit<React.HTMLAttributes<HTMLDivElement>, \"defaultValue\">)}\n >\n {children}\n </Navigation>\n);\n\nconst SDUIPageNavigation: React.FC<{\n prevPage?: { title: string; href: string };\n nextPage?: { title: string; href: string };\n showOnMobile?: boolean;\n dot?: string;\n [key: string]: unknown;\n}> = ({ prevPage, nextPage, showOnMobile = true, dot: dotProp, ...rest }) => (\n <PageNavigation\n prevPage={prevPage}\n nextPage={nextPage}\n showOnMobile={showOnMobile}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n />\n);\n\nconst SDUIDotNav: React.FC<{\n items?: DotNavItem[];\n position?: \"left\" | \"right\";\n dot?: string;\n [key: string]: unknown;\n}> = ({ items = [], position = \"right\", dot: dotProp, ...rest }) => (\n <DotNav\n items={items}\n position={position}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n />\n);\n\n// ── Batch A3 — Display SDUI wrappers ────────────────────────────────────────\n\nconst SDUIFeatureCard: React.FC<{\n title?: string;\n description?: string;\n icon?: string;\n variant?: \"default\" | \"gradient\" | \"glass\" | \"neon\";\n size?: \"sm\" | \"md\" | \"lg\";\n hover?: \"scale\" | \"glow\" | \"slide\" | \"none\";\n gradient?: \"blue\" | \"purple\" | \"green\" | \"orange\" | \"pink\" | \"custom\";\n dot?: string;\n [key: string]: unknown;\n}> = ({\n title = \"Feature\",\n description = \"\",\n icon,\n variant = \"default\",\n size = \"md\",\n hover = \"scale\",\n gradient = \"blue\",\n dot: dotProp,\n ...rest\n}) => (\n <FeatureCard\n title={title}\n description={description}\n icon={icon as Parameters<typeof FeatureCard>[0][\"icon\"]}\n variant={variant}\n size={size}\n hover={hover}\n gradient={gradient}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n />\n);\n\nconst SDUIInfoCard: React.FC<{\n title?: string;\n icon?: string;\n tone?: \"blue\" | \"purple\" | \"green\" | \"orange\";\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n title = \"Info\",\n icon = \"info\",\n tone = \"blue\",\n dot: dotProp,\n ...rest\n}) => (\n <InfoCard\n title={title}\n icon={icon as Parameters<typeof InfoCard>[0][\"icon\"]}\n tone={tone}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </InfoCard>\n);\n\nconst SDUIStatsPanel: React.FC<{\n title?: string;\n items?: StatsPanelItem[];\n columns?: 1 | 2 | 3 | 4;\n loading?: boolean;\n dot?: string;\n [key: string]: unknown;\n}> = ({\n title,\n items = [],\n columns = 4,\n loading = false,\n dot: dotProp,\n ...rest\n}) => (\n <StatsPanel\n title={title}\n items={items}\n columns={columns}\n loading={loading}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n />\n);\n\nconst SDUILanguageToggle: React.FC<{\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"button\" | \"icon\" | \"dropdown\";\n showLabel?: boolean;\n currentLanguage?: string;\n dot?: string;\n [key: string]: unknown;\n}> = ({\n size = \"md\",\n variant = \"button\",\n showLabel = false,\n currentLanguage = \"ko\",\n dot: dotProp,\n ...rest\n}) => {\n const [lang, setLang] = useState(currentLanguage);\n return (\n <LanguageToggle\n size={size}\n variant={variant}\n showLabel={showLabel}\n currentLanguage={lang}\n onLanguageChange={setLang}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n />\n );\n};\n\nconst SDUIThemeToggle: React.FC<{\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"button\" | \"icon\" | \"switch\";\n showLabel?: boolean;\n dot?: string;\n [key: string]: unknown;\n}> = ({\n size = \"md\",\n variant = \"button\",\n showLabel = false,\n dot: dotProp,\n ...rest\n}) => (\n <ThemeToggle\n size={size}\n variant={variant}\n showLabel={showLabel}\n dot={dotProp}\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n />\n);\n\n// ── Batch A4 — Overlay SDUI wrappers ────────────────────────────────────────\n\nconst SDUIModal: React.FC<{\n title?: string;\n description?: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n triggerLabel?: string;\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n title,\n description,\n size = \"md\",\n triggerLabel = \"Open Modal\",\n dot: dotProp,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { style: restStyle, ...restWithoutStyle } =\n rest as React.HTMLAttributes<HTMLDivElement>;\n return (\n <div {...restWithoutStyle} style={{ display: \"contents\", ...restStyle }}>\n <button\n onClick={() => setIsOpen(true)}\n style={mergeStyles(\n resolveDot(\n \"inline-flex items-center justify-center px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm font-medium cursor-pointer border-none\",\n ),\n {},\n )}\n >\n {triggerLabel}\n </button>\n <Modal\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title={title}\n description={description}\n size={size}\n dot={dotProp}\n >\n {children}\n </Modal>\n </div>\n );\n};\n\nconst SDUITooltip: React.FC<{\n content?: string;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n variant?: \"default\" | \"light\" | \"dark\";\n delay?: number;\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n content = \"Tooltip\",\n position = \"top\",\n variant = \"default\",\n delay = 300,\n dot: dotProp,\n ...rest\n}) => (\n <Tooltip\n content={content}\n position={position}\n variant={variant}\n delay={delay}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </Tooltip>\n);\n\nconst SDUIPopover: React.FC<{\n triggerLabel?: string;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n triggerLabel = \"Open\",\n position = \"bottom\",\n align = \"center\",\n dot: dotProp,\n ...rest\n}) => (\n <Popover\n trigger={\n <button\n style={mergeStyles(\n resolveDot(\n \"inline-flex items-center justify-center px-3 py-2 rounded-md border border-border bg-background text-sm cursor-pointer\",\n ),\n {},\n )}\n >\n {triggerLabel}\n </button>\n }\n position={position}\n align={align}\n dot={dotProp}\n {...(rest as React.HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </Popover>\n);\n\nconst SDUIDrawer: React.FC<{\n side?: \"left\" | \"right\" | \"top\" | \"bottom\";\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n triggerLabel?: string;\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n side = \"right\",\n size = \"md\",\n triggerLabel = \"Open Drawer\",\n dot: dotProp,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { style: restStyle, ...restWithoutStyle } =\n rest as React.HTMLAttributes<HTMLDivElement>;\n return (\n <div {...restWithoutStyle} style={{ display: \"contents\", ...restStyle }}>\n <button\n onClick={() => setIsOpen(true)}\n style={mergeStyles(\n resolveDot(\n \"inline-flex items-center justify-center px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm font-medium cursor-pointer border-none\",\n ),\n {},\n )}\n >\n {triggerLabel}\n </button>\n <Drawer\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n side={side}\n size={size}\n dot={dotProp}\n >\n {children}\n </Drawer>\n </div>\n );\n};\n\nconst SDUIBottomSheet: React.FC<{\n height?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n triggerLabel?: string;\n showDragHandle?: boolean;\n dot?: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n}> = ({\n children,\n height = \"md\",\n triggerLabel = \"Open Sheet\",\n showDragHandle = true,\n dot: dotProp,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { style: restStyle, ...restWithoutStyle } =\n rest as React.HTMLAttributes<HTMLDivElement>;\n return (\n <div {...restWithoutStyle} style={{ display: \"contents\", ...restStyle }}>\n <button\n onClick={() => setIsOpen(true)}\n style={mergeStyles(\n resolveDot(\n \"inline-flex items-center justify-center px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm font-medium cursor-pointer border-none\",\n ),\n {},\n )}\n >\n {triggerLabel}\n </button>\n <BottomSheet\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n height={height}\n showDragHandle={showDragHandle}\n dot={dotProp}\n >\n {children}\n </BottomSheet>\n </div>\n );\n};\n\n/**\n * 기본 컴포넌트 레지스트리\n */\nexport const defaultRegistry: SDUIComponentRegistry = {\n // 레이아웃\n Box,\n Spacer,\n Flex,\n Grid,\n Section,\n Container,\n Divider,\n\n // 타이포그래피\n Text,\n H1,\n H2,\n H3,\n H4,\n Link,\n\n // 미디어\n Image,\n Icon: SDUIIcon,\n\n // 기본 UI\n Button,\n Badge,\n Avatar,\n AvatarImage,\n AvatarFallback,\n Input: SDUIInput,\n Textarea: SDUITextarea,\n Label,\n Checkbox: SDUICheckbox,\n Switch: SDUISwitch,\n Skeleton,\n Progress,\n\n // 카드\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n\n // 피드백\n Alert,\n\n // Advanced (Pro)\n Header,\n HeroSection,\n ScrollProgress,\n\n // Interactive (Pro)\n Accordion: SDUIAccordion,\n Tabs: SDUITabs,\n\n // Batch A1 — Layout\n Stack: SDUIStack,\n Panel: SDUIPanel,\n SectionHeader: SDUISectionHeader,\n ComponentLayout: SDUIComponentLayout,\n Pressable: SDUIPressable,\n\n // Batch A2 — Navigation\n Breadcrumb: SDUIBreadcrumb,\n Pagination: SDUIPagination,\n Navigation: SDUINavigation,\n PageNavigation: SDUIPageNavigation,\n DotNav: SDUIDotNav,\n\n // Batch A3 — Display\n FeatureCard: SDUIFeatureCard,\n InfoCard: SDUIInfoCard,\n StatsPanel: SDUIStatsPanel,\n LanguageToggle: SDUILanguageToggle,\n ThemeToggle: SDUIThemeToggle,\n\n // Batch A4 — Overlay\n Modal: SDUIModal,\n Tooltip: SDUITooltip,\n Popover: SDUIPopover,\n Drawer: SDUIDrawer,\n BottomSheet: SDUIBottomSheet,\n};\n\n/**\n * 레지스트리 확장 헬퍼\n */\nexport function extendRegistry(\n customComponents: SDUIComponentRegistry,\n): SDUIComponentRegistry {\n return {\n ...defaultRegistry,\n ...customComponents,\n };\n}\n\n/**\n * 컴포넌트 존재 여부 확인\n */\nexport function hasComponent(\n registry: SDUIComponentRegistry,\n type: string,\n): boolean {\n return Object.prototype.hasOwnProperty.call(registry, type);\n}\n","\"use client\";\n\n/**\n * SDUI Renderer\n *\n * JSON 스키마를 받아서 실제 React 컴포넌트로 렌더링\n */\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n} from \"react\";\nimport type {\n SDUINode,\n SDUIPageSchema,\n SDUIRendererProps,\n SDUIContext,\n SDUIAction,\n SDUIComponentRegistry,\n SDUIConstraints,\n} from \"./types\";\nimport { defaultRegistry } from \"./registry\";\nimport { resolveDot } from \"../hooks/useDotMap\";\nimport {\n evaluateCondition,\n resolveProps,\n resolveTextBindings,\n resolveDotString,\n iterateEach,\n setByPath,\n} from \"./core\";\n\n// SDUI Context\nconst SDUIContextInternal = createContext<SDUIContext | null>(null);\n\n/**\n * SDUI Context Hook\n */\nexport function useSDUI(): SDUIContext {\n const context = useContext(SDUIContextInternal);\n if (!context) {\n throw new Error(\"useSDUI must be used within SDUIRenderer\");\n }\n return context;\n}\n\n/**\n * Scoped data provider for each iteration\n */\nfunction ScopedDataProvider({\n data,\n children,\n}: {\n data: Record<string, unknown>;\n children: React.ReactNode;\n}) {\n const parentCtx = useSDUI();\n const scopedCtx = useMemo(() => ({ ...parentCtx, data }), [parentCtx, data]);\n return (\n <SDUIContextInternal.Provider value={scopedCtx}>\n {children}\n </SDUIContextInternal.Provider>\n );\n}\n\n/**\n * constraints → HTML 속성 매핑\n */\nfunction resolveConstraints(constraints: SDUIConstraints): {\n attrs: Record<string, unknown>;\n style: React.CSSProperties;\n} {\n const attrs: Record<string, unknown> = {};\n const style: React.CSSProperties = {};\n\n if (constraints.role) attrs.role = constraints.role;\n if (constraints.label) attrs[\"aria-label\"] = constraints.label;\n if (constraints.level !== undefined) attrs[\"aria-level\"] = constraints.level;\n if (constraints.hidden !== undefined)\n attrs[\"aria-hidden\"] = constraints.hidden;\n\n if (constraints.minTapTarget !== undefined) {\n style.minWidth = constraints.minTapTarget;\n style.minHeight = constraints.minTapTarget;\n }\n if (constraints.truncate !== undefined) {\n style.overflow = \"hidden\";\n style.display = \"-webkit-box\";\n style.WebkitLineClamp = constraints.truncate;\n style.WebkitBoxOrient = \"vertical\";\n }\n\n return { attrs, style };\n}\n\n/**\n * 단일 노드 렌더러\n */\ninterface NodeRendererProps {\n node: SDUINode;\n registry: SDUIComponentRegistry;\n}\n\nfunction NodeRenderer({ node, registry }: NodeRendererProps) {\n const { data, handleAction } = useSDUI();\n\n // 조건부 렌더링 체크\n if (node.when && !evaluateCondition(node.when, data)) {\n return null;\n }\n\n // each 처리: 배열 반복 렌더링\n if (node.each) {\n const iterations = iterateEach(node.each, data);\n if (iterations.length === 0) return null;\n\n return (\n <>\n {iterations.map(({ scopedData, key }) => (\n <ScopedDataProvider key={key} data={scopedData}>\n <NodeRendererInner node={node} registry={registry} />\n </ScopedDataProvider>\n ))}\n </>\n );\n }\n\n return <NodeRendererInner node={node} registry={registry} />;\n}\n\n/**\n * 내부 노드 렌더러 (each 처리 이후)\n */\nfunction NodeRendererInner({ node, registry }: NodeRendererProps) {\n const { data, handleAction } = useSDUI();\n\n // 컴포넌트 찾기\n const Component = registry[node.type];\n if (!Component) {\n console.warn(`[SDUI] Unknown component type: ${node.type}`);\n return (\n <div\n style={{\n ...resolveDot(\"p-4\"),\n border: \"1px solid #ef4444\",\n ...resolveDot(\"rounded\"),\n fontSize: 14,\n color: \"#ef4444\",\n backgroundColor: \"rgba(239,68,68,0.1)\",\n }}\n >\n Unknown component: {node.type}\n </div>\n );\n }\n\n // Props 처리\n const resolvedProps = node.props ? resolveProps(node.props, data) : {};\n\n // dot 처리: 바인딩 resolve 후 props에 주입\n if (node.dot) {\n resolvedProps.dot = resolveDotString(node.dot, data);\n }\n\n // constraints → aria-* + style 매핑\n if (node.constraints) {\n const { attrs, style: constraintStyle } = resolveConstraints(\n node.constraints,\n );\n Object.assign(resolvedProps, attrs);\n if (Object.keys(constraintStyle).length > 0) {\n resolvedProps.style = {\n ...((resolvedProps.style as React.CSSProperties) || {}),\n ...constraintStyle,\n };\n }\n }\n\n // 이벤트 핸들러 처리\n const eventProps: Record<string, unknown> = {};\n if (node.on) {\n if (node.on.click) {\n eventProps.onClick = () => handleAction(node.on!.click!);\n }\n if (node.on.submit) {\n eventProps.onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n handleAction(node.on!.submit!);\n };\n }\n }\n\n // Children 처리\n let children: React.ReactNode = null;\n if (node.children) {\n if (typeof node.children === \"string\") {\n children = resolveTextBindings(node.children, data);\n } else if (Array.isArray(node.children)) {\n children = node.children.map((child, index) => (\n <NodeRenderer\n key={child.key || `child-${index}`}\n node={child}\n registry={registry}\n />\n ));\n }\n }\n\n // void 엘리먼트는 children을 받지 않음\n const voidElements = [\n \"Divider\",\n \"Input\",\n \"Textarea\",\n \"Checkbox\",\n \"Switch\",\n \"Progress\",\n \"Skeleton\",\n \"Image\",\n \"ScrollProgress\",\n // Batch A2/A3 void elements\n \"PageNavigation\",\n \"DotNav\",\n \"StatsPanel\",\n \"LanguageToggle\",\n \"ThemeToggle\",\n \"SectionHeader\",\n \"Pagination\",\n ];\n const isVoidElement = voidElements.includes(node.type);\n\n if (isVoidElement || children === null) {\n return <Component {...resolvedProps} {...eventProps} />;\n }\n\n return (\n <Component {...resolvedProps} {...eventProps}>\n {children}\n </Component>\n );\n}\n\n/**\n * SDUI Renderer 메인 컴포넌트\n */\nexport function SDUIRenderer({\n schema,\n components,\n data: initialData = {},\n onAction,\n onNavigate,\n}: SDUIRendererProps) {\n // 페이지 스키마인지 노드인지 확인\n const isPageSchema = \"root\" in schema;\n const rootNode = isPageSchema\n ? (schema as SDUIPageSchema).root\n : (schema as SDUINode);\n const schemaData = isPageSchema ? (schema as SDUIPageSchema).data : {};\n\n // 데이터 상태\n const [data, setDataState] = useState<Record<string, unknown>>({\n ...schemaData,\n ...initialData,\n });\n\n // 레지스트리 병합\n const registry = useMemo(\n () => ({ ...defaultRegistry, ...components }),\n [components],\n );\n\n // 데이터 업데이트\n const setData = useCallback((path: string, value: unknown) => {\n setDataState((prev) => setByPath(prev, path, value));\n }, []);\n\n // 네비게이션\n const navigate = useCallback(\n (path: string) => {\n if (onNavigate) {\n onNavigate(path);\n } else if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n },\n [onNavigate],\n );\n\n // 액션 핸들러\n const handleAction = useCallback(\n (action: SDUIAction) => {\n switch (action.type) {\n case \"navigate\":\n navigate(action.payload?.path as string);\n break;\n case \"setState\":\n if (action.payload?.path && action.payload?.value !== undefined) {\n setData(action.payload.path as string, action.payload.value);\n }\n break;\n case \"api\":\n // API 호출은 외부에서 처리\n onAction?.(action);\n break;\n case \"custom\":\n onAction?.(action);\n break;\n default:\n onAction?.(action);\n }\n },\n [navigate, setData, onAction],\n );\n\n // Context 값\n const contextValue: SDUIContext = useMemo(\n () => ({\n data,\n setData,\n handleAction,\n navigate,\n }),\n [data, setData, handleAction, navigate],\n );\n\n return (\n <SDUIContextInternal.Provider value={contextValue}>\n <NodeRenderer node={rootNode} registry={registry} />\n </SDUIContextInternal.Provider>\n );\n}\n\n/**\n * JSON 문자열에서 렌더링 (편의용)\n */\nexport function SDUIFromJSON({\n json,\n ...props\n}: Omit<SDUIRendererProps, \"schema\"> & { json: string }) {\n try {\n const schema = JSON.parse(json);\n return <SDUIRenderer schema={schema} {...props} />;\n } catch (error) {\n return (\n <div\n style={{\n ...resolveDot(\"p-4\"),\n border: \"1px solid #ef4444\",\n ...resolveDot(\"rounded\"),\n backgroundColor: \"rgba(239,68,68,0.1)\",\n }}\n >\n <p style={{ fontWeight: 600, color: \"#ef4444\" }}>SDUI Parse Error</p>\n <pre\n style={{\n fontSize: 14,\n ...resolveDot(\"mt-2\"),\n color: \"rgba(239,68,68,0.8)\",\n }}\n >\n {(error as Error).message}\n </pre>\n </div>\n );\n }\n}\n"]}
|
package/dist/theme.d.mts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
type Theme = "light" | "dark" | "system";
|
|
4
|
+
/**
|
|
5
|
+
* ThemeProvider 컴포넌트의 props / ThemeProvider component props
|
|
6
|
+
* @typedef {Object} ThemeProviderProps
|
|
7
|
+
* @property {React.ReactNode} children - 자식 컴포넌트 / Child components
|
|
8
|
+
* @property {"light" | "dark" | "system"} [defaultTheme="light"] - 기본 테마 / Default theme
|
|
9
|
+
* @property {string} [storageKey="hua-ui-theme"] - localStorage 키 / localStorage key
|
|
10
|
+
* @property {boolean} [enableSystem=true] - 시스템 테마 감지 활성화 / Enable system theme detection
|
|
11
|
+
* @property {boolean} [enableTransition=true] - 테마 전환 애니메이션 활성화 / Enable theme transition animation
|
|
12
|
+
*/
|
|
13
|
+
interface ThemeProviderProps {
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
defaultTheme?: Theme;
|
|
16
|
+
storageKey?: string;
|
|
17
|
+
enableSystem?: boolean;
|
|
18
|
+
enableTransition?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* ThemeProvider의 상태 타입 / ThemeProvider state type
|
|
22
|
+
* @typedef {Object} ThemeProviderState
|
|
23
|
+
* @property {"light" | "dark" | "system"} theme - 현재 테마 / Current theme
|
|
24
|
+
* @property {(theme: "light" | "dark" | "system") => void} setTheme - 테마 설정 함수 / Theme setter function
|
|
25
|
+
* @property {"light" | "dark"} resolvedTheme - 실제 적용된 테마 (system일 경우 시스템 테마) / Actually applied theme (system theme when system is selected)
|
|
26
|
+
* @property {() => void} toggleTheme - 테마 토글 함수 / Theme toggle function
|
|
27
|
+
*/
|
|
28
|
+
interface ThemeProviderState {
|
|
29
|
+
theme: Theme;
|
|
30
|
+
setTheme: (theme: Theme) => void;
|
|
31
|
+
resolvedTheme: "light" | "dark";
|
|
32
|
+
toggleTheme: () => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* ThemeProvider 컴포넌트 / ThemeProvider component
|
|
36
|
+
*
|
|
37
|
+
* 테마 관리를 위한 Context Provider 컴포넌트입니다.
|
|
38
|
+
* localStorage에 테마를 저장하고, 시스템 테마를 감지할 수 있습니다.
|
|
39
|
+
* useTheme 훅을 통해 테마 상태에 접근할 수 있습니다.
|
|
40
|
+
*
|
|
41
|
+
* Context Provider component for theme management.
|
|
42
|
+
* Saves theme to localStorage and can detect system theme.
|
|
43
|
+
* Access theme state through useTheme hook.
|
|
44
|
+
*
|
|
45
|
+
* @component
|
|
46
|
+
* @example
|
|
47
|
+
* // 기본 사용 / Basic usage
|
|
48
|
+
* <ThemeProvider>
|
|
49
|
+
* <App />
|
|
50
|
+
* </ThemeProvider>
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // 커스텀 설정 / Custom settings
|
|
54
|
+
* <ThemeProvider
|
|
55
|
+
* defaultTheme="dark"
|
|
56
|
+
* storageKey="my-app-theme"
|
|
57
|
+
* enableSystem={true}
|
|
58
|
+
* enableTransition={true}
|
|
59
|
+
* >
|
|
60
|
+
* <App />
|
|
61
|
+
* </ThemeProvider>
|
|
62
|
+
*
|
|
63
|
+
* @param {ThemeProviderProps} props - ThemeProvider 컴포넌트의 props / ThemeProvider component props
|
|
64
|
+
* @returns {JSX.Element} ThemeProvider 컴포넌트 / ThemeProvider component
|
|
65
|
+
*/
|
|
66
|
+
declare function ThemeProvider({ children, defaultTheme, // system에서 light로 변경
|
|
67
|
+
storageKey, enableSystem, enableTransition, ...props }: ThemeProviderProps): React.ReactElement;
|
|
68
|
+
/**
|
|
69
|
+
* useTheme 훅 / useTheme hook
|
|
70
|
+
*
|
|
71
|
+
* ThemeProvider의 테마 상태에 접근하는 훅입니다.
|
|
72
|
+
* ThemeProvider 내부에서만 사용할 수 있습니다.
|
|
73
|
+
*
|
|
74
|
+
* Hook to access ThemeProvider's theme state.
|
|
75
|
+
* Can only be used inside ThemeProvider.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* const { theme, setTheme, resolvedTheme, toggleTheme } = useTheme()
|
|
79
|
+
*
|
|
80
|
+
* @returns {ThemeProviderState} 테마 상태와 함수들 / Theme state and functions
|
|
81
|
+
* @throws {Error} ThemeProvider 외부에서 사용 시 에러 발생 / Error when used outside ThemeProvider
|
|
82
|
+
*/
|
|
83
|
+
declare const useTheme: () => ThemeProviderState;
|
|
84
|
+
|
|
85
|
+
export { ThemeProvider, type ThemeProviderProps, type ThemeProviderState, useTheme };
|
package/dist/theme.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hua-labs/ui/theme — Lightweight theme subpath
|
|
3
|
+
*
|
|
4
|
+
* ThemeProvider와 useTheme만 포함합니다.
|
|
5
|
+
* Phosphor Icons 등 무거운 의존성 없이 테마 기능만 필요한 경우 사용하세요.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { ThemeProvider, useTheme } from '@hua-labs/ui/theme'
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export { ThemeProvider, useTheme } from './components/ThemeProvider';
|
|
13
|
+
export type { ThemeProviderProps, ThemeProviderState } from './components/ThemeProvider';
|
|
14
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACpE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
|
package/dist/theme.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"theme.mjs"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hua-labs/ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "HUA Labs - Modern React UI Component Library - Beautiful, accessible, and customizable components for React applications",
|
|
5
|
-
"main": "./dist/index.
|
|
5
|
+
"main": "./dist/index.mjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"react-native": {
|
|
11
|
+
"types": "./dist/native.d.ts",
|
|
12
|
+
"import": "./dist/native.mjs",
|
|
13
|
+
"default": "./dist/native.mjs"
|
|
14
|
+
},
|
|
10
15
|
"types": "./dist/index.d.ts",
|
|
11
16
|
"import": "./dist/index.mjs",
|
|
12
17
|
"default": "./dist/index.mjs"
|
|
13
18
|
},
|
|
19
|
+
"./native": {
|
|
20
|
+
"types": "./dist/native.d.ts",
|
|
21
|
+
"import": "./dist/native.mjs",
|
|
22
|
+
"default": "./dist/native.mjs"
|
|
23
|
+
},
|
|
24
|
+
"./theme": {
|
|
25
|
+
"types": "./dist/theme.d.ts",
|
|
26
|
+
"import": "./dist/theme.mjs",
|
|
27
|
+
"default": "./dist/theme.mjs"
|
|
28
|
+
},
|
|
14
29
|
"./advanced": {
|
|
15
30
|
"types": "./dist/advanced.d.ts",
|
|
16
31
|
"import": "./dist/advanced.mjs",
|
|
@@ -61,6 +76,11 @@
|
|
|
61
76
|
"import": "./dist/interactive.mjs",
|
|
62
77
|
"default": "./dist/interactive.mjs"
|
|
63
78
|
},
|
|
79
|
+
"./interactive/kanban": {
|
|
80
|
+
"types": "./dist/interactive/kanban.d.ts",
|
|
81
|
+
"import": "./dist/interactive-kanban.mjs",
|
|
82
|
+
"default": "./dist/interactive-kanban.mjs"
|
|
83
|
+
},
|
|
64
84
|
"./sdui": {
|
|
65
85
|
"types": "./dist/sdui.d.ts",
|
|
66
86
|
"import": "./dist/sdui.mjs",
|
|
@@ -77,6 +97,7 @@
|
|
|
77
97
|
"./styles/recommended-theme.css": "./src/styles/recommended-theme.css",
|
|
78
98
|
"./styles/utilities.css": "./src/styles/utilities.css",
|
|
79
99
|
"./styles/landing.css": "./src/styles/landing.css",
|
|
100
|
+
"./styles/prose.css": "./src/styles/prose.css",
|
|
80
101
|
"./icons": {
|
|
81
102
|
"types": "./src/components/icons/index.ts",
|
|
82
103
|
"import": "./src/components/icons/index.ts",
|
|
@@ -105,42 +126,44 @@
|
|
|
105
126
|
"src/components/icons-bold"
|
|
106
127
|
],
|
|
107
128
|
"dependencies": {
|
|
129
|
+
"@floating-ui/react": "^0.27.18",
|
|
108
130
|
"@phosphor-icons/react": "^2.1.10",
|
|
109
|
-
"
|
|
110
|
-
"clsx": "^2.0.0",
|
|
131
|
+
"clsx": "^2.1.1",
|
|
111
132
|
"sugar-high": "^0.9.5",
|
|
112
|
-
"tailwind-merge": "^3.
|
|
133
|
+
"tailwind-merge": "^3.5.0",
|
|
134
|
+
"@hua-labs/dot": "0.1.0"
|
|
113
135
|
},
|
|
114
136
|
"devDependencies": {
|
|
115
|
-
"@eslint/js": "^
|
|
137
|
+
"@eslint/js": "^10.0.1",
|
|
116
138
|
"@testing-library/jest-dom": "^6.9.1",
|
|
117
139
|
"@testing-library/react": "^16.3.2",
|
|
118
140
|
"@testing-library/user-event": "^14.6.1",
|
|
119
|
-
"@types/node": "^25.
|
|
141
|
+
"@types/node": "^25.3.5",
|
|
120
142
|
"@types/react": "^19.2.14",
|
|
121
143
|
"@types/react-dom": "^19.2.3",
|
|
122
|
-
"@vitejs/plugin-react": "^
|
|
123
|
-
"eslint": "^10.0.
|
|
144
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
145
|
+
"eslint": "^10.0.3",
|
|
124
146
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
125
|
-
"globals": "^17.
|
|
126
|
-
"jsdom": "^
|
|
127
|
-
"lucide-react": "^0.
|
|
147
|
+
"globals": "^17.4.0",
|
|
148
|
+
"jsdom": "^29.0.0",
|
|
149
|
+
"lucide-react": "^0.575.0",
|
|
128
150
|
"react": "^19.2.4",
|
|
129
151
|
"react-dom": "^19.2.4",
|
|
130
|
-
"rollup-plugin-visualizer": "^
|
|
152
|
+
"rollup-plugin-visualizer": "^7.0.1",
|
|
131
153
|
"tsup": "^8.5.1",
|
|
132
154
|
"tsx": "^4.21.0",
|
|
133
155
|
"typescript": "^5.9.3",
|
|
134
|
-
"typescript-eslint": "^8.56.
|
|
156
|
+
"typescript-eslint": "^8.56.1",
|
|
135
157
|
"vitest": "^4.0.18"
|
|
136
158
|
},
|
|
137
159
|
"peerDependencies": {
|
|
138
160
|
"@dnd-kit/core": "^6.3.1",
|
|
139
161
|
"@dnd-kit/sortable": "^10.0.0",
|
|
140
162
|
"@dnd-kit/utilities": "^3.2.2",
|
|
141
|
-
"@hua-labs/motion-core": "
|
|
163
|
+
"@hua-labs/motion-core": ">=2.4.0",
|
|
142
164
|
"react": ">=19.0.0",
|
|
143
|
-
"react-dom": ">=19.0.0"
|
|
165
|
+
"react-dom": ">=19.0.0",
|
|
166
|
+
"react-native": ">=0.73.0"
|
|
144
167
|
},
|
|
145
168
|
"peerDependenciesMeta": {
|
|
146
169
|
"@dnd-kit/core": {
|
|
@@ -154,6 +177,12 @@
|
|
|
154
177
|
},
|
|
155
178
|
"@hua-labs/motion-core": {
|
|
156
179
|
"optional": true
|
|
180
|
+
},
|
|
181
|
+
"react-dom": {
|
|
182
|
+
"optional": true
|
|
183
|
+
},
|
|
184
|
+
"react-native": {
|
|
185
|
+
"optional": true
|
|
157
186
|
}
|
|
158
187
|
},
|
|
159
188
|
"keywords": [
|
|
@@ -174,18 +203,17 @@
|
|
|
174
203
|
"license": "MIT",
|
|
175
204
|
"repository": {
|
|
176
205
|
"type": "git",
|
|
177
|
-
"url": "https://github.com/HUA-Labs/
|
|
206
|
+
"url": "https://github.com/HUA-Labs/hua-packages.git"
|
|
178
207
|
},
|
|
179
208
|
"bugs": {
|
|
180
|
-
"url": "https://github.com/HUA-Labs/
|
|
209
|
+
"url": "https://github.com/HUA-Labs/hua-packages/issues"
|
|
181
210
|
},
|
|
182
|
-
"homepage": "https://github.com/HUA-Labs/
|
|
211
|
+
"homepage": "https://github.com/HUA-Labs/hua-packages#readme",
|
|
183
212
|
"sideEffects": [
|
|
184
213
|
"./src/styles/*.css",
|
|
214
|
+
"./src/styles/prose.css",
|
|
185
215
|
"./dist/iconsax.mjs",
|
|
186
|
-
"./dist/iconsax.
|
|
187
|
-
"./dist/iconsax-extended.mjs",
|
|
188
|
-
"./dist/iconsax-extended.js"
|
|
216
|
+
"./dist/iconsax-extended.mjs"
|
|
189
217
|
],
|
|
190
218
|
"engines": {
|
|
191
219
|
"node": ">=20.0.0"
|