@hua-labs/ui 1.0.0 → 1.1.0-alpha.0.1
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/README.md +891 -213
- package/dist/ComponentLayout-BxCenSAm.d.mts +73 -0
- package/dist/advanced/dashboard.d.ts +7 -0
- package/dist/advanced/dashboard.d.ts.map +1 -0
- package/dist/advanced/motion.d.ts +2 -0
- package/dist/advanced/motion.d.ts.map +1 -0
- package/dist/advanced-dashboard.d.mts +4 -0
- package/dist/advanced-dashboard.js +2 -0
- package/dist/advanced-dashboard.js.map +1 -0
- package/dist/advanced-dashboard.mjs +2 -0
- package/dist/advanced-dashboard.mjs.map +1 -0
- package/dist/advanced-motion.d.mts +93 -0
- package/dist/advanced-motion.js +2 -0
- package/dist/advanced-motion.js.map +1 -0
- package/dist/advanced-motion.mjs +2 -0
- package/dist/advanced-motion.mjs.map +1 -0
- package/dist/advanced.d.mts +734 -0
- package/dist/advanced.d.ts +17 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +2 -0
- package/dist/advanced.js.map +1 -0
- package/dist/advanced.mjs +2 -0
- package/dist/advanced.mjs.map +1 -0
- package/dist/chunk-6NXF6ATP.mjs +2 -0
- package/dist/chunk-6NXF6ATP.mjs.map +1 -0
- package/dist/chunk-ACEKLG37.mjs +2 -0
- package/dist/chunk-ACEKLG37.mjs.map +1 -0
- package/dist/chunk-DMYT7RZ4.mjs +2 -0
- package/dist/chunk-DMYT7RZ4.mjs.map +1 -0
- package/dist/chunk-KHEJZ3U4.mjs +2 -0
- package/dist/chunk-KHEJZ3U4.mjs.map +1 -0
- package/dist/chunk-QXBMXCML.mjs +2 -0
- package/dist/chunk-QXBMXCML.mjs.map +1 -0
- package/dist/chunk-SGCVGEDR.mjs +2 -0
- package/dist/chunk-SGCVGEDR.mjs.map +1 -0
- package/dist/chunk-UUHAXGMO.mjs +2 -0
- package/dist/chunk-UUHAXGMO.mjs.map +1 -0
- package/dist/chunk-VPOFRDYL.mjs +2 -0
- package/dist/chunk-VPOFRDYL.mjs.map +1 -0
- package/dist/chunk-YY6ZBUVJ.mjs +2 -0
- package/dist/chunk-YY6ZBUVJ.mjs.map +1 -0
- package/dist/chunk-ZQAAB3P4.mjs +2 -0
- package/dist/chunk-ZQAAB3P4.mjs.map +1 -0
- package/dist/components/Accordion.d.ts +109 -1
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Action.d.ts +68 -0
- package/dist/components/Action.d.ts.map +1 -0
- package/dist/components/ActionToolbar.d.ts +65 -0
- package/dist/components/ActionToolbar.d.ts.map +1 -0
- package/dist/components/Alert.d.ts +49 -0
- package/dist/components/Alert.d.ts.map +1 -1
- package/dist/components/Autocomplete.d.ts +88 -0
- package/dist/components/Autocomplete.d.ts.map +1 -0
- package/dist/components/Avatar.d.ts +71 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Badge.d.ts +32 -2
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Bookmark.d.ts +49 -0
- package/dist/components/Bookmark.d.ts.map +1 -0
- package/dist/components/BottomSheet.d.ts +91 -1
- package/dist/components/BottomSheet.d.ts.map +1 -1
- package/dist/components/Breadcrumb.d.ts +73 -14
- package/dist/components/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Button.d.ts +82 -7
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Card.d.ts +122 -5
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/ChatMessage.d.ts +67 -1
- package/dist/components/ChatMessage.d.ts.map +1 -1
- package/dist/components/Checkbox.d.ts +48 -2
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/Command.d.ts +82 -1
- package/dist/components/Command.d.ts.map +1 -1
- package/dist/components/ComponentLayout.d.ts +72 -0
- package/dist/components/ComponentLayout.d.ts.map +1 -0
- package/dist/components/ConfirmModal.d.ts +66 -1
- package/dist/components/ConfirmModal.d.ts.map +1 -1
- package/dist/components/Container.d.ts +39 -0
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/ContextMenu.d.ts +51 -1
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/DatePicker.d.ts +62 -0
- package/dist/components/DatePicker.d.ts.map +1 -0
- package/dist/components/Divider.d.ts +13 -3
- package/dist/components/Divider.d.ts.map +1 -1
- package/dist/components/Drawer.d.ts +103 -1
- package/dist/components/Drawer.d.ts.map +1 -1
- package/dist/components/Dropdown.d.ts +51 -1
- package/dist/components/Dropdown.d.ts.map +1 -1
- package/dist/components/EmotionAnalysis.d.ts +59 -1
- package/dist/components/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/EmotionButton.d.ts +35 -1
- package/dist/components/EmotionButton.d.ts.map +1 -1
- package/dist/components/EmotionMeter.d.ts +38 -2
- package/dist/components/EmotionMeter.d.ts.map +1 -1
- package/dist/components/EmotionSelector.d.ts +51 -1
- package/dist/components/EmotionSelector.d.ts.map +1 -1
- package/dist/components/FeatureCard.d.ts +61 -0
- package/dist/components/FeatureCard.d.ts.map +1 -0
- package/dist/components/Form.d.ts +114 -0
- package/dist/components/Form.d.ts.map +1 -0
- package/dist/components/Grid.d.ts +42 -1
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/HeroSection.d.ts +77 -0
- package/dist/components/HeroSection.d.ts.map +1 -0
- package/dist/components/Icon/Icon.d.ts +159 -0
- package/dist/components/Icon/Icon.d.ts.map +1 -0
- package/dist/components/Icon/IconProvider.d.ts +94 -0
- package/dist/components/Icon/IconProvider.d.ts.map +1 -0
- package/dist/components/Icon/icon-store.d.ts +21 -0
- package/dist/components/Icon/icon-store.d.ts.map +1 -0
- package/dist/components/Icon/index.d.ts +10 -0
- package/dist/components/Icon/index.d.ts.map +1 -0
- package/dist/components/InfoCard.d.ts +48 -0
- package/dist/components/InfoCard.d.ts.map +1 -0
- package/dist/components/Input.d.ts +40 -8
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +50 -0
- package/dist/components/Label.d.ts.map +1 -0
- package/dist/components/LanguageToggle.d.ts +41 -1
- package/dist/components/LanguageToggle.d.ts.map +1 -1
- package/dist/components/Link.d.ts +52 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/LoadingSpinner.d.ts +44 -5
- package/dist/components/LoadingSpinner.d.ts.map +1 -1
- package/dist/components/Menu.d.ts +92 -1
- package/dist/components/Menu.d.ts.map +1 -1
- package/dist/components/Modal.d.ts +67 -5
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Navigation.d.ts +72 -0
- package/dist/components/Navigation.d.ts.map +1 -0
- package/dist/components/PageNavigation.d.ts +48 -0
- package/dist/components/PageNavigation.d.ts.map +1 -0
- package/dist/components/PageTransition.d.ts +44 -1
- package/dist/components/PageTransition.d.ts.map +1 -1
- package/dist/components/Pagination.d.ts +52 -1
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Panel.d.ts +99 -0
- package/dist/components/Panel.d.ts.map +1 -0
- package/dist/components/Popover.d.ts +46 -1
- package/dist/components/Popover.d.ts.map +1 -1
- package/dist/components/Progress.d.ts +52 -3
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Radio.d.ts +44 -2
- package/dist/components/Radio.d.ts.map +1 -1
- package/dist/components/ScrollArea.d.ts +53 -1
- package/dist/components/ScrollArea.d.ts.map +1 -1
- package/dist/components/ScrollIndicator.d.ts +43 -1
- package/dist/components/ScrollIndicator.d.ts.map +1 -1
- package/dist/components/ScrollProgress.d.ts +37 -0
- package/dist/components/ScrollProgress.d.ts.map +1 -1
- package/dist/components/ScrollToTop.d.ts +48 -11
- package/dist/components/ScrollToTop.d.ts.map +1 -1
- package/dist/components/SectionHeader.d.ts +42 -0
- package/dist/components/SectionHeader.d.ts.map +1 -0
- package/dist/components/Select.d.ts +59 -2
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Skeleton.d.ts +44 -1
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Slider.d.ts +75 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Stack.d.ts +42 -1
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/StatsPanel.d.ts +72 -0
- package/dist/components/StatsPanel.d.ts.map +1 -0
- package/dist/components/Switch.d.ts +48 -2
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Table.d.ts +206 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Tabs.d.ts +123 -10
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/components/Textarea.d.ts +48 -2
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/ThemeProvider.d.ts +67 -2
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeToggle.d.ts +44 -0
- package/dist/components/ThemeToggle.d.ts.map +1 -1
- package/dist/components/Toast.d.ts +75 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toggle.d.ts +62 -0
- package/dist/components/Toggle.d.ts.map +1 -0
- package/dist/components/Tooltip.d.ts +48 -1
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Upload.d.ts +87 -0
- package/dist/components/Upload.d.ts.map +1 -0
- package/dist/components/advanced/AdvancedPageTransition.d.ts +25 -0
- package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -0
- package/dist/components/advanced/index.d.ts +4 -0
- package/dist/components/advanced/index.d.ts.map +1 -0
- package/dist/components/advanced/usePageTransition.d.ts +33 -0
- package/dist/components/advanced/usePageTransition.d.ts.map +1 -0
- package/dist/components/advanced/usePageTransitionManager.d.ts +44 -0
- package/dist/components/advanced/usePageTransitionManager.d.ts.map +1 -0
- package/dist/components/dashboard/ActivityFeed.d.ts +87 -0
- package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -0
- package/dist/components/dashboard/BarChart.d.ts +82 -0
- package/dist/components/dashboard/BarChart.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardGrid.d.ts +44 -0
- package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts +105 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardToolbar.d.ts +120 -0
- package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -0
- package/dist/components/dashboard/EmptyState.d.ts +61 -0
- package/dist/components/dashboard/EmptyState.d.ts.map +1 -0
- package/dist/components/dashboard/MembershipBadge.d.ts +45 -0
- package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -0
- package/dist/components/dashboard/MerchantList.d.ts +98 -0
- package/dist/components/dashboard/MerchantList.d.ts.map +1 -0
- package/dist/components/dashboard/MetricCard.d.ts +75 -0
- package/dist/components/dashboard/MetricCard.d.ts.map +1 -0
- package/dist/components/dashboard/MiniBarChart.d.ts +60 -0
- package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -0
- package/dist/components/dashboard/NotificationCard.d.ts +89 -0
- package/dist/components/dashboard/NotificationCard.d.ts.map +1 -0
- package/dist/components/dashboard/ProfileCard.d.ts +82 -0
- package/dist/components/dashboard/ProfileCard.d.ts.map +1 -0
- package/dist/components/dashboard/ProgressCard.d.ts +71 -0
- package/dist/components/dashboard/ProgressCard.d.ts.map +1 -0
- package/dist/components/dashboard/QuickActionCard.d.ts +63 -0
- package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -0
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts +88 -0
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -0
- package/dist/components/dashboard/SettlementTimeline.d.ts +90 -0
- package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -0
- package/dist/components/dashboard/StatCard.d.ts +70 -0
- package/dist/components/dashboard/StatCard.d.ts.map +1 -0
- package/dist/components/dashboard/SummaryCard.d.ts +73 -0
- package/dist/components/dashboard/SummaryCard.d.ts.map +1 -0
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts +183 -0
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -0
- package/dist/components/dashboard/TransactionsTable.d.ts +137 -0
- package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -0
- package/dist/components/dashboard/TrendChart.d.ts +75 -0
- package/dist/components/dashboard/TrendChart.d.ts.map +1 -0
- package/dist/components/dashboard/index.d.ts +41 -0
- package/dist/components/dashboard/index.d.ts.map +1 -0
- package/dist/components/scrollbar/scrollbar.d.ts +12 -0
- package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
- package/dist/dashboard-QMssHf5j.d.mts +1801 -0
- package/dist/feedback.d.mts +103 -0
- package/dist/feedback.d.ts +21 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +2 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.mjs +2 -0
- package/dist/feedback.mjs.map +1 -0
- package/dist/form.d.mts +803 -0
- package/dist/form.d.ts +42 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +2 -0
- package/dist/form.js.map +1 -0
- package/dist/form.mjs +2 -0
- package/dist/form.mjs.map +1 -0
- package/dist/hooks/useScrollToggle.d.ts +12 -0
- package/dist/hooks/useScrollToggle.d.ts.map +1 -0
- package/dist/icons-DoSGIez_.d.mts +135 -0
- package/dist/index.d.mts +3770 -0
- package/dist/index.d.ts +76 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -49
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +37 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/icon-aliases.d.ts +24 -0
- package/dist/lib/icon-aliases.d.ts.map +1 -0
- package/dist/lib/icon-names.d.ts +47 -0
- package/dist/lib/icon-names.d.ts.map +1 -0
- package/dist/lib/icon-providers.d.ts +560 -0
- package/dist/lib/icon-providers.d.ts.map +1 -0
- package/dist/lib/icons.d.ts +113 -24
- package/dist/lib/icons.d.ts.map +1 -1
- package/dist/lib/phosphor-icons.d.ts +6 -0
- package/dist/lib/phosphor-icons.d.ts.map +1 -0
- package/dist/lib/styles/colors.d.ts +131 -0
- package/dist/lib/styles/colors.d.ts.map +1 -0
- package/dist/lib/styles/index.d.ts +8 -0
- package/dist/lib/styles/index.d.ts.map +1 -0
- package/dist/lib/styles/utils.d.ts +87 -0
- package/dist/lib/styles/utils.d.ts.map +1 -0
- package/dist/lib/styles/variants.d.ts +79 -0
- package/dist/lib/styles/variants.d.ts.map +1 -0
- package/dist/lib/types/common.d.ts +80 -0
- package/dist/lib/types/common.d.ts.map +1 -0
- package/dist/lib/types/index.d.ts +6 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +73 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/navigation.d.mts +105 -0
- package/dist/navigation.d.ts +22 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +2 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigation.mjs +2 -0
- package/dist/navigation.mjs.map +1 -0
- package/package.json +85 -19
- package/src/styles/toast.css +23 -0
- package/dist/components/Accordion.js +0 -84
- package/dist/components/Alert.js +0 -61
- package/dist/components/Avatar.js +0 -18
- package/dist/components/Badge.js +0 -15
- package/dist/components/BottomSheet.js +0 -96
- package/dist/components/Breadcrumb.js +0 -47
- package/dist/components/Button.js +0 -23
- package/dist/components/Card.js +0 -18
- package/dist/components/ChatMessage.js +0 -59
- package/dist/components/Checkbox.js +0 -30
- package/dist/components/Command.js +0 -119
- package/dist/components/ConfirmModal.js +0 -53
- package/dist/components/Container.js +0 -23
- package/dist/components/ContextMenu.js +0 -110
- package/dist/components/Divider.js +0 -39
- package/dist/components/Drawer.js +0 -79
- package/dist/components/Dropdown.js +0 -174
- package/dist/components/EmotionAnalysis.js +0 -40
- package/dist/components/EmotionButton.js +0 -16
- package/dist/components/EmotionMeter.js +0 -21
- package/dist/components/EmotionSelector.js +0 -46
- package/dist/components/Grid.js +0 -44
- package/dist/components/Icon.d.ts +0 -26
- package/dist/components/Icon.d.ts.map +0 -1
- package/dist/components/Icon.js +0 -48
- package/dist/components/Input.js +0 -25
- package/dist/components/LanguageToggle.js +0 -61
- package/dist/components/LoadingSpinner.js +0 -37
- package/dist/components/Menu.js +0 -122
- package/dist/components/Modal.js +0 -62
- package/dist/components/PageTransition.js +0 -39
- package/dist/components/Pagination.js +0 -87
- package/dist/components/Popover.js +0 -159
- package/dist/components/Progress.js +0 -51
- package/dist/components/Radio.js +0 -29
- package/dist/components/ScrollArea.js +0 -42
- package/dist/components/ScrollIndicator.js +0 -60
- package/dist/components/ScrollProgress.js +0 -39
- package/dist/components/ScrollToTop.js +0 -46
- package/dist/components/Select.js +0 -29
- package/dist/components/Skeleton.js +0 -71
- package/dist/components/Stack.js +0 -34
- package/dist/components/Switch.js +0 -29
- package/dist/components/Tabs.js +0 -117
- package/dist/components/Textarea.js +0 -31
- package/dist/components/ThemeProvider.js +0 -76
- package/dist/components/ThemeToggle.js +0 -49
- package/dist/components/Toast.js +0 -138
- package/dist/components/Tooltip.js +0 -102
- package/dist/lib/icons.js +0 -321
- package/dist/lib/utils.js +0 -5
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {l}from'./chunk-DMYT7RZ4.mjs';import {a}from'./chunk-UUHAXGMO.mjs';import f,{useState,useEffect}from'react';import {jsxs,jsx}from'react/jsx-runtime';var M=f.forwardRef(({className:t,prevPage:e,nextPage:i,showOnMobile:o=false,...n},m)=>!e&&!i?null:jsxs("div",{ref:m,className:a("flex items-center justify-between py-4",!o&&"hidden md:flex",t),...n,children:[jsx("div",{className:"flex-1",children:e&&jsxs("a",{href:e.href,className:"group inline-flex items-center text-sm text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100 transition-colors",children:[jsx(l,{name:"chevronLeft",className:"w-4 h-4 mr-2 transition-transform group-hover:-translate-x-1"}),jsx("span",{className:"hidden sm:inline",children:e.title})]})}),jsx("div",{className:"flex-1 flex justify-end",children:i&&jsxs("a",{href:i.href,className:"group inline-flex items-center text-sm text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100 transition-colors",children:[jsx("span",{className:"hidden sm:inline mr-2",children:i.title}),jsx(l,{name:"chevronRight",className:"w-4 h-4 transition-transform group-hover:translate-x-1"})]})})]}));M.displayName="PageNavigation";function h({className:t,size:e="md",variant:i="default",text:o,color:n="default"}){let m={sm:"w-6 h-6",md:"w-8 h-8",lg:"w-12 h-12",xl:"w-16 h-16"},s={default:"border-gray-300 border-t-gray-600 dark:border-gray-600 dark:border-t-gray-300",primary:"border-blue-300 border-t-blue-600 dark:border-blue-600 dark:border-t-blue-300",secondary:"border-gray-300 border-t-gray-600 dark:border-gray-600 dark:border-t-gray-300",success:"border-green-300 border-t-green-600 dark:border-green-600 dark:border-t-green-300",warning:"border-yellow-300 border-t-yellow-600 dark:border-yellow-600 dark:border-t-yellow-300",error:"border-red-300 border-t-red-600 dark:border-red-600 dark:border-t-red-300",glass:"border-white/30 border-t-white/50 dark:border-slate-600/50 dark:border-t-slate-400/50"},d=()=>{switch(i){case "dots":return jsxs("div",{className:"flex space-x-1",children:[jsx("div",{className:"w-2 h-2 bg-current rounded-full animate-bounce"}),jsx("div",{className:"w-2 h-2 bg-current rounded-full animate-bounce delay-100"}),jsx("div",{className:"w-2 h-2 bg-current rounded-full animate-bounce delay-200"})]});case "bars":return jsxs("div",{className:"flex space-x-1 h-full items-end",children:[jsx("div",{className:"w-1 bg-current animate-pulse",style:{height:"60%"}}),jsx("div",{className:"w-1 bg-current animate-pulse delay-100",style:{height:"80%"}}),jsx("div",{className:"w-1 bg-current animate-pulse delay-200",style:{height:"40%"}}),jsx("div",{className:"w-1 bg-current animate-pulse delay-300",style:{height:"100%"}}),jsx("div",{className:"w-1 bg-current animate-pulse delay-500",style:{height:"70%"}})]});case "ring":return jsx("div",{className:a("animate-spin rounded-full border-2",s[n]||s.default)});case "ripple":return jsxs("div",{className:"relative",children:[jsx("div",{className:a("absolute inset-0 rounded-full border-2 animate-ping",s[n]||s.default)}),jsx("div",{className:a("rounded-full border-2",s[n]||s.default)})]});default:return jsx("div",{className:a("animate-spin rounded-full border-2",s[n]||s.default)})}};return jsxs("div",{className:a("flex flex-col items-center justify-center",t),children:[jsx("div",{className:a(m[e],"text-gray-600 dark:text-gray-400"),children:d()}),o&&jsx("p",{className:"mt-3 text-sm text-gray-600 dark:text-gray-400 text-center",children:o})]})}var u=f.forwardRef(({children:t,className:e,duration:i=300,variant:o="fade",loadingVariant:n="ripple",loadingText:m="\uD398\uC774\uC9C0 \uB85C\uB529 \uC911...",showLoading:s=true,onTransitionStart:d,onTransitionEnd:p},N)=>{let[w,k]=useState(true),[g,T]=useState(false);useEffect(()=>{let L=setTimeout(()=>{k(false),T(true),p==null||p();},i);return d==null||d(),()=>clearTimeout(L)},[i,d,p]);let P={fade:a("transition-opacity duration-300 ease-in-out",g?"opacity-100":"opacity-0"),slide:a("transition-transform duration-300 ease-in-out",g?"translate-x-0":"translate-x-full"),scale:a("transition-all duration-300 ease-in-out",g?"scale-100 opacity-100":"scale-95 opacity-0"),flip:a("transition-all duration-500 ease-in-out",g?"rotate-y-0 opacity-100":"rotate-y-90 opacity-0")};return w&&s?jsx("div",{className:a("flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-blue-50 to-purple-50 dark:from-slate-900 dark:to-slate-800",e),children:jsx(h,{size:"lg",variant:n,text:m})}):jsx("div",{ref:N,className:a("w-full",P[o],e),style:{transitionDuration:`${i}ms`},children:t})});u.displayName="PageTransition";var H=f.forwardRef((t,e)=>jsx(u,{ref:e,variant:"fade",...t})),S=f.forwardRef((t,e)=>jsx(u,{ref:e,variant:"slide",...t})),O=f.forwardRef((t,e)=>jsx(u,{ref:e,variant:"scale",...t})),E=f.forwardRef((t,e)=>jsx(u,{ref:e,variant:"flip",...t}));H.displayName="FadeTransition";S.displayName="SlideTransition";O.displayName="ScaleTransition";E.displayName="FlipTransition";export{M as a,h as b,u as c};//# sourceMappingURL=chunk-ZQAAB3P4.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-ZQAAB3P4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/PageNavigation.tsx","../src/components/LoadingSpinner.tsx","../src/components/PageTransition.tsx"],"names":["PageNavigation","React","className","prevPage","nextPage","showOnMobile","props","ref","jsxs","merge","jsx","Icon","LoadingSpinner","size","variant","text","color","sizeClasses","spinnerColors","renderSpinner","PageTransition","children","duration","loadingVariant","loadingText","showLoading","onTransitionStart","onTransitionEnd","isLoading","setIsLoading","useState","isVisible","setIsVisible","useEffect","timer","transitionClasses","FadeTransition","SlideTransition","ScaleTransition","FlipTransition"],"mappings":"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","file":"chunk-ZQAAB3P4.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\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 * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface PageNavigationProps extends React.HTMLAttributes<HTMLDivElement> {\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n showOnMobile?: boolean\n}\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} PageNavigation 컴포넌트 / PageNavigation component\n */\nconst PageNavigation = React.forwardRef<HTMLDivElement, PageNavigationProps>(\n ({ \n className, \n prevPage, \n nextPage, \n showOnMobile = false,\n ...props \n }, ref) => {\n if (!prevPage && !nextPage) {\n return null\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex items-center justify-between py-4\",\n !showOnMobile && \"hidden md:flex\",\n className\n )}\n {...props}\n >\n {/* 이전 페이지 */}\n <div className=\"flex-1\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"group inline-flex items-center text-sm text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100 transition-colors\"\n >\n <Icon \n name=\"chevronLeft\" \n className=\"w-4 h-4 mr-2 transition-transform group-hover:-translate-x-1\" \n />\n <span className=\"hidden sm:inline\">{prevPage.title}</span>\n </a>\n )}\n </div>\n\n {/* 다음 페이지 */}\n <div className=\"flex-1 flex justify-end\">\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"group inline-flex items-center text-sm text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100 transition-colors\"\n >\n <span className=\"hidden sm:inline mr-2\">{nextPage.title}</span>\n <Icon \n name=\"chevronRight\" \n className=\"w-4 h-4 transition-transform group-hover:translate-x-1\" \n />\n </a>\n )}\n </div>\n </div>\n )\n }\n)\nPageNavigation.displayName = \"PageNavigation\"\n\nexport { PageNavigation } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * LoadingSpinner 컴포넌트의 props / LoadingSpinner component props\n * @typedef {Object} LoadingSpinnerProps\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\"} [size=\"md\"] - Spinner 크기 / Spinner size\n * @property {\"default\" | \"dots\" | \"bars\" | \"ring\" | \"ripple\"} [variant=\"default\"] - Spinner 애니메이션 타입 / Spinner animation type\n * @property {string} [text] - Spinner 아래 표시할 텍스트 / Text to display below spinner\n * @property {\"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"glass\"} [color=\"default\"] - Spinner 색상 / Spinner color\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\nexport interface LoadingSpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n variant?: \"default\" | \"dots\" | \"bars\" | \"ring\" | \"ripple\"\n text?: string\n color?: \"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"glass\"\n className?: string\n}\n\n/**\n * LoadingSpinner 컴포넌트 / LoadingSpinner component\n * \n * 로딩 상태를 표시하는 스피너 컴포넌트입니다.\n * 다양한 애니메이션 타입과 크기를 지원합니다.\n * \n * Spinner component that displays loading state.\n * Supports various animation types and sizes.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <LoadingSpinner />\n * \n * @example\n * // 텍스트와 함께 / With text\n * <LoadingSpinner \n * text=\"로딩 중...\"\n * size=\"lg\"\n * color=\"primary\"\n * />\n * \n * @example\n * // 다양한 애니메이션 / Various animations\n * <LoadingSpinner variant=\"dots\" />\n * <LoadingSpinner variant=\"bars\" color=\"success\" />\n * <LoadingSpinner variant=\"ripple\" size=\"xl\" />\n * \n * @param {LoadingSpinnerProps} props - LoadingSpinner 컴포넌트의 props / LoadingSpinner component props\n * @returns {JSX.Element} LoadingSpinner 컴포넌트 / LoadingSpinner component\n */\nexport function LoadingSpinner({ \n className, \n size = \"md\", \n variant = \"default\", \n text, \n color = \"default\" \n}: LoadingSpinnerProps) {\n const sizeClasses = {\n sm: \"w-6 h-6\", // 24px - 더 넉넉한 크기\n md: \"w-8 h-8\", // 32px - 더 넉넉한 크기\n lg: \"w-12 h-12\", // 48px - 더 넉넉한 크기\n xl: \"w-16 h-16\" // 64px - 더 넉넉한 크기\n }\n\n // LoadingSpinner는 border 색상을 사용하므로 특화 색상 시스템 사용\n const spinnerColors: Record<string, string> = {\n default: \"border-gray-300 border-t-gray-600 dark:border-gray-600 dark:border-t-gray-300\",\n primary: \"border-blue-300 border-t-blue-600 dark:border-blue-600 dark:border-t-blue-300\",\n secondary: \"border-gray-300 border-t-gray-600 dark:border-gray-600 dark:border-t-gray-300\",\n success: \"border-green-300 border-t-green-600 dark:border-green-600 dark:border-t-green-300\",\n warning: \"border-yellow-300 border-t-yellow-600 dark:border-yellow-600 dark:border-t-yellow-300\",\n error: \"border-red-300 border-t-red-600 dark:border-red-600 dark:border-t-red-300\",\n glass: \"border-white/30 border-t-white/50 dark:border-slate-600/50 dark:border-t-slate-400/50\"\n }\n\n const renderSpinner = () => {\n switch (variant) {\n case \"dots\":\n return (\n <div className=\"flex space-x-1\">\n <div className=\"w-2 h-2 bg-current rounded-full animate-bounce\" />\n <div className=\"w-2 h-2 bg-current rounded-full animate-bounce delay-100\" />\n <div className=\"w-2 h-2 bg-current rounded-full animate-bounce delay-200\" />\n </div>\n )\n case \"bars\":\n return (\n <div className=\"flex space-x-1 h-full items-end\">\n <div className=\"w-1 bg-current animate-pulse\" style={{ height: '60%' }} />\n <div className=\"w-1 bg-current animate-pulse delay-100\" style={{ height: '80%' }} />\n <div className=\"w-1 bg-current animate-pulse delay-200\" style={{ height: '40%' }} />\n <div className=\"w-1 bg-current animate-pulse delay-300\" style={{ height: '100%' }} />\n <div className=\"w-1 bg-current animate-pulse delay-500\" style={{ height: '70%' }} />\n </div>\n )\n case \"ring\":\n return (\n <div className={merge(\n \"animate-spin rounded-full border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n )\n case \"ripple\":\n return (\n <div className=\"relative\">\n <div className={merge(\n \"absolute inset-0 rounded-full border-2 animate-ping\",\n spinnerColors[color] || spinnerColors.default\n )} />\n <div className={merge(\n \"rounded-full border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n </div>\n )\n default:\n return (\n <div className={merge(\n \"animate-spin rounded-full border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n )\n }\n }\n\n return (\n <div className={merge(\"flex flex-col items-center justify-center\", className)}>\n <div className={merge(sizeClasses[size], \"text-gray-600 dark:text-gray-400\")}>\n {renderSpinner()}\n </div>\n {text && (\n <p className=\"mt-3 text-sm text-gray-600 dark:text-gray-400 text-center\">\n {text}\n </p>\n )}\n </div>\n )\n} ","'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport { merge } from '../lib/utils'\nimport { LoadingSpinner } from './LoadingSpinner'\n\n/**\n * PageTransition 컴포넌트의 props / PageTransition component props\n * @typedef {Object} PageTransitionProps\n * @property {React.ReactNode} children - 페이지 내용 / Page content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {number} [duration=300] - 전환 지속 시간 (ms) / Transition duration (ms)\n * @property {'fade' | 'slide' | 'scale' | 'flip'} [variant='fade'] - 전환 애니메이션 타입 / Transition animation type\n * @property {'default' | 'dots' | 'bars' | 'ring' | 'ripple'} [loadingVariant='ripple'] - 로딩 스피너 타입 / Loading spinner type\n * @property {string} [loadingText='페이지 로딩 중...'] - 로딩 텍스트 / Loading text\n * @property {boolean} [showLoading=true] - 로딩 표시 여부 / Show loading\n * @property {() => void} [onTransitionStart] - 전환 시작 콜백 / Transition start callback\n * @property {() => void} [onTransitionEnd] - 전환 종료 콜백 / Transition end callback\n */\nexport interface PageTransitionProps {\n children: React.ReactNode\n className?: string\n duration?: number\n variant?: 'fade' | 'slide' | 'scale' | 'flip'\n loadingVariant?: 'default' | 'dots' | 'bars' | 'ring' | 'ripple'\n loadingText?: string\n showLoading?: boolean\n onTransitionStart?: () => void\n onTransitionEnd?: () => void\n}\n\n/**\n * PageTransition 컴포넌트 / PageTransition component\n * \n * 페이지 전환 애니메이션을 제공하는 컴포넌트입니다.\n * 다양한 전환 효과와 로딩 스피너를 지원합니다.\n * \n * Component that provides page transition animations.\n * Supports various transition effects and loading spinners.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <PageTransition>\n * <div>페이지 내용</div>\n * </PageTransition>\n * \n * @example\n * // Slide 전환 / Slide transition\n * <PageTransition\n * variant=\"slide\"\n * duration={500}\n * loadingVariant=\"dots\"\n * >\n * <div>페이지 내용</div>\n * </PageTransition>\n * \n * @param {PageTransitionProps} props - PageTransition 컴포넌트의 props / PageTransition component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} PageTransition 컴포넌트 / PageTransition component\n */\nexport const PageTransition = React.forwardRef<HTMLDivElement, PageTransitionProps>(({\n children,\n className,\n duration = 300,\n variant = 'fade',\n loadingVariant = 'ripple',\n loadingText = '페이지 로딩 중...',\n showLoading = true,\n onTransitionStart,\n onTransitionEnd\n}, ref) => {\n const [isLoading, setIsLoading] = useState(true)\n const [isVisible, setIsVisible] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsLoading(false)\n setIsVisible(true)\n onTransitionEnd?.()\n }, duration)\n\n onTransitionStart?.()\n\n return () => clearTimeout(timer)\n }, [duration, onTransitionStart, onTransitionEnd])\n\n const transitionClasses = {\n fade: merge(\n 'transition-opacity duration-300 ease-in-out',\n isVisible ? 'opacity-100' : 'opacity-0'\n ),\n slide: merge(\n 'transition-transform duration-300 ease-in-out',\n isVisible ? 'translate-x-0' : 'translate-x-full'\n ),\n scale: merge(\n 'transition-all duration-300 ease-in-out',\n isVisible ? 'scale-100 opacity-100' : 'scale-95 opacity-0'\n ),\n flip: merge(\n 'transition-all duration-500 ease-in-out',\n isVisible ? 'rotate-y-0 opacity-100' : 'rotate-y-90 opacity-0'\n )\n }\n\n if (isLoading && showLoading) {\n return (\n <div className={merge('flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-blue-50 to-purple-50 dark:from-slate-900 dark:to-slate-800', className)}>\n <LoadingSpinner\n size=\"lg\"\n variant={loadingVariant}\n text={loadingText}\n />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n 'w-full',\n transitionClasses[variant],\n className\n )}\n style={{ transitionDuration: `${duration}ms` }}\n >\n {children}\n </div>\n )\n})\n\nPageTransition.displayName = 'PageTransition'\n\n// Convenience components for different transition types\nexport const FadeTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"fade\" {...props} />\n))\n\nexport const SlideTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"slide\" {...props} />\n))\n\nexport const ScaleTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"scale\" {...props} />\n))\n\nexport const FlipTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"flip\" {...props} />\n))\n\n// Add displayName for convenience components\nFadeTransition.displayName = 'FadeTransition'\nSlideTransition.displayName = 'SlideTransition'\nScaleTransition.displayName = 'ScaleTransition'\nFlipTransition.displayName = 'FlipTransition' "]}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Accordion 컴포넌트의 props / Accordion component props
|
|
4
|
+
* @typedef {Object} AccordionProps
|
|
5
|
+
* @property {React.ReactNode} children - AccordionItem 컴포넌트들 / AccordionItem components
|
|
6
|
+
* @property {string} [className] - 추가 CSS 클래스 / Additional CSS class
|
|
7
|
+
* @property {"single" | "multiple"} [type="single"] - 단일 또는 다중 아이템 열기 허용 / Allow single or multiple items to be open
|
|
8
|
+
* @property {string | string[]} [defaultValue] - 초기 열린 아이템 값 (비제어 컴포넌트) / Initial open item value (uncontrolled component)
|
|
9
|
+
* @property {string | string[]} [value] - 현재 열린 아이템 값 (제어 컴포넌트) / Current open item value (controlled component)
|
|
10
|
+
* @property {(value: string | string[]) => void} [onValueChange] - 아이템 열림/닫힘 콜백 / Item open/close callback
|
|
11
|
+
* @property {boolean} [collapsible=false] - 단일 모드에서 열린 아이템을 닫을 수 있는지 여부 / Whether open item can be closed in single mode
|
|
12
|
+
*/
|
|
2
13
|
interface AccordionProps {
|
|
3
14
|
children: React.ReactNode;
|
|
4
15
|
className?: string;
|
|
@@ -8,7 +19,63 @@ interface AccordionProps {
|
|
|
8
19
|
onValueChange?: (value: string | string[]) => void;
|
|
9
20
|
collapsible?: boolean;
|
|
10
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Accordion 컴포넌트 / Accordion component
|
|
24
|
+
*
|
|
25
|
+
* 접을 수 있는 콘텐츠 섹션을 제공하는 컴포넌트입니다.
|
|
26
|
+
* 키보드 네비게이션(Arrow keys, Home/End)을 지원하며, ARIA 속성을 자동으로 설정합니다.
|
|
27
|
+
*
|
|
28
|
+
* Component that provides collapsible content sections.
|
|
29
|
+
* Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.
|
|
30
|
+
*
|
|
31
|
+
* @component
|
|
32
|
+
* @example
|
|
33
|
+
* // 기본 사용 (단일 열기) / Basic usage (single open)
|
|
34
|
+
* <Accordion type="single">
|
|
35
|
+
* <AccordionItem value="item1">
|
|
36
|
+
* <AccordionTrigger>제목 1</AccordionTrigger>
|
|
37
|
+
* <AccordionContent>내용 1</AccordionContent>
|
|
38
|
+
* </AccordionItem>
|
|
39
|
+
* <AccordionItem value="item2">
|
|
40
|
+
* <AccordionTrigger>제목 2</AccordionTrigger>
|
|
41
|
+
* <AccordionContent>내용 2</AccordionContent>
|
|
42
|
+
* </AccordionItem>
|
|
43
|
+
* </Accordion>
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // 다중 열기 / Multiple open
|
|
47
|
+
* <Accordion type="multiple" defaultValue={["item1", "item2"]}>
|
|
48
|
+
* <AccordionItem value="item1">
|
|
49
|
+
* <AccordionTrigger>제목 1</AccordionTrigger>
|
|
50
|
+
* <AccordionContent>내용 1</AccordionContent>
|
|
51
|
+
* </AccordionItem>
|
|
52
|
+
* </Accordion>
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* // 제어 컴포넌트 / Controlled component
|
|
56
|
+
* const [openItems, setOpenItems] = useState<string[]>([])
|
|
57
|
+
* <Accordion type="multiple" value={openItems} onValueChange={setOpenItems}>
|
|
58
|
+
* <AccordionItem value="item1">
|
|
59
|
+
* <AccordionTrigger>제목</AccordionTrigger>
|
|
60
|
+
* <AccordionContent>내용</AccordionContent>
|
|
61
|
+
* </AccordionItem>
|
|
62
|
+
* </Accordion>
|
|
63
|
+
*
|
|
64
|
+
* @param {AccordionProps} props - Accordion 컴포넌트의 props / Accordion component props
|
|
65
|
+
* @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref
|
|
66
|
+
* @returns {JSX.Element} Accordion 컴포넌트 / Accordion component
|
|
67
|
+
*/
|
|
11
68
|
declare const Accordion: React.ForwardRefExoticComponent<AccordionProps & React.RefAttributes<HTMLDivElement>>;
|
|
69
|
+
/**
|
|
70
|
+
* AccordionItem 컴포넌트의 props / AccordionItem component props
|
|
71
|
+
* @typedef {Object} AccordionItemProps
|
|
72
|
+
* @property {string} value - 아이템의 고유 값 / Item unique value
|
|
73
|
+
* @property {React.ReactNode} children - AccordionTrigger와 AccordionContent / AccordionTrigger and AccordionContent
|
|
74
|
+
* @property {string} [className] - 추가 CSS 클래스 / Additional CSS class
|
|
75
|
+
* @property {boolean} [disabled=false] - 아이템 비활성화 여부 / Item disabled state
|
|
76
|
+
* @property {string[]} [openItems] - 열린 아이템 목록 (Accordion에서 자동 전달) / Open items list (auto-passed from Accordion)
|
|
77
|
+
* @property {(value: string) => void} [onToggle] - 토글 콜백 (Accordion에서 자동 전달) / Toggle callback (auto-passed from Accordion)
|
|
78
|
+
*/
|
|
12
79
|
interface AccordionItemProps {
|
|
13
80
|
value: string;
|
|
14
81
|
children: React.ReactNode;
|
|
@@ -17,6 +84,16 @@ interface AccordionItemProps {
|
|
|
17
84
|
openItems?: string[];
|
|
18
85
|
onToggle?: (value: string) => void;
|
|
19
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* AccordionItem 컴포넌트 / AccordionItem component
|
|
89
|
+
* 아코디언의 개별 아이템을 감싸는 컨테이너입니다.
|
|
90
|
+
* Container that wraps an individual accordion item.
|
|
91
|
+
*
|
|
92
|
+
* @component
|
|
93
|
+
* @param {AccordionItemProps} props - AccordionItem 컴포넌트의 props / AccordionItem component props
|
|
94
|
+
* @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref
|
|
95
|
+
* @returns {JSX.Element} AccordionItem 컴포넌트 / AccordionItem component
|
|
96
|
+
*/
|
|
20
97
|
declare const AccordionItem: React.ForwardRefExoticComponent<AccordionItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
21
98
|
interface AccordionTriggerProps {
|
|
22
99
|
children: React.ReactNode;
|
|
@@ -29,11 +106,42 @@ interface AccordionTriggerProps {
|
|
|
29
106
|
onToggle?: () => void;
|
|
30
107
|
}
|
|
31
108
|
declare const AccordionTrigger: React.ForwardRefExoticComponent<AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
109
|
+
/**
|
|
110
|
+
* AccordionTrigger 컴포넌트 / AccordionTrigger component
|
|
111
|
+
* 아코디언 아이템을 열고 닫는 트리거 버튼입니다.
|
|
112
|
+
* Button that opens and closes an accordion item.
|
|
113
|
+
*
|
|
114
|
+
* @component
|
|
115
|
+
* @param {AccordionTriggerProps} props - AccordionTrigger 컴포넌트의 props / AccordionTrigger component props
|
|
116
|
+
* @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref
|
|
117
|
+
* @returns {JSX.Element} AccordionTrigger 컴포넌트 / AccordionTrigger component
|
|
118
|
+
*/
|
|
119
|
+
/**
|
|
120
|
+
* AccordionContent 컴포넌트의 props
|
|
121
|
+
* @typedef {Object} AccordionContentProps
|
|
122
|
+
* @property {React.ReactNode} children - 콘텐츠
|
|
123
|
+
* @property {string} [className] - 추가 CSS 클래스
|
|
124
|
+
* @property {boolean} [isOpen] - 열림 상태 (AccordionItem에서 자동 전달)
|
|
125
|
+
* @property {string} [value] - 아이템 값 (AccordionItem에서 자동 전달)
|
|
126
|
+
* @property {string} ['data-accordion-value'] - 아이템 값 (내부 사용)
|
|
127
|
+
*/
|
|
32
128
|
interface AccordionContentProps {
|
|
33
129
|
children: React.ReactNode;
|
|
34
130
|
className?: string;
|
|
35
131
|
isOpen?: boolean;
|
|
132
|
+
value?: string;
|
|
133
|
+
'data-accordion-value'?: string;
|
|
36
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* AccordionContent 컴포넌트 / AccordionContent component
|
|
137
|
+
* 아코디언 아이템의 콘텐츠를 표시합니다.
|
|
138
|
+
* Displays the content of an accordion item.
|
|
139
|
+
*
|
|
140
|
+
* @component
|
|
141
|
+
* @param {AccordionContentProps} props - AccordionContent 컴포넌트의 props / AccordionContent component props
|
|
142
|
+
* @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref
|
|
143
|
+
* @returns {JSX.Element} AccordionContent 컴포넌트 / AccordionContent component
|
|
144
|
+
*/
|
|
37
145
|
declare const AccordionContent: React.ForwardRefExoticComponent<AccordionContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
38
146
|
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
|
|
39
147
|
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB;;;;;;;;;;GAUG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAA;IAClD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,QAAA,MAAM,SAAS,uFA8Gd,CAAA;AAGD;;;;;;;;;GASG;AACH,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,aAAa,2FAsClB,CAAA;AAGD,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,QAAA,MAAM,gBAAgB,iGAkDrB,CAAA;AAGD;;;;;;;;;GASG;AAEH;;;;;;;;GAQG;AACH,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,gBAAgB,8FAuCrB,CAAA;AAGD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type ButtonProps } from "./Button";
|
|
3
|
+
/** Action 전용 옵션(버튼 공통 옵션은 ButtonProps에서 상속) */
|
|
4
|
+
type ActionKind = "primary" | "secondary" | "tertiary" | "magical" | "cyberpunk" | "ninja" | "wizard" | "sniper";
|
|
5
|
+
type FeedbackKind = "ripple" | "particle" | "sound" | "haptic" | "glitch" | "sparkle" | "smoke";
|
|
6
|
+
type ActionExtras = {
|
|
7
|
+
actionType?: ActionKind;
|
|
8
|
+
feedback?: FeedbackKind;
|
|
9
|
+
particleEffect?: boolean;
|
|
10
|
+
rippleEffect?: boolean;
|
|
11
|
+
soundEffect?: boolean;
|
|
12
|
+
hapticFeedback?: boolean;
|
|
13
|
+
transparency?: number;
|
|
14
|
+
blurIntensity?: number;
|
|
15
|
+
glowIntensity?: number;
|
|
16
|
+
glowColor?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Action 컴포넌트의 props / Action component props
|
|
20
|
+
* @typedef {Object} ActionProps
|
|
21
|
+
* @property {ActionKind} [actionType="primary"] - Action 타입 / Action type
|
|
22
|
+
* @property {FeedbackKind} [feedback="ripple"] - 피드백 타입 / Feedback type
|
|
23
|
+
* @property {boolean} [particleEffect=false] - 파티클 효과 활성화 / Enable particle effect
|
|
24
|
+
* @property {boolean} [rippleEffect=false] - 리플 효과 활성화 / Enable ripple effect
|
|
25
|
+
* @property {boolean} [soundEffect=false] - 사운드 효과 활성화 / Enable sound effect
|
|
26
|
+
* @property {boolean} [hapticFeedback=false] - 햅틱 피드백 활성화 / Enable haptic feedback
|
|
27
|
+
* @property {number} [transparency=1] - 투명도 (0-1) / Transparency (0-1)
|
|
28
|
+
* @property {number} [blurIntensity=0] - blur 강도 (px) / Blur intensity (px)
|
|
29
|
+
* @property {number} [glowIntensity=0] - 글로우 강도 (px) / Glow intensity (px)
|
|
30
|
+
* @property {string} [glowColor="rgba(91,140,255,.8)"] - 글로우 색상 / Glow color
|
|
31
|
+
* @extends {ButtonProps}
|
|
32
|
+
*/
|
|
33
|
+
export type ActionProps = ButtonProps & ActionExtras;
|
|
34
|
+
type AnchorEl = HTMLAnchorElement;
|
|
35
|
+
type ButtonEl = HTMLButtonElement;
|
|
36
|
+
type AnchorOrButton = AnchorEl | ButtonEl;
|
|
37
|
+
/**
|
|
38
|
+
* Action 컴포넌트 / Action component
|
|
39
|
+
*
|
|
40
|
+
* 고급 효과를 가진 액션 버튼 컴포넌트입니다.
|
|
41
|
+
* Button 컴포넌트를 기반으로 하며, 파티클, 리플, 사운드, 햅틱 피드백 등을 지원합니다.
|
|
42
|
+
*
|
|
43
|
+
* Action button component with advanced effects.
|
|
44
|
+
* Based on Button component, supports particle, ripple, sound, haptic feedback, etc.
|
|
45
|
+
*
|
|
46
|
+
* @component
|
|
47
|
+
* @example
|
|
48
|
+
* // 기본 사용 / Basic usage
|
|
49
|
+
* <Action>클릭</Action>
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // 고급 효과 / Advanced effects
|
|
53
|
+
* <Action
|
|
54
|
+
* actionType="magical"
|
|
55
|
+
* feedback="particle"
|
|
56
|
+
* particleEffect
|
|
57
|
+
* rippleEffect
|
|
58
|
+
* >
|
|
59
|
+
* 마법 버튼
|
|
60
|
+
* </Action>
|
|
61
|
+
*
|
|
62
|
+
* @param {ActionProps} props - Action 컴포넌트의 props / Action component props
|
|
63
|
+
* @param {React.Ref<AnchorOrButton>} ref - button 또는 anchor 요소 ref / button or anchor element ref
|
|
64
|
+
* @returns {JSX.Element} Action 컴포넌트 / Action component
|
|
65
|
+
*/
|
|
66
|
+
export declare const Action: React.ForwardRefExoticComponent<ActionProps & React.RefAttributes<AnchorOrButton>>;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=Action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../../src/components/Action.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,+CAA+C;AAC/C,KAAK,UAAU,GACX,SAAS,GAAG,WAAW,GAAG,UAAU,GACpC,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC5D,KAAK,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhG,KAAK,YAAY,GAAG;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAErD,KAAK,QAAQ,GAAG,iBAAiB,CAAC;AAClC,KAAK,QAAQ,GAAG,iBAAiB,CAAC;AAClC,KAAK,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAgB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,MAAM,oFAiOlB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { IconName } from '../lib/icons';
|
|
3
|
+
/**
|
|
4
|
+
* ActionButton 인터페이스
|
|
5
|
+
* @typedef {Object} ActionButton
|
|
6
|
+
* @property {string} label - 버튼 라벨 (데스크톱)
|
|
7
|
+
* @property {string} [labelMobile] - 버튼 라벨 (모바일, 없으면 label 사용)
|
|
8
|
+
* @property {IconName} [icon] - 버튼 아이콘
|
|
9
|
+
* @property {() => void} onClick - 클릭 핸들러
|
|
10
|
+
* @property {boolean} [disabled] - 비활성화 여부
|
|
11
|
+
* @property {'default' | 'outline' | 'destructive' | 'ghost'} [variant='outline'] - 버튼 스타일
|
|
12
|
+
* @property {Object} [badge] - 배지 정보
|
|
13
|
+
* @property {number} badge.count - 배지 숫자
|
|
14
|
+
* @property {'blue' | 'red' | 'gray' | 'green'} [badge.color='gray'] - 배지 색상
|
|
15
|
+
* @property {string} [className] - 추가 CSS 클래스
|
|
16
|
+
*/
|
|
17
|
+
export interface ActionButton {
|
|
18
|
+
label: string;
|
|
19
|
+
labelMobile?: string;
|
|
20
|
+
icon?: IconName;
|
|
21
|
+
onClick: () => void;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
variant?: 'default' | 'outline' | 'destructive' | 'ghost';
|
|
24
|
+
badge?: {
|
|
25
|
+
count: number;
|
|
26
|
+
color?: 'blue' | 'red' | 'gray' | 'green';
|
|
27
|
+
};
|
|
28
|
+
className?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* ActionToolbar 컴포넌트의 props / ActionToolbar component props
|
|
32
|
+
* @typedef {Object} ActionToolbarProps
|
|
33
|
+
* @property {boolean} [isSelectMode=false] - 선택 모드 활성화 여부 / Enable select mode
|
|
34
|
+
* @property {number} [totalCount=0] - 전체 항목 개수 / Total item count
|
|
35
|
+
* @property {number} [selectedCount=0] - 선택된 항목 개수 / Selected item count
|
|
36
|
+
* @property {ActionButton[]} [actions=[]] - 일반 모드 액션 버튼들 / Normal mode action buttons
|
|
37
|
+
* @property {ActionButton[]} [selectModeActions=[]] - 선택 모드 액션 버튼들 / Select mode action buttons
|
|
38
|
+
* @property {() => void} [onToggleSelectMode] - 선택 모드 토글 함수 / Toggle select mode function
|
|
39
|
+
* @property {() => void} [onToggleSelectAll] - 전체 선택/해제 함수 / Toggle select all function
|
|
40
|
+
* @property {() => void} [onCancelSelect] - 선택 모드 취소 함수 / Cancel select mode function
|
|
41
|
+
* @property {boolean} [loading=false] - 로딩 상태 / Loading state
|
|
42
|
+
* @extends {React.HTMLAttributes<HTMLDivElement>}
|
|
43
|
+
*/
|
|
44
|
+
export interface ActionToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
45
|
+
/** 선택 모드 활성화 여부 */
|
|
46
|
+
isSelectMode?: boolean;
|
|
47
|
+
/** 전체 항목 개수 */
|
|
48
|
+
totalCount?: number;
|
|
49
|
+
/** 선택된 항목 개수 */
|
|
50
|
+
selectedCount?: number;
|
|
51
|
+
/** 일반 모드 액션 버튼들 */
|
|
52
|
+
actions?: ActionButton[];
|
|
53
|
+
/** 선택 모드 액션 버튼들 */
|
|
54
|
+
selectModeActions?: ActionButton[];
|
|
55
|
+
/** 선택 모드 토글 함수 */
|
|
56
|
+
onToggleSelectMode?: () => void;
|
|
57
|
+
/** 전체 선택/해제 함수 */
|
|
58
|
+
onToggleSelectAll?: () => void;
|
|
59
|
+
/** 선택 모드 취소 함수 */
|
|
60
|
+
onCancelSelect?: () => void;
|
|
61
|
+
/** 로딩 상태 */
|
|
62
|
+
loading?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export declare const ActionToolbar: React.NamedExoticComponent<ActionToolbarProps & React.RefAttributes<HTMLDivElement>>;
|
|
65
|
+
//# sourceMappingURL=ActionToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionToolbar.d.ts","sourceRoot":"","sources":["../../src/components/ActionToolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1D,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;KAC3C,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9E,mBAAmB;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,mBAAmB;IACnB,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAC;IACnC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB;IAClB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAqLD,eAAO,MAAM,aAAa,sFAAqC,CAAC"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Alert 컴포넌트의 props
|
|
4
|
+
* @typedef {Object} AlertProps
|
|
5
|
+
* @property {"default" | "success" | "warning" | "error" | "info"} [variant="default"] - Alert 스타일 변형
|
|
6
|
+
* @property {string} [title] - Alert 제목
|
|
7
|
+
* @property {string} [description] - Alert 설명
|
|
8
|
+
* @property {React.ReactNode} [icon] - 커스텀 아이콘
|
|
9
|
+
* @property {React.ReactNode} [action] - 액션 버튼/요소
|
|
10
|
+
* @property {boolean} [closable=false] - 닫기 버튼 표시 여부
|
|
11
|
+
* @property {() => void} [onClose] - 닫기 버튼 클릭 시 호출되는 콜백
|
|
12
|
+
* @extends {React.HTMLAttributes<HTMLDivElement>}
|
|
13
|
+
*/
|
|
2
14
|
export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
15
|
variant?: "default" | "success" | "warning" | "error" | "info";
|
|
4
16
|
title?: string;
|
|
@@ -8,6 +20,43 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
8
20
|
closable?: boolean;
|
|
9
21
|
onClose?: () => void;
|
|
10
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Alert 컴포넌트 / Alert component
|
|
25
|
+
*
|
|
26
|
+
* 사용자에게 중요한 정보나 경고를 표시하는 컴포넌트입니다.
|
|
27
|
+
* 다양한 변형(variant)을 지원하며, 아이콘, 제목, 설명, 액션 버튼을 포함할 수 있습니다.
|
|
28
|
+
*
|
|
29
|
+
* Component for displaying important information or warnings to users.
|
|
30
|
+
* Supports various variants and can include icons, titles, descriptions, and action buttons.
|
|
31
|
+
*
|
|
32
|
+
* @component
|
|
33
|
+
* @example
|
|
34
|
+
* // 기본 사용 / Basic usage
|
|
35
|
+
* <Alert variant="info" title="정보" description="이것은 정보 메시지입니다." />
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // 닫기 버튼 포함 / With close button
|
|
39
|
+
* <Alert
|
|
40
|
+
* variant="warning"
|
|
41
|
+
* title="경고"
|
|
42
|
+
* closable
|
|
43
|
+
* onClose={() => console.log('닫기')}
|
|
44
|
+
* />
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* // 커스텀 아이콘과 액션 / Custom icon and action
|
|
48
|
+
* <Alert
|
|
49
|
+
* variant="success"
|
|
50
|
+
* icon={<Icon name="check" />}
|
|
51
|
+
* action={<Button size="sm">확인</Button>}
|
|
52
|
+
* >
|
|
53
|
+
* 작업이 완료되었습니다.
|
|
54
|
+
* </Alert>
|
|
55
|
+
*
|
|
56
|
+
* @param {AlertProps} props - Alert 컴포넌트의 props / Alert component props
|
|
57
|
+
* @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref
|
|
58
|
+
* @returns {JSX.Element} Alert 컴포넌트 / Alert component
|
|
59
|
+
*/
|
|
11
60
|
declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
61
|
export declare const AlertSuccess: React.ForwardRefExoticComponent<Omit<AlertProps, "variant"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
62
|
export declare const AlertWarning: React.ForwardRefExoticComponent<Omit<AlertProps, "variant"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../src/components/Alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,QAAA,MAAM,KAAK,mFAuIV,CAAA;AAID,eAAO,MAAM,YAAY,oGAIxB,CAAA;AAGD,eAAO,MAAM,YAAY,oGAIxB,CAAA;AAGD,eAAO,MAAM,UAAU,oGAItB,CAAA;AAGD,eAAO,MAAM,SAAS,oGAIrB,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../src/components/Alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,QAAA,MAAM,KAAK,mFAuIV,CAAA;AAID,eAAO,MAAM,YAAY,oGAIxB,CAAA;AAGD,eAAO,MAAM,YAAY,oGAIxB,CAAA;AAGD,eAAO,MAAM,UAAU,oGAItB,CAAA;AAGD,eAAO,MAAM,SAAS,oGAIrB,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Autocomplete 옵션 인터페이스 / Autocomplete option interface
|
|
4
|
+
* @typedef {Object} AutocompleteOption
|
|
5
|
+
* @property {string} value - 옵션 값 / Option value
|
|
6
|
+
* @property {string} label - 옵션 라벨 / Option label
|
|
7
|
+
* @property {string} [description] - 옵션 설명 / Option description
|
|
8
|
+
* @property {React.ReactNode} [icon] - 옵션 아이콘 / Option icon
|
|
9
|
+
* @property {Record<string, unknown>} [data] - 추가 데이터 / Additional data
|
|
10
|
+
*/
|
|
11
|
+
export interface AutocompleteOption {
|
|
12
|
+
value: string;
|
|
13
|
+
label: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
icon?: React.ReactNode;
|
|
16
|
+
data?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Autocomplete 컴포넌트의 props / Autocomplete component props
|
|
20
|
+
* @typedef {Object} AutocompleteProps
|
|
21
|
+
* @property {AutocompleteOption[]} options - 옵션 목록 / Options list
|
|
22
|
+
* @property {string} [value] - 선택된 값 / Selected value
|
|
23
|
+
* @property {(value: string, option?: AutocompleteOption) => void} [onChange] - 값 변경 핸들러 / Value change handler
|
|
24
|
+
* @property {string} [placeholder="검색하거나 선택하세요"] - 플레이스홀더 / Placeholder
|
|
25
|
+
* @property {boolean} [disabled=false] - 비활성화 상태 / Disabled state
|
|
26
|
+
* @property {boolean} [error=false] - 에러 상태 / Error state
|
|
27
|
+
* @property {boolean} [loading=false] - 로딩 상태 / Loading state
|
|
28
|
+
* @property {number} [maxHeight=300] - 드롭다운 최대 높이 (px) / Dropdown max height in px
|
|
29
|
+
* @property {boolean} [clearable=true] - 지우기 버튼 표시 / Show clear button
|
|
30
|
+
* @property {boolean} [filterable=true] - 필터링 활성화 / Enable filtering
|
|
31
|
+
* @property {(query: string) => AutocompleteOption[] | Promise<AutocompleteOption[]>} [onSearch] - 검색 핸들러 (비동기 지원) / Search handler (async support)
|
|
32
|
+
* @property {React.ReactNode} [emptyText="결과가 없습니다"] - 빈 결과 텍스트 / Empty result text
|
|
33
|
+
* @property {"sm" | "md" | "lg"} [size="md"] - 크기 / Size
|
|
34
|
+
* @property {string} [className] - 추가 클래스명 / Additional class name
|
|
35
|
+
* @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>}
|
|
36
|
+
*/
|
|
37
|
+
export interface AutocompleteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
38
|
+
options: AutocompleteOption[];
|
|
39
|
+
value?: string;
|
|
40
|
+
onChange?: (value: string, option?: AutocompleteOption) => void;
|
|
41
|
+
placeholder?: string;
|
|
42
|
+
disabled?: boolean;
|
|
43
|
+
error?: boolean;
|
|
44
|
+
loading?: boolean;
|
|
45
|
+
maxHeight?: number;
|
|
46
|
+
clearable?: boolean;
|
|
47
|
+
filterable?: boolean;
|
|
48
|
+
onSearch?: (query: string) => AutocompleteOption[] | Promise<AutocompleteOption[]>;
|
|
49
|
+
emptyText?: string;
|
|
50
|
+
size?: "sm" | "md" | "lg";
|
|
51
|
+
className?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Autocomplete 컴포넌트 / Autocomplete component
|
|
55
|
+
*
|
|
56
|
+
* 자동완성 입력 컴포넌트입니다.
|
|
57
|
+
* 입력하면서 옵션을 필터링하고 선택할 수 있습니다.
|
|
58
|
+
*
|
|
59
|
+
* Autocomplete input component.
|
|
60
|
+
* Filters and selects options as you type.
|
|
61
|
+
*
|
|
62
|
+
* @component
|
|
63
|
+
* @example
|
|
64
|
+
* // 기본 사용 / Basic usage
|
|
65
|
+
* <Autocomplete
|
|
66
|
+
* options={[
|
|
67
|
+
* { value: "1", label: "옵션 1" },
|
|
68
|
+
* { value: "2", label: "옵션 2" }
|
|
69
|
+
* ]}
|
|
70
|
+
* onChange={(value) => console.log(value)}
|
|
71
|
+
* />
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // 비동기 검색 / Async search
|
|
75
|
+
* <Autocomplete
|
|
76
|
+
* options={options}
|
|
77
|
+
* onSearch={async (query) => {
|
|
78
|
+
* const results = await searchAPI(query)
|
|
79
|
+
* return results
|
|
80
|
+
* }}
|
|
81
|
+
* loading={isLoading}
|
|
82
|
+
* />
|
|
83
|
+
*
|
|
84
|
+
* @param {AutocompleteProps} props - Autocomplete 컴포넌트의 props / Autocomplete component props
|
|
85
|
+
* @returns {JSX.Element} Autocomplete 컴포넌트 / Autocomplete component
|
|
86
|
+
*/
|
|
87
|
+
export declare const Autocomplete: React.ForwardRefExoticComponent<AutocompleteProps & React.RefAttributes<HTMLDivElement>>;
|
|
88
|
+
//# sourceMappingURL=Autocomplete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../src/components/Autocomplete.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC/F,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IAClF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,YAAY,0FAqQxB,CAAA"}
|
|
@@ -1,13 +1,83 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Avatar 컴포넌트의 props / Avatar component props
|
|
4
|
+
* @typedef {Object} AvatarProps
|
|
5
|
+
* @property {"sm" | "md" | "lg"} [size="md"] - 아바타 크기 / Avatar size
|
|
6
|
+
* @property {"default" | "glass"} [variant="default"] - 아바타 스타일 변형 / Avatar style variant
|
|
7
|
+
* @property {string} [src] - 이미지 URL / Image URL
|
|
8
|
+
* @property {string} [alt] - 이미지 대체 텍스트 / Image alt text
|
|
9
|
+
* @extends {React.HTMLAttributes<HTMLDivElement>}
|
|
10
|
+
*/
|
|
2
11
|
export interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
12
|
size?: "sm" | "md" | "lg";
|
|
13
|
+
variant?: "default" | "glass";
|
|
14
|
+
src?: string;
|
|
15
|
+
alt?: string;
|
|
4
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* AvatarImage 컴포넌트의 props
|
|
19
|
+
* @typedef {Object} AvatarImageProps
|
|
20
|
+
* @extends {React.ImgHTMLAttributes<HTMLImageElement>}
|
|
21
|
+
*/
|
|
5
22
|
export interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
6
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* AvatarFallback 컴포넌트의 props
|
|
26
|
+
* @typedef {Object} AvatarFallbackProps
|
|
27
|
+
* @extends {React.HTMLAttributes<HTMLDivElement>}
|
|
28
|
+
*/
|
|
7
29
|
export interface AvatarFallbackProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
8
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Avatar 컴포넌트 / Avatar component
|
|
33
|
+
*
|
|
34
|
+
* 사용자 프로필 이미지를 표시하는 컴포넌트입니다.
|
|
35
|
+
* 이미지가 없을 경우 대체 텍스트나 초기 문자를 표시합니다.
|
|
36
|
+
*
|
|
37
|
+
* Component for displaying user profile images.
|
|
38
|
+
* Shows fallback text or initials when image is not available.
|
|
39
|
+
*
|
|
40
|
+
* @component
|
|
41
|
+
* @example
|
|
42
|
+
* // 기본 사용 (이미지) / Basic usage (with image)
|
|
43
|
+
* <Avatar src="/user.jpg" alt="사용자" />
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // 대체 텍스트 / Fallback text
|
|
47
|
+
* <Avatar alt="홍길동">홍</Avatar>
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* // Glass 스타일 / Glass style
|
|
51
|
+
* <Avatar variant="glass" size="lg" src="/user.jpg" alt="사용자" />
|
|
52
|
+
*
|
|
53
|
+
* @param {AvatarProps} props - Avatar 컴포넌트의 props / Avatar component props
|
|
54
|
+
* @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref
|
|
55
|
+
* @returns {JSX.Element} Avatar 컴포넌트 / Avatar component
|
|
56
|
+
*/
|
|
9
57
|
declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
|
|
58
|
+
/**
|
|
59
|
+
* AvatarImage 컴포넌트 / AvatarImage component
|
|
60
|
+
*
|
|
61
|
+
* 아바타 이미지를 표시하는 컴포넌트입니다.
|
|
62
|
+
* Displays the avatar image.
|
|
63
|
+
*
|
|
64
|
+
* @component
|
|
65
|
+
* @param {AvatarImageProps} props - AvatarImage 컴포넌트의 props / AvatarImage component props
|
|
66
|
+
* @param {React.Ref<HTMLImageElement>} ref - img 요소 ref / img element ref
|
|
67
|
+
* @returns {JSX.Element} AvatarImage 컴포넌트 / AvatarImage component
|
|
68
|
+
*/
|
|
10
69
|
declare const AvatarImage: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
70
|
+
/**
|
|
71
|
+
* AvatarFallback 컴포넌트 / AvatarFallback component
|
|
72
|
+
*
|
|
73
|
+
* 아바타 이미지가 없을 때 표시되는 대체 컴포넌트입니다.
|
|
74
|
+
* Fallback component displayed when avatar image is not available.
|
|
75
|
+
*
|
|
76
|
+
* @component
|
|
77
|
+
* @param {AvatarFallbackProps} props - AvatarFallback 컴포넌트의 props / AvatarFallback component props
|
|
78
|
+
* @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref
|
|
79
|
+
* @returns {JSX.Element} AvatarFallback 컴포넌트 / AvatarFallback component
|
|
80
|
+
*/
|
|
11
81
|
declare const AvatarFallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
82
|
export { Avatar, AvatarImage, AvatarFallback };
|
|
13
83
|
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;CAAG;AAEtF;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEpF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,MAAM,oFAkCX,CAAA;AAGD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,WAAW,2FAQhB,CAAA;AAGD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,cAAc,4FAWnB,CAAA;AAGD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA"}
|