@hua-labs/ui 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +91 -43
- package/dist/{ComponentLayout-BhM4VSoq.d.mts → ComponentLayout-Clf6C2jV.d.mts} +37 -3
- package/dist/DashboardSidebar-ZulecqKs.d.mts +54 -0
- package/dist/DashboardToolbar-BRZayZNz.d.mts +122 -0
- package/dist/EmptyState-SQ3Z6Vf2.d.mts +64 -0
- package/dist/{Modal-CrXmb3Ll.d.mts → Modal-DKKtBtbh.d.mts} +12 -6
- package/dist/{Section-BWzyshgX.d.mts → Section-DKdIG1sg.d.mts} +11 -12
- package/dist/SectionHeader-DHwQ_xh8.d.mts +1653 -0
- package/dist/{Switch-Dzm5TLR3.d.mts → Switch-D0l7SJrz.d.mts} +31 -15
- package/dist/Tooltip-Cv7nYhPW.d.mts +304 -0
- package/dist/advanced/Logo.d.ts +8 -4
- package/dist/advanced/Logo.d.ts.map +1 -1
- package/dist/advanced/dashboard.d.ts +28 -6
- package/dist/advanced/dashboard.d.ts.map +1 -1
- package/dist/advanced-dashboard.d.mts +9 -2278
- package/dist/advanced-dashboard.mjs +1 -33
- package/dist/advanced-dashboard.mjs.map +1 -1
- package/dist/advanced-emotion.d.mts +13 -5
- package/dist/advanced-emotion.mjs +1 -1
- package/dist/advanced-motion.d.mts +136 -56
- package/dist/advanced-motion.mjs +1 -1
- package/dist/advanced.d.mts +69 -36
- package/dist/advanced.mjs +14 -3
- package/dist/advanced.mjs.map +1 -1
- package/dist/chunk-32OZGTPV.mjs +41 -0
- package/dist/chunk-32OZGTPV.mjs.map +1 -0
- package/dist/chunk-6WBFZ2KV.mjs +3 -0
- package/dist/chunk-6WBFZ2KV.mjs.map +1 -0
- package/dist/chunk-7CGJQSJO.mjs +3 -0
- package/dist/chunk-7CGJQSJO.mjs.map +1 -0
- package/dist/chunk-7T3IUG3G.mjs +3 -0
- package/dist/chunk-7T3IUG3G.mjs.map +1 -0
- package/dist/chunk-AJOGTUWS.mjs +3 -0
- package/dist/chunk-AJOGTUWS.mjs.map +1 -0
- package/dist/chunk-AQTSQYH2.mjs +3 -0
- package/dist/chunk-AQTSQYH2.mjs.map +1 -0
- package/dist/chunk-B2MRZJQA.mjs +3 -0
- package/dist/chunk-B2MRZJQA.mjs.map +1 -0
- package/dist/chunk-BOX4TONF.mjs +3 -0
- package/dist/chunk-BOX4TONF.mjs.map +1 -0
- package/dist/chunk-C2DOXNBK.mjs +3 -0
- package/dist/chunk-C2DOXNBK.mjs.map +1 -0
- package/dist/chunk-CQBMR7VU.mjs +3 -0
- package/dist/chunk-CQBMR7VU.mjs.map +1 -0
- package/dist/chunk-CYAAAEPJ.mjs +3 -0
- package/dist/chunk-CYAAAEPJ.mjs.map +1 -0
- package/dist/chunk-D7MTTTQY.mjs +8 -0
- package/dist/chunk-D7MTTTQY.mjs.map +1 -0
- package/dist/chunk-DABVKUJN.mjs +3 -0
- package/dist/chunk-DABVKUJN.mjs.map +1 -0
- package/dist/chunk-EK6BLFVQ.mjs +3 -0
- package/dist/chunk-EK6BLFVQ.mjs.map +1 -0
- package/dist/chunk-FVUAVGP5.mjs +3 -0
- package/dist/chunk-FVUAVGP5.mjs.map +1 -0
- package/dist/chunk-GAIUZVNC.mjs +3 -0
- package/dist/chunk-GAIUZVNC.mjs.map +1 -0
- package/dist/chunk-HLBIIF4I.mjs +3 -0
- package/dist/chunk-HLBIIF4I.mjs.map +1 -0
- package/dist/chunk-I6NCGF6E.mjs +3 -0
- package/dist/chunk-I6NCGF6E.mjs.map +1 -0
- package/dist/chunk-J46VEBVF.mjs +3 -0
- package/dist/chunk-J46VEBVF.mjs.map +1 -0
- package/dist/chunk-JNW3CLCA.mjs +3 -0
- package/dist/chunk-JNW3CLCA.mjs.map +1 -0
- package/dist/chunk-JY3QVUGW.mjs +3 -0
- package/dist/chunk-JY3QVUGW.mjs.map +1 -0
- package/dist/chunk-KHBZOGUU.mjs +3 -0
- package/dist/chunk-KHBZOGUU.mjs.map +1 -0
- package/dist/chunk-KPNNAQLI.mjs +3 -0
- package/dist/chunk-KPNNAQLI.mjs.map +1 -0
- package/dist/chunk-L2LGSILS.mjs +13 -0
- package/dist/chunk-L2LGSILS.mjs.map +1 -0
- package/dist/chunk-LPHUWTQ2.mjs +3 -0
- package/dist/chunk-LPHUWTQ2.mjs.map +1 -0
- package/dist/chunk-M4JE7TQL.mjs +3 -0
- package/dist/chunk-M4JE7TQL.mjs.map +1 -0
- package/dist/chunk-MEDKGNLV.mjs +3 -0
- package/dist/chunk-MEDKGNLV.mjs.map +1 -0
- package/dist/chunk-MR46CSMC.mjs +3 -0
- package/dist/chunk-MR46CSMC.mjs.map +1 -0
- package/dist/chunk-NSDWT2JM.mjs +3 -0
- package/dist/chunk-NSDWT2JM.mjs.map +1 -0
- package/dist/chunk-OBMOTQEU.mjs +3 -0
- package/dist/chunk-OBMOTQEU.mjs.map +1 -0
- package/dist/chunk-RICRFXFP.mjs +3 -0
- package/dist/chunk-RICRFXFP.mjs.map +1 -0
- package/dist/chunk-SOK7VBSM.mjs +13 -0
- package/dist/chunk-SOK7VBSM.mjs.map +1 -0
- package/dist/chunk-SPZ7SZH4.mjs +3 -0
- package/dist/chunk-SPZ7SZH4.mjs.map +1 -0
- package/dist/chunk-TB3DARQO.mjs +3 -0
- package/dist/chunk-TB3DARQO.mjs.map +1 -0
- package/dist/chunk-TND4HPKW.mjs +51 -0
- package/dist/chunk-TND4HPKW.mjs.map +1 -0
- package/dist/chunk-TSAXVD2H.mjs +35 -0
- package/dist/chunk-TSAXVD2H.mjs.map +1 -0
- package/dist/chunk-UR3TIWBS.mjs +3 -0
- package/dist/chunk-UR3TIWBS.mjs.map +1 -0
- package/dist/chunk-XU2XBAEW.mjs +3 -0
- package/dist/chunk-XU2XBAEW.mjs.map +1 -0
- package/dist/chunk-XXHDNZTG.mjs +3 -0
- package/dist/chunk-XXHDNZTG.mjs.map +1 -0
- package/dist/chunk-YW5DA7Q6.mjs +3 -0
- package/dist/chunk-YW5DA7Q6.mjs.map +1 -0
- package/dist/chunk-ZTHUGQZL.mjs +3 -0
- package/dist/chunk-ZTHUGQZL.mjs.map +1 -0
- package/dist/chunk-ZVCGC6EV.mjs +3 -0
- package/dist/chunk-ZVCGC6EV.mjs.map +1 -0
- package/dist/chunk-ZZ67E3M5.mjs +3 -0
- package/dist/chunk-ZZ67E3M5.mjs.map +1 -0
- package/dist/{common-YLvZxA_K.d.mts → common-Bej8Okcg.d.mts} +1 -1
- package/dist/components/Accordion.d.ts +14 -7
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Action.d.ts.map +1 -1
- package/dist/components/ActionToolbar.d.ts +10 -6
- package/dist/components/ActionToolbar.d.ts.map +1 -1
- package/dist/components/Alert.d.ts +16 -2
- package/dist/components/Alert.d.ts.map +1 -1
- package/dist/components/Autocomplete.d.ts +6 -4
- package/dist/components/Autocomplete.d.ts.map +1 -1
- package/dist/components/Avatar.d.ts +20 -7
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Badge.d.ts +27 -9
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Bookmark.d.ts +4 -2
- package/dist/components/Bookmark.d.ts.map +1 -1
- package/dist/components/BottomSheet.d.ts +13 -9
- package/dist/components/BottomSheet.d.ts.map +1 -1
- package/dist/components/Box.d.ts +9 -0
- package/dist/components/Box.d.ts.map +1 -0
- package/dist/components/Breadcrumb.d.ts +9 -4
- package/dist/components/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Button.d.ts +3 -29
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.variants.d.ts +54 -10
- package/dist/components/Button.variants.d.ts.map +1 -1
- package/dist/components/Card.d.ts +49 -14
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/ChatMessage.d.ts +3 -2
- package/dist/components/ChatMessage.d.ts.map +1 -1
- package/dist/components/Checkbox.d.ts +5 -2
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/CodeBlock.d.ts +8 -5
- package/dist/components/CodeBlock.d.ts.map +1 -1
- package/dist/components/ColorPicker.d.ts +4 -2
- package/dist/components/ColorPicker.d.ts.map +1 -1
- package/dist/components/Command.d.ts +28 -14
- package/dist/components/Command.d.ts.map +1 -1
- package/dist/components/ComponentLayout.d.ts +5 -2
- package/dist/components/ComponentLayout.d.ts.map +1 -1
- package/dist/components/ConfirmModal.d.ts +4 -0
- package/dist/components/ConfirmModal.d.ts.map +1 -1
- package/dist/components/Container.d.ts +18 -5
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/ContextMenu.d.ts +36 -36
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/DatePicker.d.ts +12 -5
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/Divider.d.ts +2 -1
- package/dist/components/Divider.d.ts.map +1 -1
- package/dist/components/Drawer.d.ts +17 -12
- package/dist/components/Drawer.d.ts.map +1 -1
- package/dist/components/Dropdown.d.ts +25 -7
- package/dist/components/Dropdown.d.ts.map +1 -1
- package/dist/components/EmotionAnalysis.d.ts +3 -1
- package/dist/components/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/EmotionButton.d.ts +3 -1
- package/dist/components/EmotionButton.d.ts.map +1 -1
- package/dist/components/EmotionMeter.d.ts +3 -1
- package/dist/components/EmotionMeter.d.ts.map +1 -1
- package/dist/components/EmotionSelector.d.ts +3 -1
- package/dist/components/EmotionSelector.d.ts.map +1 -1
- package/dist/components/FeatureCard.d.ts +9 -3
- package/dist/components/FeatureCard.d.ts.map +1 -1
- package/dist/components/Form.d.ts +20 -54
- package/dist/components/Form.d.ts.map +1 -1
- package/dist/components/FormControl.d.ts +3 -2
- package/dist/components/FormControl.d.ts.map +1 -1
- package/dist/components/Grid.d.ts +11 -4
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/HeroSection.d.ts +4 -2
- package/dist/components/HeroSection.d.ts.map +1 -1
- package/dist/components/Icon/Icon.d.ts +12 -8
- package/dist/components/Icon/Icon.d.ts.map +1 -1
- package/dist/components/IconsaxGallery/index.d.ts +8 -5
- package/dist/components/IconsaxGallery/index.d.ts.map +1 -1
- package/dist/components/InfoCard.d.ts +5 -2
- package/dist/components/InfoCard.d.ts.map +1 -1
- package/dist/components/Input.d.ts +29 -4
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +15 -10
- package/dist/components/Label.d.ts.map +1 -1
- package/dist/components/LanguageToggle.d.ts +5 -3
- package/dist/components/LanguageToggle.d.ts.map +1 -1
- package/dist/components/Link.d.ts +17 -6
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/LoadingSpinner.d.ts +7 -3
- package/dist/components/LoadingSpinner.d.ts.map +1 -1
- package/dist/components/Menu.d.ts +59 -60
- package/dist/components/Menu.d.ts.map +1 -1
- package/dist/components/Modal.d.ts +12 -6
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Navigation.d.ts +26 -11
- package/dist/components/Navigation.d.ts.map +1 -1
- package/dist/components/NumberInput.d.ts +5 -2
- package/dist/components/NumberInput.d.ts.map +1 -1
- package/dist/components/PageNavigation.d.ts +6 -3
- package/dist/components/PageNavigation.d.ts.map +1 -1
- package/dist/components/PageTransition.d.ts +2 -2
- package/dist/components/PageTransition.d.ts.map +1 -1
- package/dist/components/Pagination.d.ts +5 -2
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Panel.d.ts +1 -7
- package/dist/components/Panel.d.ts.map +1 -1
- package/dist/components/Popover.d.ts +25 -9
- package/dist/components/Popover.d.ts.map +1 -1
- package/dist/components/Pressable.d.ts +14 -0
- package/dist/components/Pressable.d.ts.map +1 -0
- package/dist/components/Progress.d.ts +36 -13
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Prose.d.ts +51 -0
- package/dist/components/Prose.d.ts.map +1 -0
- package/dist/components/Radio.d.ts +29 -33
- package/dist/components/Radio.d.ts.map +1 -1
- package/dist/components/ScrollArea.d.ts +8 -9
- package/dist/components/ScrollArea.d.ts.map +1 -1
- package/dist/components/ScrollIndicator.d.ts +9 -8
- package/dist/components/ScrollIndicator.d.ts.map +1 -1
- package/dist/components/ScrollProgress.d.ts +3 -2
- package/dist/components/ScrollProgress.d.ts.map +1 -1
- package/dist/components/ScrollToTop.d.ts +5 -5
- package/dist/components/ScrollToTop.d.ts.map +1 -1
- package/dist/components/Section.d.ts +12 -9
- package/dist/components/Section.d.ts.map +1 -1
- package/dist/components/SectionHeader.d.ts +3 -2
- package/dist/components/SectionHeader.d.ts.map +1 -1
- package/dist/components/Select.d.ts +18 -5
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Skeleton.d.ts +43 -15
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Slider.d.ts +7 -5
- package/dist/components/Slider.d.ts.map +1 -1
- package/dist/components/Stack.d.ts +22 -6
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/StatsPanel.d.ts +4 -2
- package/dist/components/StatsPanel.d.ts.map +1 -1
- package/dist/components/Switch.d.ts +9 -4
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Table.d.ts +43 -18
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Tabs.d.ts +50 -77
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/components/Text.d.ts +11 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Textarea.d.ts +24 -6
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/ThemeToggle.d.ts +18 -27
- package/dist/components/ThemeToggle.d.ts.map +1 -1
- package/dist/components/Timeline.d.ts +4 -2
- package/dist/components/Timeline.d.ts.map +1 -1
- package/dist/components/Toast.d.ts +1 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toggle.d.ts +11 -2
- package/dist/components/Toggle.d.ts.map +1 -1
- package/dist/components/Tooltip.d.ts +5 -2
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Upload.d.ts +5 -3
- package/dist/components/Upload.d.ts.map +1 -1
- package/dist/components/advanced/AdvancedPageTransition.d.ts +7 -5
- package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -1
- package/dist/components/advanced/AnimatedGradient.d.ts +6 -2
- package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
- package/dist/components/advanced/Carousel.d.ts +3 -1
- package/dist/components/advanced/Carousel.d.ts.map +1 -1
- package/dist/components/advanced/DotNav.d.ts +12 -5
- package/dist/components/advanced/DotNav.d.ts.map +1 -1
- package/dist/components/advanced/GlowCard.d.ts +4 -1
- package/dist/components/advanced/GlowCard.d.ts.map +1 -1
- package/dist/components/advanced/HorizontalScroll.d.ts +4 -1
- package/dist/components/advanced/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/advanced/ImageReveal.d.ts +23 -1
- package/dist/components/advanced/ImageReveal.d.ts.map +1 -1
- package/dist/components/advanced/Marquee.d.ts +4 -2
- package/dist/components/advanced/Marquee.d.ts.map +1 -1
- package/dist/components/advanced/Parallax.d.ts +4 -2
- package/dist/components/advanced/Parallax.d.ts.map +1 -1
- package/dist/components/advanced/SpotlightCard.d.ts +13 -12
- package/dist/components/advanced/SpotlightCard.d.ts.map +1 -1
- package/dist/components/advanced/TextReveal.d.ts +5 -1
- package/dist/components/advanced/TextReveal.d.ts.map +1 -1
- package/dist/components/advanced/TiltCard.d.ts +6 -2
- package/dist/components/advanced/TiltCard.d.ts.map +1 -1
- package/dist/components/advanced/VideoBackground.d.ts +4 -1
- package/dist/components/advanced/VideoBackground.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditor.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditor.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts +5 -3
- package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts +5 -3
- package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts +4 -2
- package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts.map +1 -1
- package/dist/components/advanced/blog-editor/types.d.ts +5 -2
- package/dist/components/advanced/blog-editor/types.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionAnalysis.d.ts +3 -1
- package/dist/components/advanced/emotion/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionButton.d.ts +3 -1
- package/dist/components/advanced/emotion/EmotionButton.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionMeter.d.ts +4 -2
- package/dist/components/advanced/emotion/EmotionMeter.d.ts.map +1 -1
- package/dist/components/advanced/emotion/EmotionSelector.d.ts +3 -1
- package/dist/components/advanced/emotion/EmotionSelector.d.ts.map +1 -1
- package/dist/components/dashboard/ActivityFeed.d.ts +5 -2
- package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -1
- package/dist/components/dashboard/BarChart.d.ts +3 -2
- package/dist/components/dashboard/BarChart.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardGrid.d.ts +13 -3
- package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardSidebar.d.ts +15 -82
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -1
- package/dist/components/dashboard/DashboardToolbar.d.ts +3 -2
- package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -1
- package/dist/components/dashboard/EmptyState.d.ts +3 -2
- package/dist/components/dashboard/EmptyState.d.ts.map +1 -1
- package/dist/components/dashboard/MembershipBadge.d.ts +3 -2
- package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -1
- package/dist/components/dashboard/MerchantList.d.ts +3 -2
- package/dist/components/dashboard/MerchantList.d.ts.map +1 -1
- package/dist/components/dashboard/MetricCard.d.ts +3 -2
- package/dist/components/dashboard/MetricCard.d.ts.map +1 -1
- package/dist/components/dashboard/MiniBarChart.d.ts +3 -2
- package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -1
- package/dist/components/dashboard/NotificationCard.d.ts +5 -2
- package/dist/components/dashboard/NotificationCard.d.ts.map +1 -1
- package/dist/components/dashboard/ProfileCard.d.ts +5 -2
- package/dist/components/dashboard/ProfileCard.d.ts.map +1 -1
- package/dist/components/dashboard/ProgressCard.d.ts +6 -3
- package/dist/components/dashboard/ProgressCard.d.ts.map +1 -1
- package/dist/components/dashboard/QuickActionCard.d.ts +22 -27
- package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -1
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts +3 -2
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -1
- package/dist/components/dashboard/SettlementTimeline.d.ts +3 -2
- package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -1
- package/dist/components/dashboard/StatCard.d.ts +7 -4
- package/dist/components/dashboard/StatCard.d.ts.map +1 -1
- package/dist/components/dashboard/SummaryCard.d.ts +6 -3
- package/dist/components/dashboard/SummaryCard.d.ts.map +1 -1
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts +2 -2
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -1
- package/dist/components/dashboard/TransactionsTable.d.ts +3 -2
- package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -1
- package/dist/components/dashboard/TrendChart.d.ts +3 -2
- package/dist/components/dashboard/TrendChart.d.ts.map +1 -1
- package/dist/components/dashboard/YearlyHeatmap.d.ts +4 -2
- package/dist/components/dashboard/YearlyHeatmap.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanAddCard.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanAddColumn.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanBoard.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanColumn.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanColumnHeader.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/KanbanDropIndicator.d.ts.map +1 -1
- package/dist/components/dashboard/kanban/index.d.ts +1 -1
- package/dist/components/dashboard/kanban/types.d.ts +24 -12
- package/dist/components/dashboard/kanban/types.d.ts.map +1 -1
- package/dist/components/scrollbar/scrollbar.d.ts +2 -1
- package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
- package/dist/context/MotionConfigContext.d.ts +41 -0
- package/dist/context/MotionConfigContext.d.ts.map +1 -0
- package/dist/data.d.mts +55 -23
- package/dist/data.d.ts +45 -3
- package/dist/data.d.ts.map +1 -1
- package/dist/data.mjs +2 -2
- package/dist/data.mjs.map +1 -1
- package/dist/feedback.d.mts +6 -293
- package/dist/feedback.d.ts +7 -5
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.mjs +1 -1
- package/dist/form.d.mts +99 -114
- package/dist/form.mjs +8 -3
- package/dist/form.mjs.map +1 -1
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useAnimatedEntrance.d.ts +24 -0
- package/dist/hooks/useAnimatedEntrance.d.ts.map +1 -0
- package/dist/hooks/useBreakpoint.d.ts +22 -0
- package/dist/hooks/useBreakpoint.d.ts.map +1 -0
- package/dist/hooks/useDotEnv.d.ts +12 -0
- package/dist/hooks/useDotEnv.d.ts.map +1 -0
- package/dist/hooks/useDotMap.d.ts +38 -0
- package/dist/hooks/useDotMap.d.ts.map +1 -0
- package/dist/iconsax-extended.mjs +2 -2
- package/dist/iconsax-extended.mjs.map +1 -1
- package/dist/iconsax.mjs +2 -2
- package/dist/iconsax.mjs.map +1 -1
- package/dist/index.d.mts +358 -127
- package/dist/index.d.ts +74 -64
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +15 -15
- package/dist/index.mjs.map +1 -1
- package/dist/interactive/kanban.d.ts +12 -0
- package/dist/interactive/kanban.d.ts.map +1 -0
- package/dist/interactive-kanban.d.mts +378 -0
- package/dist/interactive-kanban.mjs +3 -0
- package/dist/interactive-kanban.mjs.map +1 -0
- package/dist/interactive.d.mts +193 -197
- package/dist/interactive.d.ts +7 -5
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/landing/LandingAbout.d.ts +2 -2
- package/dist/landing/LandingAbout.d.ts.map +1 -1
- package/dist/landing/LandingCTA.d.ts +2 -2
- package/dist/landing/LandingCTA.d.ts.map +1 -1
- package/dist/landing/LandingContact.d.ts +2 -2
- package/dist/landing/LandingContact.d.ts.map +1 -1
- package/dist/landing/LandingExperience.d.ts +1 -1
- package/dist/landing/LandingExperience.d.ts.map +1 -1
- package/dist/landing/LandingFeatures.d.ts +1 -1
- package/dist/landing/LandingFeatures.d.ts.map +1 -1
- package/dist/landing/LandingHero.d.ts +2 -2
- package/dist/landing/LandingHero.d.ts.map +1 -1
- package/dist/landing/LandingLogoCloud.d.ts +2 -2
- package/dist/landing/LandingLogoCloud.d.ts.map +1 -1
- package/dist/landing/LandingMetrics.d.ts +1 -1
- package/dist/landing/LandingMetrics.d.ts.map +1 -1
- package/dist/landing/LandingProjects.d.ts +1 -1
- package/dist/landing/LandingProjects.d.ts.map +1 -1
- package/dist/landing/LandingShowcase.d.ts +2 -2
- package/dist/landing/LandingShowcase.d.ts.map +1 -1
- package/dist/landing/LandingSkills.d.ts +1 -1
- package/dist/landing/LandingSkills.d.ts.map +1 -1
- package/dist/landing/LandingStats.d.ts +1 -1
- package/dist/landing/LandingStats.d.ts.map +1 -1
- package/dist/landing/LandingTestimonials.d.ts +1 -1
- package/dist/landing/LandingTestimonials.d.ts.map +1 -1
- package/dist/landing/types.d.ts +42 -30
- package/dist/landing/types.d.ts.map +1 -1
- package/dist/landing.d.mts +47 -37
- package/dist/landing.mjs +4 -20
- package/dist/landing.mjs.map +1 -1
- package/dist/lib/Slot.d.ts.map +1 -1
- package/dist/lib/icon-providers.d.ts +17 -3
- package/dist/lib/icon-providers.d.ts.map +1 -1
- package/dist/lib/styles/animation.d.ts +35 -0
- package/dist/lib/styles/animation.d.ts.map +1 -0
- package/dist/lib/styles/disabled.d.ts +15 -0
- package/dist/lib/styles/disabled.d.ts.map +1 -0
- package/dist/lib/styles/focus.d.ts +34 -0
- package/dist/lib/styles/focus.d.ts.map +1 -0
- package/dist/lib/styles/glass.d.ts +18 -0
- package/dist/lib/styles/glass.d.ts.map +1 -0
- package/dist/lib/styles/hover.d.ts +9 -0
- package/dist/lib/styles/hover.d.ts.map +1 -0
- package/dist/lib/styles/index.d.ts +6 -0
- package/dist/lib/styles/index.d.ts.map +1 -1
- package/dist/lib/styles/transition.d.ts +42 -0
- package/dist/lib/styles/transition.d.ts.map +1 -0
- package/dist/lib/types/common.d.ts +3 -3
- package/dist/lib/types/common.d.ts.map +1 -1
- package/dist/native/Box.d.ts +11 -0
- package/dist/native/Box.d.ts.map +1 -0
- package/dist/native/Pressable.d.ts +10 -0
- package/dist/native/Pressable.d.ts.map +1 -0
- package/dist/native/Text.d.ts +11 -0
- package/dist/native/Text.d.ts.map +1 -0
- package/dist/native/index.d.ts +9 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/useDotMap.d.ts +51 -0
- package/dist/native/useDotMap.d.ts.map +1 -0
- package/dist/native.mjs +2 -0
- package/dist/native.mjs.map +1 -0
- package/dist/navigation.d.mts +48 -21
- package/dist/navigation.d.ts +10 -8
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.mjs +1 -1
- package/dist/navigation.mjs.map +1 -1
- package/dist/overlay.d.mts +84 -37
- package/dist/overlay.mjs +2 -2
- package/dist/overlay.mjs.map +1 -1
- package/dist/sdui/SDUIRenderer.d.ts.map +1 -1
- package/dist/sdui/core.d.ts +50 -0
- package/dist/sdui/core.d.ts.map +1 -0
- package/dist/sdui/index.d.ts +3 -1
- package/dist/sdui/index.d.ts.map +1 -1
- package/dist/sdui/registry.d.ts.map +1 -1
- package/dist/sdui/types.d.ts +38 -0
- package/dist/sdui/types.d.ts.map +1 -1
- package/dist/sdui.d.mts +89 -1
- package/dist/sdui.mjs +2 -2
- package/dist/sdui.mjs.map +1 -1
- package/package.json +39 -15
- package/src/styles/component-vars.css +503 -69
- package/src/styles/landing.css +12 -12
- package/src/styles/prose.css +284 -0
- package/src/styles/recommended-theme.css +123 -141
- package/src/styles/utilities.css +3 -3
- package/dist/chunk-5DPW7SVD.mjs +0 -4
- package/dist/chunk-5DPW7SVD.mjs.map +0 -1
- package/dist/chunk-5L5HIPKA.mjs +0 -3
- package/dist/chunk-5L5HIPKA.mjs.map +0 -1
- package/dist/chunk-CNW22G24.mjs +0 -13
- package/dist/chunk-CNW22G24.mjs.map +0 -1
- package/dist/chunk-CW66UBQG.mjs +0 -3
- package/dist/chunk-CW66UBQG.mjs.map +0 -1
- package/dist/chunk-EPY3432E.mjs +0 -3
- package/dist/chunk-EPY3432E.mjs.map +0 -1
- package/dist/chunk-F2M4YDDQ.mjs +0 -3
- package/dist/chunk-F2M4YDDQ.mjs.map +0 -1
- package/dist/chunk-FHMFDCX2.mjs +0 -3
- package/dist/chunk-FHMFDCX2.mjs.map +0 -1
- package/dist/chunk-HBIUCLFL.mjs +0 -3
- package/dist/chunk-HBIUCLFL.mjs.map +0 -1
- package/dist/chunk-HEBXAFRY.mjs +0 -3
- package/dist/chunk-HEBXAFRY.mjs.map +0 -1
- package/dist/chunk-IG47LMOD.mjs +0 -3
- package/dist/chunk-IG47LMOD.mjs.map +0 -1
- package/dist/chunk-J47ZEXEL.mjs +0 -3
- package/dist/chunk-J47ZEXEL.mjs.map +0 -1
- package/dist/chunk-K2FOFIST.mjs +0 -3
- package/dist/chunk-K2FOFIST.mjs.map +0 -1
- package/dist/chunk-LL6QPRD7.mjs +0 -3
- package/dist/chunk-LL6QPRD7.mjs.map +0 -1
- package/dist/chunk-NMJLOK6M.mjs +0 -3
- package/dist/chunk-NMJLOK6M.mjs.map +0 -1
- package/dist/chunk-O24K56OS.mjs +0 -3
- package/dist/chunk-O24K56OS.mjs.map +0 -1
- package/dist/chunk-OIWG3IJ7.mjs +0 -3
- package/dist/chunk-OIWG3IJ7.mjs.map +0 -1
- package/dist/chunk-OLLU7ZFH.mjs +0 -3
- package/dist/chunk-OLLU7ZFH.mjs.map +0 -1
- package/dist/chunk-Q76JW7X5.mjs +0 -73
- package/dist/chunk-Q76JW7X5.mjs.map +0 -1
- package/dist/chunk-QRM66RQG.mjs +0 -3
- package/dist/chunk-QRM66RQG.mjs.map +0 -1
- package/dist/chunk-QRRP7TGF.mjs +0 -13
- package/dist/chunk-QRRP7TGF.mjs.map +0 -1
- package/dist/chunk-SD6XGDAC.mjs +0 -3
- package/dist/chunk-SD6XGDAC.mjs.map +0 -1
- package/dist/chunk-SDFVGFXT.mjs +0 -3
- package/dist/chunk-SDFVGFXT.mjs.map +0 -1
- package/dist/chunk-SMLDNOV3.mjs +0 -8
- package/dist/chunk-SMLDNOV3.mjs.map +0 -1
- package/dist/chunk-TAP6MYDW.mjs +0 -3
- package/dist/chunk-TAP6MYDW.mjs.map +0 -1
- package/dist/chunk-TBZ645BI.mjs +0 -3
- package/dist/chunk-TBZ645BI.mjs.map +0 -1
- package/dist/chunk-V2DNYJR6.mjs +0 -3
- package/dist/chunk-V2DNYJR6.mjs.map +0 -1
- package/dist/chunk-VBABZXL7.mjs +0 -3
- package/dist/chunk-VBABZXL7.mjs.map +0 -1
- package/dist/chunk-WYBSHTGY.mjs +0 -3
- package/dist/chunk-WYBSHTGY.mjs.map +0 -1
- package/dist/chunk-ZQUMJQYV.mjs +0 -3
- package/dist/chunk-ZQUMJQYV.mjs.map +0 -1
- package/dist/chunk-ZY23NOT4.mjs +0 -3
- package/dist/chunk-ZY23NOT4.mjs.map +0 -1
- package/dist/components/EmptyState.d.ts +0 -62
- package/dist/components/EmptyState.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/advanced/emotion/EmotionMeter.tsx","../src/components/advanced/emotion/EmotionButton.tsx","../src/components/advanced/emotion/EmotionSelector.tsx","../src/components/advanced/emotion/EmotionAnalysis.tsx"],"names":["EmotionMeter","React","dotProp","style","value","max","size","color","props","ref","_a","sizeStyles","resolveDot","emotionColorStyles","percentage","containerStyle","mergeStyles","fillStyle","jsx","EmotionButton","emotion","isSelected","onMouseEnter","onMouseLeave","onFocus","onBlur","isHovered","setIsHovered","useState","isFocused","setIsFocused","computedStyle","useMemo","base","selectedStyles","hoverStyle","focusStyle","e","defaultEmotions","EmotionSelector","selectedEmotion","onEmotionSelect","layout","showIntensity","intensity","onIntensityChange","emotions","variant","handleEmotionClick","emotionKey","renderEmotionItem","cardStyle","iconWrapStyle","jsxs","chipStyle","layoutStyles","colorTokenToStyle","token","map","EmotionAnalysis","primaryEmotion","emotionDistribution","keywords","positivity","energy","showMeter","showDistribution","showKeywords","showMetrics","getIntensityLabel","getPositivityLabel","getEnergyLabel","mutedFg","spaceY3","spaceY4","spaceY2","flexBetween","textSm","textSmMedium","textSmMuted","progressTrack","progressBar","Fragment","keyword","Badge","Card","CardHeader","CardTitle","CardDescription","CardContent","item","index"],"mappings":"kNAqDA,IAAMA,CAAAA,CAAeC,CAAAA,CAAM,UAAA,CACzB,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,GAAA,CAAAC,CAAAA,CAAM,GAAA,CACN,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,KAAA,CAAAC,CAAAA,CAAQ,MAAA,CACR,GAAGC,CACL,EACAC,GAAAA,GACG,CAjEP,IAAAC,CAAAA,CAkEI,IAAMC,CAAAA,CAAkD,CACtD,EAAA,CAAIC,CAAAA,CAAW,KAAK,CAAA,CACpB,EAAA,CAAIA,CAAAA,CAAW,KAAK,CAAA,CACpB,EAAA,CAAIA,CAAAA,CAAW,KAAK,CACtB,CAAA,CAGMC,CAAAA,CAA0D,CAC9D,IAAA,CAAM,CAAE,eAAA,CAAiB,iBAAkB,CAAA,CAC3C,KAAA,CAAO,CAAE,eAAA,CAAiB,gBAAiB,CAAA,CAC3C,OAAQ,CAAE,eAAA,CAAiB,gBAAiB,CAAA,CAC5C,GAAA,CAAK,CAAE,eAAA,CAAiB,gBAAiB,CAAA,CACzC,MAAA,CAAQ,CAAE,eAAA,CAAiB,iBAAkB,CAAA,CAC7C,MAAA,CAAQ,CAAE,eAAA,CAAiB,iBAAkB,CAAA,CAC7C,MAAA,CAAQ,CAAE,eAAA,CAAiB,iBAAkB,CAAA,CAC7C,IAAA,CAAM,CAAE,eAAA,CAAiB,iBAAkB,CAAA,CAC3C,IAAA,CAAM,CAAE,eAAA,CAAiB,kBAAmB,CAC9C,CAAA,CAEMC,CAAAA,CAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAKV,CAAAA,CAAQC,CAAAA,CAAO,GAAA,CAAK,CAAC,CAAA,CAAG,GAAG,CAAA,CAE3DU,CAAAA,CAAiBC,CAAAA,CACrBJ,CAAAA,CAAW,qBAAqB,CAAA,CAChCD,CAAAA,CAAWL,CAAI,CAAA,CACf,CAAE,eAAA,CAAiB,sCAAuC,CAAA,CAC1DM,CAAAA,CAAWV,CAAO,CAAA,CAClBC,CACF,CAAA,CAEMc,CAAAA,CAAYD,EAChB,CAAE,MAAA,CAAQ,MAAA,CAAQ,YAAA,CAAc,QAAA,CAAU,UAAA,CAAY,gBAAiB,CAAA,CAAA,CACvEN,CAAAA,CAAAG,CAAAA,CAAmBN,CAAe,CAAA,GAAlC,IAAA,CAAAG,CAAAA,CAAuCG,CAAAA,CAAmB,IAAA,CAC1D,CAAE,KAAA,CAAO,CAAA,EAAGC,CAAU,CAAA,CAAA,CAAI,CAC5B,CAAA,CAEA,OACEI,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKT,GAAAA,CAAK,KAAA,CAAOM,CAAAA,CAAiB,GAAGP,CAAAA,CACxC,SAAAU,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOD,CAAAA,CAAW,CAAA,CACzB,CAEJ,CACF,EACAjB,CAAAA,CAAa,WAAA,CAAc,cAAA,CC7D3B,IAAMmB,CAAAA,CAAgBlB,CAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,GAAA,CAAKC,CAAAA,CAAS,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAiB,EAAS,UAAA,CAAAC,CAAAA,CAAa,KAAA,CAAO,IAAA,CAAAf,CAAAA,CAAO,IAAA,CAAM,YAAA,CAAAgB,CAAAA,CAAc,YAAA,CAAAC,CAAAA,CAAc,OAAA,CAAAC,GAAAA,CAAS,MAAA,CAAAC,CAAAA,CAAQ,GAAGjB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACjI,GAAM,CAACiB,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAC1C,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIF,QAAAA,CAAS,KAAK,CAAA,CAE1CjB,CAAAA,CAAkD,CACtD,EAAA,CAAI,CAAE,KAAA,CAAO,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,QAAA,CAAU,UAAW,CAAA,CAC1D,EAAA,CAAI,CAAE,KAAA,CAAO,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,QAAA,CAAU,UAAW,CAAA,CAC1D,EAAA,CAAI,CAAE,KAAA,CAAO,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,QAAA,CAAU,SAAU,CAC3D,CAAA,CAEMoB,CAAAA,CAAgBC,QAAQ,IAAM,CAClC,IAAMC,CAAAA,CAA4B,CAChC,YAAA,CAAc,QAAA,CACd,WAAA,CAAa,KAAA,CACb,WAAA,CAAa,OAAA,CACb,UAAA,CAAY,gBAAA,CACZ,OAAA,CAAS,MAAA,CACT,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAClB,CAAA,CAEMC,CAAAA,CAAsCb,CAAAA,CACxC,CAAE,WAAA,CAAa,iBAAA,CAAmB,eAAA,CAAiB,kBAAmB,CAAA,CACtE,CAAE,WAAA,CAAa,uCAAA,CAAyC,eAAA,CAAiB,2CAA4C,CAAA,CAEnHc,CAAAA,CAAkCT,CAAAA,CACpC,CAAE,SAAA,CAAW,aAAc,CAAA,CAC3B,EAAC,CAECU,CAAAA,CAAkCP,CAAAA,CACpC,CAAE,SAAA,CAAW,8CAA+C,CAAA,CAC5D,EAAC,CAEL,OAAOb,CAAAA,CAAYiB,CAAAA,CAAMtB,CAAAA,CAAWL,CAAI,CAAA,CAAG4B,CAAAA,CAAgBC,CAAAA,CAAYC,CAAAA,CAAYxB,CAAAA,CAAWV,CAAO,EAAGC,CAAK,CAC/G,CAAA,CAAG,CAACkB,CAAAA,CAAYK,CAAAA,CAAWG,CAAAA,CAAWvB,CAAAA,CAAMJ,CAAAA,CAASC,CAAK,CAAC,CAAA,CAE3D,OACEe,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKT,CAAAA,CACL,KAAA,CAAOsB,CAAAA,CACP,YAAA,CAAeM,CAAAA,EAAM,CAAEV,CAAAA,CAAa,IAAI,CAAA,CAAGL,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAee,CAAAA,EAAG,CAAA,CAC7D,YAAA,CAAeA,CAAAA,EAAM,CAAEV,CAAAA,CAAa,KAAK,CAAA,CAAGJ,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAec,CAAAA,EAAG,CAAA,CAC9D,OAAA,CAAUA,CAAAA,EAAM,CAAEP,CAAAA,CAAa,IAAI,CAAA,CAAGN,GAAAA,EAAA,IAAA,EAAAA,GAAAA,CAAUa,CAAAA,EAAG,CAAA,CACnD,MAAA,CAASA,CAAAA,EAAM,CAAEP,CAAAA,CAAa,KAAK,CAAA,CAAGL,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAASY,CAAAA,EAAG,CAAA,CACjD,GAAG7B,CAAAA,CAEH,SAAAY,CAAAA,CACH,CAEJ,CACF,EACAD,CAAAA,CAAc,WAAA,CAAc,eAAA,CCtD5B,IAAMmB,EAAAA,CAAkB,CACtB,CAAE,GAAA,CAAK,KAAA,CAAO,KAAA,CAAO,cAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,QAAS,CAAA,CAC1D,CAAE,GAAA,CAAK,SAAA,CAAW,KAAA,CAAO,eAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,MAAO,CAAA,CAC5D,CAAE,GAAA,CAAK,OAAA,CAAS,KAAA,CAAO,cAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,KAAM,CAAA,CACzD,CAAE,GAAA,CAAK,MAAA,CAAQ,KAAA,CAAO,cAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,OAAQ,CAAA,CAC1D,CAAE,GAAA,CAAK,YAAA,CAAc,KAAA,CAAO,cAAA,CAAM,IAAA,CAAM,MAAA,CAAQ,MAAO,MAAO,CAAA,CAC9D,CAAE,GAAA,CAAK,OAAA,CAAS,KAAA,CAAO,cAAA,CAAM,IAAA,CAAM,KAAA,CAAO,KAAA,CAAO,MAAO,CAAA,CACxD,CAAE,GAAA,CAAK,WAAA,CAAa,KAAA,CAAO,cAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,QAAS,CAAA,CAChE,CAAE,GAAA,CAAK,YAAA,CAAc,KAAA,CAAO,oBAAA,CAAO,IAAA,CAAM,MAAA,CAAQ,KAAA,CAAO,QAAS,CACnE,EAkCMC,CAAAA,CAAkBtC,CAAAA,CAAM,UAAA,CAC5B,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,eAAA,CAAAqC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CAAS,MAAA,CACT,cAAAC,CAAAA,CAAgB,KAAA,CAChB,SAAA,CAAAC,CAAAA,CAAY,EAAA,CACZ,iBAAA,CAAAC,GAAAA,CACA,QAAA,CAAAC,CAAAA,CAAWR,EAAAA,CACX,IAAA,CAAAhC,CAAAA,CAAO,IAAA,CACP,OAAA,CAAAyC,CAAAA,CAAU,QAAA,CACV,GAAGvC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMuC,CAAAA,CAAsBC,CAAAA,EAAuB,CACjDR,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAkBQ,CAAAA,EACpB,CAAA,CAEMC,CAAAA,CAAqB9B,CAAAA,EAAkC,CAC3D,IAAMC,CAAAA,CAAamB,CAAAA,GAAoBpB,CAAAA,CAAQ,GAAA,CAE/C,GAAI2B,CAAAA,GAAY,QAAA,CACd,OACE7B,GAAAA,CAACC,CAAAA,CAAA,CAEC,OAAA,CAASC,CAAAA,CAAQ,GAAA,CACjB,UAAA,CAAYC,EACZ,IAAA,CAAMf,CAAAA,CACN,OAAA,CAAS,IAAM0C,CAAAA,CAAmB5B,CAAAA,CAAQ,GAAG,CAAA,CAC7C,KAAA,CACEC,CAAAA,CACI,CACE,SAAA,CACE,iDAAA,CACF,aAAA,CAAe,KACjB,CAAA,CACA,MAAA,CAGL,QAAA,CAAAD,CAAAA,CAAQ,KAAA,CAAA,CAfJA,CAAAA,CAAQ,GAgBf,CAAA,CAIJ,GAAI2B,CAAAA,GAAY,MAAA,CAAQ,CACtB,IAAMI,CAAAA,CAAiCnC,CAAAA,CACrCJ,CAAAA,CAAW,+BAA+B,EAC1C,CACE,WAAA,CAAa,KAAA,CACb,WAAA,CAAa,OAAA,CACb,UAAA,CAAY,gBAAA,CACZ,WAAA,CAAaS,CAAAA,CACT,uCAAA,CACA,uCAAA,CACJ,eAAA,CAAiBA,CAAAA,CACb,2EAAA,CACA,aACN,CACF,CAAA,CAEM+B,CAAAA,CAAqCpC,CAAAA,CACzCJ,CAAAA,CAAW,sBAAsB,CAAA,CACjC,CACE,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,eAAA,CAAiBS,CAAAA,CACb,uCAAA,CACA,uCACJ,KAAA,CAAOA,CAAAA,CACH,mDAAA,CACA,MACN,CACF,CAAA,CAEA,OACEH,GAAAA,CAAC,KAAA,CAAA,CAEC,KAAA,CAAOiC,CAAAA,CACP,OAAA,CAAS,IAAMH,CAAAA,CAAmB5B,CAAAA,CAAQ,GAAG,CAAA,CAE7C,QAAA,CAAAiC,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOrC,CAAAA,CAAYJ,CAAAA,CAAW,yBAAyB,CAAC,CAAA,CAC3D,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOkC,CAAAA,CACT,QAAA,CAAAhC,EAAQ,IAAA,EACPiC,IAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU,UAAW,CAAA,CACjC,QAAA,CAAA,CAAAjC,CAAAA,CAAQ,IAAA,GAAS,OAAA,EAAW,WAAA,CAC5BA,CAAAA,CAAQ,IAAA,GAAS,OAAA,EAAW,WAAA,CAC5BA,CAAAA,CAAQ,IAAA,GAAS,OAAA,EAAW,WAAA,CAC5BA,CAAAA,CAAQ,IAAA,GAAS,OAAA,EAAW,cAAA,CAC5BA,CAAAA,CAAQ,IAAA,GAAS,MAAA,EAAU,QAAA,CAC3BA,CAAAA,CAAQ,IAAA,GAAS,KAAA,EAAS,YAC1BA,CAAAA,CAAQ,IAAA,GAAS,MAAA,EAAU,WAAA,CAAA,CAC9B,CAAA,CAEJ,CAAA,CACAF,GAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,UAAA,CAAY,GAAA,CACZ,QAAA,CAAU,QAAA,CACV,YAAA,CAAc,UAAA,CACd,UAAA,CAAY,QAAA,CACZ,QAAA,CAAU,OACZ,CAAA,CAEC,QAAA,CAAAE,CAAAA,CAAQ,KAAA,CACX,CAAA,CAAA,CACF,CAAA,CAAA,CA7BKA,CAAAA,CAAQ,GA8Bf,CAEJ,CAEA,GAAI2B,CAAAA,GAAY,OAAQ,CACtB,IAAMO,CAAAA,CAAiCtC,CAAAA,CACrCJ,CAAAA,CAAW,iDAAiD,CAAA,CAC5D,CACE,GAAGA,CAAAA,CAAW,WAAW,CAAA,CACzB,UAAA,CAAY,gBAAA,CACZ,eAAA,CAAiBS,CAAAA,CACb,uCAAA,CACA,sCAAA,CACJ,KAAA,CAAOA,CAAAA,CACH,mDAAA,CACA,MACN,CACF,CAAA,CAEA,OACEH,GAAAA,CAAC,KAAA,CAAA,CAEC,KAAA,CAAOoC,CAAAA,CACP,OAAA,CAAS,IAAMN,CAAAA,CAAmB5B,EAAQ,GAAG,CAAA,CAE7C,QAAA,CAAAF,GAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,QAAA,CACV,YAAA,CAAc,UAAA,CACd,UAAA,CAAY,QAAA,CACZ,QAAA,CAAU,OAAA,CACV,OAAA,CAAS,OACX,CAAA,CAEC,QAAA,CAAAE,CAAAA,CAAQ,KAAA,CACX,CAAA,CAAA,CAdKA,CAAAA,CAAQ,GAef,CAEJ,CAEA,OAAO,IACT,CAAA,CAEMmC,CAAAA,CAAoD,CACxD,IAAA,CAAM,CACJ,QAAS,MAAA,CACT,mBAAA,CAAqB,2BAAA,CACrB,GAAG3C,CAAAA,CAAW,OAAO,CACvB,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAGA,CAAAA,CAAW,OAAO,CACvB,CAAA,CACA,OAAA,CAAS,CAAE,OAAA,CAAS,MAAA,CAAQ,QAAA,CAAU,MAAA,CAAQ,GAAGA,CAAAA,CAAW,OAAO,CAAE,CACvE,CAAA,CAEMG,CAAAA,CAAiBC,EACrB,CAAE,OAAA,CAAS,MAAA,CAAQ,aAAA,CAAe,QAAA,CAAU,GAAGJ,CAAAA,CAAW,OAAO,CAAE,CAAA,CACnEA,CAAAA,CAAWV,CAAO,CAAA,CAClBC,CACF,CAAA,CAEA,OACEkD,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAK5C,CAAAA,CAAK,KAAA,CAAOM,CAAAA,CAAiB,GAAGP,CAAAA,CACxC,QAAA,CAAA,CAAAU,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqC,CAAAA,CAAab,CAAM,CAAA,CAC5B,QAAA,CAAAI,EAAS,GAAA,CAAII,CAAiB,CAAA,CACjC,CAAA,CAECP,CAAAA,EAAiBH,CAAAA,EAChBa,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAGzC,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEA,QAAA,CAAA,CAAAyC,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOrC,CAAAA,CAAYJ,CAAAA,CAAW,mBAAmB,CAAA,CAAG,CAClD,cAAA,CAAgB,eAClB,CAAC,CAAA,CAED,UAAAM,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,2BAAA,CAExD,CAAA,CACAmC,IAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,KAAA,CAAO,iDACT,CAAA,CAEC,QAAA,CAAA,CAAAT,CAAAA,CAAU,GAAA,CAAA,CACb,CAAA,CAAA,CACF,CAAA,CACA1B,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,OAAA,CACL,GAAA,CAAI,GAAA,CACJ,GAAA,CAAI,MACJ,KAAA,CAAO0B,CAAAA,CACP,QAAA,CAAWP,CAAAA,EAAMQ,GAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,GAAAA,CAAoB,MAAA,CAAOR,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAA,CAC1D,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,GAAGzB,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,MAAA,CACZ,eAAA,CAAiB,sCACnB,CAAA,CACF,CAAA,CACAyC,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAS,MAAA,CACT,cAAA,CAAgB,eAAA,CAChB,QAAA,CAAU,SAAA,CACV,KAAA,CAAO,iDACT,CAAA,CAEA,QAAA,CAAA,CAAAnC,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,cAAA,CAAE,CAAA,CACRA,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,cAAA,CAAE,CAAA,CACRA,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,cAAA,CAAE,CAAA,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CAGDsB,CAAAA,EAAmBG,CAAAA,EAClBzB,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAON,CAAAA,CAAW,qBAAqB,CAAA,CAC1C,QAAA,CAAAM,IAAClB,CAAAA,CAAA,CAAa,KAAA,CAAO4C,CAAAA,CAAW,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAA,CACzD,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAL,CAAAA,CAAgB,WAAA,CAAc,iBAAA,CC9Q9B,IAAMiB,EAAAA,CAAqBC,CAAAA,EAAuC,CAhElE,IAAA/C,EAiEE,IAAMgD,CAAAA,CAA8B,CAClC,MAAA,CAAQ,gBAAA,CACR,KAAA,CAAO,gBAAA,CACP,IAAA,CAAM,iBAAA,CACN,GAAA,CAAK,gBAAA,CACL,MAAA,CAAQ,iBAAA,CACR,MAAA,CAAQ,iBAAA,CACR,MAAA,CAAQ,kBACR,IAAA,CAAM,iBAAA,CACN,IAAA,CAAM,kBACR,CAAA,CACA,OAAO,CAAE,eAAA,CAAA,CAAiBhD,CAAAA,CAAAgD,CAAAA,CAAID,CAAK,CAAA,GAAT,IAAA,CAAA/C,CAAAA,CAAcgD,CAAAA,CAAI,IAAK,CACnD,CAAA,CAsCMC,CAAAA,CAAkB1D,CAAAA,CAAM,UAAA,CAC5B,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,cAAA,CAAAyD,GAAAA,CACA,mBAAA,CAAAC,GAAAA,CAAsB,EAAC,CACvB,QAAA,CAAAC,CAAAA,CAAW,EAAC,CACZ,SAAA,CAAAlB,CAAAA,CAAY,EAAA,CACZ,UAAA,CAAAmB,GAAAA,CAAa,EAAA,CACb,MAAA,CAAAC,GAAAA,CAAS,EAAA,CACT,SAAA,CAAAC,CAAAA,CAAY,IAAA,CACZ,iBAAAC,CAAAA,CAAmB,IAAA,CACnB,YAAA,CAAAC,CAAAA,CAAe,IAAA,CACf,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,MAAA,CAAA1B,CAAAA,CAAS,UAAA,CACT,GAAGlC,GACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAM4D,CAAAA,CAAqBjE,CAAAA,EACrBA,CAAAA,CAAQ,EAAA,CAAW,cAAA,CACnBA,CAAAA,CAAQ,EAAA,CAAW,cAAA,CAChB,cAAA,CAGHkE,CAAAA,CAAsBlE,CAAAA,EACtBA,CAAAA,CAAQ,EAAA,CAAW,oBAAA,CACnBA,CAAAA,CAAQ,GAAW,oBAAA,CAChB,oBAAA,CAGHmE,CAAAA,CAAkBnE,CAAAA,EAClBA,CAAAA,CAAQ,EAAA,CAAW,cAAA,CACnBA,CAAAA,CAAQ,EAAA,CAAW,cAAA,CAChB,cAAA,CAGHoE,CAAAA,CAA+B,CACnC,KAAA,CAAO,iDACT,CAAA,CACMC,CAAAA,CAA+B,CACnC,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAG7D,CAAAA,CAAW,OAAO,CACvB,CAAA,CACM8D,CAAAA,CAA+B,CACnC,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,SACf,GAAG9D,CAAAA,CAAW,OAAO,CACvB,CAAA,CACM+D,CAAAA,CAA+B,CACnC,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAG/D,CAAAA,CAAW,OAAO,CACvB,CAAA,CACMgE,CAAAA,CAAmC,CACvC,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,eAClB,CAAA,CACMC,CAAAA,CAA8B,CAAE,QAAA,CAAU,UAAW,CAAA,CACrDC,GAAAA,CAAoC,CACxC,SAAU,UAAA,CACV,UAAA,CAAY,GACd,CAAA,CACMC,CAAAA,CAAmC,CAAE,GAAGF,CAAAA,CAAQ,GAAGL,CAAQ,CAAA,CAC3DQ,CAAAA,CAAqC,CACzC,KAAA,CAAO,MAAA,CACP,eAAA,CAAiB,sCAAA,CACjB,YAAA,CAAc,QAAA,CACd,GAAGpE,CAAAA,CAAW,KAAK,CACrB,CAAA,CACMqE,CAAAA,CAAmC,CACvC,GAAGrE,CAAAA,CAAW,KAAK,CAAA,CACnB,YAAA,CAAc,QAAA,CACd,WAAY,gBACd,CAAA,CAEA,OAAI8B,CAAAA,GAAW,SAAA,CAEXW,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK5C,CAAAA,CACL,KAAA,CAAOO,CAAAA,CAAYyD,CAAAA,CAAS7D,CAAAA,CAAWV,CAAO,CAAA,CAAGC,CAAK,CAAA,CACrD,GAAGK,GAAAA,CAEH,QAAA,CAAA,CAAAoD,GAAAA,EACCP,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuB,CAAAA,CACV,QAAA,CAAA,CAAA1D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,4BAAA,CAAM,CAAA,CACjCzB,KAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAGzC,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEA,QAAA,CAAA,CAAAyC,IAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO0B,CAAAA,CACV,QAAA,CAAA,CAAAnB,GAAAA,CAAe,IAAA,CAAK,IAAA,CAAGA,GAAAA,CAAe,SAAA,CAAU,IAAA,CAAA,CACnD,CAAA,CACCK,CAAAA,EACC/C,GAAAA,CAAClB,CAAAA,CAAA,CACC,KAAA,CAAO4D,GAAAA,CAAe,SAAA,CACtB,KAAK,IAAA,CACL,KAAA,CAAM,MAAA,CACR,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAGDQ,CAAAA,EACCf,IAAAA,CAAA6B,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA7B,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuB,CAAAA,CACV,QAAA,CAAA,CAAA1D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,4BAAA,CAAM,CAAA,CACjC5D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO6D,CAAAA,CAAc,QAAA,CAAAV,CAAAA,CAAkBzB,CAAS,CAAA,CAAE,CAAA,CAAA,CAC1D,CAAA,CACAS,KAAC,KAAA,CAAA,CAAI,KAAA,CAAOuB,CAAAA,CACV,QAAA,CAAA,CAAA1D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,qBAAA,CAAI,CAAA,CAC/B5D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO6D,CAAAA,CACV,QAAA,CAAAT,CAAAA,CAAmBP,GAAU,CAAA,CAChC,CAAA,CAAA,CACF,CAAA,CACAV,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuB,CAAAA,CACV,QAAA,CAAA,CAAA1D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,qBAAA,CAAI,CAAA,CAC/B5D,GAAAA,CAAC,QAAK,KAAA,CAAO6D,CAAAA,CAAc,QAAA,CAAAR,CAAAA,CAAeP,GAAM,CAAA,CAAE,CAAA,CAAA,CACpD,CAAA,CAAA,CACF,CAAA,CAGDG,CAAAA,EAAgBL,CAAAA,CAAS,MAAA,CAAS,CAAA,EACjCT,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAnC,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,qBAAA,CAAI,CAAA,CAC/B5D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,QAAA,CAAU,MAAA,CACV,GAAGN,CAAAA,CAAW,OAAO,CAAA,CACrB,GAAGA,CAAAA,CAAW,MAAM,CACtB,CAAA,CAEC,QAAA,CAAAkD,CAAAA,CAAS,GAAA,CAAKqB,CAAAA,EACbjE,GAAAA,CAACkE,CAAAA,CAAA,CAAoB,OAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,SAAA,CAC1C,QAAA,CAAAD,CAAAA,CAAAA,CADSA,CAEZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAIAzC,CAAAA,GAAW,MAAA,CAEXW,IAAAA,CAACgC,CAAAA,CAAA,CAAK,GAAA,CAAK5E,CAAAA,CAAK,IAAKP,CAAAA,CAAS,KAAA,CAAOC,CAAAA,CAAQ,GAAGK,GAAAA,CAC9C,QAAA,CAAA,CAAA6C,IAAAA,CAACiC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAjC,IAAAA,CAACkC,CAAAA,CAAA,CAAU,GAAA,CAAI,mBAAA,CACb,QAAA,CAAA,CAAArE,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU,QAAA,CAAU,GAAGN,CAAAA,CAAW,MAAM,CAAE,CAAA,CAAG,QAAA,CAAA,QAAA,CAE5D,CAAA,CAAO,iBAAA,CAAA,CAET,CAAA,CACAM,GAAAA,CAACsE,EAAA,CAAgB,QAAA,CAAA,wCAAA,CAAQ,CAAA,CAAA,CAC3B,CAAA,CACAnC,IAAAA,CAACoC,CAAAA,CAAA,CAAY,GAAA,CAAI,WAAA,CACd,QAAA,CAAA,CAAA7B,GAAAA,EACCP,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOoB,CAAAA,CACV,QAAA,CAAA,CAAApB,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOwB,CAAAA,CACV,QAAA,CAAA,CAAA3D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,4BAAA,CAAM,CAAA,CACxCmC,IAAAA,CAAC,MAAA,CAAA,CAAK,MAAO,CAAE,GAAGzC,CAAAA,CAAW,MAAM,CAAA,CAAG,GAAG4D,CAAQ,CAAA,CAC9C,QAAA,CAAA,CAAAZ,GAAAA,CAAe,IAAA,CAAK,IAAA,CAAGA,GAAAA,CAAe,SAAA,CAAU,IAAA,CAAA,CACnD,CAAA,CAAA,CACF,CAAA,CACCK,CAAAA,EACC/C,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAON,CAAAA,CAAW,qBAAqB,CAAA,CAC1C,QAAA,CAAAM,GAAAA,CAAClB,CAAAA,CAAA,CACC,KAAA,CAAO4D,GAAAA,CAAe,SAAA,CACtB,IAAA,CAAK,KACL,KAAA,CAAM,MAAA,CACR,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGDQ,CAAAA,EACCf,IAAAA,CAAA6B,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA7B,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOwB,CAAAA,CACV,QAAA,CAAA,CAAA3D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,4BAAA,CAAM,CAAA,CACxCA,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,GAAGN,CAAAA,CAAW,MAAM,CAAA,CAAG,GAAG4D,CAAQ,CAAA,CAC9C,QAAA,CAAAH,CAAAA,CAAkBzB,CAAS,CAAA,CAC9B,CAAA,CAAA,CACF,CAAA,CACAS,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOwB,CAAAA,CACV,QAAA,CAAA,CAAA3D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,qBAAA,CAAI,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,GAAGN,CAAAA,CAAW,MAAM,CAAA,CAAG,GAAG4D,CAAQ,CAAA,CAC9C,SAAAF,CAAAA,CAAmBP,GAAU,CAAA,CAChC,CAAA,CAAA,CACF,CAAA,CACAV,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOwB,CAAAA,CACV,QAAA,CAAA,CAAA3D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,qBAAA,CAAI,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,GAAGN,CAAAA,CAAW,MAAM,CAAA,CAAG,GAAG4D,CAAQ,CAAA,CAC9C,QAAA,CAAAD,CAAAA,CAAeP,GAAM,CAAA,CACxB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGDG,CAAAA,EAAgBL,CAAAA,CAAS,MAAA,CAAS,CAAA,EACjCT,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOwB,CAAAA,CACV,QAAA,CAAA,CAAA3D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,qBAAA,CAAI,CAAA,CACtCA,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,QAAA,CAAU,MAAA,CACV,GAAGN,CAAAA,CAAW,OAAO,CAAA,CACrB,GAAGA,CAAAA,CAAW,MAAM,CACtB,CAAA,CAEC,QAAA,CAAAkD,CAAAA,CAAS,GAAA,CAAKqB,CAAAA,EACbjE,GAAAA,CAACkE,CAAAA,CAAA,CAAoB,OAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,SAAA,CAC1C,QAAA,CAAAD,CAAAA,CAAAA,CADSA,CAEZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAMF9B,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK5C,CAAAA,CACL,KAAA,CAAOO,CAAAA,CACL,CAAE,OAAA,CAAS,MAAA,CAAQ,aAAA,CAAe,QAAA,CAAU,GAAGJ,CAAAA,CAAW,OAAO,CAAE,CAAA,CACnEA,CAAAA,CAAWV,CAAO,CAAA,CAClBC,CACF,CAAA,CACC,GAAGK,GAAAA,CAEH,QAAA,CAAA,CAAAoD,GAAAA,EACCP,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqB,CAAAA,CACV,QAAA,CAAA,CAAAxD,GAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,UAAA,CAAY,GAAA,CAAK,MAAA,CAAQ,CAAE,CAAA,CAAG,QAAA,CAAA,2BAAA,CAEjE,CAAA,CACAmC,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAGzC,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEA,QAAA,CAAA,CAAAyC,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,SAAA,CAAW,QAAS,CAAA,CAChC,QAAA,CAAA,CAAAnC,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,QAAA,CACV,UAAA,CAAY,IACZ,KAAA,CAAO,uCACT,CAAA,CAEC,QAAA,CAAA0C,GAAAA,CAAe,IAAA,CAClB,CAAA,CACAP,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO0B,CAAAA,CAAc,QAAA,CAAA,CAAAnB,GAAAA,CAAe,SAAA,CAAU,gBAAA,CAAA,CAAI,CAAA,CAAA,CACzD,CAAA,CACCK,CAAAA,EACC/C,GAAAA,CAAClB,CAAAA,CAAA,CACC,KAAA,CAAO4D,GAAAA,CAAe,SAAA,CACtB,IAAA,CAAK,IAAA,CACL,KAAA,CAAM,MAAA,CACR,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAGDM,CAAAA,EAAoBL,IAAoB,MAAA,CAAS,CAAA,EAChDR,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqB,CAAAA,CACV,QAAA,CAAA,CAAAxD,GAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,UAAA,CAAY,GAAA,CAAK,MAAA,CAAQ,CAAE,CAAA,CAAG,QAAA,CAAA,2BAAA,CAEjE,CAAA,CACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuD,CAAAA,CACT,QAAA,CAAAZ,GAAAA,CAAoB,GAAA,CAAI,CAAC6B,CAAAA,CAAMC,CAAAA,GAC9BtC,IAAAA,CAAC,KAAA,CAAA,CAAgB,MAAOsB,CAAAA,CACtB,QAAA,CAAA,CAAAtB,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuB,CAAAA,CACV,QAAA,CAAA,CAAA1D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO4D,GAAAA,CAAe,QAAA,CAAAY,CAAAA,CAAK,OAAA,CAAQ,CAAA,CACzCrC,IAAAA,CAAC,QAAK,KAAA,CAAO0B,CAAAA,CAAc,QAAA,CAAA,CAAAW,CAAAA,CAAK,UAAA,CAAW,GAAA,CAAA,CAAC,CAAA,CAAA,CAC9C,CAAA,CACAxE,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO8D,CAAAA,CACV,QAAA,CAAA9D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOF,EACLiE,CAAAA,CACAzB,EAAAA,CAAkBkC,CAAAA,CAAK,KAAK,CAAA,CAC5B,CAAE,KAAA,CAAO,CAAA,EAAGA,CAAAA,CAAK,UAAU,CAAA,CAAA,CAAI,CACjC,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAAA,CAbQC,CAcV,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAGDvB,CAAAA,EACCf,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqB,CAAAA,CACV,QAAA,CAAA,CAAAxD,GAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,WAAY,GAAA,CAAK,MAAA,CAAQ,CAAE,CAAA,CAAG,QAAA,CAAA,2BAAA,CAEjE,CAAA,CACAmC,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,mBAAA,CAAqB,2BAAA,CACrB,GAAGzC,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEA,QAAA,CAAA,CAAAyC,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOsB,CAAAA,CACV,QAAA,CAAA,CAAAzD,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,2BAAA,CAAK,CAAA,CAC/B5D,GAAAA,CAAC,OACC,KAAA,CAAO,CACL,QAAA,CAAU,QAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,uCACT,CAAA,CAEC,QAAA,CAAAmD,CAAAA,CAAkBzB,CAAS,CAAA,CAC9B,CAAA,CACA1B,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO8D,CAAAA,CACV,QAAA,CAAA9D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOF,CAAAA,CACLiE,CAAAA,CACA,CACE,eAAA,CACE,uCACJ,CAAA,CACA,CAAE,KAAA,CAAO,CAAA,EAAGrC,CAAS,GAAI,CAC3B,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAS,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOsB,CAAAA,CACV,QAAA,CAAA,CAAAzD,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4D,GAAAA,CAAc,QAAA,CAAA,oBAAA,CAAG,CAAA,CAC7B5D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,QAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,gBACT,CAAA,CAEC,QAAA,CAAAoD,CAAAA,CAAmBP,GAAU,CAAA,CAChC,CAAA,CACA7C,IAAC,KAAA,CAAA,CAAI,KAAA,CAAO8D,CAAAA,CACV,QAAA,CAAA9D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOF,CAAAA,CACLiE,CAAAA,CACA,CAAE,eAAA,CAAiB,gBAAiB,CAAA,CACpC,CAAE,KAAA,CAAO,CAAA,EAAGlB,GAAU,CAAA,CAAA,CAAI,CAC5B,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAV,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOsB,CAAAA,CACV,QAAA,CAAA,CAAAzD,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4D,GAAAA,CAAc,8BAAG,CAAA,CAC7B5D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,QAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,gBACT,CAAA,CAEC,QAAA,CAAAqD,CAAAA,CAAeP,GAAM,CAAA,CACxB,CAAA,CACA9C,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO8D,CAAAA,CACV,QAAA,CAAA9D,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOF,CAAAA,CACLiE,CAAAA,CACA,CAAE,eAAA,CAAiB,iBAAkB,CAAA,CACrC,CAAE,MAAO,CAAA,EAAGjB,GAAM,CAAA,CAAA,CAAI,CACxB,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGDG,CAAAA,EAAgBL,CAAAA,CAAS,MAAA,CAAS,CAAA,EACjCT,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqB,CAAAA,CACV,QAAA,CAAA,CAAAxD,GAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,UAAA,CAAY,GAAA,CAAK,MAAA,CAAQ,CAAE,CAAA,CAAG,QAAA,CAAA,iCAAA,CAEjE,CAAA,CACAA,IAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,QAAA,CAAU,MAAA,CACV,GAAGN,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEC,QAAA,CAAAkD,CAAAA,CAAS,GAAA,CAAKqB,CAAAA,EACbjE,IAACkE,CAAAA,CAAA,CAAoB,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,SAAA,CACxC,QAAA,CAAAD,CAAAA,CAAAA,CADSA,CAEZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAxB,EAAgB,WAAA,CAAc,iBAAA","file":"chunk-XU2XBAEW.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport type { Color } from \"../../../lib/types/common\";\n\n/**\n * EmotionMeter 컴포넌트의 props / EmotionMeter component props\n * @typedef {Object} EmotionMeterProps\n * @property {number} value - 감정 강도 값 (0-max) / Emotion intensity value (0-max)\n * @property {number} [max=100] - 최대값 / Maximum value\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 미터 크기 / Meter size\n * @property {\"blue\" | \"green\" | \"yellow\" | \"red\"} [color=\"blue\"] - 미터 색상 / Meter color\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface EmotionMeterProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n value: number;\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n color?: \"blue\" | \"green\" | \"yellow\" | \"red\" | Color;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * EmotionMeter 컴포넌트 / EmotionMeter component\n *\n * 감정 강도를 표시하는 미터 컴포넌트입니다.\n * Progress 컴포넌트와 유사하지만 감정 분석에 특화되어 있습니다.\n *\n * Meter component that displays emotion intensity.\n * Similar to Progress component but specialized for emotion analysis.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <EmotionMeter value={75} />\n *\n * @example\n * // 다양한 색상 / Various colors\n * <EmotionMeter\n * value={80}\n * color=\"green\"\n * size=\"lg\"\n * />\n *\n * @param {EmotionMeterProps} props - EmotionMeter 컴포넌트의 props / EmotionMeter component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} EmotionMeter 컴포넌트 / EmotionMeter component\n */\nconst EmotionMeter = React.forwardRef<HTMLDivElement, EmotionMeterProps>(\n (\n {\n dot: dotProp,\n style,\n value,\n max = 100,\n size = \"md\",\n color = \"blue\",\n ...props\n },\n ref,\n ) => {\n const sizeStyles: Record<string, React.CSSProperties> = {\n sm: resolveDot(\"h-2\"),\n md: resolveDot(\"h-3\"),\n lg: resolveDot(\"h-4\"),\n };\n\n // EmotionMeter는 특정 색상만 사용 (감정 분석 특화)\n const emotionColorStyles: Record<string, React.CSSProperties> = {\n blue: { backgroundColor: \"rgb(99 102 241)\" },\n green: { backgroundColor: \"rgb(34 197 94)\" },\n yellow: { backgroundColor: \"rgb(234 179 8)\" },\n red: { backgroundColor: \"rgb(239 68 68)\" },\n purple: { backgroundColor: \"rgb(168 85 247)\" },\n orange: { backgroundColor: \"rgb(249 115 22)\" },\n indigo: { backgroundColor: \"rgb(99 102 241)\" },\n pink: { backgroundColor: \"rgb(236 72 153)\" },\n gray: { backgroundColor: \"rgb(107 114 128)\" },\n };\n\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const containerStyle = mergeStyles(\n resolveDot(\"w-full rounded-full\"),\n sizeStyles[size],\n { backgroundColor: \"var(--color-muted, rgb(229 231 235))\" },\n resolveDot(dotProp),\n style,\n );\n\n const fillStyle = mergeStyles(\n { height: \"100%\", borderRadius: \"9999px\", transition: \"all 300ms ease\" },\n emotionColorStyles[color as string] ?? emotionColorStyles.blue,\n { width: `${percentage}%` },\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n <div style={fillStyle} />\n </div>\n );\n },\n);\nEmotionMeter.displayName = \"EmotionMeter\";\n\nexport { EmotionMeter };\n","\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { mergeStyles, resolveDot } from '../../../hooks/useDotMap';\n\n/**\n * EmotionButton 컴포넌트의 props / EmotionButton component props\n * @typedef {Object} EmotionButtonProps\n * @property {string} emotion - 감정 이모지 또는 텍스트 / Emotion emoji or text\n * @property {boolean} [isSelected=false] - 선택 상태 / Selected state\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 버튼 크기 / Button size\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface EmotionButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'className'> {\n emotion: string\n isSelected?: boolean\n size?: \"sm\" | \"md\" | \"lg\"\n dot?: string\n style?: React.CSSProperties\n}\n\n/**\n * EmotionButton 컴포넌트 / EmotionButton component\n *\n * 감정을 선택하는 버튼 컴포넌트입니다.\n * 이모지나 텍스트로 감정을 표시하며, 선택 상태를 지원합니다.\n *\n * Button component for selecting emotions.\n * Displays emotion as emoji or text and supports selected state.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <EmotionButton emotion=\"😊\" />\n *\n * @example\n * // 선택 상태 / Selected state\n * <EmotionButton\n * emotion=\"😊\"\n * isSelected\n * size=\"lg\"\n * />\n *\n * @param {EmotionButtonProps} props - EmotionButton 컴포넌트의 props / EmotionButton component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} EmotionButton 컴포넌트 / EmotionButton component\n */\nconst EmotionButton = React.forwardRef<HTMLButtonElement, EmotionButtonProps>(\n ({ dot: dotProp, style, emotion, isSelected = false, size = \"md\", onMouseEnter, onMouseLeave, onFocus, onBlur, ...props }, ref) => {\n const [isHovered, setIsHovered] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n\n const sizeStyles: Record<string, React.CSSProperties> = {\n sm: { width: '2rem', height: '2rem', fontSize: '0.875rem' },\n md: { width: '3rem', height: '3rem', fontSize: '1.125rem' },\n lg: { width: '4rem', height: '4rem', fontSize: '1.25rem' },\n }\n\n const computedStyle = useMemo(() => {\n const base: React.CSSProperties = {\n borderRadius: '9999px',\n borderWidth: '2px',\n borderStyle: 'solid',\n transition: 'all 200ms ease',\n outline: 'none',\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n }\n\n const selectedStyles: React.CSSProperties = isSelected\n ? { borderColor: 'rgb(99 102 241)', backgroundColor: 'rgb(238 242 255)' }\n : { borderColor: 'var(--color-border, rgb(209 213 219))', backgroundColor: 'var(--color-background, rgb(255 255 255))' }\n\n const hoverStyle: React.CSSProperties = isHovered\n ? { transform: 'scale(1.05)' }\n : {}\n\n const focusStyle: React.CSSProperties = isFocused\n ? { boxShadow: '0 0 0 1px var(--color-ring, rgb(99 102 241))' }\n : {}\n\n return mergeStyles(base, sizeStyles[size], selectedStyles, hoverStyle, focusStyle, resolveDot(dotProp), style)\n }, [isSelected, isHovered, isFocused, size, dotProp, style])\n\n return (\n <button\n ref={ref}\n style={computedStyle}\n onMouseEnter={(e) => { setIsHovered(true); onMouseEnter?.(e) }}\n onMouseLeave={(e) => { setIsHovered(false); onMouseLeave?.(e) }}\n onFocus={(e) => { setIsFocused(true); onFocus?.(e) }}\n onBlur={(e) => { setIsFocused(false); onBlur?.(e) }}\n {...props}\n >\n {emotion}\n </button>\n )\n }\n)\nEmotionButton.displayName = \"EmotionButton\"\n\nexport { EmotionButton }\n","\"use client\";\n\nimport React from \"react\";\nimport { EmotionButton } from \"./EmotionButton\";\nimport { EmotionMeter } from \"./EmotionMeter\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\n\n/**\n * EmotionSelector 컴포넌트의 props / EmotionSelector component props\n * @typedef {Object} EmotionSelectorProps\n * @property {string} [selectedEmotion] - 선택된 감정 키 / Selected emotion key\n * @property {(emotion: string) => void} [onEmotionSelect] - 감정 선택 콜백 / Emotion selection callback\n * @property {\"grid\" | \"list\" | \"compact\"} [layout=\"grid\"] - 레이아웃 타입 / Layout type\n * @property {boolean} [showIntensity=false] - 강도 조절 표시 여부 / Show intensity control\n * @property {number} [intensity=50] - 감정 강도 (0-100) / Emotion intensity (0-100)\n * @property {(intensity: number) => void} [onIntensityChange] - 강도 변경 콜백 / Intensity change callback\n * @property {Array<Object>} [emotions] - 감정 목록 / Emotions list\n * @property {string} emotions[].key - 감정 키 / Emotion key\n * @property {string} emotions[].label - 감정 라벨 / Emotion label\n * @property {string} [emotions[].icon] - 감정 아이콘 / Emotion icon\n * @property {string} [emotions[].color] - 감정 색상 / Emotion color\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 감정 버튼 크기 / Emotion button size\n * @property {\"button\" | \"card\" | \"chip\"} [variant=\"button\"] - 감정 표시 스타일 / Emotion display style\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\ninterface EmotionSelectorProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n selectedEmotion?: string;\n onEmotionSelect?: (emotion: string) => void;\n layout?: \"grid\" | \"list\" | \"compact\";\n showIntensity?: boolean;\n intensity?: number;\n onIntensityChange?: (intensity: number) => void;\n emotions?: Array<{\n key: string;\n label: string;\n icon?: string;\n color?: string;\n }>;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"button\" | \"card\" | \"chip\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst defaultEmotions = [\n { key: \"joy\", label: \"기쁨\", icon: \"smile\", color: \"yellow\" },\n { key: \"sadness\", label: \"슬픔\", icon: \"frown\", color: \"blue\" },\n { key: \"anger\", label: \"화남\", icon: \"angry\", color: \"red\" },\n { key: \"calm\", label: \"평온\", icon: \"heart\", color: \"green\" },\n { key: \"excitement\", label: \"설렘\", icon: \"star\", color: \"pink\" },\n { key: \"worry\", label: \"걱정\", icon: \"meh\", color: \"gray\" },\n { key: \"gratitude\", label: \"감사\", icon: \"heart\", color: \"purple\" },\n { key: \"loneliness\", label: \"외로움\", icon: \"user\", color: \"indigo\" },\n];\n\n/**\n * EmotionSelector 컴포넌트 / EmotionSelector component\n *\n * 감정을 선택하는 컴포넌트입니다.\n * 여러 감정 옵션을 제공하며, 강도 조절 기능을 포함할 수 있습니다.\n *\n * Component for selecting emotions.\n * Provides multiple emotion options and can include intensity control.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <EmotionSelector\n * selectedEmotion=\"joy\"\n * onEmotionSelect={(emotion) => console.log(emotion)}\n * />\n *\n * @example\n * // 강도 조절 포함 / With intensity control\n * <EmotionSelector\n * selectedEmotion=\"calm\"\n * onEmotionSelect={handleEmotionSelect}\n * showIntensity\n * intensity={intensity}\n * onIntensityChange={setIntensity}\n * variant=\"card\"\n * />\n *\n * @param {EmotionSelectorProps} props - EmotionSelector 컴포넌트의 props / EmotionSelector component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} EmotionSelector 컴포넌트 / EmotionSelector component\n */\nconst EmotionSelector = React.forwardRef<HTMLDivElement, EmotionSelectorProps>(\n (\n {\n dot: dotProp,\n style,\n selectedEmotion,\n onEmotionSelect,\n layout = \"grid\",\n showIntensity = false,\n intensity = 50,\n onIntensityChange,\n emotions = defaultEmotions,\n size = \"md\",\n variant = \"button\",\n ...props\n },\n ref,\n ) => {\n const handleEmotionClick = (emotionKey: string) => {\n onEmotionSelect?.(emotionKey);\n };\n\n const renderEmotionItem = (emotion: (typeof emotions)[0]) => {\n const isSelected = selectedEmotion === emotion.key;\n\n if (variant === \"button\") {\n return (\n <EmotionButton\n key={emotion.key}\n emotion={emotion.key}\n isSelected={isSelected}\n size={size}\n onClick={() => handleEmotionClick(emotion.key)}\n style={\n isSelected\n ? {\n boxShadow:\n \"0 0 0 1px var(--color-primary, rgb(99 102 241))\",\n outlineOffset: \"2px\",\n }\n : undefined\n }\n >\n {emotion.label}\n </EmotionButton>\n );\n }\n\n if (variant === \"card\") {\n const cardStyle: React.CSSProperties = mergeStyles(\n resolveDot(\"p-4 rounded-lg cursor-pointer\"),\n {\n borderWidth: \"2px\",\n borderStyle: \"solid\",\n transition: \"all 200ms ease\",\n borderColor: isSelected\n ? \"var(--color-primary, rgb(99 102 241))\"\n : \"var(--color-border, rgb(229 231 235))\",\n backgroundColor: isSelected\n ? \"color-mix(in srgb, var(--color-primary, rgb(99 102 241)) 5%, transparent)\"\n : \"transparent\",\n },\n );\n\n const iconWrapStyle: React.CSSProperties = mergeStyles(\n resolveDot(\"w-8 h-8 rounded-full\"),\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: isSelected\n ? \"var(--color-primary, rgb(99 102 241))\"\n : \"var(--color-muted, rgb(243 244 246))\",\n color: isSelected\n ? \"var(--color-primary-foreground, rgb(255 255 255))\"\n : undefined,\n },\n );\n\n return (\n <div\n key={emotion.key}\n style={cardStyle}\n onClick={() => handleEmotionClick(emotion.key)}\n >\n <div style={mergeStyles(resolveDot(\"flex items-center gap-3\"))}>\n <div style={iconWrapStyle}>\n {emotion.icon && (\n <span style={{ fontSize: \"1.125rem\" }}>\n {emotion.icon === \"smile\" && \"😊\"}\n {emotion.icon === \"frown\" && \"😢\"}\n {emotion.icon === \"angry\" && \"😠\"}\n {emotion.icon === \"heart\" && \"❤️\"}\n {emotion.icon === \"star\" && \"⭐\"}\n {emotion.icon === \"meh\" && \"😐\"}\n {emotion.icon === \"user\" && \"👤\"}\n </span>\n )}\n </div>\n <span\n style={{\n fontWeight: 500,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"120px\",\n }}\n >\n {emotion.label}\n </span>\n </div>\n </div>\n );\n }\n\n if (variant === \"chip\") {\n const chipStyle: React.CSSProperties = mergeStyles(\n resolveDot(\"rounded-full cursor-pointer text-sm font-medium\"),\n {\n ...resolveDot(\"py-1 px-3\"),\n transition: \"all 200ms ease\",\n backgroundColor: isSelected\n ? \"var(--color-primary, rgb(99 102 241))\"\n : \"var(--color-muted, rgb(243 244 246))\",\n color: isSelected\n ? \"var(--color-primary-foreground, rgb(255 255 255))\"\n : undefined,\n },\n );\n\n return (\n <div\n key={emotion.key}\n style={chipStyle}\n onClick={() => handleEmotionClick(emotion.key)}\n >\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"100px\",\n display: \"block\",\n }}\n >\n {emotion.label}\n </span>\n </div>\n );\n }\n\n return null;\n };\n\n const layoutStyles: Record<string, React.CSSProperties> = {\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(2, minmax(0, 1fr))\",\n ...resolveDot(\"gap-2\"),\n },\n list: {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n },\n compact: { display: \"flex\", flexWrap: \"wrap\", ...resolveDot(\"gap-1\") },\n };\n\n const containerStyle = mergeStyles(\n { display: \"flex\", flexDirection: \"column\", ...resolveDot(\"gap-4\") },\n resolveDot(dotProp),\n style,\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n <div style={layoutStyles[layout]}>\n {emotions.map(renderEmotionItem)}\n </div>\n\n {showIntensity && selectedEmotion && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n <div\n style={mergeStyles(resolveDot(\"flex items-center\"), {\n justifyContent: \"space-between\",\n })}\n >\n <span style={{ fontSize: \"0.875rem\", fontWeight: 500 }}>\n 감정 강도\n </span>\n <span\n style={{\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground, rgb(107 114 128))\",\n }}\n >\n {intensity}%\n </span>\n </div>\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={intensity}\n onChange={(e) => onIntensityChange?.(Number(e.target.value))}\n style={{\n width: \"100%\",\n ...resolveDot(\"h-2 rounded-lg\"),\n cursor: \"pointer\",\n appearance: \"none\",\n backgroundColor: \"var(--color-muted, rgb(229 231 235))\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, rgb(107 114 128))\",\n }}\n >\n <span>약함</span>\n <span>보통</span>\n <span>강함</span>\n </div>\n </div>\n )}\n\n {selectedEmotion && showIntensity && (\n <div style={resolveDot(\"flex justify-center\")}>\n <EmotionMeter value={intensity} size=\"md\" color=\"blue\" />\n </div>\n )}\n </div>\n );\n },\n);\n\nEmotionSelector.displayName = \"EmotionSelector\";\n\nexport { EmotionSelector };\nexport type { EmotionSelectorProps };\n","\"use client\";\n\nimport React from \"react\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"../../Card\";\nimport { Badge } from \"../../Badge\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { EmotionMeter } from \"./EmotionMeter\";\n\n/**\n * EmotionAnalysis 컴포넌트의 props / EmotionAnalysis component props\n * @typedef {Object} EmotionAnalysisProps\n * @property {Object} [primaryEmotion] - 주요 감정 정보 / Primary emotion information\n * @property {string} primaryEmotion.name - 감정 이름 / Emotion name\n * @property {number} primaryEmotion.intensity - 감정 강도 (0-100) / Emotion intensity (0-100)\n * @property {string} [primaryEmotion.color] - 감정 색상 / Emotion color\n * @property {Array<Object>} [emotionDistribution] - 감정 분포 배열 / Emotion distribution array\n * @property {string} emotionDistribution[].emotion - 감정 이름 / Emotion name\n * @property {number} emotionDistribution[].percentage - 감정 비율 (0-100) / Emotion percentage (0-100)\n * @property {string} emotionDistribution[].color - 감정 색상 / Emotion color\n * @property {string[]} [keywords] - 키워드 배열 / Keywords array\n * @property {number} [intensity=50] - 전체 강도 (0-100) / Overall intensity (0-100)\n * @property {number} [positivity=70] - 긍정성 (0-100) / Positivity (0-100)\n * @property {number} [energy=60] - 에너지 (0-100) / Energy (0-100)\n * @property {boolean} [showMeter=true] - 강도 미터 표시 여부 / Show intensity meter\n * @property {boolean} [showDistribution=true] - 분포 표시 여부 / Show distribution\n * @property {boolean} [showKeywords=true] - 키워드 표시 여부 / Show keywords\n * @property {boolean} [showMetrics=true] - 메트릭 표시 여부 / Show metrics\n * @property {\"compact\" | \"detailed\" | \"card\"} [layout=\"detailed\"] - 레이아웃 타입 / Layout type\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\ninterface EmotionAnalysisProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n primaryEmotion?: {\n name: string;\n intensity: number;\n color?: string;\n };\n emotionDistribution?: Array<{\n emotion: string;\n percentage: number;\n color: string;\n }>;\n keywords?: string[];\n intensity?: number;\n positivity?: number;\n energy?: number;\n showMeter?: boolean;\n showDistribution?: boolean;\n showKeywords?: boolean;\n showMetrics?: boolean;\n layout?: \"compact\" | \"detailed\" | \"card\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// Maps the color token from emotionDistribution to an inline background color\nconst colorTokenToStyle = (token: string): React.CSSProperties => {\n const map: Record<string, string> = {\n yellow: \"rgb(234 179 8)\",\n green: \"rgb(34 197 94)\",\n blue: \"rgb(59 130 246)\",\n red: \"rgb(239 68 68)\",\n purple: \"rgb(168 85 247)\",\n orange: \"rgb(249 115 22)\",\n indigo: \"rgb(99 102 241)\",\n pink: \"rgb(236 72 153)\",\n gray: \"rgb(107 114 128)\",\n };\n return { backgroundColor: map[token] ?? map.gray };\n};\n\n/**\n * EmotionAnalysis 컴포넌트 / EmotionAnalysis component\n *\n * 감정 분석 결과를 표시하는 컴포넌트입니다.\n * 주요 감정, 감정 분포, 키워드, 메트릭(강도, 긍정성, 에너지)을 표시할 수 있습니다.\n *\n * Component that displays emotion analysis results.\n * Can display primary emotion, emotion distribution, keywords, and metrics (intensity, positivity, energy).\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <EmotionAnalysis\n * primaryEmotion={{ name: \"기쁨\", intensity: 80 }}\n * keywords={[\"행복\", \"만족\"]}\n * />\n *\n * @example\n * // 상세 레이아웃 / Detailed layout\n * <EmotionAnalysis\n * primaryEmotion={{ name: \"평온\", intensity: 65, color: \"green\" }}\n * emotionDistribution={[\n * { emotion: \"기쁨\", percentage: 40, color: \"yellow\" },\n * { emotion: \"평온\", percentage: 60, color: \"green\" }\n * ]}\n * keywords={[\"안정\", \"편안\"]}\n * intensity={65}\n * positivity={75}\n * energy={50}\n * layout=\"detailed\"\n * />\n *\n * @param {EmotionAnalysisProps} props - EmotionAnalysis 컴포넌트의 props / EmotionAnalysis component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} EmotionAnalysis 컴포넌트 / EmotionAnalysis component\n */\nconst EmotionAnalysis = React.forwardRef<HTMLDivElement, EmotionAnalysisProps>(\n (\n {\n dot: dotProp,\n style,\n primaryEmotion,\n emotionDistribution = [],\n keywords = [],\n intensity = 50,\n positivity = 70,\n energy = 60,\n showMeter = true,\n showDistribution = true,\n showKeywords = true,\n showMetrics = true,\n layout = \"detailed\",\n ...props\n },\n ref,\n ) => {\n const getIntensityLabel = (value: number) => {\n if (value < 30) return \"약함\";\n if (value < 70) return \"보통\";\n return \"강함\";\n };\n\n const getPositivityLabel = (value: number) => {\n if (value < 30) return \"부정적\";\n if (value < 70) return \"중립적\";\n return \"긍정적\";\n };\n\n const getEnergyLabel = (value: number) => {\n if (value < 30) return \"낮음\";\n if (value < 70) return \"보통\";\n return \"높음\";\n };\n\n const mutedFg: React.CSSProperties = {\n color: \"var(--color-muted-foreground, rgb(107 114 128))\",\n };\n const spaceY3: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n };\n const spaceY4: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-4\"),\n };\n const spaceY2: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n };\n const flexBetween: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n };\n const textSm: React.CSSProperties = { fontSize: \"0.875rem\" };\n const textSmMedium: React.CSSProperties = {\n fontSize: \"0.875rem\",\n fontWeight: 500,\n };\n const textSmMuted: React.CSSProperties = { ...textSm, ...mutedFg };\n const progressTrack: React.CSSProperties = {\n width: \"100%\",\n backgroundColor: \"var(--color-muted, rgb(229 231 235))\",\n borderRadius: \"9999px\",\n ...resolveDot(\"h-2\"),\n };\n const progressBar: React.CSSProperties = {\n ...resolveDot(\"h-2\"),\n borderRadius: \"9999px\",\n transition: \"all 300ms ease\",\n };\n\n if (layout === \"compact\") {\n return (\n <div\n ref={ref}\n style={mergeStyles(spaceY3, resolveDot(dotProp), style)}\n {...props}\n >\n {primaryEmotion && (\n <div style={flexBetween}>\n <span style={textSmMedium}>주요 감정:</span>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <span style={textSmMuted}>\n {primaryEmotion.name} ({primaryEmotion.intensity}%)\n </span>\n {showMeter && (\n <EmotionMeter\n value={primaryEmotion.intensity}\n size=\"sm\"\n color=\"blue\"\n />\n )}\n </div>\n </div>\n )}\n\n {showMetrics && (\n <>\n <div style={flexBetween}>\n <span style={textSmMedium}>감정 강도:</span>\n <span style={textSmMuted}>{getIntensityLabel(intensity)}</span>\n </div>\n <div style={flexBetween}>\n <span style={textSmMedium}>긍정성:</span>\n <span style={textSmMuted}>\n {getPositivityLabel(positivity)}\n </span>\n </div>\n <div style={flexBetween}>\n <span style={textSmMedium}>에너지:</span>\n <span style={textSmMuted}>{getEnergyLabel(energy)}</span>\n </div>\n </>\n )}\n\n {showKeywords && keywords.length > 0 && (\n <div>\n <span style={textSmMedium}>키워드:</span>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n ...resolveDot(\"gap-1\"),\n ...resolveDot(\"mt-1\"),\n }}\n >\n {keywords.map((keyword) => (\n <Badge key={keyword} variant=\"secondary\" dot=\"text-xs\">\n {keyword}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n }\n\n if (layout === \"card\") {\n return (\n <Card ref={ref} dot={dotProp} style={style} {...props}>\n <CardHeader>\n <CardTitle dot=\"flex items-center\">\n <span style={{ fontSize: \"1.5rem\", ...resolveDot(\"mr-2\") }}>\n ✨\n </span>\n AI 분석\n </CardTitle>\n <CardDescription>감정 분석 결과</CardDescription>\n </CardHeader>\n <CardContent dot=\"space-y-4\">\n {primaryEmotion && (\n <div style={spaceY3}>\n <div style={textSm}>\n <span style={{ fontWeight: 500 }}>주요 감정:</span>\n <span style={{ ...resolveDot(\"ml-2\"), ...mutedFg }}>\n {primaryEmotion.name} ({primaryEmotion.intensity}%)\n </span>\n </div>\n {showMeter && (\n <div style={resolveDot(\"flex justify-center\")}>\n <EmotionMeter\n value={primaryEmotion.intensity}\n size=\"md\"\n color=\"blue\"\n />\n </div>\n )}\n </div>\n )}\n\n {showMetrics && (\n <>\n <div style={textSm}>\n <span style={{ fontWeight: 500 }}>감정 강도:</span>\n <span style={{ ...resolveDot(\"ml-2\"), ...mutedFg }}>\n {getIntensityLabel(intensity)}\n </span>\n </div>\n <div style={textSm}>\n <span style={{ fontWeight: 500 }}>긍정성:</span>\n <span style={{ ...resolveDot(\"ml-2\"), ...mutedFg }}>\n {getPositivityLabel(positivity)}\n </span>\n </div>\n <div style={textSm}>\n <span style={{ fontWeight: 500 }}>에너지:</span>\n <span style={{ ...resolveDot(\"ml-2\"), ...mutedFg }}>\n {getEnergyLabel(energy)}\n </span>\n </div>\n </>\n )}\n\n {showKeywords && keywords.length > 0 && (\n <div style={textSm}>\n <span style={{ fontWeight: 500 }}>키워드:</span>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n ...resolveDot(\"gap-1\"),\n ...resolveDot(\"mt-1\"),\n }}\n >\n {keywords.map((keyword) => (\n <Badge key={keyword} variant=\"secondary\" dot=\"text-xs\">\n {keyword}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n );\n }\n\n // detailed layout (default)\n return (\n <div\n ref={ref}\n style={mergeStyles(\n { display: \"flex\", flexDirection: \"column\", ...resolveDot(\"gap-6\") },\n resolveDot(dotProp),\n style,\n )}\n {...props}\n >\n {primaryEmotion && (\n <div style={spaceY4}>\n <h3 style={{ fontSize: \"1.125rem\", fontWeight: 600, margin: 0 }}>\n 주요 감정\n </h3>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n <div style={{ textAlign: \"center\" }}>\n <div\n style={{\n fontSize: \"1.5rem\",\n fontWeight: 700,\n color: \"var(--color-primary, rgb(99 102 241))\",\n }}\n >\n {primaryEmotion.name}\n </div>\n <div style={textSmMuted}>{primaryEmotion.intensity}% 강도</div>\n </div>\n {showMeter && (\n <EmotionMeter\n value={primaryEmotion.intensity}\n size=\"lg\"\n color=\"blue\"\n />\n )}\n </div>\n </div>\n )}\n\n {showDistribution && emotionDistribution.length > 0 && (\n <div style={spaceY4}>\n <h3 style={{ fontSize: \"1.125rem\", fontWeight: 600, margin: 0 }}>\n 감정 분포\n </h3>\n <div style={spaceY3}>\n {emotionDistribution.map((item, index) => (\n <div key={index} style={spaceY2}>\n <div style={flexBetween}>\n <span style={textSmMedium}>{item.emotion}</span>\n <span style={textSmMuted}>{item.percentage}%</span>\n </div>\n <div style={progressTrack}>\n <div\n style={mergeStyles(\n progressBar,\n colorTokenToStyle(item.color),\n { width: `${item.percentage}%` },\n )}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {showMetrics && (\n <div style={spaceY4}>\n <h3 style={{ fontSize: \"1.125rem\", fontWeight: 600, margin: 0 }}>\n 분석 지표\n </h3>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(1, minmax(0, 1fr))\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n <div style={spaceY2}>\n <div style={textSmMedium}>감정 강도</div>\n <div\n style={{\n fontSize: \"1.5rem\",\n fontWeight: 700,\n color: \"var(--color-primary, rgb(99 102 241))\",\n }}\n >\n {getIntensityLabel(intensity)}\n </div>\n <div style={progressTrack}>\n <div\n style={mergeStyles(\n progressBar,\n {\n backgroundColor:\n \"var(--color-primary, rgb(99 102 241))\",\n },\n { width: `${intensity}%` },\n )}\n />\n </div>\n </div>\n <div style={spaceY2}>\n <div style={textSmMedium}>긍정성</div>\n <div\n style={{\n fontSize: \"1.5rem\",\n fontWeight: 700,\n color: \"rgb(22 163 74)\",\n }}\n >\n {getPositivityLabel(positivity)}\n </div>\n <div style={progressTrack}>\n <div\n style={mergeStyles(\n progressBar,\n { backgroundColor: \"rgb(34 197 94)\" },\n { width: `${positivity}%` },\n )}\n />\n </div>\n </div>\n <div style={spaceY2}>\n <div style={textSmMedium}>에너지</div>\n <div\n style={{\n fontSize: \"1.5rem\",\n fontWeight: 700,\n color: \"rgb(234 88 12)\",\n }}\n >\n {getEnergyLabel(energy)}\n </div>\n <div style={progressTrack}>\n <div\n style={mergeStyles(\n progressBar,\n { backgroundColor: \"rgb(249 115 22)\" },\n { width: `${energy}%` },\n )}\n />\n </div>\n </div>\n </div>\n </div>\n )}\n\n {showKeywords && keywords.length > 0 && (\n <div style={spaceY4}>\n <h3 style={{ fontSize: \"1.125rem\", fontWeight: 600, margin: 0 }}>\n 감정 키워드\n </h3>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n {keywords.map((keyword) => (\n <Badge key={keyword} variant=\"outline\" dot=\"text-sm\">\n {keyword}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nEmotionAnalysis.displayName = \"EmotionAnalysis\";\n\nexport { EmotionAnalysis };\nexport type { EmotionAnalysisProps };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {d,e}from'./chunk-OBMOTQEU.mjs';import i,{useState,useMemo}from'react';import {dotVariants,dot}from'@hua-labs/dot';import {jsx}from'react/jsx-runtime';var u=t=>dot(t),P=dotVariants({base:"relative flex shrink-0 overflow-hidden rounded-full",variants:{size:{sm:"w-8 h-8 text-xs",md:"w-10 h-10 text-sm",lg:"w-12 h-12 text-base"},variant:{default:"",glass:"backdrop-blur-sm"}},defaultVariants:{size:"md",variant:"default"}}),T={boxShadow:"inset 0 0 0 1px rgba(255, 255, 255, 0.3)"},h=i.forwardRef(({dot:t,size:e$1="md",variant:r="default",src:s,alt:a,fallbackText:m,style:d$1,children:f,...g},S)=>{let[b,A]=useState(false),x=()=>m||f||(a?a.charAt(0).toUpperCase():"U"),R=s&&!b,y=useMemo(()=>{let w=P({size:e$1,variant:r});return d(w,r==="glass"?T:void 0,e(t),d$1)},[e$1,r,t,d$1]);return jsx("div",{ref:S,style:y,...g,children:R?jsx(p,{src:s,alt:a||"avatar",onError:()=>A(true)}):jsx(v,{children:x()})})});h.displayName="Avatar";var p=i.forwardRef(({dot:t,style:e$1,...r},s)=>{let a=useMemo(()=>d(u("h-full w-full"),{aspectRatio:"1",objectFit:"cover",objectPosition:"center"},e(t),e$1),[t,e$1]);return jsx("img",{ref:s,style:a,...r})});p.displayName="AvatarImage";var v=i.forwardRef(({dot:t,style:e$1,...r},s)=>{let a=useMemo(()=>d(u("flex h-full w-full items-center justify-center rounded-full font-semibold"),{backgroundColor:"var(--color-primary)",color:"var(--color-primary-foreground)"},e(t),e$1),[t,e$1]);return jsx("div",{ref:s,style:a,...r})});v.displayName="AvatarFallback";export{h as a,p as b,v as c};//# sourceMappingURL=chunk-XXHDNZTG.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-XXHDNZTG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Avatar.tsx"],"names":["s","input","dotFn","avatarVariantStyles","dotVariants","GLASS_EXTRAS","Avatar","React","dotProp","size","variant","src","alt","fallbackText","style","children","props","ref","imgError","setImgError","useState","getFallbackContent","showImage","computedStyle","useMemo","base","mergeStyles","resolveDot","jsx","AvatarImage","AvatarFallback"],"mappings":"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","file":"chunk-XXHDNZTG.mjs","sourcesContent":["\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\"\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\"\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties\n\nexport const avatarVariantStyles = dotVariants(\n {\n base: \"relative flex shrink-0 overflow-hidden rounded-full\",\n variants: {\n size: {\n sm: \"w-8 h-8 text-xs\",\n md: \"w-10 h-10 text-sm\",\n lg: \"w-12 h-12 text-base\",\n },\n variant: {\n default: \"\",\n glass: \"backdrop-blur-sm\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/** Glass variant ring effect — not expressible in dot utilities */\nconst GLASS_EXTRAS: React.CSSProperties = {\n boxShadow: 'inset 0 0 0 1px rgba(255, 255, 255, 0.3)',\n}\n\n/**\n * Avatar 컴포넌트의 props / Avatar component props\n */\nexport interface AvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'className'> {\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"glass\"\n src?: string\n alt?: string\n fallbackText?: string\n dot?: string\n style?: React.CSSProperties\n}\n\nexport interface AvatarImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'className'> {\n dot?: string\n style?: React.CSSProperties\n}\n\nexport interface AvatarFallbackProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'className'> {\n dot?: string\n style?: React.CSSProperties\n}\n\n/**\n * Avatar 컴포넌트 / Avatar component\n *\n * 사용자 프로필 이미지를 표시하는 컴포넌트입니다.\n *\n * @example\n * <Avatar src=\"/user.jpg\" alt=\"사용자\" />\n * <Avatar alt=\"홍길동\">홍</Avatar>\n * <Avatar variant=\"glass\" size=\"lg\" src=\"/user.jpg\" alt=\"사용자\" />\n */\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ dot: dotProp, size = \"md\", variant = \"default\", src, alt, fallbackText, style, children, ...props }, ref) => {\n const [imgError, setImgError] = useState(false)\n\n const getFallbackContent = () => {\n if (fallbackText) return fallbackText\n if (children) return children\n if (alt) return alt.charAt(0).toUpperCase()\n return \"U\"\n }\n\n const showImage = src && !imgError\n\n const computedStyle = useMemo(() => {\n const base = avatarVariantStyles({ size, variant }) as React.CSSProperties\n return mergeStyles(\n base,\n variant === \"glass\" ? GLASS_EXTRAS : undefined,\n resolveDot(dotProp),\n style,\n )\n }, [size, variant, dotProp, style])\n\n return (\n <div\n ref={ref}\n style={computedStyle}\n {...props}\n >\n {showImage ? (\n <AvatarImage\n src={src}\n alt={alt || \"avatar\"}\n onError={() => setImgError(true)}\n />\n ) : (\n <AvatarFallback>\n {getFallbackContent()}\n </AvatarFallback>\n )}\n </div>\n )\n }\n)\nAvatar.displayName = \"Avatar\"\n\nconst AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(() => mergeStyles(\n s(\"h-full w-full\"),\n { aspectRatio: '1', objectFit: 'cover', objectPosition: 'center' },\n resolveDot(dotProp),\n style,\n ), [dotProp, style])\n\n return (\n <img\n ref={ref}\n style={computedStyle}\n {...props}\n />\n )\n }\n)\nAvatarImage.displayName = \"AvatarImage\"\n\nconst AvatarFallback = React.forwardRef<HTMLDivElement, AvatarFallbackProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(() => mergeStyles(\n s(\"flex h-full w-full items-center justify-center rounded-full font-semibold\"),\n {\n backgroundColor: 'var(--color-primary)',\n color: 'var(--color-primary-foreground)',\n },\n resolveDot(dotProp),\n style,\n ), [dotProp, style])\n\n return (\n <div\n ref={ref}\n style={computedStyle}\n {...props}\n />\n )\n }\n)\nAvatarFallback.displayName = \"AvatarFallback\"\n\nexport { Avatar, AvatarImage, AvatarFallback }\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {b,d}from'./chunk-OBMOTQEU.mjs';import p,{useMemo}from'react';import {dot}from'@hua-labs/dot';import {jsx}from'react/jsx-runtime';var P=p.forwardRef(({as:d$1="div",size:s="base",color:t="default",dot:e,style:a,children:m,...c},i)=>{let o=b(),l=useMemo(()=>d(e?dot(e,o):{},a),[e,o,a]),{className:v,...f}=c;return jsx(d$1,{ref:i,...f,className:"hua-prose","data-prose-size":s!=="base"?s:void 0,"data-prose-color":t!=="default"?t:void 0,style:l,children:m})});P.displayName="Prose";export{P as a};//# sourceMappingURL=chunk-YW5DA7Q6.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-YW5DA7Q6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Prose.tsx"],"names":["Prose","React","Tag","size","color","dotProp","style","children","props","ref","env","useDotEnv","computedStyle","useMemo","mergeStyles","dotFn","_className","safeProps","jsx"],"mappings":"yIAmEA,IAAMA,CAAAA,CAAQC,EAAM,UAAA,CAClB,CACE,CACE,EAAA,CAAIC,GAAAA,CAAM,MACV,IAAA,CAAAC,CAAAA,CAAO,OACP,KAAA,CAAAC,CAAAA,CAAQ,UACR,GAAA,CAAKC,CAAAA,CACL,MAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,GAAGC,CACL,EACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAMC,CAAAA,GACNC,CAAAA,CAAgBC,OAAAA,CACpB,IACEC,CAAAA,CACET,CAAAA,CAAWU,GAAAA,CAAMV,EAASK,CAAG,CAAA,CAA4B,EAAC,CAC1DJ,CACF,EACF,CAACD,CAAAA,CAASK,EAAKJ,CAAK,CACtB,EAGM,CAAE,SAAA,CAAWU,EAAY,GAAGC,CAAU,EAAIT,CAAAA,CAKhD,OACEU,GAAAA,CAAChB,GAAAA,CAAA,CACC,GAAA,CAAKO,EACJ,GAAGQ,CAAAA,CACJ,UAAU,WAAA,CACV,iBAAA,CAAiBd,IAAS,MAAA,CAASA,CAAAA,CAAO,OAC1C,kBAAA,CAAkBC,CAAAA,GAAU,UAAYA,CAAAA,CAAQ,MAAA,CAChD,MAAOQ,CAAAA,CAEN,QAAA,CAAAL,EACH,CAEJ,CACF,EACAP,CAAAA,CAAM,WAAA,CAAc,OAAA","file":"chunk-YW5DA7Q6.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { dot as dotFn } from \"@hua-labs/dot\";\nimport { useDotEnv } from \"../hooks/useDotEnv\";\nimport { mergeStyles } from \"../hooks/useDotMap\";\n\ntype ProseElement =\n | \"div\"\n | \"article\"\n | \"section\"\n | \"main\"\n | \"aside\"\n | \"nav\"\n | \"header\"\n | \"footer\";\n\nexport interface ProseProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"className\"\n> {\n /** Semantic HTML element to render */\n as?: ProseElement;\n /** Typography size scale */\n size?: \"sm\" | \"base\" | \"lg\";\n /** Text color variant */\n color?: \"default\" | \"gray\";\n /** Additional dot utility styles */\n dot?: string;\n children?: React.ReactNode;\n}\n\n/**\n * Prose — Rich content typography container\n *\n * Provides consistent typography styling for markdown-like content\n * (headings, paragraphs, lists, blockquotes, code, tables) using\n * CSS variables for automatic light/dark theme support.\n *\n * No Tailwind typography plugin required.\n *\n * @remarks\n * Requires the prose CSS file to be imported in your app:\n * ```tsx\n * import '@hua-labs/ui/styles/prose.css';\n * ```\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Prose>\n * <h1>Title</h1>\n * <p>Paragraph text...</p>\n * </Prose>\n *\n * // With size and dot prop\n * <Prose size=\"lg\" dot=\"mt-4\">\n * <h2>Section</h2>\n * <p>Content</p>\n * </Prose>\n *\n * // Gray color variant\n * <Prose color=\"gray\">\n * <p>Muted text content</p>\n * </Prose>\n * ```\n */\nconst Prose = React.forwardRef<HTMLElement, ProseProps>(\n (\n {\n as: Tag = \"div\",\n size = \"base\",\n color = \"default\",\n dot: dotProp,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const env = useDotEnv();\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n dotProp ? (dotFn(dotProp, env) as React.CSSProperties) : {},\n style,\n ),\n [dotProp, env, style],\n );\n\n // Destructure className from props to prevent it from overriding hua-prose\n const { className: _className, ...safeProps } = props as Record<\n string,\n unknown\n >;\n\n return (\n <Tag\n ref={ref as React.Ref<never>}\n {...safeProps}\n className=\"hua-prose\"\n data-prose-size={size !== \"base\" ? size : undefined}\n data-prose-color={color !== \"default\" ? color : undefined}\n style={computedStyle}\n >\n {children}\n </Tag>\n );\n },\n);\nProse.displayName = \"Prose\";\n\nexport { Prose };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {m}from'./chunk-NSDWT2JM.mjs';import {e,d}from'./chunk-OBMOTQEU.mjs';import v,{useState,useMemo}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {dot}from'@hua-labs/dot';var te={width:"100%"},oe={display:"flex"},F={pills:{backgroundColor:"var(--color-muted)",...e("p-1 rounded-xl")},underline:{borderBottom:"1px solid var(--color-border)"},cards:{backgroundColor:"color-mix(in srgb, var(--color-muted) 50%, transparent)",...e("p-1 rounded-xl")}},Y={small:e("gap-1"),medium:e("gap-2"),large:e("gap-3")},re={...e("rounded-lg"),fontSize:"0.875rem",fontWeight:500,transition:"all 200ms ease-in-out",cursor:"pointer",outline:"none",border:"none",background:"none",lineHeight:1.25},z={pills:{backgroundColor:"var(--color-background)",color:"var(--color-foreground)",boxShadow:"0 1px 2px 0 rgba(0,0,0,0.05)"},underline:{borderBottom:"2px solid var(--color-primary)",color:"var(--color-primary)",borderRadius:0,paddingBottom:"calc(0.5rem - 2px)"},cards:{backgroundColor:"var(--color-background)",color:"var(--color-foreground)",boxShadow:"0 1px 2px 0 rgba(0,0,0,0.05)",border:"1px solid var(--color-border)"}},j={pills:{color:"var(--color-muted-foreground)"},underline:{borderBottom:"2px solid transparent",color:"var(--color-muted-foreground)",borderRadius:0,paddingBottom:"calc(0.5rem - 2px)"},cards:{color:"var(--color-muted-foreground)"}},ne={color:"var(--color-foreground)"},X={small:{fontSize:"0.75rem",...e("py-1 px-2")},medium:{fontSize:"0.875rem",...e("py-2 px-3")},large:{fontSize:"1rem",...e("py-3 px-4")}},ie={outline:"none",boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)"},ae={...e("mt-4")},q=v.forwardRef(({dot:r,style:n,value:e$1,defaultValue:o,onValueChange:t,variant:a="pills",scale:d$1="medium",children:p,...l},m)=>{let [u,g]=useState(e$1||o||""),R=e$1!==void 0,x=R?e$1:u;v.useEffect(()=>{e$1!==void 0&&g(e$1);},[e$1]);let L=useMemo(()=>d(te,e(r),n),[r,n]);return jsx("div",{ref:m,style:L,...l,children:v.Children.map(p,C=>v.isValidElement(C)?v.cloneElement(C,{value:x,variant:a,scale:d$1}):C)})});q.displayName="Navigation";var U=v.forwardRef(({dot:r,style:n,value:e$1,onValueChange:o,variant:t="pills",scale:a="medium",children:d$1,...p},l)=>{let m=useMemo(()=>{var u,g;return d(oe,(u=F[t])!=null?u:F.pills,(g=Y[a])!=null?g:Y.medium,e(r),n)},[t,a,r,n]);return jsx("div",{ref:l,style:m,...p,children:v.Children.map(d$1,u=>v.isValidElement(u)?v.cloneElement(u,{value:e$1,variant:t,scale:a}):u)})});U.displayName="NavigationList";var G=v.forwardRef(({dot:r,style:n,value:e$1,onValueChange:o,variant:t="pills",scale:a="medium",active:d$1=false,children:p,onClick:l,...m},u)=>{let[g,R]=useState(false),[x,S]=useState(false),L=useMemo(()=>{var E,c,y;return d(re,(E=X[a])!=null?E:X.medium,d$1?(c=z[t])!=null?c:z.pills:(y=j[t])!=null?y:j.pills,g&&!d$1?ne:void 0,x?ie:void 0,e(r),n)},[t,a,d$1,g,x,r,n]);return jsx("button",{ref:u,type:"button",style:L,onClick:E=>{o==null||o(e$1),l==null||l(E);},onMouseEnter:()=>R(true),onMouseLeave:()=>R(false),onFocus:()=>S(true),onBlur:()=>S(false),...m,children:p})});G.displayName="NavigationItem";var K=v.forwardRef(({dot:r,style:n,active:e$1=false,...o},t)=>{if(!e$1)return null;let a=d(ae,e(r),n);return jsx("div",{ref:t,style:a,...o})});K.displayName="NavigationContent";var D=q;D.List=U;D.Item=G;D.Content=K;var se={display:"flex",alignItems:"center",justifyContent:"center",...e("gap-1")},le={display:"inline-flex",alignItems:"center",justifyContent:"center",fontWeight:500,transition:"background-color 150ms ease-in-out, color 150ms ease-in-out, opacity 150ms ease-in-out, border-color 150ms ease-in-out",cursor:"pointer",outline:"none",border:"none",background:"none",padding:0,userSelect:"none"},ce={pointerEvents:"none",opacity:.5},$={sm:{height:"32px",minWidth:"32px",...e("px-2"),fontSize:"14px"},md:{height:"40px",minWidth:"40px",...e("px-3"),fontSize:"14px"},lg:{height:"48px",minWidth:"48px",...e("px-4"),fontSize:"16px"}},de={square:{borderRadius:"6px"},circle:{borderRadius:"9999px",aspectRatio:"1 / 1",padding:"0"}},ue={default:{border:"none",backgroundColor:"var(--color-background)",color:"var(--color-foreground)"},outlined:{border:"1px solid var(--color-border)",backgroundColor:"var(--color-background)",color:"var(--color-foreground)"},minimal:{border:"none",backgroundColor:"transparent",color:"var(--color-foreground)"}},pe={default:{border:"none",backgroundColor:"var(--color-primary)",color:"var(--color-primary-foreground)"},outlined:{border:"1px solid var(--color-primary)",backgroundColor:"var(--color-primary)",color:"var(--color-primary-foreground)"},minimal:{border:"none",backgroundColor:"color-mix(in srgb, var(--color-primary) 10%, transparent)",color:"var(--color-primary)"}},me={default:{backgroundColor:"var(--color-muted)"},outlined:{backgroundColor:"var(--color-muted)"},minimal:{backgroundColor:"var(--color-muted)"}},fe={outline:"none",boxShadow:"0 0 0 2px var(--color-background), 0 0 0 3px var(--color-ring)"},ge={display:"inline-flex",alignItems:"center",justifyContent:"center",...e("px-3"),fontSize:"14px",fontWeight:500,color:"var(--color-muted-foreground)",userSelect:"none"},M={width:"16px",height:"16px",flexShrink:0},Se={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"space-between",...e("gap-4")},ve={fontSize:"14px",color:"var(--color-foreground)"},T=v.memo(function({onClick:n,isActive:e=false,disabled:o=false,variant:t,size:a,shape:d$1,children:p,...l}){let[m,u]=useState(false),[g,R]=useState(false),x=useMemo(()=>{let S=e?pe[t]:ue[t];return d(le,$[a],de[d$1],S,o?ce:void 0,!e&&m?me[t]:void 0,g?fe:void 0)},[t,a,d$1,e,o,m,g]);return jsx("button",{type:"button",style:x,onClick:n,disabled:o,onMouseEnter:()=>{o||u(true);},onMouseLeave:()=>u(false),onFocus:()=>R(true),onBlur:()=>R(false),...l,children:p})}),_=v.forwardRef(({dot:r,style:n,currentPage:e$1,totalPages:o,onPageChange:t,showFirstLast:a=true,showPrevNext:d$1=true,maxVisiblePages:p=5,size:l="md",variant:m="default",shape:u="square",...g},R)=>{let x=()=>{let c=[],y=Math.floor(p/2),P=Math.max(1,e$1-y),h=Math.min(o,e$1+y);h-P+1<p&&(P===1?h=Math.min(o,P+p-1):P=Math.max(1,h-p+1)),P>1&&(c.push(1),P>2&&c.push("..."));for(let B=P;B<=h;B++)c.push(B);return h<o&&(h<o-1&&c.push("..."),c.push(o)),c},S=c=>{c>=1&&c<=o&&c!==e$1&&t(c);},L=x(),C=useMemo(()=>d(se,e(r),n),[r,n]),E=useMemo(()=>d(ge,{height:$[l].height}),[l]);return jsxs("div",{ref:R,style:C,...g,children:[a&&e$1>1&&jsx(T,{onClick:()=>S(1),variant:m,size:l,shape:u,"aria-label":"\uCCAB \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{style:M,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M11 19l-7-7 7-7M19 19l-7-7 7-7"})})}),d$1&&e$1>1&&jsx(T,{onClick:()=>S(e$1-1),variant:m,size:l,shape:u,"aria-label":"\uC774\uC804 \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{style:M,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),L.map((c,y)=>jsx(v.Fragment,{children:c==="..."?jsx("span",{style:E,children:"..."}):jsx(T,{onClick:()=>S(c),isActive:c===e$1,variant:m,size:l,shape:u,"aria-label":`${c}\uD398\uC774\uC9C0\uB85C \uC774\uB3D9`,"aria-current":c===e$1?"page":void 0,children:c})},y)),d$1&&e$1<o&&jsx(T,{onClick:()=>S(e$1+1),variant:m,size:l,shape:u,"aria-label":"\uB2E4\uC74C \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{style:M,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})}),a&&e$1<o&&jsx(T,{onClick:()=>S(o),variant:m,size:l,shape:u,"aria-label":"\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{style:M,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 5l7 7-7 7M5 5l7 7-7 7"})})})]})});_.displayName="Pagination";var Re=v.forwardRef((r,n)=>jsx(_,{ref:n,variant:"outlined",...r}));Re.displayName="PaginationOutlined";var Ce=v.forwardRef((r,n)=>jsx(_,{ref:n,variant:"minimal",...r}));Ce.displayName="PaginationMinimal";var be=v.forwardRef(({totalItems:r=0,itemsPerPage:n=10,showInfo:e$1=true,dot:o,style:t,...a},d$1)=>{let p=(a.currentPage-1)*n+1,l=Math.min(a.currentPage*n,r),m=useMemo(()=>d(Se,e(o),t),[o,t]);return jsxs("div",{style:m,children:[e$1&&jsx("div",{style:ve,children:r>0?jsxs(Fragment,{children:[jsx("span",{style:{fontWeight:500},children:p})," - ",jsx("span",{style:{fontWeight:500},children:l})," of ",jsx("span",{style:{fontWeight:500},children:r})," results"]}):"No results"}),jsx(_,{ref:d$1,...a})]})});be.displayName="PaginationWithInfo";var V=r=>dot(r),Ee=V("flex items-center justify-between py-4"),he=V("flex-1"),Ne={...V("flex-1 flex"),justifyContent:"flex-end"},Le={display:"inline-flex",alignItems:"center",fontSize:"0.875rem",color:"var(--color-muted-foreground)",textDecoration:"none",transition:"color 200ms ease-in-out",cursor:"pointer"},Te={color:"var(--color-foreground)"},Ie={display:"inline-flex",width:"1rem",height:"1rem",marginRight:"0.5rem",transition:"transform 200ms ease-in-out"},Me={display:"inline-flex",width:"1rem",height:"1rem",transition:"transform 200ms ease-in-out"},ke={transform:"translateX(-4px)"},_e={transform:"translateX(4px)"},J=v.memo(function({href:n,direction:e,title:o}){let[t,a]=useState(false),d$1=useMemo(()=>d(Le,t?Te:void 0),[t]),p=useMemo(()=>d(Ie,t?ke:void 0),[t]),l=useMemo(()=>d(Me,t?_e:void 0),[t]);return jsxs("a",{href:n,style:d$1,onMouseEnter:()=>a(true),onMouseLeave:()=>a(false),children:[e==="prev"&&jsx("span",{style:p,"aria-hidden":"true",children:jsx(m,{name:"chevronLeft",size:16})}),jsx("span",{children:o}),e==="next"&&jsx("span",{style:l,"aria-hidden":"true",children:jsx(m,{name:"chevronRight",size:16})})]})}),Ae=v.forwardRef(({prevPage:r,nextPage:n,showOnMobile:e$1=false,dot:o,style:t,...a},d$1)=>{let p=useMemo(()=>d(Ee,e$1?void 0:{display:"none"},e(o),t),[e$1,o,t]);return !r&&!n?null:jsxs("div",{ref:d$1,style:p,...a,children:[jsx("div",{style:he,children:r&&jsx(J,{href:r.href,direction:"prev",title:r.title})}),jsx("div",{style:Ne,children:n&&jsx(J,{href:n.href,direction:"next",title:n.title})})]})});Ae.displayName="PageNavigation";export{U as a,G as b,K as c,D as d,_ as e,Re as f,Ce as g,be as h,Ae as i};//# sourceMappingURL=chunk-ZTHUGQZL.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-ZTHUGQZL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Navigation.tsx","../src/components/Pagination.tsx","../src/components/PageNavigation.tsx"],"names":["WRAPPER_BASE","LIST_BASE","LIST_VARIANT","resolveDot","LIST_SCALE_GAP","ITEM_BASE","ITEM_ACTIVE","ITEM_IDLE","ITEM_HOVER_IDLE","ITEM_SCALE","ITEM_FOCUS","CONTENT_BASE","Navigation","React","dotProp","style","value","defaultValue","onValueChange","variant","scale","children","props","ref","activeTab","setActiveTab","useState","isControlled","currentValue","computedStyle","useMemo","mergeStyles","jsx","child","NavigationList","_onValueChange","_a","_b","NavigationItem","active","onClick","isHovered","setIsHovered","isFocused","setIsFocused","_c","e","NavigationContent","NavigationComponent","BASE_WRAPPER","BASE_BUTTON","DISABLED_BUTTON","SIZE_STYLES","SHAPE_STYLES","VARIANT_INACTIVE","VARIANT_ACTIVE","VARIANT_HOVER","FOCUS_RING","ELLIPSIS_STYLE","SVG_STYLE","INFO_WRAPPER","INFO_TEXT","PageButton","isActive","disabled","size","shape","aria","variantBase","Pagination","currentPage","totalPages","onPageChange","showFirstLast","showPrevNext","maxVisiblePages","getVisiblePages","pages","halfVisible","start","end","i","handlePageClick","page","visiblePages","wrapperStyle","ellipsisStyle","jsxs","index","PaginationOutlined","PaginationMinimal","PaginationWithInfo","totalItems","itemsPerPage","showInfo","startItem","endItem","Fragment","s","input","dotFn","BASE_STYLES","PREV_WRAPPER_STYLES","NEXT_WRAPPER_STYLES","LINK_BASE_STYLES","LINK_HOVER_STYLES","PREV_ICON_STYLES","NEXT_ICON_STYLES","PREV_ICON_HOVER_STYLES","NEXT_ICON_HOVER_STYLES","NavLink","href","direction","title","linkStyle","prevIconStyle","nextIconStyle","Icon","PageNavigation","prevPage","nextPage","showOnMobile"],"mappings":"qMASA,IAAMA,EAAAA,CAAoC,CACxC,KAAA,CAAO,MACT,CAAA,CAIMC,EAAAA,CAAiC,CACrC,OAAA,CAAS,MACX,CAAA,CAEMC,CAAAA,CAAoD,CACxD,KAAA,CAAO,CACL,eAAA,CAAiB,oBAAA,CACjB,GAAGC,CAAAA,CAAW,gBAAgB,CAChC,CAAA,CACA,SAAA,CAAW,CACT,YAAA,CAAc,+BAChB,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,yDAAA,CACjB,GAAGA,CAAAA,CAAW,gBAAgB,CAChC,CACF,CAAA,CAEMC,CAAAA,CAAsD,CAC1D,KAAA,CAAOD,CAAAA,CAAW,OAAO,CAAA,CACzB,MAAA,CAAQA,CAAAA,CAAW,OAAO,CAAA,CAC1B,KAAA,CAAOA,CAAAA,CAAW,OAAO,CAC3B,CAAA,CAIME,EAAAA,CAAiC,CACrC,GAAGF,CAAAA,CAAW,YAAY,CAAA,CAC1B,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,GAAA,CACZ,UAAA,CAAY,uBAAA,CACZ,OAAQ,SAAA,CACR,OAAA,CAAS,MAAA,CACT,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,MAAA,CACZ,UAAA,CAAY,IACd,CAAA,CAGMG,CAAAA,CAAmD,CACvD,KAAA,CAAO,CACL,gBAAiB,yBAAA,CACjB,KAAA,CAAO,yBAAA,CACP,SAAA,CAAW,8BACb,CAAA,CACA,SAAA,CAAW,CACT,YAAA,CAAc,gCAAA,CACd,KAAA,CAAO,sBAAA,CACP,YAAA,CAAc,CAAA,CACd,cAAe,oBACjB,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,yBAAA,CACjB,KAAA,CAAO,yBAAA,CACP,SAAA,CAAW,8BAAA,CACX,MAAA,CAAQ,+BACV,CACF,CAAA,CAGMC,EAAiD,CACrD,KAAA,CAAO,CACL,KAAA,CAAO,+BACT,CAAA,CACA,SAAA,CAAW,CACT,YAAA,CAAc,uBAAA,CACd,KAAA,CAAO,+BAAA,CACP,YAAA,CAAc,CAAA,CACd,cAAe,oBACjB,CAAA,CACA,KAAA,CAAO,CACL,KAAA,CAAO,+BACT,CACF,CAAA,CAGMC,EAAAA,CAAuC,CAC3C,KAAA,CAAO,yBACT,CAAA,CAGMC,CAAAA,CAAkD,CACtD,KAAA,CAAO,CAAE,QAAA,CAAU,SAAA,CAAW,GAAGN,CAAAA,CAAW,WAAW,CAAE,CAAA,CACzD,MAAA,CAAQ,CAAE,QAAA,CAAU,UAAA,CAAY,GAAGA,EAAW,WAAW,CAAE,CAAA,CAC3D,KAAA,CAAO,CAAE,QAAA,CAAU,MAAA,CAAQ,GAAGA,CAAAA,CAAW,WAAW,CAAE,CACxD,CAAA,CAGMO,EAAAA,CAAkC,CACtC,OAAA,CAAS,MAAA,CACT,SAAA,CACE,+FACJ,CAAA,CAIMC,EAAAA,CAAoC,CACxC,GAAGR,CAAAA,CAAW,MAAM,CACtB,CAAA,CA6HMS,CAAAA,CAAaC,CAAAA,CAAM,WACvB,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,QACV,KAAA,CAAAC,GAAAA,CAAQ,QAAA,CACR,QAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAASV,GAAAA,EAASC,CAAAA,EAAgB,EAAE,CAAA,CAChEU,CAAAA,CAAeX,GAAAA,GAAU,MAAA,CACzBY,CAAAA,CAAeD,CAAAA,CAAeX,GAAAA,CAAQQ,CAAAA,CAS5CX,CAAAA,CAAM,SAAA,CAAU,IAAM,CAChBG,GAAAA,GAAU,MAAA,EACZS,EAAaT,GAAK,EAEtB,CAAA,CAAG,CAACA,GAAK,CAAC,CAAA,CAEV,IAAMa,CAAAA,CAAgBC,OAAAA,CACpB,IAAMC,CAAAA,CAAY/B,EAAAA,CAAcG,CAAAA,CAAWW,CAAO,CAAA,CAAGC,CAAK,CAAA,CAC1D,CAACD,CAAAA,CAASC,CAAK,CACjB,CAAA,CAEA,OACEiB,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKT,CAAAA,CAAK,KAAA,CAAOM,EAAgB,GAAGP,CAAAA,CACtC,QAAA,CAAAT,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAIQ,CAAAA,CAAWY,CAAAA,EACzBpB,CAAAA,CAAM,cAAA,CAAeoB,CAAK,CAAA,CACrBpB,CAAAA,CAAM,YAAA,CAAaoB,EAAO,CAC/B,KAAA,CAAOL,CAAAA,CACP,OAAA,CAAAT,CAAAA,CACA,KAAA,CAAAC,GACF,CAAuD,CAAA,CAElDa,CACR,CAAA,CACH,CAEJ,CACF,CAAA,CACArB,EAAW,WAAA,CAAc,YAAA,CAMzB,IAAMsB,CAAAA,CAAiBrB,CAAAA,CAAM,UAAA,CAC3B,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,cAAemB,CAAAA,CACf,OAAA,CAAAhB,CAAAA,CAAU,OAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,QAAA,CACR,QAAA,CAAAC,GAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMM,CAAAA,CAAgBC,OAAAA,CACpB,IAAG,CAxTT,IAAAM,CAAAA,CAAAC,CAAAA,CAyTQ,OAAAN,CAAAA,CACE9B,EAAAA,CAAAA,CACAmC,CAAAA,CAAAlC,CAAAA,CAAaiB,CAAO,CAAA,GAApB,KAAAiB,CAAAA,CAAyBlC,CAAAA,CAAa,KAAA,CAAA,CACtCmC,CAAAA,CAAAjC,CAAAA,CAAegB,CAAK,CAAA,GAApB,IAAA,CAAAiB,CAAAA,CAAyBjC,CAAAA,CAAe,MAAA,CACxCD,CAAAA,CAAWW,CAAO,CAAA,CAClBC,CACF,CAAA,CAAA,CACF,CAACI,CAAAA,CAASC,CAAAA,CAAON,CAAAA,CAASC,CAAK,CACjC,CAAA,CAEA,OACEiB,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKT,CAAAA,CAAK,KAAA,CAAOM,EAAgB,GAAGP,CAAAA,CACtC,QAAA,CAAAT,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAIQ,GAAAA,CAAWY,CAAAA,EACzBpB,CAAAA,CAAM,cAAA,CAAeoB,CAAK,CAAA,CACrBpB,CAAAA,CAAM,YAAA,CAAaoB,EAAO,CAC/B,KAAA,CAAAjB,GAAAA,CACA,OAAA,CAAAG,CAAAA,CACA,KAAA,CAAAC,CACF,CAAiC,CAAA,CAE5Ba,CACR,CAAA,CACH,CAEJ,CACF,EACAC,EAAe,WAAA,CAAc,gBAAA,CAM7B,IAAMI,CAAAA,CAAiBzB,CAAAA,CAAM,UAAA,CAC3B,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,cAAAE,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,OAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,QAAA,CACR,MAAA,CAAAmB,GAAAA,CAAS,KAAA,CACT,QAAA,CAAAlB,CAAAA,CACA,OAAA,CAAAmB,CAAAA,CACA,GAAGlB,CACL,CAAA,CACAC,CAAAA,GACG,CACH,GAAM,CAACkB,CAAAA,CAAWC,CAAY,CAAA,CAAIhB,QAAAA,CAAS,KAAK,CAAA,CAC1C,CAACiB,CAAAA,CAAWC,CAAY,CAAA,CAAIlB,QAAAA,CAAS,KAAK,CAAA,CAE1CG,CAAAA,CAAgBC,OAAAA,CACpB,IAAwB,CA7W9B,IAAAM,CAAAA,CAAAC,CAAAA,CAAAQ,CAAAA,CA8WQ,OAAAd,CAAAA,CACE1B,EAAAA,CAAAA,CACA+B,EAAA3B,CAAAA,CAAWW,CAAK,CAAA,GAAhB,IAAA,CAAAgB,CAAAA,CAAqB3B,CAAAA,CAAW,MAAA,CAChC8B,GAAAA,CAAAA,CACKF,CAAAA,CAAA/B,CAAAA,CAAYa,CAAO,CAAA,GAAnB,IAAA,CAAAkB,CAAAA,CAAwB/B,EAAY,KAAA,CAAA,CACpCuC,CAAAA,CAAAtC,CAAAA,CAAUY,CAAO,CAAA,GAAjB,IAAA,CAAA0B,CAAAA,CAAsBtC,CAAAA,CAAU,KAAA,CACrCkC,CAAAA,EAAa,CAACF,GAAAA,CAAS/B,EAAAA,CAAkB,MAAA,CACzCmC,EAAYjC,EAAAA,CAAa,MAAA,CACzBP,CAAAA,CAAWW,CAAO,CAAA,CAClBC,CACF,CAAA,CAAA,CACF,CAACI,CAAAA,CAASC,CAAAA,CAAOmB,GAAAA,CAAQE,CAAAA,CAAWE,CAAAA,CAAW7B,CAAAA,CAASC,CAAK,CAC/D,CAAA,CAOA,OACEiB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKT,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,KAAA,CAAOM,CAAAA,CACP,OAAA,CAViBiB,CAAAA,EAA2C,CAC9D5B,GAAA,IAAA,EAAAA,CAAAA,CAAgBF,GAAAA,CAAAA,CAChBwB,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAUM,CAAAA,EACZ,CAAA,CAQI,YAAA,CAAc,IAAMJ,CAAAA,CAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAMA,CAAAA,CAAa,KAAK,CAAA,CACtC,OAAA,CAAS,IAAME,CAAAA,CAAa,IAAI,CAAA,CAChC,MAAA,CAAQ,IAAMA,CAAAA,CAAa,KAAK,CAAA,CAC/B,GAAGtB,EAEH,QAAA,CAAAD,CAAAA,CACH,CAEJ,CACF,EACAiB,CAAAA,CAAe,WAAA,CAAc,gBAAA,CAM7B,IAAMS,CAAAA,CAAoBlC,CAAAA,CAAM,UAAA,CAG9B,CAAC,CAAE,IAAKC,CAAAA,CAAS,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAwB,GAAAA,CAAS,KAAA,CAAO,GAAGjB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC5D,GAAI,CAACgB,GAAAA,CAAQ,OAAO,IAAA,CAEpB,IAAMV,CAAAA,CAAgBE,CAAAA,CAAYpB,EAAAA,CAAcR,CAAAA,CAAWW,CAAO,CAAA,CAAGC,CAAK,CAAA,CAE1E,OAAOiB,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKT,EAAK,KAAA,CAAOM,CAAAA,CAAgB,GAAGP,CAAAA,CAAO,CACzD,CAAC,EACDyB,CAAAA,CAAkB,WAAA,CAAc,mBAAA,CAchC,IAAMC,CAAAA,CAAsBpC,EAC5BoC,CAAAA,CAAoB,KAAOd,CAAAA,CAC3Bc,CAAAA,CAAoB,IAAA,CAAOV,CAAAA,CAC3BU,CAAAA,CAAoB,OAAA,CAAUD,CAAAA,CC1a9B,IAAME,EAAAA,CAAoC,CACxC,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,GAAG9C,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEM+C,EAAAA,CAAmC,CACvC,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,WAAY,GAAA,CACZ,UAAA,CACE,wHAAA,CACF,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,MAAA,CACT,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,MAAA,CACZ,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,MACd,CAAA,CAEMC,EAAAA,CAAuC,CAC3C,aAAA,CAAe,MAAA,CACf,OAAA,CAAS,EACX,CAAA,CAGMC,CAAAA,CAA+D,CACnE,EAAA,CAAI,CACF,MAAA,CAAQ,MAAA,CACR,QAAA,CAAU,MAAA,CACV,GAAGjD,CAAAA,CAAW,MAAM,CAAA,CACpB,QAAA,CAAU,MACZ,CAAA,CACA,EAAA,CAAI,CACF,MAAA,CAAQ,MAAA,CACR,QAAA,CAAU,MAAA,CACV,GAAGA,EAAW,MAAM,CAAA,CACpB,QAAA,CAAU,MACZ,CAAA,CACA,EAAA,CAAI,CACF,MAAA,CAAQ,MAAA,CACR,QAAA,CAAU,MAAA,CACV,GAAGA,CAAAA,CAAW,MAAM,EACpB,QAAA,CAAU,MACZ,CACF,CAAA,CAGMkD,EAAAA,CAAiE,CACrE,MAAA,CAAQ,CAAE,YAAA,CAAc,KAAM,CAAA,CAC9B,MAAA,CAAQ,CAAE,YAAA,CAAc,SAAU,WAAA,CAAa,OAAA,CAAS,OAAA,CAAS,GAAI,CACvE,CAAA,CAGMC,EAAAA,CAGF,CACF,OAAA,CAAS,CACP,MAAA,CAAQ,MAAA,CACR,eAAA,CAAiB,yBAAA,CACjB,MAAO,yBACT,CAAA,CACA,QAAA,CAAU,CACR,MAAA,CAAQ,+BAAA,CACR,eAAA,CAAiB,yBAAA,CACjB,KAAA,CAAO,yBACT,CAAA,CACA,OAAA,CAAS,CACP,MAAA,CAAQ,OACR,eAAA,CAAiB,aAAA,CACjB,KAAA,CAAO,yBACT,CACF,CAAA,CAEMC,EAAAA,CAGF,CACF,OAAA,CAAS,CACP,MAAA,CAAQ,MAAA,CACR,eAAA,CAAiB,sBAAA,CACjB,MAAO,iCACT,CAAA,CACA,QAAA,CAAU,CACR,MAAA,CAAQ,gCAAA,CACR,eAAA,CAAiB,sBAAA,CACjB,KAAA,CAAO,iCACT,CAAA,CACA,OAAA,CAAS,CACP,MAAA,CAAQ,OACR,eAAA,CACE,2DAAA,CACF,KAAA,CAAO,sBACT,CACF,CAAA,CAGMC,EAAAA,CAGF,CACF,OAAA,CAAS,CAAE,eAAA,CAAiB,oBAAqB,CAAA,CACjD,QAAA,CAAU,CAAE,eAAA,CAAiB,oBAAqB,CAAA,CAClD,OAAA,CAAS,CAAE,eAAA,CAAiB,oBAAqB,CACnD,CAAA,CAGMC,EAAAA,CAAkC,CACtC,OAAA,CAAS,MAAA,CACT,SAAA,CAAW,gEACb,CAAA,CAEMC,EAAAA,CAAsC,CAC1C,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,GAAGvD,CAAAA,CAAW,MAAM,CAAA,CACpB,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,+BAAA,CACP,UAAA,CAAY,MACd,CAAA,CAEMwD,CAAAA,CAAiC,CACrC,KAAA,CAAO,MAAA,CACP,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,CACd,CAAA,CAEMC,EAAAA,CAAoC,CACxC,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,eAAA,CAChB,GAAGzD,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEM0D,EAAAA,CAAiC,CACrC,QAAA,CAAU,MAAA,CACV,KAAA,CAAO,yBACT,CAAA,CAkBMC,CAAAA,CAAajD,CAAAA,CAAM,IAAA,CAAK,SAAoB,CAChD,OAAA,CAAA2B,EACA,QAAA,CAAAuB,CAAAA,CAAW,KAAA,CACX,QAAA,CAAAC,CAAAA,CAAW,KAAA,CACX,OAAA,CAAA7C,CAAAA,CACA,IAAA,CAAA8C,CAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,QAAA,CAAA7C,CAAAA,CACA,GAAG8C,CACL,CAAA,CAAoB,CAClB,GAAM,CAAC1B,CAAAA,CAAWC,CAAY,CAAA,CAAIhB,QAAAA,CAAS,KAAK,CAAA,CAC1C,CAACiB,CAAAA,CAAWC,CAAY,EAAIlB,QAAAA,CAAS,KAAK,CAAA,CAE1CG,CAAAA,CAAgBC,OAAAA,CAAQ,IAA2B,CACvD,IAAMsC,CAAAA,CAAcL,CAAAA,CAChBR,EAAAA,CAAepC,CAAO,CAAA,CACtBmC,EAAAA,CAAiBnC,CAAO,CAAA,CAC5B,OAAOY,CAAAA,CACLmB,EAAAA,CACAE,CAAAA,CAAYa,CAAI,CAAA,CAChBZ,EAAAA,CAAaa,GAAK,CAAA,CAClBE,CAAAA,CACAJ,CAAAA,CAAWb,EAAAA,CAAkB,MAAA,CAC7B,CAACY,GAAYtB,CAAAA,CAAYe,EAAAA,CAAcrC,CAAO,CAAA,CAAI,MAAA,CAClDwB,CAAAA,CAAYc,EAAAA,CAAa,MAC3B,CACF,CAAA,CAAG,CAACtC,CAAAA,CAAS8C,CAAAA,CAAMC,GAAAA,CAAOH,EAAUC,CAAAA,CAAUvB,CAAAA,CAAWE,CAAS,CAAC,CAAA,CAEnE,OACEX,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,KAAA,CAAOH,CAAAA,CACP,OAAA,CAASW,CAAAA,CACT,SAAUwB,CAAAA,CACV,YAAA,CAAc,IAAM,CACbA,CAAAA,EAAUtB,CAAAA,CAAa,IAAI,EAClC,CAAA,CACA,YAAA,CAAc,IAAMA,CAAAA,CAAa,KAAK,CAAA,CACtC,QAAS,IAAME,CAAAA,CAAa,IAAI,CAAA,CAChC,MAAA,CAAQ,IAAMA,CAAAA,CAAa,KAAK,CAAA,CAC/B,GAAGuB,CAAAA,CAEH,QAAA,CAAA9C,CAAAA,CACH,CAEJ,CAAC,CAAA,CA8EKgD,CAAAA,CAAaxD,CAAAA,CAAM,UAAA,CACvB,CACE,CACE,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,WAAA,CAAAuD,GAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,aAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CAAgB,IAAA,CAChB,YAAA,CAAAC,GAAAA,CAAe,IAAA,CACf,eAAA,CAAAC,CAAAA,CAAkB,CAAA,CAClB,IAAA,CAAAV,CAAAA,CAAO,IAAA,CACP,OAAA,CAAA9C,EAAU,SAAA,CACV,KAAA,CAAA+C,CAAAA,CAAQ,QAAA,CACR,GAAG5C,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMqD,CAAAA,CAAkB,IAA2B,CACjD,IAAMC,EAA6B,EAAC,CAC9BC,CAAAA,CAAc,IAAA,CAAK,KAAA,CAAMH,CAAAA,CAAkB,CAAC,CAAA,CAE9CI,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGT,GAAAA,CAAcQ,CAAW,EAC7CE,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIT,CAAAA,CAAYD,GAAAA,CAAcQ,CAAW,CAAA,CAEpDE,CAAAA,CAAMD,CAAAA,CAAQ,CAAA,CAAIJ,CAAAA,GAChBI,CAAAA,GAAU,CAAA,CACZC,CAAAA,CAAM,KAAK,GAAA,CAAIT,CAAAA,CAAYQ,CAAAA,CAAQJ,CAAAA,CAAkB,CAAC,CAAA,CAEtDI,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGC,CAAAA,CAAML,CAAAA,CAAkB,CAAC,CAAA,CAAA,CAI7CI,EAAQ,CAAA,GACVF,CAAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CACRE,CAAAA,CAAQ,CAAA,EAAGF,CAAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAA,CAGjC,IAAA,IAASI,CAAAA,CAAIF,CAAAA,CAAOE,GAAKD,CAAAA,CAAKC,CAAAA,EAAAA,CAC5BJ,CAAAA,CAAM,IAAA,CAAKI,CAAC,CAAA,CAGd,OAAID,CAAAA,CAAMT,CAAAA,GACJS,CAAAA,CAAMT,CAAAA,CAAa,CAAA,EAAGM,CAAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAC1CA,CAAAA,CAAM,IAAA,CAAKN,CAAU,CAAA,CAAA,CAGhBM,CACT,CAAA,CAEMK,CAAAA,CAAmBC,CAAAA,EAAiB,CACpCA,CAAAA,EAAQ,CAAA,EAAKA,CAAAA,EAAQZ,CAAAA,EAAcY,IAASb,GAAAA,EAC9CE,CAAAA,CAAaW,CAAI,EAErB,CAAA,CAEMC,CAAAA,CAAeR,CAAAA,EAAgB,CAE/BS,CAAAA,CAAevD,OAAAA,CACnB,IAAMC,CAAAA,CAAYkB,EAAAA,CAAc9C,CAAAA,CAAWW,CAAO,CAAA,CAAGC,CAAK,CAAA,CAC1D,CAACD,CAAAA,CAASC,CAAK,CACjB,CAAA,CAGMuE,CAAAA,CAAgBxD,OAAAA,CACpB,IAAMC,CAAAA,CAAY2B,EAAAA,CAAgB,CAAE,MAAA,CAAQN,CAAAA,CAAYa,CAAI,CAAA,CAAE,MAAO,CAAC,CAAA,CACtE,CAACA,CAAI,CACP,CAAA,CAEA,OACEsB,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKhE,CAAAA,CAAK,MAAO8D,CAAAA,CAAe,GAAG/D,CAAAA,CAErC,QAAA,CAAA,CAAAmD,CAAAA,EAAiBH,GAAAA,CAAc,CAAA,EAC9BtC,GAAAA,CAAC8B,CAAAA,CAAA,CACC,OAAA,CAAS,IAAMoB,CAAAA,CAAgB,CAAC,EAChC,OAAA,CAAS/D,CAAAA,CACT,IAAA,CAAM8C,CAAAA,CACN,KAAA,CAAOC,CAAAA,CACP,YAAA,CAAW,8CAAA,CAEX,QAAA,CAAAlC,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO2B,CAAAA,CACP,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAA3B,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAa,CAAA,CACb,CAAA,CAAE,iCACJ,CAAA,CACF,CAAA,CACF,CAAA,CAID0C,GAAAA,EAAgBJ,GAAAA,CAAc,CAAA,EAC7BtC,GAAAA,CAAC8B,CAAAA,CAAA,CACC,OAAA,CAAS,IAAMoB,CAAAA,CAAgBZ,GAAAA,CAAc,CAAC,EAC9C,OAAA,CAASnD,CAAAA,CACT,IAAA,CAAM8C,CAAAA,CACN,KAAA,CAAOC,CAAAA,CACP,YAAA,CAAW,oDAAA,CAEX,QAAA,CAAAlC,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO2B,CAAAA,CACP,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAA3B,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAa,CAAA,CACb,CAAA,CAAE,kBACJ,CAAA,CACF,CAAA,CACF,CAAA,CAIDoD,CAAAA,CAAa,GAAA,CAAI,CAACD,CAAAA,CAAMK,CAAAA,GACvBxD,GAAAA,CAACnB,CAAAA,CAAM,QAAA,CAAN,CACE,QAAA,CAAAsE,CAAAA,GAAS,MACRnD,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAOsD,CAAAA,CAAe,QAAA,CAAA,KAAA,CAAG,CAAA,CAE/BtD,GAAAA,CAAC8B,CAAAA,CAAA,CACC,OAAA,CAAS,IAAMoB,CAAAA,CAAgBC,CAAc,CAAA,CAC7C,SAAUA,CAAAA,GAASb,GAAAA,CACnB,OAAA,CAASnD,CAAAA,CACT,IAAA,CAAM8C,CAAAA,CACN,KAAA,CAAOC,CAAAA,CACP,YAAA,CAAY,CAAA,EAAGiB,CAAI,CAAA,qCAAA,CAAA,CACnB,cAAA,CAAcA,CAAAA,GAASb,IAAc,MAAA,CAAS,MAAA,CAE7C,QAAA,CAAAa,CAAAA,CACH,CAAA,CAAA,CAdiBK,CAgBrB,CACD,CAAA,CAGAd,GAAAA,EAAgBJ,GAAAA,CAAcC,CAAAA,EAC7BvC,GAAAA,CAAC8B,CAAAA,CAAA,CACC,QAAS,IAAMoB,CAAAA,CAAgBZ,GAAAA,CAAc,CAAC,CAAA,CAC9C,OAAA,CAASnD,CAAAA,CACT,IAAA,CAAM8C,CAAAA,CACN,KAAA,CAAOC,CAAAA,CACP,YAAA,CAAW,oDAAA,CAEX,QAAA,CAAAlC,IAAC,KAAA,CAAA,CACC,KAAA,CAAO2B,CAAAA,CACP,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAA3B,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAc,OAAA,CACd,eAAe,OAAA,CACf,WAAA,CAAa,CAAA,CACb,CAAA,CAAE,cAAA,CACJ,CAAA,CACF,CAAA,CACF,CAAA,CAIDyC,CAAAA,EAAiBH,GAAAA,CAAcC,CAAAA,EAC9BvC,GAAAA,CAAC8B,CAAAA,CAAA,CACC,QAAS,IAAMoB,CAAAA,CAAgBX,CAAU,CAAA,CACzC,OAAA,CAASpD,CAAAA,CACT,IAAA,CAAM8C,CAAAA,CACN,KAAA,CAAOC,CAAAA,CACP,YAAA,CAAW,0DAAA,CAEX,QAAA,CAAAlC,GAAAA,CAAC,OACC,KAAA,CAAO2B,CAAAA,CACP,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAA3B,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAa,CAAA,CACb,CAAA,CAAE,2BAAA,CACJ,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAEJ,CAEJ,CACF,EACAqC,CAAAA,CAAW,WAAA,CAAc,YAAA,CAMlB,IAAMoB,EAAAA,CAAqB5E,EAAM,UAAA,CAGtC,CAACS,CAAAA,CAAOC,CAAAA,GAAQS,GAAAA,CAACqC,CAAAA,CAAA,CAAW,GAAA,CAAK9C,CAAAA,CAAK,OAAA,CAAQ,UAAA,CAAY,GAAGD,CAAAA,CAAO,CAAE,EACxEmE,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CAE1B,IAAMC,EAAAA,CAAoB7E,CAAAA,CAAM,UAAA,CAGrC,CAACS,CAAAA,CAAOC,CAAAA,GAAQS,GAAAA,CAACqC,CAAAA,CAAA,CAAW,GAAA,CAAK9C,EAAK,OAAA,CAAQ,SAAA,CAAW,GAAGD,CAAAA,CAAO,CAAE,EACvEoE,EAAAA,CAAkB,WAAA,CAAc,mBAAA,CAMzB,IAAMC,EAAAA,CAAqB9E,CAAAA,CAAM,UAAA,CAQtC,CACE,CACE,UAAA,CAAA+E,CAAAA,CAAa,CAAA,CACb,YAAA,CAAAC,CAAAA,CAAe,EAAA,CACf,QAAA,CAAAC,GAAAA,CAAW,IAAA,CACX,GAAA,CAAKhF,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,GAAGO,CACL,CAAA,CACAC,GAAAA,GACG,CACH,IAAMwE,CAAAA,CAAAA,CAAazE,CAAAA,CAAM,WAAA,CAAc,CAAA,EAAKuE,CAAAA,CAAe,CAAA,CACrDG,CAAAA,CAAU,IAAA,CAAK,GAAA,CAAI1E,CAAAA,CAAM,YAAcuE,CAAAA,CAAcD,CAAU,CAAA,CAE/DP,CAAAA,CAAevD,OAAAA,CACnB,IAAMC,CAAAA,CAAY6B,EAAAA,CAAczD,CAAAA,CAAWW,CAAO,CAAA,CAAGC,CAAK,CAAA,CAC1D,CAACD,EAASC,CAAK,CACjB,CAAA,CAEA,OACEwE,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOF,CAAAA,CACT,QAAA,CAAA,CAAAS,GAAAA,EACC9D,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO6B,EAAAA,CACT,SAAA+B,CAAAA,CAAa,CAAA,CACZL,IAAAA,CAAAU,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAjE,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAI,QAAA,CAAA+D,EAAU,CAAA,CAC5C,KAAA,CACD/D,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAI,QAAA,CAAAgE,CAAAA,CAAQ,CAAA,CAC1C,MAAA,CACDhE,GAAAA,CAAC,QAAK,KAAA,CAAO,CAAE,UAAA,CAAY,GAAI,CAAA,CAAI,QAAA,CAAA4D,CAAAA,CAAW,CAAA,CAC7C,UAAA,CAAA,CACH,CAAA,CAEA,YAAA,CAEJ,CAAA,CAEF5D,GAAAA,CAACqC,CAAAA,CAAA,CAAW,GAAA,CAAK9C,GAAAA,CAAM,GAAGD,CAAAA,CAAO,CAAA,CAAA,CACnC,CAEJ,CACF,EACAqE,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CCviBjC,IAAMO,EAAKC,CAAAA,EAAkBC,GAAAA,CAAMD,CAAK,CAAA,CAElCE,EAAAA,CAAcH,CAAAA,CAAE,wCAAwC,CAAA,CAExDI,EAAAA,CAAsBJ,CAAAA,CAAE,QAAQ,CAAA,CAEhCK,EAAAA,CAA2C,CAC/C,GAAGL,CAAAA,CAAE,aAAa,CAAA,CAClB,cAAA,CAAgB,UAClB,CAAA,CAEMM,EAAAA,CAAwC,CAC5C,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,QAAA,CAAU,UAAA,CACV,MAAO,+BAAA,CACP,cAAA,CAAgB,MAAA,CAChB,UAAA,CAAY,yBAAA,CACZ,MAAA,CAAQ,SACV,CAAA,CAEMC,EAAAA,CAAyC,CAC7C,KAAA,CAAO,yBACT,CAAA,CAEMC,EAAAA,CAAwC,CAC5C,OAAA,CAAS,aAAA,CACT,KAAA,CAAO,MAAA,CACP,MAAA,CAAQ,MAAA,CACR,WAAA,CAAa,QAAA,CACb,UAAA,CAAY,6BACd,CAAA,CAEMC,EAAAA,CAAwC,CAC5C,OAAA,CAAS,aAAA,CACT,MAAO,MAAA,CACP,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,6BACd,CAAA,CAEMC,EAAAA,CAA8C,CAClD,SAAA,CAAW,kBACb,CAAA,CAEMC,EAAAA,CAA8C,CAClD,SAAA,CAAW,iBACb,CAAA,CAuCMC,CAAAA,CAAUjG,CAAAA,CAAM,IAAA,CAAK,SAAiB,CAAE,IAAA,CAAAkG,CAAAA,CAAM,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAiB,CACpF,GAAM,CAACxE,CAAAA,CAAWC,CAAY,CAAA,CAAIhB,QAAAA,CAAS,KAAK,CAAA,CAE1CwF,GAAAA,CAAYpF,OAAAA,CAChB,IAAMC,CAAAA,CAAYyE,EAAAA,CAAkB/D,CAAAA,CAAYgE,EAAAA,CAAoB,MAAS,CAAA,CAC7E,CAAChE,CAAS,CACZ,CAAA,CAEM0E,CAAAA,CAAgBrF,OAAAA,CACpB,IAAMC,CAAAA,CAAY2E,EAAAA,CAAkBjE,CAAAA,CAAYmE,EAAAA,CAAyB,MAAS,CAAA,CAClF,CAACnE,CAAS,CACZ,CAAA,CAEM2E,CAAAA,CAAgBtF,OAAAA,CACpB,IAAMC,CAAAA,CAAY4E,EAAAA,CAAkBlE,CAAAA,CAAYoE,EAAAA,CAAyB,MAAS,CAAA,CAClF,CAACpE,CAAS,CACZ,CAAA,CAEA,OACE8C,IAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAMwB,CAAAA,CACN,KAAA,CAAOG,GAAAA,CACP,YAAA,CAAc,IAAMxE,CAAAA,CAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAMA,CAAAA,CAAa,KAAK,CAAA,CAErC,QAAA,CAAA,CAAAsE,CAAAA,GAAc,MAAA,EACbhF,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAOmF,CAAAA,CAAe,aAAA,CAAY,MAAA,CACtC,QAAA,CAAAnF,GAAAA,CAACqF,CAAAA,CAAA,CAAK,IAAA,CAAK,aAAA,CAAc,IAAA,CAAM,EAAA,CAAI,CAAA,CACrC,CAAA,CAEFrF,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAiF,CAAAA,CAAM,CAAA,CACZD,CAAAA,GAAc,MAAA,EACbhF,GAAAA,CAAC,QAAK,KAAA,CAAOoF,CAAAA,CAAe,aAAA,CAAY,MAAA,CACtC,QAAA,CAAApF,GAAAA,CAACqF,CAAAA,CAAA,CAAK,IAAA,CAAK,cAAA,CAAe,IAAA,CAAM,EAAA,CAAI,CAAA,CACtC,CAAA,CAAA,CAEJ,CAEJ,CAAC,CAAA,CAyBKC,EAAAA,CAAiBzG,CAAAA,CAAM,UAAA,CAC3B,CACE,CACE,QAAA,CAAA0G,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,GAAAA,CAAe,KAAA,CACf,IAAK3G,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,GAAGO,CACL,CAAA,CACAC,GAAAA,GACG,CACH,IAAMM,CAAAA,CAAgBC,OAAAA,CACpB,IACEC,CAAAA,CACEsE,EAAAA,CACCoB,IAAqC,MAAA,CAAtB,CAAE,OAAA,CAAS,MAAO,CAAA,CAClCtH,CAAAA,CAAWW,CAAO,CAAA,CAClBC,CACF,CAAA,CACF,CAAC0G,GAAAA,CAAc3G,CAAAA,CAASC,CAAK,CAC/B,CAAA,CAEA,OAAI,CAACwG,CAAAA,EAAY,CAACC,CAAAA,CACT,IAAA,CAIPjC,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKhE,GAAAA,CACL,KAAA,CAAOM,CAAAA,CACN,GAAGP,EAGJ,QAAA,CAAA,CAAAU,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOsE,EAAAA,CACT,QAAA,CAAAiB,CAAAA,EACCvF,GAAAA,CAAC8E,CAAAA,CAAA,CACC,IAAA,CAAMS,CAAAA,CAAS,IAAA,CACf,SAAA,CAAU,OACV,KAAA,CAAOA,CAAAA,CAAS,KAAA,CAClB,CAAA,CAEJ,CAAA,CAGAvF,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuE,EAAAA,CACT,QAAA,CAAAiB,CAAAA,EACCxF,GAAAA,CAAC8E,CAAAA,CAAA,CACC,IAAA,CAAMU,CAAAA,CAAS,IAAA,CACf,SAAA,CAAU,MAAA,CACV,KAAA,CAAOA,CAAAA,CAAS,KAAA,CAClB,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CACF,EACAF,EAAAA,CAAe,WAAA,CAAc,gBAAA","file":"chunk-ZTHUGQZL.mjs","sourcesContent":["\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ---------------------------------------------------------------------------\n// Static style constants\n// ---------------------------------------------------------------------------\n\nconst WRAPPER_BASE: React.CSSProperties = {\n width: \"100%\",\n};\n\n// --- NavigationList ---\n\nconst LIST_BASE: React.CSSProperties = {\n display: \"flex\",\n};\n\nconst LIST_VARIANT: Record<string, React.CSSProperties> = {\n pills: {\n backgroundColor: \"var(--color-muted)\",\n ...resolveDot(\"p-1 rounded-xl\"),\n },\n underline: {\n borderBottom: \"1px solid var(--color-border)\",\n },\n cards: {\n backgroundColor: \"color-mix(in srgb, var(--color-muted) 50%, transparent)\",\n ...resolveDot(\"p-1 rounded-xl\"),\n },\n};\n\nconst LIST_SCALE_GAP: Record<string, React.CSSProperties> = {\n small: resolveDot(\"gap-1\"),\n medium: resolveDot(\"gap-2\"),\n large: resolveDot(\"gap-3\"),\n};\n\n// --- NavigationItem ---\n\nconst ITEM_BASE: React.CSSProperties = {\n ...resolveDot(\"rounded-lg\"),\n fontSize: \"0.875rem\",\n fontWeight: 500,\n transition: \"all 200ms ease-in-out\",\n cursor: \"pointer\",\n outline: \"none\",\n border: \"none\",\n background: \"none\",\n lineHeight: 1.25,\n};\n\n/** Active state styles per variant */\nconst ITEM_ACTIVE: Record<string, React.CSSProperties> = {\n pills: {\n backgroundColor: \"var(--color-background)\",\n color: \"var(--color-foreground)\",\n boxShadow: \"0 1px 2px 0 rgba(0,0,0,0.05)\",\n },\n underline: {\n borderBottom: \"2px solid var(--color-primary)\",\n color: \"var(--color-primary)\",\n borderRadius: 0,\n paddingBottom: \"calc(0.5rem - 2px)\", // compensate for border\n },\n cards: {\n backgroundColor: \"var(--color-background)\",\n color: \"var(--color-foreground)\",\n boxShadow: \"0 1px 2px 0 rgba(0,0,0,0.05)\",\n border: \"1px solid var(--color-border)\",\n },\n};\n\n/** Idle state styles per variant */\nconst ITEM_IDLE: Record<string, React.CSSProperties> = {\n pills: {\n color: \"var(--color-muted-foreground)\",\n },\n underline: {\n borderBottom: \"2px solid transparent\",\n color: \"var(--color-muted-foreground)\",\n borderRadius: 0,\n paddingBottom: \"calc(0.5rem - 2px)\",\n },\n cards: {\n color: \"var(--color-muted-foreground)\",\n },\n};\n\n/** Hover overlay for idle items */\nconst ITEM_HOVER_IDLE: React.CSSProperties = {\n color: \"var(--color-foreground)\",\n};\n\n/** Scale-based padding/font-size per scale */\nconst ITEM_SCALE: Record<string, React.CSSProperties> = {\n small: { fontSize: \"0.75rem\", ...resolveDot(\"py-1 px-2\") },\n medium: { fontSize: \"0.875rem\", ...resolveDot(\"py-2 px-3\") },\n large: { fontSize: \"1rem\", ...resolveDot(\"py-3 px-4\") },\n};\n\n/** Focus ring style */\nconst ITEM_FOCUS: React.CSSProperties = {\n outline: \"none\",\n boxShadow:\n \"0 0 0 1px var(--color-ring), 0 0 0 3px color-mix(in srgb, var(--color-ring) 30%, transparent)\",\n};\n\n// --- NavigationContent ---\n\nconst CONTENT_BASE: React.CSSProperties = {\n ...resolveDot(\"mt-4\"),\n};\n\n// ---------------------------------------------------------------------------\n// Props interfaces\n// ---------------------------------------------------------------------------\n\n/**\n * Navigation 컴포넌트의 props / Navigation component props\n * @typedef {Object} NavigationProps\n * @property {string} [value] - 제어 모드에서 활성 탭 값 / Active tab value in controlled mode\n * @property {string} [defaultValue] - 비제어 모드에서 기본 활성 탭 값 / Default active tab value in uncontrolled mode\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @property {string} [dot] - dot 유틸리티 문자열 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style'>}\n */\nexport interface NavigationProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\" | \"style\"\n> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n variant?: \"pills\" | \"underline\" | \"cards\";\n scale?: \"small\" | \"medium\" | \"large\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * NavigationList 컴포넌트의 props / NavigationList component props\n * @typedef {Object} NavigationListProps\n * @property {string} [value] - 활성 탭 값 / Active tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @property {string} [dot] - dot 유틸리티 문자열 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style'>}\n */\nexport interface NavigationListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\" | \"style\"\n> {\n value?: string;\n onValueChange?: (value: string) => void;\n variant?: \"pills\" | \"underline\" | \"cards\";\n scale?: \"small\" | \"medium\" | \"large\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * NavigationItem 컴포넌트의 props / NavigationItem component props\n * @typedef {Object} NavigationItemProps\n * @property {string} value - 탭 값 / Tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant] - Navigation 스타일 변형 (자동으로 설정됨) / Navigation style variant (auto-set)\n * @property {\"small\" | \"medium\" | \"large\"} [scale] - Navigation 크기 (자동으로 설정됨) / Navigation size (auto-set)\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @property {string} [dot] - dot 유틸리티 문자열 / dot utility string\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'style'>}\n */\nexport interface NavigationItemProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\" | \"style\"\n> {\n value: string;\n onValueChange?: (value: string) => void;\n variant?: \"pills\" | \"underline\" | \"cards\";\n scale?: \"small\" | \"medium\" | \"large\";\n active?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * NavigationContent 컴포넌트의 props / NavigationContent component props\n * @typedef {Object} NavigationContentProps\n * @property {string} value - 탭 값 / Tab value\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @property {string} [dot] - dot 유틸리티 문자열 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style'>}\n */\nexport interface NavigationContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\" | \"style\"\n> {\n value: string;\n active?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Navigation (root)\n// ---------------------------------------------------------------------------\n\n/**\n * Navigation 컴포넌트 / Navigation component\n *\n * 탭 네비게이션 컴포넌트입니다.\n * NavigationList, NavigationItem, NavigationContent와 함께 사용합니다.\n *\n * Tab navigation component.\n * Used with NavigationList, NavigationItem, and NavigationContent.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Navigation>\n * <Navigation.List>\n * <Navigation.Item value=\"tab1\">탭 1</Navigation.Item>\n * <Navigation.Item value=\"tab2\">탭 2</Navigation.Item>\n * </Navigation.List>\n * <Navigation.Content value=\"tab1\">내용 1</Navigation.Content>\n * </Navigation>\n *\n * @param {NavigationProps} props - Navigation 컴포넌트의 props / Navigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Navigation 컴포넌트 / Navigation component\n */\nconst Navigation = React.forwardRef<HTMLDivElement, NavigationProps>(\n (\n {\n dot: dotProp,\n style,\n value,\n defaultValue,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props\n },\n ref,\n ) => {\n const [activeTab, setActiveTab] = useState(value || defaultValue || \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : activeTab;\n\n const _handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue);\n }\n onValueChange?.(newValue);\n };\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value);\n }\n }, [value]);\n\n const computedStyle = useMemo(\n () => mergeStyles(WRAPPER_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value: currentValue,\n variant,\n scale,\n } as Partial<NavigationListProps | NavigationItemProps>);\n }\n return child;\n })}\n </div>\n );\n },\n);\nNavigation.displayName = \"Navigation\";\n\n// ---------------------------------------------------------------------------\n// NavigationList\n// ---------------------------------------------------------------------------\n\nconst NavigationList = React.forwardRef<HTMLDivElement, NavigationListProps>(\n (\n {\n dot: dotProp,\n style,\n value,\n onValueChange: _onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props\n },\n ref,\n ) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n LIST_BASE,\n LIST_VARIANT[variant] ?? LIST_VARIANT.pills,\n LIST_SCALE_GAP[scale] ?? LIST_SCALE_GAP.medium,\n resolveDot(dotProp),\n style,\n ),\n [variant, scale, dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n variant,\n scale,\n } as Partial<NavigationItemProps>);\n }\n return child;\n })}\n </div>\n );\n },\n);\nNavigationList.displayName = \"NavigationList\";\n\n// ---------------------------------------------------------------------------\n// NavigationItem\n// ---------------------------------------------------------------------------\n\nconst NavigationItem = React.forwardRef<HTMLButtonElement, NavigationItemProps>(\n (\n {\n dot: dotProp,\n style,\n value,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n active = false,\n children,\n onClick,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const computedStyle = useMemo(\n (): React.CSSProperties =>\n mergeStyles(\n ITEM_BASE,\n ITEM_SCALE[scale] ?? ITEM_SCALE.medium,\n active\n ? (ITEM_ACTIVE[variant] ?? ITEM_ACTIVE.pills)\n : (ITEM_IDLE[variant] ?? ITEM_IDLE.pills),\n isHovered && !active ? ITEM_HOVER_IDLE : undefined,\n isFocused ? ITEM_FOCUS : undefined,\n resolveDot(dotProp),\n style,\n ),\n [variant, scale, active, isHovered, isFocused, dotProp, style],\n );\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onValueChange?.(value);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n style={computedStyle}\n onClick={handleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\nNavigationItem.displayName = \"NavigationItem\";\n\n// ---------------------------------------------------------------------------\n// NavigationContent\n// ---------------------------------------------------------------------------\n\nconst NavigationContent = React.forwardRef<\n HTMLDivElement,\n NavigationContentProps\n>(({ dot: dotProp, style, active = false, ...props }, ref) => {\n if (!active) return null;\n\n const computedStyle = mergeStyles(CONTENT_BASE, resolveDot(dotProp), style);\n\n return <div ref={ref} style={computedStyle} {...props} />;\n});\nNavigationContent.displayName = \"NavigationContent\";\n\n// ---------------------------------------------------------------------------\n// Compound component\n// ---------------------------------------------------------------------------\n\nexport interface NavigationComponent extends React.ForwardRefExoticComponent<\n NavigationProps & React.RefAttributes<HTMLDivElement>\n> {\n List: typeof NavigationList;\n Item: typeof NavigationItem;\n Content: typeof NavigationContent;\n}\n\nconst NavigationComponent = Navigation as NavigationComponent;\nNavigationComponent.List = NavigationList;\nNavigationComponent.Item = NavigationItem;\nNavigationComponent.Content = NavigationContent;\n\nexport {\n NavigationComponent as Navigation,\n NavigationList,\n NavigationItem,\n NavigationContent,\n};\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ---------------------------------------------------------------------------\n// Style constants (no Tailwind strings)\n// ---------------------------------------------------------------------------\n\nconst BASE_WRAPPER: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...resolveDot(\"gap-1\"),\n};\n\nconst BASE_BUTTON: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n transition:\n \"background-color 150ms ease-in-out, color 150ms ease-in-out, opacity 150ms ease-in-out, border-color 150ms ease-in-out\",\n cursor: \"pointer\",\n outline: \"none\",\n border: \"none\",\n background: \"none\",\n padding: 0,\n userSelect: \"none\",\n};\n\nconst DISABLED_BUTTON: React.CSSProperties = {\n pointerEvents: \"none\",\n opacity: 0.5,\n};\n\n// Size styles\nconst SIZE_STYLES: Record<\"sm\" | \"md\" | \"lg\", React.CSSProperties> = {\n sm: {\n height: \"32px\",\n minWidth: \"32px\",\n ...resolveDot(\"px-2\"),\n fontSize: \"14px\",\n },\n md: {\n height: \"40px\",\n minWidth: \"40px\",\n ...resolveDot(\"px-3\"),\n fontSize: \"14px\",\n },\n lg: {\n height: \"48px\",\n minWidth: \"48px\",\n ...resolveDot(\"px-4\"),\n fontSize: \"16px\",\n },\n};\n\n// Shape styles\nconst SHAPE_STYLES: Record<\"square\" | \"circle\", React.CSSProperties> = {\n square: { borderRadius: \"6px\" },\n circle: { borderRadius: \"9999px\", aspectRatio: \"1 / 1\", padding: \"0\" },\n};\n\n// Variant × active state base styles\nconst VARIANT_INACTIVE: Record<\n \"default\" | \"outlined\" | \"minimal\",\n React.CSSProperties\n> = {\n default: {\n border: \"none\",\n backgroundColor: \"var(--color-background)\",\n color: \"var(--color-foreground)\",\n },\n outlined: {\n border: \"1px solid var(--color-border)\",\n backgroundColor: \"var(--color-background)\",\n color: \"var(--color-foreground)\",\n },\n minimal: {\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"var(--color-foreground)\",\n },\n};\n\nconst VARIANT_ACTIVE: Record<\n \"default\" | \"outlined\" | \"minimal\",\n React.CSSProperties\n> = {\n default: {\n border: \"none\",\n backgroundColor: \"var(--color-primary)\",\n color: \"var(--color-primary-foreground)\",\n },\n outlined: {\n border: \"1px solid var(--color-primary)\",\n backgroundColor: \"var(--color-primary)\",\n color: \"var(--color-primary-foreground)\",\n },\n minimal: {\n border: \"none\",\n backgroundColor:\n \"color-mix(in srgb, var(--color-primary) 10%, transparent)\",\n color: \"var(--color-primary)\",\n },\n};\n\n// Hover overlays for inactive buttons\nconst VARIANT_HOVER: Record<\n \"default\" | \"outlined\" | \"minimal\",\n React.CSSProperties\n> = {\n default: { backgroundColor: \"var(--color-muted)\" },\n outlined: { backgroundColor: \"var(--color-muted)\" },\n minimal: { backgroundColor: \"var(--color-muted)\" },\n};\n\n// Focus ring\nconst FOCUS_RING: React.CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 2px var(--color-background), 0 0 0 3px var(--color-ring)\",\n};\n\nconst ELLIPSIS_STYLE: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...resolveDot(\"px-3\"),\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--color-muted-foreground)\",\n userSelect: \"none\",\n};\n\nconst SVG_STYLE: React.CSSProperties = {\n width: \"16px\",\n height: \"16px\",\n flexShrink: 0,\n};\n\nconst INFO_WRAPPER: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"gap-4\"),\n};\n\nconst INFO_TEXT: React.CSSProperties = {\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n};\n\n// ---------------------------------------------------------------------------\n// Internal PageButton (manages its own hover/focus state)\n// ---------------------------------------------------------------------------\n\ninterface PageButtonProps {\n onClick: () => void;\n isActive?: boolean;\n disabled?: boolean;\n variant: \"default\" | \"outlined\" | \"minimal\";\n size: \"sm\" | \"md\" | \"lg\";\n shape: \"square\" | \"circle\";\n \"aria-label\"?: string;\n \"aria-current\"?: React.AriaAttributes[\"aria-current\"];\n children: React.ReactNode;\n}\n\nconst PageButton = React.memo(function PageButton({\n onClick,\n isActive = false,\n disabled = false,\n variant,\n size,\n shape,\n children,\n ...aria\n}: PageButtonProps) {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const computedStyle = useMemo((): React.CSSProperties => {\n const variantBase = isActive\n ? VARIANT_ACTIVE[variant]\n : VARIANT_INACTIVE[variant];\n return mergeStyles(\n BASE_BUTTON,\n SIZE_STYLES[size],\n SHAPE_STYLES[shape],\n variantBase,\n disabled ? DISABLED_BUTTON : undefined,\n !isActive && isHovered ? VARIANT_HOVER[variant] : undefined,\n isFocused ? FOCUS_RING : undefined,\n );\n }, [variant, size, shape, isActive, disabled, isHovered, isFocused]);\n\n return (\n <button\n type=\"button\"\n style={computedStyle}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => {\n if (!disabled) setIsHovered(true);\n }}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n {...aria}\n >\n {children}\n </button>\n );\n});\n\n// ---------------------------------------------------------------------------\n// PaginationProps\n// ---------------------------------------------------------------------------\n\n/**\n * Pagination 컴포넌트의 props / Pagination component props\n * @typedef {Object} PaginationProps\n * @property {number} currentPage - 현재 페이지 번호 / Current page number\n * @property {number} totalPages - 전체 페이지 수 / Total number of pages\n * @property {(page: number) => void} onPageChange - 페이지 변경 콜백 / Page change callback\n * @property {boolean} [showFirstLast=true] - 첫/마지막 페이지 버튼 표시 여부 / Show first/last page buttons\n * @property {boolean} [showPrevNext=true] - 이전/다음 페이지 버튼 표시 여부 / Show previous/next page buttons\n * @property {number} [maxVisiblePages=5] - 최대 표시 페이지 수 / Maximum visible page numbers\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Pagination 크기 / Pagination size\n * @property {\"default\" | \"outlined\" | \"minimal\"} [variant=\"default\"] - Pagination 스타일 변형 / Pagination style variant\n * @property {\"square\" | \"circle\"} [shape=\"square\"] - 버튼 모양 / Button shape\n * @property {string} [dot] - dot utility string for additional styles\n * @property {React.CSSProperties} [style] - Inline style overrides\n */\nexport interface PaginationProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n showFirstLast?: boolean;\n showPrevNext?: boolean;\n maxVisiblePages?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"outlined\" | \"minimal\";\n shape?: \"square\" | \"circle\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Pagination\n// ---------------------------------------------------------------------------\n\n/**\n * Pagination 컴포넌트 / Pagination component\n *\n * 페이지네이션 컨트롤을 제공하는 컴포넌트입니다.\n * 첫/마지막 페이지, 이전/다음 페이지 버튼을 지원하며,\n * 많은 페이지가 있을 경우 자동으로 생략 표시(...)를 합니다.\n *\n * Component that provides pagination controls.\n * Supports first/last page and previous/next page buttons,\n * and automatically shows ellipsis (...) when there are many pages.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [page, setPage] = useState(1)\n *\n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n *\n * @example\n * // Outlined 스타일, 원형 버튼 / Outlined style, circular buttons\n * <Pagination\n * currentPage={page}\n * totalPages={20}\n * onPageChange={setPage}\n * variant=\"outlined\"\n * shape=\"circle\"\n * />\n *\n * @param {PaginationProps} props - Pagination 컴포넌트의 props / Pagination component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Pagination 컴포넌트 / Pagination component\n */\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n dot: dotProp,\n style,\n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n showPrevNext = true,\n maxVisiblePages = 5,\n size = \"md\",\n variant = \"default\",\n shape = \"square\",\n ...props\n },\n ref,\n ) => {\n const getVisiblePages = (): (number | string)[] => {\n const pages: (number | string)[] = [];\n const halfVisible = Math.floor(maxVisiblePages / 2);\n\n let start = Math.max(1, currentPage - halfVisible);\n let end = Math.min(totalPages, currentPage + halfVisible);\n\n if (end - start + 1 < maxVisiblePages) {\n if (start === 1) {\n end = Math.min(totalPages, start + maxVisiblePages - 1);\n } else {\n start = Math.max(1, end - maxVisiblePages + 1);\n }\n }\n\n if (start > 1) {\n pages.push(1);\n if (start > 2) pages.push(\"...\");\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (end < totalPages) {\n if (end < totalPages - 1) pages.push(\"...\");\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const handlePageClick = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n const visiblePages = getVisiblePages();\n\n const wrapperStyle = useMemo(\n () => mergeStyles(BASE_WRAPPER, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n // Ellipsis height mirrors the button size\n const ellipsisStyle = useMemo(\n () => mergeStyles(ELLIPSIS_STYLE, { height: SIZE_STYLES[size].height }),\n [size],\n );\n\n return (\n <div ref={ref} style={wrapperStyle} {...props}>\n {/* 첫 페이지 버튼 */}\n {showFirstLast && currentPage > 1 && (\n <PageButton\n onClick={() => handlePageClick(1)}\n variant={variant}\n size={size}\n shape={shape}\n aria-label=\"첫 페이지로 이동\"\n >\n <svg\n style={SVG_STYLE}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 19l-7-7 7-7M19 19l-7-7 7-7\"\n />\n </svg>\n </PageButton>\n )}\n\n {/* 이전 페이지 버튼 */}\n {showPrevNext && currentPage > 1 && (\n <PageButton\n onClick={() => handlePageClick(currentPage - 1)}\n variant={variant}\n size={size}\n shape={shape}\n aria-label=\"이전 페이지로 이동\"\n >\n <svg\n style={SVG_STYLE}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </PageButton>\n )}\n\n {/* 페이지 번호들 */}\n {visiblePages.map((page, index) => (\n <React.Fragment key={index}>\n {page === \"...\" ? (\n <span style={ellipsisStyle}>...</span>\n ) : (\n <PageButton\n onClick={() => handlePageClick(page as number)}\n isActive={page === currentPage}\n variant={variant}\n size={size}\n shape={shape}\n aria-label={`${page}페이지로 이동`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </PageButton>\n )}\n </React.Fragment>\n ))}\n\n {/* 다음 페이지 버튼 */}\n {showPrevNext && currentPage < totalPages && (\n <PageButton\n onClick={() => handlePageClick(currentPage + 1)}\n variant={variant}\n size={size}\n shape={shape}\n aria-label=\"다음 페이지로 이동\"\n >\n <svg\n style={SVG_STYLE}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </PageButton>\n )}\n\n {/* 마지막 페이지 버튼 */}\n {showFirstLast && currentPage < totalPages && (\n <PageButton\n onClick={() => handlePageClick(totalPages)}\n variant={variant}\n size={size}\n shape={shape}\n aria-label=\"마지막 페이지로 이동\"\n >\n <svg\n style={SVG_STYLE}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 5l7 7-7 7M5 5l7 7-7 7\"\n />\n </svg>\n </PageButton>\n )}\n </div>\n );\n },\n);\nPagination.displayName = \"Pagination\";\n\n// ---------------------------------------------------------------------------\n// Convenience wrappers\n// ---------------------------------------------------------------------------\n\nexport const PaginationOutlined = React.forwardRef<\n HTMLDivElement,\n Omit<PaginationProps, \"variant\">\n>((props, ref) => <Pagination ref={ref} variant=\"outlined\" {...props} />);\nPaginationOutlined.displayName = \"PaginationOutlined\";\n\nexport const PaginationMinimal = React.forwardRef<\n HTMLDivElement,\n Omit<PaginationProps, \"variant\">\n>((props, ref) => <Pagination ref={ref} variant=\"minimal\" {...props} />);\nPaginationMinimal.displayName = \"PaginationMinimal\";\n\n// ---------------------------------------------------------------------------\n// PaginationWithInfo\n// ---------------------------------------------------------------------------\n\nexport const PaginationWithInfo = React.forwardRef<\n HTMLDivElement,\n PaginationProps & {\n totalItems?: number;\n itemsPerPage?: number;\n showInfo?: boolean;\n }\n>(\n (\n {\n totalItems = 0,\n itemsPerPage = 10,\n showInfo = true,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const startItem = (props.currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(props.currentPage * itemsPerPage, totalItems);\n\n const wrapperStyle = useMemo(\n () => mergeStyles(INFO_WRAPPER, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return (\n <div style={wrapperStyle}>\n {showInfo && (\n <div style={INFO_TEXT}>\n {totalItems > 0 ? (\n <>\n <span style={{ fontWeight: 500 }}>{startItem}</span>\n {\" - \"}\n <span style={{ fontWeight: 500 }}>{endItem}</span>\n {\" of \"}\n <span style={{ fontWeight: 500 }}>{totalItems}</span>\n {\" results\"}\n </>\n ) : (\n \"No results\"\n )}\n </div>\n )}\n <Pagination ref={ref} {...props} />\n </div>\n );\n },\n);\nPaginationWithInfo.displayName = \"PaginationWithInfo\";\n\nexport { Pagination };\n","\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { dot as dotFn } from \"@hua-labs/dot\"\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\"\nimport { Icon } from \"./Icon\"\n\n// ─── Base style helpers ──────────────────────────────────────────────────────\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties\n\nconst BASE_STYLES = s(\"flex items-center justify-between py-4\")\n\nconst PREV_WRAPPER_STYLES = s(\"flex-1\")\n\nconst NEXT_WRAPPER_STYLES: React.CSSProperties = {\n ...s(\"flex-1 flex\"),\n justifyContent: \"flex-end\",\n}\n\nconst LINK_BASE_STYLES: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground)\",\n textDecoration: \"none\",\n transition: \"color 200ms ease-in-out\",\n cursor: \"pointer\",\n}\n\nconst LINK_HOVER_STYLES: React.CSSProperties = {\n color: \"var(--color-foreground)\",\n}\n\nconst PREV_ICON_STYLES: React.CSSProperties = {\n display: \"inline-flex\",\n width: \"1rem\",\n height: \"1rem\",\n marginRight: \"0.5rem\",\n transition: \"transform 200ms ease-in-out\",\n}\n\nconst NEXT_ICON_STYLES: React.CSSProperties = {\n display: \"inline-flex\",\n width: \"1rem\",\n height: \"1rem\",\n transition: \"transform 200ms ease-in-out\",\n}\n\nconst PREV_ICON_HOVER_STYLES: React.CSSProperties = {\n transform: \"translateX(-4px)\",\n}\n\nconst NEXT_ICON_HOVER_STYLES: React.CSSProperties = {\n transform: \"translateX(4px)\",\n}\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/**\n * PageNavigation 컴포넌트의 props / PageNavigation component props\n * @typedef {Object} PageNavigationProps\n * @property {Object} [prevPage] - 이전 페이지 정보 / Previous page information\n * @property {string} prevPage.title - 이전 페이지 제목 / Previous page title\n * @property {string} prevPage.href - 이전 페이지 링크 / Previous page link\n * @property {Object} [nextPage] - 다음 페이지 정보 / Next page information\n * @property {string} nextPage.title - 다음 페이지 제목 / Next page title\n * @property {string} nextPage.href - 다음 페이지 링크 / Next page link\n * @property {boolean} [showOnMobile=false] - 모바일에서 표시 여부 / Show on mobile\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\nexport interface PageNavigationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> {\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n showOnMobile?: boolean\n dot?: string\n style?: React.CSSProperties\n}\n\n// ─── NavLink sub-component ───────────────────────────────────────────────────\n\ninterface NavLinkProps {\n href: string\n direction: \"prev\" | \"next\"\n title: string\n}\n\nconst NavLink = React.memo(function NavLink({ href, direction, title }: NavLinkProps) {\n const [isHovered, setIsHovered] = useState(false)\n\n const linkStyle = useMemo(\n () => mergeStyles(LINK_BASE_STYLES, isHovered ? LINK_HOVER_STYLES : undefined),\n [isHovered]\n )\n\n const prevIconStyle = useMemo(\n () => mergeStyles(PREV_ICON_STYLES, isHovered ? PREV_ICON_HOVER_STYLES : undefined),\n [isHovered]\n )\n\n const nextIconStyle = useMemo(\n () => mergeStyles(NEXT_ICON_STYLES, isHovered ? NEXT_ICON_HOVER_STYLES : undefined),\n [isHovered]\n )\n\n return (\n <a\n href={href}\n style={linkStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {direction === \"prev\" && (\n <span style={prevIconStyle} aria-hidden=\"true\">\n <Icon name=\"chevronLeft\" size={16} />\n </span>\n )}\n <span>{title}</span>\n {direction === \"next\" && (\n <span style={nextIconStyle} aria-hidden=\"true\">\n <Icon name=\"chevronRight\" size={16} />\n </span>\n )}\n </a>\n )\n})\n\n// ─── PageNavigation ──────────────────────────────────────────────────────────\n\n/**\n * PageNavigation 컴포넌트 / PageNavigation component\n *\n * 이전/다음 페이지로 이동하는 네비게이션 컴포넌트입니다.\n * 문서 페이지나 가이드 페이지에서 사용하기 적합합니다.\n *\n * Navigation component for moving to previous/next pages.\n * Suitable for documentation or guide pages.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <PageNavigation\n * prevPage={{ title: \"이전 페이지\", href: \"/prev\" }}\n * nextPage={{ title: \"다음 페이지\", href: \"/next\" }}\n * />\n *\n * @param {PageNavigationProps} props - PageNavigation 컴포넌트의 props / PageNavigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element | null} PageNavigation 컴포넌트 / PageNavigation component\n */\nconst PageNavigation = React.forwardRef<HTMLDivElement, PageNavigationProps>(\n (\n {\n prevPage,\n nextPage,\n showOnMobile = false,\n dot: dotProp,\n style,\n ...props\n },\n ref\n ) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n BASE_STYLES,\n !showOnMobile ? { display: \"none\" } : undefined,\n resolveDot(dotProp),\n style\n ),\n [showOnMobile, dotProp, style]\n )\n\n if (!prevPage && !nextPage) {\n return null\n }\n\n return (\n <div\n ref={ref}\n style={computedStyle}\n {...props}\n >\n {/* 이전 페이지 */}\n <div style={PREV_WRAPPER_STYLES}>\n {prevPage && (\n <NavLink\n href={prevPage.href}\n direction=\"prev\"\n title={prevPage.title}\n />\n )}\n </div>\n\n {/* 다음 페이지 */}\n <div style={NEXT_WRAPPER_STYLES}>\n {nextPage && (\n <NavLink\n href={nextPage.href}\n direction=\"next\"\n title={nextPage.title}\n />\n )}\n </div>\n </div>\n )\n }\n)\nPageNavigation.displayName = \"PageNavigation\"\n\nexport { PageNavigation }\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {m}from'./chunk-NSDWT2JM.mjs';import {e,d as d$1}from'./chunk-OBMOTQEU.mjs';import d from'react';import {jsxs,jsx}from'react/jsx-runtime';var B=d.forwardRef(({children:a,items:o,maxItems:s,showHomeIcon:y,homeLabel:m$1="Home",separator:l=jsx(m,{name:"chevronRight",dot:"w-3 h-3 text-muted-foreground flex-shrink-0"}),variant:p="default",dot:u,style:h,...I},S)=>{let v={default:{display:"inline-flex",alignItems:"center",fontSize:"0.875rem",width:"fit-content"},subtle:{display:"inline-flex",alignItems:"center",fontSize:"0.75rem",backgroundColor:"color-mix(in srgb, var(--color-background) 40%, transparent)",backdropFilter:"blur(12px)",...e("rounded-md py-2 px-3"),border:"1px solid color-mix(in srgb, var(--color-border) 30%, transparent)",width:"fit-content",boxShadow:"0 1px 2px 0 rgba(0,0,0,0.05)"},transparent:{display:"inline-flex",alignItems:"center",fontSize:"0.75rem",width:"fit-content"},glass:{display:"inline-flex",alignItems:"center",fontSize:"0.75rem",backgroundColor:"color-mix(in srgb, var(--color-background) 30%, transparent)",backdropFilter:"blur(16px)",...e("rounded-lg py-2 px-4"),border:"1px solid color-mix(in srgb, var(--color-border) 25%, transparent)",width:"fit-content",boxShadow:"0 10px 15px -3px rgba(0,0,0,0.1)"}},i=(()=>{if(o){let r=[...o];if(s&&r.length>s){let e=r[0],b=r.slice(-(s-1));r=[e,{label:"...",href:void 0},...b];}return r.map((e,b)=>{let R=b===r.length-1&&!e.href;return jsxs(x,{href:e.href,isCurrent:R,children:[e.icon&&jsx(m,{name:e.icon,dot:"w-4 h-4 mr-1"}),e.label]},b)})}return a?d.Children.map(a,(r,e$1)=>d.isValidElement(r)?jsxs("li",{style:{display:"flex",alignItems:"center"},children:[r,e$1<d.Children.count(a)-1&&jsx("span",{style:{...e("mx-3"),display:"flex",alignItems:"center",justifyContent:"center",color:"var(--color-muted-foreground)"},"aria-hidden":"true",children:l})]},e$1):r):null})(),C=o?o.length:a?d.Children.count(a):0;return jsx("nav",{ref:S,"aria-label":"Breadcrumb",style:d$1(v[p],e(u),h),...I,children:jsxs("ol",{style:{display:"inline-flex",alignItems:"center"},children:[y&&jsxs("li",{style:{display:"flex",alignItems:"center"},children:[jsxs(x,{href:"/",children:[jsx(m,{name:"home",dot:"w-4 h-4 mr-1"}),m$1]}),C>0&&jsx("span",{style:{...e("mx-3"),display:"flex",alignItems:"center",justifyContent:"center",color:"var(--color-muted-foreground)"},"aria-hidden":"true",children:l})]}),o?i==null?void 0:i.map((r,e$1)=>jsxs("li",{style:{display:"flex",alignItems:"center"},children:[r,e$1<((i==null?void 0:i.length)||0)-1&&jsx("span",{style:{...e("mx-3"),display:"flex",alignItems:"center",justifyContent:"center",color:"var(--color-muted-foreground)"},"aria-hidden":"true",children:l})]},e$1)):i]})})});B.displayName="Breadcrumb";var x=d.forwardRef(({dot:a,style:o,href:s,isCurrent:y=false,children:m,...l},p)=>{let u={color:"var(--color-muted-foreground)"};return y?jsx("span",{ref:p,"aria-current":"page",style:d$1(u,{fontWeight:500},e(a),o),...l,children:m}):s?jsx("a",{href:s,style:d$1(u,e(a),o),...l,children:m}):jsx("span",{ref:p,style:d$1(u,e(a),o),...l,children:m})});x.displayName="BreadcrumbItem";export{B as a,x as b};//# sourceMappingURL=chunk-ZVCGC6EV.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-ZVCGC6EV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Breadcrumb.tsx"],"names":["Breadcrumb","React","children","items","maxItems","showHomeIcon","homeLabel","separator","jsx","Icon","variant","dotProp","style","props","ref","variantStyles","resolveDot","renderedItems","displayItems","firstItem","lastItems","item","index","isCurrent","jsxs","BreadcrumbItem","child","itemsCount","mergeStyles","href","baseStyle"],"mappings":"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","file":"chunk-ZVCGC6EV.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { Icon } from \"./Icon\";\nimport type { IconName } from \"../lib/icons\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n/**\n * Breadcrumb 항목 타입 / Breadcrumb item type\n */\nexport interface BreadcrumbItemData {\n label: string;\n href?: string;\n icon?: IconName;\n}\n\n/**\n * Breadcrumb 컴포넌트의 props / Breadcrumb component props\n * @typedef {Object} BreadcrumbProps\n * @property {React.ReactNode} [children] - BreadcrumbItem 컴포넌트들 / BreadcrumbItem components\n * @property {BreadcrumbItemData[]} [items] - Breadcrumb 항목 배열 (children 대신 사용 가능) / Breadcrumb items array (alternative to children)\n * @property {number} [maxItems] - 최대 표시할 항목 수 (긴 경로 처리) / Maximum number of items to display (for long paths)\n * @property {boolean} [showHomeIcon] - 홈 아이콘 표시 여부 / Show home icon\n * @property {string} [homeLabel] - 홈 라벨 (기본: \"Home\") / Home label (default: \"Home\")\n * @property {React.ReactNode} [separator] - 항목 사이 구분자 (기본: chevronRight 아이콘) / Separator between items (default: chevronRight icon)\n * @property {'default' | 'subtle' | 'transparent' | 'glass'} [variant='default'] - Breadcrumb 스타일 변형 / Breadcrumb style variant\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'className'>}\n */\nexport interface BreadcrumbProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n children?: React.ReactNode;\n items?: BreadcrumbItemData[];\n maxItems?: number;\n showHomeIcon?: boolean;\n homeLabel?: string;\n separator?: React.ReactNode;\n variant?: \"default\" | \"subtle\" | \"transparent\" | \"glass\";\n /** dot 유틸리티 스트링 (인라인 스타일로 변환) / dot utility string (converted to inline style) */\n dot?: string;\n /** 추가 인라인 스타일 / Additional inline style */\n style?: React.CSSProperties;\n}\n\n/**\n * BreadcrumbItem 컴포넌트의 props / BreadcrumbItem component props\n * @typedef {Object} BreadcrumbItemProps\n * @property {string} [href] - 링크 URL (없으면 일반 텍스트) / Link URL (plain text if not provided)\n * @property {boolean} [isCurrent=false] - 현재 페이지 여부 / Current page indicator\n * @property {React.ReactNode} children - 항목 텍스트 / Item text\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\nexport interface BreadcrumbItemProps {\n href?: string;\n isCurrent?: boolean;\n children: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Breadcrumb 컴포넌트 / Breadcrumb component\n *\n * 네비게이션 경로를 표시하는 breadcrumb 컴포넌트입니다.\n * 현재 위치와 경로를 시각적으로 표현합니다.\n *\n * Breadcrumb component for displaying navigation paths.\n * Visually represents current location and path.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Breadcrumb>\n * <BreadcrumbItem href=\"/\">홈</BreadcrumbItem>\n * <BreadcrumbItem href=\"/products\">상품</BreadcrumbItem>\n * <BreadcrumbItem isCurrent>상세</BreadcrumbItem>\n * </Breadcrumb>\n *\n * @example\n * // 커스텀 구분자 / Custom separator\n * <Breadcrumb separator={<span>/</span>}>\n * <BreadcrumbItem href=\"/\">홈</BreadcrumbItem>\n * <BreadcrumbItem isCurrent>현재</BreadcrumbItem>\n * </Breadcrumb>\n *\n * @param {BreadcrumbProps} props - Breadcrumb 컴포넌트의 props / Breadcrumb component props\n * @param {React.Ref<HTMLDivElement>} ref - nav 요소 ref / nav element ref\n * @returns {JSX.Element} Breadcrumb 컴포넌트 / Breadcrumb component\n */\nconst Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(\n (\n {\n children,\n items,\n maxItems,\n showHomeIcon,\n homeLabel = \"Home\",\n separator = (\n <Icon\n name=\"chevronRight\"\n dot=\"w-3 h-3 text-muted-foreground flex-shrink-0\"\n />\n ),\n variant = \"default\",\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const variantStyles: Record<string, React.CSSProperties> = {\n default: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: \"0.875rem\",\n width: \"fit-content\",\n },\n subtle: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n backgroundColor:\n \"color-mix(in srgb, var(--color-background) 40%, transparent)\",\n backdropFilter: \"blur(12px)\",\n ...resolveDot(\"rounded-md py-2 px-3\"),\n border:\n \"1px solid color-mix(in srgb, var(--color-border) 30%, transparent)\",\n width: \"fit-content\",\n boxShadow: \"0 1px 2px 0 rgba(0,0,0,0.05)\",\n },\n transparent: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n width: \"fit-content\",\n },\n glass: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n backgroundColor:\n \"color-mix(in srgb, var(--color-background) 30%, transparent)\",\n backdropFilter: \"blur(16px)\",\n ...resolveDot(\"rounded-lg py-2 px-4\"),\n border:\n \"1px solid color-mix(in srgb, var(--color-border) 25%, transparent)\",\n width: \"fit-content\",\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1)\",\n },\n };\n\n // items prop이 있으면 BreadcrumbItem으로 변환\n const renderItems = () => {\n if (items) {\n let displayItems = [...items];\n\n // maxItems 처리\n if (maxItems && displayItems.length > maxItems) {\n const firstItem = displayItems[0];\n const lastItems = displayItems.slice(-(maxItems - 1));\n displayItems = [\n firstItem,\n { label: \"...\", href: undefined },\n ...lastItems,\n ];\n }\n\n // 마지막 항목은 isCurrent로 표시\n return displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isCurrent = isLast && !item.href;\n\n return (\n <BreadcrumbItem key={index} href={item.href} isCurrent={isCurrent}>\n {item.icon && <Icon name={item.icon} dot=\"w-4 h-4 mr-1\" />}\n {item.label}\n </BreadcrumbItem>\n );\n });\n }\n\n // children이 있으면 그대로 사용\n if (children) {\n return React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return (\n <li key={index} style={{ display: \"flex\", alignItems: \"center\" }}>\n {child}\n {index < React.Children.count(children) - 1 && (\n <span\n style={{\n ...resolveDot(\"mx-3\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--color-muted-foreground)\",\n }}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n </li>\n );\n }\n return child;\n });\n }\n\n return null;\n };\n\n const renderedItems = renderItems();\n const itemsCount = items\n ? items.length\n : children\n ? React.Children.count(children)\n : 0;\n\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n style={mergeStyles(variantStyles[variant], resolveDot(dotProp), style)}\n {...props}\n >\n <ol style={{ display: \"inline-flex\", alignItems: \"center\" }}>\n {showHomeIcon && (\n <li style={{ display: \"flex\", alignItems: \"center\" }}>\n <BreadcrumbItem href=\"/\">\n <Icon name=\"home\" dot=\"w-4 h-4 mr-1\" />\n {homeLabel}\n </BreadcrumbItem>\n {itemsCount > 0 && (\n <span\n style={{\n ...resolveDot(\"mx-3\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--color-muted-foreground)\",\n }}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n </li>\n )}\n {items\n ? renderedItems?.map((item, index) => (\n <li\n key={index}\n style={{ display: \"flex\", alignItems: \"center\" }}\n >\n {item}\n {index < (renderedItems?.length || 0) - 1 && (\n <span\n style={{\n ...resolveDot(\"mx-3\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--color-muted-foreground)\",\n }}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n </li>\n ))\n : renderedItems}\n </ol>\n </nav>\n );\n },\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\n/**\n * BreadcrumbItem 컴포넌트\n * Breadcrumb의 개별 항목을 표시합니다.\n *\n * @component\n * @param {BreadcrumbItemProps} props - BreadcrumbItem 컴포넌트의 props\n * @param {React.Ref<HTMLLIElement>} ref - li 요소 ref\n * @returns {JSX.Element} BreadcrumbItem 컴포넌트\n */\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n (\n { dot: dotProp, style, href, isCurrent = false, children, ...props },\n ref,\n ) => {\n const baseStyle: React.CSSProperties = {\n color: \"var(--color-muted-foreground)\",\n };\n\n if (isCurrent) {\n return (\n <span\n ref={ref}\n aria-current=\"page\"\n style={mergeStyles(\n baseStyle,\n { fontWeight: 500 },\n resolveDot(dotProp),\n style,\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n\n if (href) {\n return (\n <a\n href={href}\n style={mergeStyles(baseStyle, resolveDot(dotProp), style)}\n {...props}\n >\n {children}\n </a>\n );\n }\n\n return (\n <span\n ref={ref}\n style={mergeStyles(baseStyle, resolveDot(dotProp), style)}\n {...props}\n >\n {children}\n </span>\n );\n },\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport { Breadcrumb, BreadcrumbItem };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {e,d}from'./chunk-OBMOTQEU.mjs';import n,{useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var L={position:"absolute",zIndex:50,backgroundColor:"var(--color-popover, var(--background))",color:"var(--color-popover-foreground, var(--foreground))",border:"1px solid var(--color-border)",...e("rounded-lg p-4"),boxShadow:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",minWidth:"200px"};function I(t,e){switch(t){case "top":return {bottom:"100%",marginBottom:e};case "bottom":return {top:"100%",marginTop:e};case "left":return {right:"100%",marginRight:e};case "right":return {left:"100%",marginLeft:e}}}function X(t,e){let r=t==="top"||t==="bottom";return e==="start"?r?{left:0}:{top:0}:e==="end"?r?{right:0}:{bottom:0}:r?{left:"50%",transform:"translateX(-50%)"}:{top:"50%",transform:"translateY(-50%)"}}function Y(t){let e={position:"absolute",width:0,height:0,border:"5px solid transparent"},r="var(--color-border)";switch(t){case "top":return {...e,top:"100%",left:"50%",transform:"translateX(-50%)",borderTopColor:r,borderBottom:"none"};case "bottom":return {...e,bottom:"100%",left:"50%",transform:"translateX(-50%)",borderBottomColor:r,borderTop:"none"};case "left":return {...e,left:"100%",top:"50%",transform:"translateY(-50%)",borderLeftColor:r,borderRight:"none"};case "right":return {...e,right:"100%",top:"50%",transform:"translateY(-50%)",borderRightColor:r,borderLeft:"none"}}}var z=n.forwardRef(({dot:t,style:e$1,children:r,trigger:c,open:a,onOpenChange:o,position:i="bottom",align:f="center",offset:R=8,disabled:h=false,contentDot:y,contentStyle:x,fullWidth:v=false,...E},M)=>{let[w,H]=n.useState(false),g=n.useRef(null),b=n.useRef(null),S=a!==void 0,p=S?a:w,P=n.useCallback(d=>{h||(S||H(d),o==null||o(d));},[h,S,o]),N=()=>{P(!p);};n.useEffect(()=>{let d=C=>{g.current&&b.current&&!g.current.contains(C.target)&&!b.current.contains(C.target)&&P(false);};if(p)return document.addEventListener("mousedown",d),()=>{document.removeEventListener("mousedown",d);}},[p,P]);let k=useMemo(()=>d({position:"relative"},e(t),e$1),[t,e$1]),D=useMemo(()=>({display:v?"block":"inline-block",width:v?"100%":void 0,cursor:"pointer"}),[v]),A=useMemo(()=>d(L,I(i,R),X(i,f),e(y),x),[i,R,f,y,x]),B=useMemo(()=>Y(i),[i]);return jsxs("div",{ref:M,style:k,...E,children:[jsx("div",{ref:g,onClick:N,style:D,"aria-expanded":p,"aria-haspopup":"true",children:c}),p&&jsxs("div",{ref:b,role:"dialog","data-position":i,"data-align":f,style:A,children:[jsx("div",{"aria-hidden":"true",style:B}),jsx("div",{style:{position:"relative",zIndex:10},children:r})]})]})});z.displayName="Popover";var O=n.forwardRef(({dot:t,style:e$1,children:r,...c},a)=>{let o=useMemo(()=>d({display:"inline-block",cursor:"pointer"},e(t),e$1),[t,e$1]);return jsx("div",{ref:a,style:o,...c,children:r})});O.displayName="PopoverTrigger";var V=n.forwardRef(({dot:t,style:e$1,children:r,...c},a)=>{let o=useMemo(()=>d(L,e(t),e$1),[t,e$1]);return jsx("div",{ref:a,style:o,...c,children:r})});V.displayName="PopoverContent";export{z as a,O as b,V as c};//# sourceMappingURL=chunk-ZZ67E3M5.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-ZZ67E3M5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Popover.tsx"],"names":["BASE_PANEL","resolveDot","getPanelPositionStyle","position","offset","getPanelAlignStyle","align","isVertical","getArrowStyle","base","color","Popover","React","dotProp","style","children","trigger","controlledOpen","onOpenChange","disabled","contentDot","contentStyle","fullWidth","props","ref","internalOpen","setInternalOpen","triggerRef","popoverRef","isControlled","isOpen","handleOpenChange","newOpen","handleTriggerClick","handleClickOutside","event","wrapperStyle","useMemo","mergeStyles","triggerWrapperStyle","panelStyle","arrowStyle","jsxs","jsx","PopoverTrigger","computedStyle","PopoverContent"],"mappings":"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","file":"chunk-ZZ67E3M5.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ─── Shared design tokens ─────────────────────────────────────────────────────\n\nconst BASE_PANEL: React.CSSProperties = {\n position: \"absolute\",\n zIndex: 50,\n backgroundColor: \"var(--color-popover, var(--background))\",\n color: \"var(--color-popover-foreground, var(--foreground))\",\n border: \"1px solid var(--color-border)\",\n ...resolveDot(\"rounded-lg p-4\"),\n boxShadow:\n \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n minWidth: \"200px\",\n};\n\n// ─── Position helpers ─────────────────────────────────────────────────────────\n\nfunction getPanelPositionStyle(\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n offset: number,\n): React.CSSProperties {\n switch (position) {\n case \"top\":\n return { bottom: \"100%\", marginBottom: offset };\n case \"bottom\":\n return { top: \"100%\", marginTop: offset };\n case \"left\":\n return { right: \"100%\", marginRight: offset };\n case \"right\":\n return { left: \"100%\", marginLeft: offset };\n }\n}\n\nfunction getPanelAlignStyle(\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n align: \"start\" | \"center\" | \"end\",\n): React.CSSProperties {\n const isVertical = position === \"top\" || position === \"bottom\";\n\n if (align === \"start\") {\n return isVertical ? { left: 0 } : { top: 0 };\n }\n if (align === \"end\") {\n return isVertical ? { right: 0 } : { bottom: 0 };\n }\n // center\n return isVertical\n ? { left: \"50%\", transform: \"translateX(-50%)\" }\n : { top: \"50%\", transform: \"translateY(-50%)\" };\n}\n\n/** CSS border-trick arrow pointing toward the trigger */\nfunction getArrowStyle(\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n): React.CSSProperties {\n const base: React.CSSProperties = {\n position: \"absolute\",\n width: 0,\n height: 0,\n border: \"5px solid transparent\",\n };\n\n const color = \"var(--color-border)\";\n\n switch (position) {\n case \"top\":\n // Arrow points down (below the panel, toward trigger)\n return {\n ...base,\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderTopColor: color,\n borderBottom: \"none\",\n };\n case \"bottom\":\n // Arrow points up (above the panel, toward trigger)\n return {\n ...base,\n bottom: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderBottomColor: color,\n borderTop: \"none\",\n };\n case \"left\":\n // Arrow points right (toward trigger on the right)\n return {\n ...base,\n left: \"100%\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderLeftColor: color,\n borderRight: \"none\",\n };\n case \"right\":\n // Arrow points left (toward trigger on the left)\n return {\n ...base,\n right: \"100%\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderRightColor: color,\n borderLeft: \"none\",\n };\n }\n}\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Popover 컴포넌트의 props / Popover component props\n * @typedef {Object} PopoverProps\n * @property {React.ReactNode} children - Popover 내용 / Popover content\n * @property {React.ReactNode} trigger - Popover를 열기 위한 트리거 요소 / Trigger element to open popover\n * @property {boolean} [open] - 제어 모드에서 열림/닫힘 상태 / Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - 상태 변경 콜백 / State change callback\n * @property {\"top\" | \"bottom\" | \"left\" | \"right\"} [position=\"bottom\"] - Popover 표시 위치 / Popover display position\n * @property {\"start\" | \"center\" | \"end\"} [align=\"center\"] - Popover 정렬 / Popover alignment\n * @property {number} [offset=8] - 트리거와 Popover 사이 간격 (px) / Spacing between trigger and popover (px)\n * @property {boolean} [disabled=false] - Popover 비활성화 여부 / Disable popover\n * @property {string} [contentDot] - dot utility string for popover panel / 팝오버 패널 dot 유틸리티\n * @property {React.CSSProperties} [contentStyle] - inline style for popover panel / 팝오버 패널 인라인 스타일\n * @property {boolean} [fullWidth] - 트리거를 full-width로 렌더링 / Render trigger as full-width\n * @property {string} [dot] - dot utility string for wrapper / 래퍼 dot 유틸리티\n * @property {React.CSSProperties} [style] - inline style for wrapper / 래퍼 인라인 스타일\n */\nexport interface PopoverProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n children: React.ReactNode;\n trigger: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n offset?: number;\n disabled?: boolean;\n /** dot utility string for popover content panel */\n contentDot?: string;\n /** inline style overrides for popover content panel */\n contentStyle?: React.CSSProperties;\n /** Render trigger as full-width (DatePicker etc.) */\n fullWidth?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Popover 컴포넌트 / Popover component\n *\n * 트리거 요소를 클릭하면 표시되는 팝오버 컴포넌트입니다.\n * 외부 클릭 시 자동으로 닫힙니다.\n *\n * Popover component that appears when the trigger element is clicked.\n * Automatically closes when clicking outside.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Popover trigger={<Button>열기</Button>}>\n * <div style={{ padding: 16 }}>Popover 내용</div>\n * </Popover>\n *\n * @example\n * // 제어 모드 / Controlled mode\n * const [open, setOpen] = useState(false)\n * <Popover\n * open={open}\n * onOpenChange={setOpen}\n * trigger={<Button>제어 모드</Button>}\n * position=\"top\"\n * >\n * <div style={{ padding: 16 }}>내용</div>\n * </Popover>\n *\n * @param {PopoverProps} props - Popover 컴포넌트의 props / Popover component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Popover 컴포넌트 / Popover component\n */\nconst Popover = React.forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n dot: dotProp,\n style,\n children,\n trigger,\n open: controlledOpen,\n onOpenChange,\n position = \"bottom\",\n align = \"center\",\n offset = 8,\n disabled = false,\n contentDot,\n contentStyle,\n fullWidth = false,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (disabled) return;\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [disabled, isControlled, onOpenChange],\n );\n\n const handleTriggerClick = () => {\n handleOpenChange(!isOpen);\n };\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n popoverRef.current &&\n !triggerRef.current.contains(event.target as Node) &&\n !popoverRef.current.contains(event.target as Node)\n ) {\n handleOpenChange(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }\n }, [isOpen, handleOpenChange]);\n\n const wrapperStyle = useMemo(\n () => mergeStyles({ position: \"relative\" }, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n const triggerWrapperStyle: React.CSSProperties = useMemo(\n () => ({\n display: fullWidth ? \"block\" : \"inline-block\",\n width: fullWidth ? \"100%\" : undefined,\n cursor: \"pointer\",\n }),\n [fullWidth],\n );\n\n const panelStyle = useMemo(\n () =>\n mergeStyles(\n BASE_PANEL,\n getPanelPositionStyle(position, offset),\n getPanelAlignStyle(position, align),\n resolveDot(contentDot),\n contentStyle,\n ),\n [position, offset, align, contentDot, contentStyle],\n );\n\n const arrowStyle = useMemo(() => getArrowStyle(position), [position]);\n\n return (\n <div ref={ref} style={wrapperStyle} {...props}>\n {/* 트리거 */}\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n style={triggerWrapperStyle}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n >\n {trigger}\n </div>\n\n {/* 팝오버 패널 */}\n {isOpen && (\n <div\n ref={popoverRef}\n role=\"dialog\"\n data-position={position}\n data-align={align}\n style={panelStyle}\n >\n {/* 화살표 */}\n <div aria-hidden=\"true\" style={arrowStyle} />\n\n {/* 내용 */}\n <div style={{ position: \"relative\", zIndex: 10 }}>{children}</div>\n </div>\n )}\n </div>\n );\n },\n);\nPopover.displayName = \"Popover\";\n\n// ─── Convenience sub-components ───────────────────────────────────────────────\n\nexport interface PopoverTriggerProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nexport const PopoverTrigger = React.forwardRef<\n HTMLDivElement,\n PopoverTriggerProps\n>(({ dot: dotProp, style, children, ...props }, ref) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n { display: \"inline-block\", cursor: \"pointer\" },\n resolveDot(dotProp),\n style,\n ),\n [dotProp, style],\n );\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n});\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\nexport interface PopoverContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nexport const PopoverContent = React.forwardRef<\n HTMLDivElement,\n PopoverContentProps\n>(({ dot: dotProp, style, children, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(BASE_PANEL, resolveDot(dotProp), style),\n [dotProp, style],\n );\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n});\nPopoverContent.displayName = \"PopoverContent\";\n\nexport { Popover };\n"]}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 공통 색상 타입
|
|
8
8
|
* 모든 컴포넌트에서 사용하는 표준 색상 팔레트
|
|
9
9
|
*/
|
|
10
|
-
type Color = "blue" | "purple" | "green" | "orange" | "red" | "indigo" | "pink" | "gray" | "cyan";
|
|
10
|
+
type Color = "blue" | "purple" | "green" | "orange" | "red" | "indigo" | "pink" | "gray" | "cyan" | "primary";
|
|
11
11
|
/**
|
|
12
12
|
* 공통 크기 타입
|
|
13
13
|
*/
|