@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Table.tsx","../src/components/Badge.tsx","../src/components/Skeleton.tsx","../src/components/Tooltip.tsx","../src/components/Dropdown.tsx","../src/components/Drawer.tsx"],"names":["Table","React","className","variant","size","props","ref","getVariantClasses","getSizeClasses","jsx","merge","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","Badge","variantClasses","Skeleton","width","height","animation","getAnimationClasses","defaultDims","finalWidth","finalHeight","SkeletonText","SkeletonCircle","SkeletonRectangle","SkeletonRounded","SkeletonCard","jsxs","SkeletonAvatar","SkeletonImage","SkeletonUserProfile","SkeletonList","_","index","SkeletonTable","Tooltip","content","children","position","delay","disabled","isVisible","setIsVisible","coords","setCoords","timeoutRef","tooltipRef","showTooltip","e","_a","rect","tooltipRect","x","y","hideTooltip","getArrowClasses","TooltipLight","TooltipDark","Dropdown","trigger","controlledOpen","onOpenChange","placement","align","offset","showArrow","internalOpen","setInternalOpen","triggerRef","dropdownRef","isControlled","isOpen","handleOpenChange","newOpen","handleTriggerClick","updatePosition","triggerRect","dropdownRect","viewportWidth","viewportHeight","handleClickOutside","event","getPlacementClasses","DropdownItem","icon","DropdownSeparator","DropdownLabel","DropdownMenu","DropdownGroup","Drawer","open","side","showBackdrop","backdropClassName","closeOnBackdropClick","closeOnEscape","isAnimating","setIsAnimating","timer","handleEscape","sizeClasses","sideClasses","transformClasses","DrawerHeader","showCloseButton","onClose","Icon","DrawerContent","DrawerFooter"],"mappings":"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","file":"chunk-SGCVGEDR.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Table 컴포넌트의 props / Table component props\n * @typedef {Object} TableProps\n * @property {React.ReactNode} children - TableHeader, TableBody, TableFooter 등 / TableHeader, TableBody, TableFooter, etc.\n * @property {\"default\" | \"bordered\" | \"striped\"} [variant=\"default\"] - Table 스타일 변형 / Table style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Table 크기 / Table size\n * @extends {React.HTMLAttributes<HTMLTableElement>}\n */\nexport interface TableProps extends React.HTMLAttributes<HTMLTableElement> {\n children: React.ReactNode\n variant?: \"default\" | \"bordered\" | \"striped\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * TableHeader 컴포넌트의 props / TableHeader component props\n * @typedef {Object} TableHeaderProps\n * @property {React.ReactNode} children - TableHead 컴포넌트들 / TableHead components\n * @extends {React.HTMLAttributes<HTMLTableSectionElement>}\n */\nexport interface TableHeaderProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n children: React.ReactNode\n}\n\n/**\n * TableBody 컴포넌트의 props / TableBody component props\n * @typedef {Object} TableBodyProps\n * @property {React.ReactNode} children - TableRow 컴포넌트들 / TableRow components\n * @extends {React.HTMLAttributes<HTMLTableSectionElement>}\n */\nexport interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n children: React.ReactNode\n}\n\n/**\n * TableFooter 컴포넌트의 props / TableFooter component props\n * @typedef {Object} TableFooterProps\n * @property {React.ReactNode} children - TableRow 컴포넌트들 / TableRow components\n * @extends {React.HTMLAttributes<HTMLTableSectionElement>}\n */\nexport interface TableFooterProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n children: React.ReactNode\n}\n\n/**\n * TableRow 컴포넌트의 props / TableRow component props\n * @typedef {Object} TableRowProps\n * @property {React.ReactNode} children - TableHead 또는 TableCell 컴포넌트들 / TableHead or TableCell components\n * @property {\"default\" | \"hover\"} [variant=\"default\"] - Row 스타일 변형 / Row style variant\n * @extends {React.HTMLAttributes<HTMLTableRowElement>}\n */\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n children: React.ReactNode\n variant?: \"default\" | \"hover\"\n}\n\n/**\n * TableHead 컴포넌트의 props / TableHead component props\n * @typedef {Object} TableHeadProps\n * @property {React.ReactNode} children - 헤더 셀 내용 / Header cell content\n * @extends {React.ThHTMLAttributes<HTMLTableCellElement>}\n */\nexport interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n children: React.ReactNode\n}\n\n/**\n * TableCell 컴포넌트의 props / TableCell component props\n * @typedef {Object} TableCellProps\n * @property {React.ReactNode} children - 셀 내용 / Cell content\n * @extends {React.TdHTMLAttributes<HTMLTableCellElement>}\n */\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n children: React.ReactNode\n}\n\n/**\n * Table 컴포넌트 / Table component\n * \n * 데이터를 표 형태로 표시하는 테이블 컴포넌트입니다.\n * TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell과 함께 사용합니다.\n * \n * Table component that displays data in tabular format.\n * Used with TableHeader, TableBody, TableFooter, TableRow, TableHead, and TableCell.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Table>\n * <TableHeader>\n * <TableRow>\n * <TableHead>이름</TableHead>\n * <TableHead>나이</TableHead>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * <TableRow>\n * <TableCell>홍길동</TableCell>\n * <TableCell>30</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n * \n * @example\n * // Bordered 스타일 / Bordered style\n * <Table variant=\"bordered\">\n * <TableHeader>\n * <TableRow>\n * <TableHead>항목</TableHead>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * <TableRow>\n * <TableCell>값</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n * \n * @example\n * // Striped 스타일, 호버 효과 / Striped style with hover effect\n * <Table variant=\"striped\">\n * <TableBody>\n * <TableRow variant=\"hover\">\n * <TableCell>데이터</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n * \n * @param {TableProps} props - Table 컴포넌트의 props / Table component props\n * @param {React.Ref<HTMLTableElement>} ref - table 요소 ref / table element ref\n * @returns {JSX.Element} Table 컴포넌트 / Table component\n */\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, variant = \"default\", size = \"md\", ...props }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"bordered\":\n return \"border border-slate-200 dark:border-slate-700 divide-x divide-slate-200 dark:divide-slate-700\"\n case \"striped\":\n return \"divide-y divide-slate-200 dark:divide-slate-700\"\n default:\n return \"\"\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-sm\"\n case \"lg\":\n return \"text-base\"\n default:\n return \"text-sm\"\n }\n }\n\n return (\n <div className=\"w-full overflow-auto\">\n <table\n ref={ref}\n className={merge(\n \"w-full caption-bottom\",\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n />\n </div>\n )\n }\n)\nTable.displayName = \"Table\"\n\n/**\n * TableHeader 컴포넌트 / TableHeader component\n * 테이블의 헤더 영역을 표시합니다.\n * Displays the header area of a table.\n * \n * @component\n * @param {TableHeaderProps} props - TableHeader 컴포넌트의 props / TableHeader component props\n * @param {React.Ref<HTMLTableSectionElement>} ref - thead 요소 ref / thead element ref\n * @returns {JSX.Element} TableHeader 컴포넌트 / TableHeader component\n */\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={merge(\"[&_tr]:border-b\", className)} {...props} />\n )\n)\nTableHeader.displayName = \"TableHeader\"\n\n/**\n * TableBody 컴포넌트 / TableBody component\n * 테이블의 본문 영역을 표시합니다.\n * Displays the body area of a table.\n * \n * @component\n * @param {TableBodyProps} props - TableBody 컴포넌트의 props / TableBody component props\n * @param {React.Ref<HTMLTableSectionElement>} ref - tbody 요소 ref / tbody element ref\n * @returns {JSX.Element} TableBody 컴포넌트 / TableBody component\n */\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={merge(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n)\nTableBody.displayName = \"TableBody\"\n\n/**\n * TableFooter 컴포넌트 / TableFooter component\n * 테이블의 푸터 영역을 표시합니다.\n * Displays the footer area of a table.\n * \n * @component\n * @param {TableFooterProps} props - TableFooter 컴포넌트의 props / TableFooter component props\n * @param {React.Ref<HTMLTableSectionElement>} ref - tfoot 요소 ref / tfoot element ref\n * @returns {JSX.Element} TableFooter 컴포넌트 / TableFooter component\n */\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={merge(\n \"border-t bg-slate-50 dark:bg-slate-800/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n)\nTableFooter.displayName = \"TableFooter\"\n\n/**\n * TableRow 컴포넌트 / TableRow component\n * 테이블의 행을 표시합니다.\n * Displays a table row.\n * \n * @component\n * @param {TableRowProps} props - TableRow 컴포넌트의 props / TableRow component props\n * @param {React.Ref<HTMLTableRowElement>} ref - tr 요소 ref / tr element ref\n * @returns {JSX.Element} TableRow 컴포넌트 / TableRow component\n */\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, variant = \"default\", ...props }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"hover\":\n return \"hover:bg-slate-50 dark:hover:bg-slate-800/50\"\n default:\n return \"\"\n }\n }\n\n return (\n <tr\n ref={ref}\n className={merge(\n \"border-b transition-colors data-[state=selected]:bg-slate-50 dark:data-[state=selected]:bg-slate-800/50\",\n getVariantClasses(),\n className\n )}\n {...props}\n />\n )\n }\n)\nTableRow.displayName = \"TableRow\"\n\n/**\n * TableHead 컴포넌트 / TableHead component\n * 테이블의 헤더 셀을 표시합니다.\n * Displays a table header cell.\n * \n * @component\n * @param {TableHeadProps} props - TableHead 컴포넌트의 props / TableHead component props\n * @param {React.Ref<HTMLTableCellElement>} ref - th 요소 ref / th element ref\n * @returns {JSX.Element} TableHead 컴포넌트 / TableHead component\n */\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={merge(\n \"h-12 px-4 text-left align-middle font-medium text-slate-500 dark:text-slate-400 [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n)\nTableHead.displayName = \"TableHead\"\n\n/**\n * TableCell 컴포넌트 / TableCell component\n * 테이블의 데이터 셀을 표시합니다.\n * Displays a table data cell.\n * \n * @component\n * @param {TableCellProps} props - TableCell 컴포넌트의 props / TableCell component props\n * @param {React.Ref<HTMLTableCellElement>} ref - td 요소 ref / td element ref\n * @returns {JSX.Element} TableCell 컴포넌트 / TableCell component\n */\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={merge(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n )\n)\nTableCell.displayName = \"TableCell\"\n\n/**\n * TableCaption 컴포넌트 / TableCaption component\n * 테이블의 캡션을 표시합니다.\n * Displays a table caption.\n * \n * @component\n * @param {React.HTMLAttributes<HTMLTableCaptionElement>} props - TableCaption 컴포넌트의 props / TableCaption component props\n * @param {React.Ref<HTMLTableCaptionElement>} ref - caption 요소 ref / caption element ref\n * @returns {JSX.Element} TableCaption 컴포넌트 / TableCaption component\n */\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={merge(\"mt-4 text-sm text-slate-500 dark:text-slate-400\", className)}\n {...props}\n />\n )\n)\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Badge 컴포넌트의 props / Badge component props\n * @typedef {Object} BadgeProps\n * @property {\"default\" | \"secondary\" | \"destructive\" | \"error\" | \"outline\" | \"glass\"} [variant=\"default\"] - Badge 스타일 변형 / Badge style variant\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"secondary\" | \"destructive\" | \"error\" | \"outline\" | \"glass\"\n}\n\n/**\n * Badge 컴포넌트 / Badge component\n * \n * 상태나 카테고리를 표시하는 작은 배지 컴포넌트입니다.\n * React.memo로 최적화되어 있어 불필요한 리렌더링을 방지합니다.\n * \n * Small badge component for displaying status or category.\n * Optimized with React.memo to prevent unnecessary re-renders.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Badge>New</Badge>\n * \n * @example\n * // 다양한 변형 / Various variants\n * <Badge variant=\"destructive\">완료</Badge>\n * <Badge variant=\"error\">오류</Badge>\n * <Badge variant=\"outline\">대기</Badge>\n * \n * @param {BadgeProps} props - Badge 컴포넌트의 props / Badge component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Badge 컴포넌트 / Badge component\n */\nconst Badge = React.memo(React.forwardRef<HTMLDivElement, BadgeProps>(\n ({ className, variant = \"default\", ...props }, ref) => {\n const variantClasses = React.useMemo(() => ({\n default: \"bg-slate-900 text-slate-50 hover:bg-slate-900/80 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/80\",\n secondary: \"bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80\",\n destructive: \"bg-red-500 text-slate-50 hover:bg-red-500/80 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/80\",\n error: \"bg-red-500 text-slate-50 hover:bg-red-500/80 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/80\", // error는 destructive와 동일\n outline: \"text-slate-950 border border-slate-200 hover:bg-slate-100 hover:text-slate-900 dark:border-slate-800 dark:text-slate-50 dark:hover:bg-slate-800 dark:hover:text-slate-50\",\n glass: \"bg-white/20 backdrop-blur-sm border border-white/30 text-white hover:bg-white/30 dark:bg-slate-800/20 dark:border-slate-700/50 dark:text-slate-200 dark:hover:bg-slate-700/30\"\n }), [])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2\",\n variantClasses[variant],\n className\n )}\n {...props}\n />\n )\n }\n))\nBadge.displayName = \"Badge\"\n\nexport { Badge } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Skeleton 컴포넌트의 props\n * @typedef {Object} SkeletonProps\n * @property {\"text\" | \"circular\" | \"rectangular\" | \"rounded\"} [variant=\"text\"] - Skeleton 모양\n * @property {string | number} [width] - 너비 (기본값: variant에 따라 다름)\n * @property {string | number} [height] - 높이 (기본값: variant에 따라 다름)\n * @property {\"pulse\" | \"wave\" | \"shimmer\"} [animation=\"pulse\"] - 애니메이션 타입\n * @property {string} [className] - 추가 CSS 클래스\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"circular\" | \"rectangular\" | \"rounded\"\n width?: string | number\n height?: string | number\n animation?: \"pulse\" | \"wave\" | \"shimmer\"\n className?: string\n}\n\n/**\n * Skeleton 컴포넌트 / Skeleton component\n * \n * 로딩 중 콘텐츠의 플레이스홀더를 표시하는 스켈레톤 컴포넌트입니다.\n * 다양한 모양과 애니메이션을 지원합니다.\n * \n * Skeleton component that displays placeholders for content while loading.\n * Supports various shapes and animations.\n * \n * @component\n * @example\n * // 기본 사용 (텍스트) / Basic usage (text)\n * <Skeleton />\n * \n * @example\n * // 원형 아바타 / Circular avatar\n * <Skeleton variant=\"circular\" width={40} height={40} />\n * \n * @example\n * // Wave 애니메이션 / Wave animation\n * <Skeleton \n * variant=\"rounded\" \n * width=\"100%\" \n * height={200}\n * animation=\"wave\"\n * />\n * \n * @param {SkeletonProps} props - Skeleton 컴포넌트의 props / Skeleton component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Skeleton 컴포넌트 / Skeleton component\n */\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ \n className, \n variant = \"text\",\n width,\n height,\n animation = \"pulse\",\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"circular\":\n return \"rounded-full\"\n case \"rounded\":\n return \"rounded-lg\"\n case \"rectangular\":\n return \"rounded-none\"\n case \"text\":\n default:\n return \"rounded\"\n }\n }\n\n const getAnimationClasses = () => {\n switch (animation) {\n case \"wave\":\n return \"animate-pulse bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 bg-[length:200%_100%] animate-shimmer\"\n case \"shimmer\":\n return \"bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 bg-[length:200%_100%] animate-shimmer\"\n case \"pulse\":\n default:\n return \"animate-pulse bg-gray-200 dark:bg-gray-700\"\n }\n }\n\n const getDefaultDimensions = () => {\n switch (variant) {\n case \"circular\":\n return { width: \"40px\", height: \"40px\" }\n case \"text\":\n return { width: \"100%\", height: \"1em\" }\n case \"rounded\":\n return { width: \"100%\", height: \"200px\" }\n case \"rectangular\":\n return { width: \"100%\", height: \"200px\" }\n default:\n return { width: \"100%\", height: \"1em\" }\n }\n }\n\n const defaultDims = getDefaultDimensions()\n const finalWidth = width || defaultDims.width\n const finalHeight = height || defaultDims.height\n\n return (\n <div\n ref={ref}\n className={merge(\n \"block\",\n getVariantClasses(),\n getAnimationClasses(),\n className\n )}\n style={{\n width: typeof finalWidth === \"number\" ? `${finalWidth}px` : finalWidth,\n height: typeof finalHeight === \"number\" ? `${finalHeight}px` : finalHeight,\n }}\n {...props}\n />\n )\n }\n)\nSkeleton.displayName = \"Skeleton\"\n\n// 편의 컴포넌트들\nexport const SkeletonText = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"text\" className={className} {...props} />\n )\n)\nSkeletonText.displayName = \"SkeletonText\"\n\nexport const SkeletonCircle = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"circular\" className={className} {...props} />\n )\n)\nSkeletonCircle.displayName = \"SkeletonCircle\"\n\nexport const SkeletonRectangle = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rectangular\" className={className} {...props} />\n )\n)\nSkeletonRectangle.displayName = \"SkeletonRectangle\"\n\nexport const SkeletonRounded = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rounded\" className={className} {...props} />\n )\n)\nSkeletonRounded.displayName = \"SkeletonRounded\"\n\n// 복합 스켈레톤 컴포넌트들\nexport const SkeletonCard = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4 p-6\", className)} // 16px 간격, 24px 패딩\n {...props}\n >\n <div className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-12 h-12\" /> {/* 48px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" /> {/* 16px 높이, 75% 너비 */}\n <SkeletonText className=\"h-3 w-1/2\" /> {/* 12px 높이, 50% 너비 */}\n </div>\n </div>\n <SkeletonRounded className=\"w-full h-32\" /> {/* 128px 높이 */}\n <div className=\"space-y-2\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-full\" />\n <SkeletonText className=\"h-4 w-5/6\" />\n <SkeletonText className=\"h-4 w-4/6\" />\n </div>\n </div>\n )\n)\nSkeletonCard.displayName = \"SkeletonCard\"\n\nexport const SkeletonAvatar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"flex items-center space-x-4\", className)} // 16px 간격\n {...props}\n >\n <SkeletonCircle className=\"w-12 h-12\" /> {/* 48px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" />\n <SkeletonText className=\"h-3 w-1/2\" />\n </div>\n </div>\n )\n)\nSkeletonAvatar.displayName = \"SkeletonAvatar\"\n\nexport const SkeletonImage = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-2\", className)} // 8px 간격\n {...props}\n >\n <SkeletonRounded className=\"w-full h-48\" /> {/* 192px 높이 */}\n <SkeletonText className=\"h-4 w-1/2\" />\n </div>\n )\n)\nSkeletonImage.displayName = \"SkeletonImage\"\n\nexport const SkeletonUserProfile = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n <div className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-16 h-16\" /> {/* 64px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-5 w-1/2\" />\n <SkeletonText className=\"h-3 w-1/3\" />\n </div>\n </div>\n <div className=\"space-y-2\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-full\" />\n <SkeletonText className=\"h-4 w-5/6\" />\n </div>\n </div>\n )\n)\nSkeletonUserProfile.displayName = \"SkeletonUserProfile\"\n\nexport const SkeletonList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-10 h-10\" /> {/* 40px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" />\n <SkeletonText className=\"h-3 w-1/2\" />\n </div>\n </div>\n ))}\n </div>\n )\n)\nSkeletonList.displayName = \"SkeletonList\"\n\nexport const SkeletonTable = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n {/* 헤더 */}\n <div className=\"flex space-x-4\"> {/* 16px 간격 */}\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n </div>\n {/* 행들 */}\n {Array.from({ length: 5 }).map((_, index) => (\n <div key={index} className=\"flex space-x-4\"> {/* 16px 간격 */}\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n </div>\n ))}\n </div>\n )\n)\nSkeletonTable.displayName = \"SkeletonTable\"\n\nexport { Skeleton } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Tooltip 컴포넌트의 props / Tooltip component props\n * @typedef {Object} TooltipProps\n * @property {string} content - Tooltip 내용 / Tooltip content\n * @property {React.ReactNode} children - Tooltip이 연결될 요소 / Element to attach tooltip to\n * @property {\"top\" | \"bottom\" | \"left\" | \"right\"} [position=\"top\"] - Tooltip 표시 위치 / Tooltip display position\n * @property {\"default\" | \"light\" | \"dark\"} [variant=\"default\"] - Tooltip 스타일 변형 / Tooltip style variant\n * @property {number} [delay=300] - Tooltip 표시 지연 시간(ms) / Tooltip display delay (ms)\n * @property {boolean} [disabled=false] - Tooltip 비활성화 여부 / Disable tooltip\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {\n content: string\n children: React.ReactNode\n position?: \"top\" | \"bottom\" | \"left\" | \"right\"\n variant?: \"default\" | \"light\" | \"dark\"\n delay?: number\n disabled?: boolean\n}\n\n/**\n * Tooltip 컴포넌트 / Tooltip component\n * \n * 호버 시 추가 정보를 표시하는 툴팁 컴포넌트입니다.\n * 마우스 호버 시 지연 시간 후 표시됩니다.\n * \n * Tooltip component that displays additional information on hover.\n * Appears after a delay when the mouse hovers over the element.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Tooltip content=\"이것은 도움말입니다\">\n * <Button>호버하세요</Button>\n * </Tooltip>\n * \n * @example\n * // 다양한 위치 / Different positions\n * <Tooltip content=\"위치 변경\" position=\"bottom\">\n * <Icon name=\"info\" />\n * </Tooltip>\n * \n * @example\n * // 커스텀 스타일 / Custom styles\n * <Tooltip content=\"라이트 스타일\" variant=\"light\" delay={500}>\n * <span>호버</span>\n * </Tooltip>\n * \n * @param {TooltipProps} props - Tooltip 컴포넌트의 props / Tooltip component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Tooltip 컴포넌트 / Tooltip component\n * \n * @todo 접근성 개선: role=\"tooltip\" 추가 필요 / Accessibility: Add role=\"tooltip\"\n * @todo 접근성 개선: aria-describedby 연결 필요 / Accessibility: Connect aria-describedby\n * @todo 접근성 개선: 키보드 포커스 시 Tooltip 표시 필요 / Accessibility: Show tooltip on keyboard focus\n */\nconst Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n ({ \n className, \n content,\n children,\n position = \"top\",\n variant = \"default\",\n delay = 300,\n disabled = false,\n ...props \n }, ref) => {\n const [isVisible, setIsVisible] = React.useState(false)\n const [coords, setCoords] = React.useState({ x: 0, y: 0 })\n const timeoutRef = React.useRef<number | undefined>(undefined)\n const tooltipRef = React.useRef<HTMLDivElement>(null)\n\n const showTooltip = (e: React.MouseEvent) => {\n if (disabled) return\n \n const rect = e.currentTarget.getBoundingClientRect()\n const tooltipRect = tooltipRef.current?.getBoundingClientRect()\n \n let x = 0\n let y = 0\n \n switch (position) {\n case \"top\":\n x = rect.left + rect.width / 2\n y = rect.top - 8 // 8px 간격\n break\n case \"bottom\":\n x = rect.left + rect.width / 2\n y = rect.bottom + 8 // 8px 간격\n break\n case \"left\":\n x = rect.left - 8 // 8px 간격\n y = rect.top + rect.height / 2\n break\n case \"right\":\n x = rect.right + 8 // 8px 간격\n y = rect.top + rect.height / 2\n break\n }\n \n setCoords({ x, y })\n \n timeoutRef.current = window.setTimeout(() => {\n setIsVisible(true)\n }, delay)\n }\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n setIsVisible(false)\n }\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [])\n\n const getVariantClasses = () => {\n switch (variant) {\n case \"light\":\n return \"bg-white text-gray-900 border border-gray-200 shadow-lg\"\n case \"dark\":\n return \"bg-gray-900 text-white shadow-lg\"\n default:\n return \"bg-gray-800 text-white shadow-lg\"\n }\n }\n\n const getPositionClasses = () => {\n switch (position) {\n case \"top\":\n return \"bottom-full left-1/2 -translate-x-1/2 mb-2\" // 8px 간격\n case \"bottom\":\n return \"top-full left-1/2 -translate-x-1/2 mt-2\" // 8px 간격\n case \"left\":\n return \"right-full top-1/2 -translate-y-1/2 mr-2\" // 8px 간격\n case \"right\":\n return \"left-full top-1/2 -translate-y-1/2 ml-2\" // 8px 간격\n default:\n return \"bottom-full left-1/2 -translate-x-1/2 mb-2\"\n }\n }\n\n const getArrowClasses = () => {\n switch (position) {\n case \"top\":\n return \"top-full left-1/2 -translate-x-1/2 border-t-gray-800 dark:border-t-gray-800\"\n case \"bottom\":\n return \"bottom-full left-1/2 -translate-x-1/2 border-b-gray-800 dark:border-b-gray-800\"\n case \"left\":\n return \"left-full top-1/2 -translate-y-1/2 border-l-gray-800 dark:border-l-gray-800\"\n case \"right\":\n return \"right-full top-1/2 -translate-y-1/2 border-r-gray-800 dark:border-r-gray-800\"\n default:\n return \"top-full left-1/2 -translate-x-1/2 border-t-gray-800 dark:border-t-gray-800\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\"relative inline-block\", className)}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n {...props}\n >\n {children}\n \n {isVisible && (\n <div\n ref={tooltipRef}\n className={merge(\n \"fixed z-50 px-3 py-2 text-sm rounded-lg whitespace-nowrap pointer-events-none\", // 12px, 8px 패딩\n getVariantClasses()\n )}\n style={{\n left: `${coords.x}px`,\n top: `${coords.y}px`,\n transform: 'translate(-50%, -50%)'\n }}\n >\n {content}\n {/* 화살표 */}\n <div\n className={merge(\n \"absolute w-0 h-0 border-4 border-transparent\",\n getArrowClasses()\n )}\n />\n </div>\n )}\n </div>\n )\n }\n)\nTooltip.displayName = \"Tooltip\"\n\n// 편의 컴포넌트들\nexport const TooltipLight = React.forwardRef<HTMLDivElement, Omit<TooltipProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Tooltip ref={ref} variant=\"light\" className={className} {...props} />\n )\n)\nTooltipLight.displayName = \"TooltipLight\"\n\nexport const TooltipDark = React.forwardRef<HTMLDivElement, Omit<TooltipProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Tooltip ref={ref} variant=\"dark\" className={className} {...props} />\n )\n)\nTooltipDark.displayName = \"TooltipDark\"\n\nexport { Tooltip } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Dropdown 컴포넌트의 props / Dropdown component props\n * @typedef {Object} DropdownProps\n * @property {React.ReactNode} trigger - Dropdown을 열기 위한 트리거 요소 / Trigger element to open dropdown\n * @property {React.ReactNode} children - Dropdown 내용 / Dropdown content\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\"} [placement=\"bottom\"] - Dropdown 표시 위치 / Dropdown display position\n * @property {\"start\" | \"center\" | \"end\"} [align=\"start\"] - Dropdown 정렬 / Dropdown alignment\n * @property {number} [offset=8] - 트리거와 Dropdown 사이 간격 (px) / Spacing between trigger and dropdown (px)\n * @property {boolean} [disabled=false] - Dropdown 비활성화 여부 / Disable dropdown\n * @property {boolean} [showArrow=true] - 화살표 표시 여부 / Show arrow\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n trigger: React.ReactNode\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\"\n align?: \"start\" | \"center\" | \"end\"\n offset?: number\n disabled?: boolean\n showArrow?: boolean\n}\n\n/**\n * Dropdown 컴포넌트 / Dropdown component\n * \n * 트리거 요소를 클릭하면 표시되는 드롭다운 메뉴 컴포넌트입니다.\n * 외부 클릭 시 자동으로 닫히며, 뷰포트 경계를 자동으로 감지하여 위치를 조정합니다.\n * \n * Dropdown menu component that appears when the trigger element is clicked.\n * Automatically closes on outside click and adjusts position by detecting viewport boundaries.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Dropdown trigger={<Button>메뉴</Button>}>\n * <Menu>\n * <MenuItem>항목 1</MenuItem>\n * <MenuItem>항목 2</MenuItem>\n * </Menu>\n * </Dropdown>\n * \n * @example\n * // 제어 모드, 화살표 없음 / Controlled mode, no arrow\n * const [open, setOpen] = useState(false)\n * <Dropdown \n * open={open}\n * onOpenChange={setOpen}\n * trigger={<Button>제어 모드</Button>}\n * placement=\"top\"\n * showArrow={false}\n * >\n * <div className=\"p-4\">내용</div>\n * </Dropdown>\n * \n * @param {DropdownProps} props - Dropdown 컴포넌트의 props / Dropdown component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Dropdown 컴포넌트 / Dropdown component\n */\nconst Dropdown = React.forwardRef<HTMLDivElement, DropdownProps>(\n ({ \n className, \n trigger,\n children,\n open: controlledOpen,\n onOpenChange,\n placement = \"bottom\",\n align = \"start\",\n offset = 8,\n disabled = false,\n showArrow = true,\n ...props \n }, ref) => {\n const [internalOpen, setInternalOpen] = React.useState(false)\n const [coords, setCoords] = React.useState({ x: 0, y: 0 })\n const triggerRef = React.useRef<HTMLDivElement>(null)\n const dropdownRef = React.useRef<HTMLDivElement>(null)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const handleOpenChange = (newOpen: boolean) => {\n if (disabled) return\n \n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }\n\n const handleTriggerClick = () => {\n handleOpenChange(!isOpen)\n }\n\n const updatePosition = React.useCallback(() => {\n if (!triggerRef.current || !dropdownRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const dropdownRect = dropdownRef.current.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n let x = 0\n let y = 0\n\n // 기본 위치 계산\n switch (placement) {\n case \"top\":\n x = triggerRect.left\n y = triggerRect.top - offset\n break\n case \"bottom\":\n x = triggerRect.left\n y = triggerRect.bottom + offset\n break\n case \"left\":\n x = triggerRect.left - offset\n y = triggerRect.top\n break\n case \"right\":\n x = triggerRect.right + offset\n y = triggerRect.top\n break\n }\n\n // 정렬 조정\n switch (align) {\n case \"center\":\n if (placement === \"top\" || placement === \"bottom\") {\n x = triggerRect.left + triggerRect.width / 2 - dropdownRect.width / 2\n } else {\n y = triggerRect.top + triggerRect.height / 2 - dropdownRect.height / 2\n }\n break\n case \"end\":\n if (placement === \"top\" || placement === \"bottom\") {\n x = triggerRect.right - dropdownRect.width\n } else {\n y = triggerRect.bottom - dropdownRect.height\n }\n break\n case \"start\":\n default:\n // 기본값은 이미 start 정렬\n break\n }\n\n // 뷰포트 경계 확인 및 조정\n if (x < 8) x = 8 // 8px 여백\n if (x + dropdownRect.width > viewportWidth - 8) {\n x = viewportWidth - dropdownRect.width - 8 // 8px 여백\n }\n if (y < 8) y = 8 // 8px 여백\n if (y + dropdownRect.height > viewportHeight - 8) {\n y = viewportHeight - dropdownRect.height - 8 // 8px 여백\n }\n\n setCoords({ x, y })\n }, [placement, align, offset])\n\n React.useEffect(() => {\n if (isOpen) {\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition)\n \n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition)\n }\n }\n }, [isOpen, updatePosition])\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current && \n dropdownRef.current && \n !triggerRef.current.contains(event.target as Node) &&\n !dropdownRef.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])\n\n const getPlacementClasses = () => {\n switch (placement) {\n case \"top\":\n return \"bottom-full left-0 mb-2\" // 8px 간격\n case \"bottom\":\n return \"top-full left-0 mt-2\" // 8px 간격\n case \"left\":\n return \"right-full top-0 mr-2\" // 8px 간격\n case \"right\":\n return \"left-full top-0 ml-2\" // 8px 간격\n default:\n return \"top-full left-0 mt-2\"\n }\n }\n\n const getArrowClasses = () => {\n switch (placement) {\n case \"top\":\n return \"top-full left-4 -translate-x-1/2 border-t-gray-100 dark:border-t-gray-800\"\n case \"bottom\":\n return \"bottom-full left-4 -translate-x-1/2 border-b-gray-100 dark:border-b-gray-800\"\n case \"left\":\n return \"left-full top-4 -translate-y-1/2 border-l-gray-100 dark:border-l-gray-800\"\n case \"right\":\n return \"right-full top-4 -translate-y-1/2 border-r-gray-100 dark:border-r-gray-800\"\n default:\n return \"bottom-full left-4 -translate-x-1/2 border-b-gray-100 dark:border-b-gray-800\"\n }\n }\n\n return (\n <div ref={ref} className={merge(\"relative\", className)} {...props}>\n {/* 트리거 */}\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n className=\"inline-block cursor-pointer\"\n >\n {trigger}\n </div>\n\n {/* 드롭다운 */}\n {isOpen && (\n <div\n ref={dropdownRef}\n className={merge(\n \"absolute z-50 bg-white dark:bg-gray-800 rounded-lg shadow-xl backdrop-blur-sm\", // 보더 대신 섀도우 사용\n \"min-w-[200px] py-2\", // 16px 패딩\n getPlacementClasses()\n )}\n style={{\n transform: `translate(${coords.x}px, ${coords.y}px)`,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\"\n }}\n >\n {/* 화살표 */}\n {showArrow && (\n <div\n className={merge(\n \"absolute w-0 h-0 border-4 border-transparent\",\n getArrowClasses()\n )}\n />\n )}\n \n {/* 내용 */}\n <div className=\"relative z-10\">\n {children}\n </div>\n </div>\n )}\n </div>\n )\n }\n)\nDropdown.displayName = \"Dropdown\"\n\n// 드롭다운 아이템 컴포넌트들\nexport interface DropdownItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n variant?: \"default\" | \"destructive\" | \"disabled\"\n}\n\nconst DropdownItem = React.forwardRef<HTMLButtonElement, DropdownItemProps>(\n ({ \n className, \n icon,\n variant = \"default\",\n children,\n disabled,\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"destructive\":\n return \"text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20\"\n case \"disabled\":\n return \"text-gray-400 dark:text-gray-500 cursor-not-allowed\"\n default:\n return \"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700\"\n }\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n \"w-full flex items-center gap-3 px-4 py-3 text-sm font-medium transition-colors focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-700\", // 16px, 12px 패딩\n getVariantClasses(),\n className\n )}\n disabled={disabled || variant === \"disabled\"}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nDropdownItem.displayName = \"DropdownItem\"\n\nexport interface DropdownSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownSeparator = React.forwardRef<HTMLDivElement, DropdownSeparatorProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"h-px bg-gray-200 dark:bg-gray-700 my-2\", className)} // 8px 여백\n {...props}\n />\n )\n)\nDropdownSeparator.displayName = \"DropdownSeparator\"\n\nexport interface DropdownLabelProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst DropdownLabel = React.forwardRef<HTMLDivElement, DropdownLabelProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"px-4 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide\", className)} // 16px, 8px 패딩\n {...props}\n >\n {children}\n </div>\n )\n)\nDropdownLabel.displayName = \"DropdownLabel\"\n\n// 편의 컴포넌트들\nconst DropdownMenu = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"py-1\", className)} // 4px 패딩\n {...props}\n >\n {children}\n </div>\n )\n)\nDropdownMenu.displayName = \"DropdownMenu\"\n\nconst DropdownGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-1\", className)} // 4px 간격\n {...props}\n >\n {children}\n </div>\n )\n)\nDropdownGroup.displayName = \"DropdownGroup\"\n\nexport { Dropdown, DropdownItem, DropdownSeparator, DropdownLabel, DropdownMenu, DropdownGroup } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * Drawer 컴포넌트의 props / Drawer component props\n * @typedef {Object} DrawerProps\n * @property {boolean} open - Drawer 열림/닫힘 상태 / Drawer open/close state\n * @property {(open: boolean) => void} onOpenChange - 상태 변경 콜백 / State change callback\n * @property {React.ReactNode} children - Drawer 내용 / Drawer content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"left\" | \"right\" | \"top\" | \"bottom\"} [side=\"right\"] - Drawer 표시 위치 / Drawer display position\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"} [size=\"md\"] - Drawer 크기 / Drawer size\n * @property {boolean} [showBackdrop=true] - 배경 오버레이 표시 여부 / Show backdrop overlay\n * @property {string} [backdropClassName] - 배경 오버레이 추가 CSS 클래스 / Backdrop overlay additional CSS class\n * @property {boolean} [closeOnBackdropClick=true] - 배경 클릭 시 닫기 여부 / Close on backdrop click\n * @property {boolean} [closeOnEscape=true] - ESC 키로 닫기 여부 / Close on ESC key\n */\ninterface DrawerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n className?: string\n side?: \"left\" | \"right\" | \"top\" | \"bottom\"\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"\n showBackdrop?: boolean\n backdropClassName?: string\n closeOnBackdropClick?: boolean\n closeOnEscape?: boolean\n}\n\n/**\n * Drawer 컴포넌트 / Drawer component\n * \n * 사이드에서 슬라이드되는 패널 컴포넌트입니다.\n * Modal과 유사하지만 특정 방향에서 슬라이드되는 애니메이션을 제공합니다.\n * ESC 키로 닫기, 배경 클릭으로 닫기 기능을 지원합니다.\n * \n * Panel component that slides from the side.\n * Similar to Modal but provides slide animation from a specific direction.\n * Supports closing with ESC key and backdrop click.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [open, setOpen] = useState(false)\n * \n * <Drawer open={open} onOpenChange={setOpen}>\n * <DrawerHeader>제목</DrawerHeader>\n * <DrawerContent>내용</DrawerContent>\n * <DrawerFooter>\n * <Button onClick={() => setOpen(false)}>닫기</Button>\n * </DrawerFooter>\n * </Drawer>\n * \n * @example\n * // 왼쪽에서 열기 / Open from left\n * <Drawer open={open} onOpenChange={setOpen} side=\"left\" size=\"lg\">\n * <DrawerContent>사이드바 내용</DrawerContent>\n * </Drawer>\n * \n * @param {DrawerProps} props - Drawer 컴포넌트의 props / Drawer component props\n * @param {React.Ref<HTMLDivElement>} ref - Drawer 컨테이너 ref / Drawer container ref\n * @returns {JSX.Element} Drawer 컴포넌트 / Drawer component\n * \n * @todo 접근성 개선: role=\"dialog\", aria-modal=\"true\" 추가 필요 / Accessibility: Add role=\"dialog\", aria-modal=\"true\"\n * @todo 접근성 개선: aria-labelledby, aria-describedby 연결 필요 / Accessibility: Connect aria-labelledby, aria-describedby\n */\nconst Drawer = React.forwardRef<HTMLDivElement, DrawerProps>(\n ({ \n open, \n onOpenChange, \n children, \n className,\n side = \"right\",\n size = \"md\",\n showBackdrop = true,\n backdropClassName,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n ...props \n }, ref) => {\n const [isVisible, setIsVisible] = React.useState(false)\n const [isAnimating, setIsAnimating] = React.useState(false)\n\n React.useEffect(() => {\n if (open) {\n setIsVisible(true)\n setIsAnimating(true)\n // 애니메이션 시작을 위한 지연\n const timer = setTimeout(() => setIsAnimating(false), 50)\n return () => clearTimeout(timer)\n } else {\n setIsAnimating(true)\n const timer = setTimeout(() => {\n setIsVisible(false)\n setIsAnimating(false)\n }, 300) // 애니메이션 완료 후 숨김\n return () => clearTimeout(timer)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!closeOnEscape) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && open) {\n onOpenChange(false)\n }\n }\n\n if (open) {\n document.addEventListener(\"keydown\", handleEscape)\n document.body.style.overflow = \"hidden\"\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape)\n document.body.style.overflow = \"\"\n }\n }, [open, closeOnEscape, onOpenChange])\n\n if (!isVisible) return null\n\n const sizeClasses = {\n sm: side === \"left\" || side === \"right\" ? \"w-80\" : \"h-64\",\n md: side === \"left\" || side === \"right\" ? \"w-96\" : \"h-96\",\n lg: side === \"left\" || side === \"right\" ? \"w-[28rem]\" : \"h-[32rem]\",\n xl: side === \"left\" || side === \"right\" ? \"w-[32rem]\" : \"h-[40rem]\",\n full: side === \"left\" || side === \"right\" ? \"w-full\" : \"h-full\"\n }\n\n const sideClasses = {\n left: \"left-0 top-0 h-full translate-x-0\",\n right: \"right-0 top-0 h-full translate-x-0\",\n top: \"top-0 left-0 w-full translate-y-0\",\n bottom: \"bottom-0 left-0 w-full translate-y-0\"\n }\n\n const transformClasses = {\n left: isAnimating ? (open ? \"translate-x-0\" : \"-translate-x-full\") : \"\",\n right: isAnimating ? (open ? \"translate-x-0\" : \"translate-x-full\") : \"\",\n top: isAnimating ? (open ? \"translate-y-0\" : \"-translate-y-full\") : \"\",\n bottom: isAnimating ? (open ? \"translate-y-0\" : \"translate-y-full\") : \"\"\n }\n\n return (\n <div className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n {showBackdrop && (\n <div\n className={merge(\n \"absolute inset-0 bg-black/60 backdrop-blur-md transition-opacity duration-300\",\n isAnimating ? (open ? \"opacity-100\" : \"opacity-0\") : \"\",\n backdropClassName\n )}\n onClick={closeOnBackdropClick ? () => onOpenChange(false) : undefined}\n />\n )}\n\n {/* Drawer Content */}\n <div\n ref={ref}\n className={merge(\n \"absolute bg-white/95 dark:!bg-gray-800/95 backdrop-blur-xl border border-gray-200/50 dark:!border-gray-600/50 shadow-2xl transition-transform duration-300 ease-out\",\n sizeClasses[size],\n sideClasses[side],\n transformClasses[side],\n className\n )}\n {...props}\n >\n {children}\n </div>\n </div>\n )\n }\n)\nDrawer.displayName = \"Drawer\"\n\n/**\n * DrawerHeader 컴포넌트의 props / DrawerHeader component props\n * @typedef {Object} DrawerHeaderProps\n * @property {React.ReactNode} children - 헤더 내용 / Header content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {boolean} [showCloseButton=true] - 닫기 버튼 표시 여부 / Show close button\n * @property {() => void} [onClose] - 닫기 버튼 클릭 콜백 / Close button click callback\n */\ninterface DrawerHeaderProps {\n children: React.ReactNode\n className?: string\n showCloseButton?: boolean\n onClose?: () => void\n}\n\n/**\n * DrawerHeader 컴포넌트 / DrawerHeader component\n * Drawer의 헤더 영역을 표시합니다.\n * Displays the header area of a Drawer.\n * \n * @component\n * @param {DrawerHeaderProps} props - DrawerHeader 컴포넌트의 props / DrawerHeader component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} DrawerHeader 컴포넌트 / DrawerHeader component\n */\nconst DrawerHeader = React.forwardRef<HTMLDivElement, DrawerHeaderProps>(\n ({ children, className, showCloseButton = true, onClose, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\"flex items-center justify-between p-6 border-b border-gray-200/50 dark:border-gray-700/50\", className)}\n {...props}\n >\n <div className=\"flex-1\">{children}</div>\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"p-2 rounded-lg hover:bg-gray-100/80 dark:hover:bg-gray-800/80 transition-colors\"\n >\n <Icon name=\"close\" size={20} />\n </button>\n )}\n </div>\n )\n }\n)\nDrawerHeader.displayName = \"DrawerHeader\"\n\n/**\n * DrawerContent 컴포넌트의 props / DrawerContent component props\n * @typedef {Object} DrawerContentProps\n * @property {React.ReactNode} children - 콘텐츠 / Content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\ninterface DrawerContentProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * DrawerContent 컴포넌트 / DrawerContent component\n * Drawer의 메인 콘텐츠 영역을 표시합니다.\n * Displays the main content area of a Drawer.\n * \n * @component\n * @param {DrawerContentProps} props - DrawerContent 컴포넌트의 props / DrawerContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} DrawerContent 컴포넌트 / DrawerContent component\n */\nconst DrawerContent = React.forwardRef<HTMLDivElement, DrawerContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\"flex-1 p-6 overflow-y-auto\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nDrawerContent.displayName = \"DrawerContent\"\n\n/**\n * DrawerFooter 컴포넌트의 props / DrawerFooter component props\n * @typedef {Object} DrawerFooterProps\n * @property {React.ReactNode} children - 푸터 내용 / Footer content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\ninterface DrawerFooterProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * DrawerFooter 컴포넌트 / DrawerFooter component\n * Drawer의 푸터 영역을 표시합니다. 주로 액션 버튼을 배치합니다.\n * Displays the footer area of a Drawer. Typically used for action buttons.\n * \n * @component\n * @param {DrawerFooterProps} props - DrawerFooter 컴포넌트의 props / DrawerFooter component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} DrawerFooter 컴포넌트 / DrawerFooter component\n */\nconst DrawerFooter = React.forwardRef<HTMLDivElement, DrawerFooterProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\"flex items-center justify-end gap-3 p-6 border-t border-gray-200/50 dark:border-gray-700/50\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nDrawerFooter.displayName = \"DrawerFooter\"\n\nexport { Drawer, DrawerHeader, DrawerContent, DrawerFooter } "]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function i(...t){return twMerge(clsx(t))}function m(t,e,o){return i(t?e:o||"")}function p(t,e="ko-KR"){let o=typeof t=="string"?new Date(t):t,r=new Date().getTime()-o.getTime(),n=Math.floor(r/6e4),s=Math.floor(r/36e5),a=Math.floor(r/864e5);return n<1?e==="ko-KR"?"\uBC29\uAE08 \uC804":"just now":n<60?e==="ko-KR"?`${n}\uBD84 \uC804`:`${n}m ago`:s<24?e==="ko-KR"?`${s}\uC2DC\uAC04 \uC804`:`${s}h ago`:a<7?e==="ko-KR"?`${a}\uC77C \uC804`:`${a}d ago`:o.toLocaleDateString(e)}function d(t){let e=Object.entries(t).filter(([,o])=>o).map(([o])=>o);return i(...e)}var R=i;export{i as a,m as b,p as c,d,R as e};//# sourceMappingURL=chunk-UUHAXGMO.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-UUHAXGMO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts"],"names":["merge","inputs","twMerge","clsx","mergeIf","condition","trueClass","falseClass","formatRelativeTime","timestamp","locale","date","diff","minutes","hours","days","mergeMap","classMap","classes","className","cn"],"mappings":"6DAiBO,SAASA,CAAAA,CAAAA,GAASC,EAAsB,CAC7C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CAiBO,SAASG,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACA,CACA,OAAOP,CAAAA,CAAMK,CAAAA,CAAYC,CAAAA,CAAYC,GAAc,EAAE,CACvD,CAwBO,SAASC,EAAmBC,CAAAA,CAA0BC,CAAAA,CAAS,OAAA,CAAiB,CACrF,IAAMC,CAAAA,CAAO,OAAOF,CAAAA,EAAc,SAAW,IAAI,IAAA,CAAKA,CAAS,CAAA,CAAIA,EAE7DG,CAAAA,CADM,IAAI,IAAA,EAAK,CACJ,SAAQ,CAAID,CAAAA,CAAK,OAAA,EAAQ,CACpCE,CAAAA,CAAU,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAO,GAAK,CAAA,CACjCE,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAMF,EAAO,IAAO,CAAA,CACjCG,CAAAA,CAAO,IAAA,CAAK,MAAMH,CAAAA,CAAO,KAAQ,CAAA,CAEvC,OAAIC,CAAAA,CAAU,CAAA,CAAUH,CAAAA,GAAW,OAAA,CAAU,sBAAS,UAAA,CAClDG,CAAAA,CAAU,EAAA,CAAWH,CAAAA,GAAW,QAAU,CAAA,EAAGG,CAAO,CAAA,aAAA,CAAA,CAAQ,CAAA,EAAGA,CAAO,CAAA,KAAA,CAAA,CACtEC,CAAAA,CAAQ,EAAA,CAAWJ,CAAAA,GAAW,OAAA,CAAU,CAAA,EAAGI,CAAK,CAAA,mBAAA,CAAA,CAAS,GAAGA,CAAK,CAAA,KAAA,CAAA,CACjEC,CAAAA,CAAO,CAAA,CAAUL,IAAW,OAAA,CAAU,CAAA,EAAGK,CAAI,CAAA,aAAA,CAAA,CAAQ,GAAGA,CAAI,CAAA,KAAA,CAAA,CACzDJ,CAAAA,CAAK,kBAAA,CAAmBD,CAAM,CACvC,CAmBO,SAASM,EAASC,CAAAA,CAAsD,CAC7E,IAAMC,CAAAA,CAAU,OAAO,OAAA,CAAQD,CAAQ,CAAA,CACpC,MAAA,CAAO,CAAC,EAAGZ,CAAS,CAAA,GAAMA,CAAS,CAAA,CACnC,GAAA,CAAI,CAAC,CAACc,CAAS,CAAA,GAAMA,CAAS,CAAA,CAEjC,OAAOnB,EAAM,GAAGkB,CAAO,CACzB,KAGaE,CAAAA,CAAKpB","file":"chunk-UUHAXGMO.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\n/**\n * HUA UI의 스마트 클래스 병합 유틸리티\n * clsx와 tailwind-merge를 결합하여 중복 클래스를 자동으로 해결합니다.\n * \n * @param inputs - 병합할 클래스 값들\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * merge(\"px-2 py-1\", \"px-4\") // \"py-1 px-4\"\n * merge(\"text-red-500\", \"text-blue-500\") // \"text-blue-500\"\n * merge(\"bg-white\", \"dark:bg-slate-900\") // \"bg-white dark:bg-slate-900\"\n * ```\n */\nexport function merge(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/**\n * 조건부 클래스 병합 유틸리티\n * 조건에 따라 클래스를 선택적으로 병합합니다.\n * \n * @param condition - 클래스를 적용할 조건\n * @param trueClass - 조건이 true일 때 적용할 클래스\n * @param falseClass - 조건이 false일 때 적용할 클래스 (선택사항)\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * mergeIf(isActive, \"bg-blue-500\", \"bg-gray-200\")\n * mergeIf(isLoading, \"opacity-50 cursor-not-allowed\")\n * ```\n */\nexport function mergeIf(\n condition: boolean,\n trueClass: ClassValue,\n falseClass?: ClassValue\n) {\n return merge(condition ? trueClass : falseClass || \"\")\n}\n\n/**\n * 상대 시간 포맷팅 유틸리티\n * \n * 날짜를 상대 시간 형식으로 포맷팅합니다 (예: \"방금 전\", \"5분 전\", \"2시간 전\", \"3일 전\").\n * 7일 이상 경과한 경우 절대 날짜를 반환합니다.\n * \n * Formats a date as relative time (e.g., \"방금 전\", \"5분 전\", \"2시간 전\", \"3일 전\").\n * Returns absolute date for dates older than 7 days.\n * \n * @param timestamp - 포맷팅할 날짜 (Date 객체 또는 ISO 문자열) / Date to format (Date object or ISO string)\n * @param locale - 로케일 (기본값: \"ko-KR\") / Locale (default: \"ko-KR\")\n * @returns 포맷팅된 상대 시간 문자열 / Formatted relative time string\n * \n * @example\n * ```tsx\n * formatRelativeTime(new Date()) // \"방금 전\"\n * formatRelativeTime(new Date(Date.now() - 5 * 60000)) // \"5분 전\"\n * formatRelativeTime(new Date(Date.now() - 2 * 3600000)) // \"2시간 전\"\n * formatRelativeTime(new Date(Date.now() - 3 * 86400000)) // \"3일 전\"\n * formatRelativeTime(new Date(\"2024-01-01\")) // \"2024. 1. 1.\" (7일 이상 경과)\n * ```\n */\nexport function formatRelativeTime(timestamp: Date | string, locale = \"ko-KR\"): string {\n const date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return locale === \"ko-KR\" ? \"방금 전\" : \"just now\";\n if (minutes < 60) return locale === \"ko-KR\" ? `${minutes}분 전` : `${minutes}m ago`;\n if (hours < 24) return locale === \"ko-KR\" ? `${hours}시간 전` : `${hours}h ago`;\n if (days < 7) return locale === \"ko-KR\" ? `${days}일 전` : `${days}d ago`;\n return date.toLocaleDateString(locale);\n}\n\n/**\n * 객체 기반 클래스 병합 유틸리티\n * 객체의 키-값 쌍을 기반으로 조건부 클래스를 병합합니다.\n * \n * @param classMap - 클래스 맵 객체\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * mergeMap({\n * \"bg-blue-500\": isPrimary,\n * \"bg-gray-500\": !isPrimary,\n * \"text-white\": true,\n * \"opacity-50\": isDisabled\n * })\n * ```\n */\nexport function mergeMap(classMap: Record<string, boolean | undefined | null>) {\n const classes = Object.entries(classMap)\n .filter(([, condition]) => condition)\n .map(([className]) => className)\n \n return merge(...classes)\n}\n\n// 하위 호환성을 위해 cn도 export (점진적 마이그레이션 지원)\nexport const cn = merge "]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {l}from'./chunk-DMYT7RZ4.mjs';import {a}from'./chunk-UUHAXGMO.mjs';import u from'react';import {jsx,jsxs}from'react/jsx-runtime';var D=u.forwardRef(({className:r,size:e="md",variant:t="default",src:o,alt:l,children:n,...m},g)=>{let k={sm:"w-8 h-8",md:"w-10 h-10",lg:"w-12 h-12"},p={default:"",glass:"ring-2 ring-white/30 backdrop-blur-sm"};return jsx("div",{ref:g,className:a("relative flex shrink-0 overflow-hidden rounded-full",k[e],p[t],r),...m,children:o?jsx(T,{src:o,alt:l||"avatar"}):jsx(R,{children:n||(l?l.charAt(0).toUpperCase():"U")})})});D.displayName="Avatar";var T=u.forwardRef(({className:r,...e},t)=>jsx("img",{ref:t,className:a("aspect-square h-full w-full object-cover object-center",r),...e}));T.displayName="AvatarImage";var R=u.forwardRef(({className:r,...e},t)=>jsx("div",{ref:t,className:a("flex h-full w-full items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400 font-medium",r),...e}));R.displayName="AvatarFallback";var B=u.forwardRef(({className:r,variant:e="default",...t},o)=>jsx("div",{ref:o,className:a("rounded-lg p-6",{default:"bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700",outline:"bg-transparent border-2 border-slate-300 dark:border-slate-600",elevated:"bg-white dark:bg-slate-800 shadow-lg border border-slate-200 dark:border-slate-700"}[e],r),...t}));B.displayName="Card";var I=u.forwardRef(({className:r,...e},t)=>jsx("div",{ref:t,className:a("flex flex-col space-y-1.5 p-6",r),...e}));I.displayName="CardHeader";var P=u.forwardRef(({className:r,...e},t)=>jsx("h3",{ref:t,className:a("text-2xl font-semibold leading-none tracking-tight",r),...e}));P.displayName="CardTitle";var F=u.forwardRef(({className:r,...e},t)=>jsx("p",{ref:t,className:a("text-sm text-slate-500 dark:text-slate-400",r),...e}));F.displayName="CardDescription";var j=u.forwardRef(({className:r,...e},t)=>jsx("div",{ref:t,className:a("p-6 pt-0",r),...e}));j.displayName="CardContent";var z=u.forwardRef(({className:r,...e},t)=>jsx("div",{ref:t,className:a("flex items-center p-6 pt-0",r),...e}));z.displayName="CardFooter";var M=u.forwardRef(({className:r,children:e,items:t,maxItems:o,showHomeIcon:l$1,homeLabel:n="Home",separator:m=jsx(l,{name:"chevronRight",className:"w-3 h-3 text-slate-400 dark:text-slate-500 flex-shrink-0"}),variant:g="default",...k},p)=>{let C={default:"inline-flex items-center text-sm w-fit",subtle:"inline-flex items-center text-xs bg-white/40 dark:bg-slate-800/40 backdrop-blur-md rounded-md px-3 py-2 border border-slate-200/30 dark:border-white/20 w-fit shadow-sm",transparent:"inline-flex items-center text-xs w-fit",glass:"inline-flex items-center text-xs bg-white/30 dark:bg-slate-800/30 backdrop-blur-lg rounded-lg px-4 py-2 border border-slate-200/25 dark:border-white/15 w-fit shadow-lg"},f=(()=>{if(t){let d=[...t];if(o&&d.length>o){let i=d[0],L=d.slice(-(o-1));d=[i,{label:"...",href:void 0},...L];}return d.map((i,L)=>{let E=L===d.length-1&&!i.href;return jsxs(w,{href:i.href,isCurrent:E,children:[i.icon&&jsx(l,{name:i.icon,className:"w-4 h-4 mr-1"}),i.label]},L)})}return e?u.Children.map(e,(d,i)=>u.isValidElement(d)?jsxs("li",{className:"flex items-center",children:[d,i<u.Children.count(e)-1&&jsx("span",{className:"mx-3 text-slate-400 dark:text-slate-500 flex items-center justify-center","aria-hidden":"true",children:m})]},i):d):null})(),A=t?t.length:e?u.Children.count(e):0;return jsx("nav",{ref:p,"aria-label":"Breadcrumb",className:a(C[g],r),...k,children:jsxs("ol",{className:"inline-flex items-center",children:[l$1&&jsxs("li",{className:"flex items-center",children:[jsxs(w,{href:"/",children:[jsx(l,{name:"home",className:"w-4 h-4 mr-1"}),n]}),A>0&&jsx("span",{className:"mx-3 text-slate-400 dark:text-slate-500 flex items-center justify-center","aria-hidden":"true",children:m})]}),t?f==null?void 0:f.map((d,i)=>jsxs("li",{className:"flex items-center",children:[d,i<((f==null?void 0:f.length)||0)-1&&jsx("span",{className:"mx-3 text-slate-400 dark:text-slate-500 flex items-center justify-center","aria-hidden":"true",children:m})]},i)):f]})})});M.displayName="Breadcrumb";var w=u.forwardRef(({className:r,href:e,isCurrent:t=false,children:o,...l},n)=>t?jsx("span",{ref:n,"aria-current":"page",className:a("text-slate-500 dark:text-slate-400 font-medium",r),...l,children:o}):e?jsx("a",{href:e,className:a("text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300 transition-colors",r),...l,children:o}):jsx("span",{ref:n,className:a("text-slate-400 dark:text-slate-500",r),...l,children:o}));w.displayName="BreadcrumbItem";var U=u.forwardRef(({className:r,title:e,description:t,children:o,prevPage:l,nextPage:n,breadcrumbItems:m=[{label:"Components",href:"/components"}],...g},k)=>jsxs("div",{className:"relative min-h-screen",children:[jsx("div",{className:"fixed right-4 top-4 z-50 hidden lg:block",children:jsx("div",{className:"flex flex-col space-y-4",children:l&&jsx("a",{href:l.href,className:"group p-3 bg-white/80 backdrop-blur-sm border border-slate-200 rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200",title:`\uC774\uC804: ${l.title}`,children:jsx("svg",{className:"w-5 h-5 text-slate-600 group-hover:text-blue-600 group-active:text-blue-800 transition-colors",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 15l7-7 7 7"})})})})}),jsx("div",{className:"fixed right-4 bottom-4 z-50 hidden lg:block",children:jsx("div",{className:"flex flex-col space-y-4",children:n&&jsx("a",{href:n.href,className:"group p-3 bg-white/80 backdrop-blur-sm border border-slate-200 rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200",title:`\uB2E4\uC74C: ${n.title}`,children:jsx("svg",{className:"w-5 h-5 text-slate-600 group-hover:text-blue-600 group-active:text-blue-800 transition-colors",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})})})}),jsx("div",{ref:k,className:a("container mx-auto px-4 py-8",r),...g,children:jsxs("div",{className:"max-w-4xl mx-auto",children:[jsx(M,{className:"mb-6",children:m.map((p,C)=>jsx(w,{href:p.href,isCurrent:C===m.length-1,children:p.label},C))}),jsxs("div",{className:"mb-8",children:[jsx("h1",{className:"text-4xl font-bold mb-4",children:e}),jsx("p",{className:"text-lg text-slate-600 dark:text-slate-400",children:t})]}),jsx("div",{className:"space-y-8",children:o}),jsx("div",{className:"mt-12 lg:hidden",children:jsxs("div",{className:"flex items-center justify-between py-4 border-t border-slate-200 dark:border-slate-700",children:[l&&jsxs("a",{href:l.href,className:"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("svg",{className:"w-4 h-4 mr-2",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.title]}),n&&jsxs("a",{href:n.href,className:"flex items-center text-sm text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100 transition-colors",children:[n.title,jsx("svg",{className:"w-4 h-4 ml-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})]})]})})]})})]}));U.displayName="ComponentLayout";export{D as a,T as b,R as c,B as d,I as e,P as f,F as g,j as h,z as i,M as j,w as k,U as l};//# sourceMappingURL=chunk-VPOFRDYL.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-VPOFRDYL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Avatar.tsx","../src/components/Card.tsx","../src/components/Breadcrumb.tsx","../src/components/ComponentLayout.tsx"],"names":["Avatar","React","className","size","variant","src","alt","children","props","ref","sizeClasses","variantClasses","jsx","merge","AvatarImage","AvatarFallback","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Breadcrumb","items","maxItems","showHomeIcon","homeLabel","separator","Icon","variantStyles","renderedItems","displayItems","firstItem","lastItems","item","index","isCurrent","jsxs","BreadcrumbItem","child","itemsCount","href","ComponentLayout","title","description","prevPage","nextPage","breadcrumbItems"],"mappings":"wIA6DA,IAAMA,CAAAA,CAASC,CAAAA,CAAM,UAAA,CACnB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,IAAA,CAAAC,CAAAA,CAAO,IAAA,CAAM,OAAA,CAAAC,CAAAA,CAAU,SAAA,CAAW,GAAA,CAAAC,CAAAA,CAAK,GAAA,CAAAC,CAAAA,CAAK,QAAA,CAAAC,CAAAA,CAAU,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACtF,IAAMC,CAAAA,CAAc,CAClB,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,WACN,CAAA,CAEMC,CAAAA,CAAiB,CACrB,OAAA,CAAS,EAAA,CACT,KAAA,CAAO,uCACT,CAAA,CAEA,OACEC,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CACT,qDAAA,CACAH,CAAAA,CAAYP,CAAI,CAAA,CAChBQ,CAAAA,CAAeP,CAAO,CAAA,CACtBF,CACF,CAAA,CACC,GAAGM,CAAAA,CAEH,QAAA,CAAAH,CAAAA,CACCO,GAAAA,CAACE,CAAAA,CAAA,CAAY,GAAA,CAAKT,CAAAA,CAAK,GAAA,CAAKC,CAAAA,EAAO,QAAA,CAAU,CAAA,CAE7CM,GAAAA,CAACG,CAAAA,CAAA,CACE,QAAA,CAAAR,CAAAA,GAAaD,CAAAA,CAAMA,CAAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAI,GAAA,CAAA,CACpD,CAAA,CAEJ,CAEJ,CACF,EACAN,CAAAA,CAAO,WAAA,CAAc,QAAA,CAarB,IAAMc,CAAAA,CAAcb,CAAAA,CAAM,UAAA,CACxB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CAAM,wDAAA,CAA0DX,CAAS,CAAA,CACnF,GAAGM,CAAAA,CACN,CAEJ,EACAM,CAAAA,CAAY,WAAA,CAAc,aAAA,KAapBC,CAAAA,CAAiBd,CAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CACT,uIAAA,CACAX,CACF,CAAA,CACC,GAAGM,CAAAA,CACN,CAEJ,EACAO,CAAAA,CAAe,WAAA,CAAc,gBAAA,CC7F7B,IAAMC,CAAAA,CAAOf,CAAAA,CAAM,UAAA,CACjB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,OAAA,CAAAE,CAAAA,CAAU,SAAA,CAAW,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAQ3CG,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CACT,gBAAA,CAViB,CACrB,OAAA,CAAS,0EAAA,CACT,OAAA,CAAS,gEAAA,CACT,QAAA,CAAU,oFACZ,EAOqBT,CAAO,CAAA,CACtBF,CACF,CAAA,CACC,GAAGM,CAAAA,CACN,CAGN,EAEAQ,CAAAA,CAAK,WAAA,CAAc,MAAA,CAmBnB,IAAMC,CAAAA,CAAahB,CAAAA,CAAM,UAAA,CACvB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CAAM,+BAAA,CAAiCX,CAAS,CAAA,CAC1D,GAAGM,CAAAA,CACN,CAEJ,EAEAS,CAAAA,CAAW,WAAA,CAAc,YAAA,CAmBzB,IAAMC,CAAAA,CAAYjB,CAAAA,CAAM,UAAA,CACtB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CACT,oDAAA,CACAX,CACF,CAAA,CACC,GAAGM,CAAAA,CACN,CAEJ,EAEAU,CAAAA,CAAU,WAAA,CAAc,WAAA,CAmBxB,IAAMC,CAAAA,CAAkBlB,CAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CAAM,4CAAA,CAA8CX,CAAS,CAAA,CACvE,GAAGM,CAAAA,CACN,CAEJ,EAEAW,CAAAA,CAAgB,WAAA,CAAc,iBAAA,CAmB9B,IAAMC,CAAAA,CAAcnB,CAAAA,CAAM,UAAA,CACxB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKH,CAAAA,CAAK,SAAA,CAAWI,CAAAA,CAAM,UAAA,CAAYX,CAAS,CAAA,CAAI,GAAGM,CAAAA,CAAO,CAEvE,EAEAY,CAAAA,CAAY,WAAA,CAAc,aAAA,CAmB1B,IAAMC,CAAAA,CAAapB,EAAM,UAAA,CACvB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACxBG,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CAAM,4BAAA,CAA8BX,CAAS,CAAA,CACvD,GAAGM,CAAAA,CACN,CAEJ,EAEAa,CAAAA,CAAW,WAAA,CAAc,YAAA,CCvIzB,IAAMC,CAAAA,CAAarB,CAAAA,CAAM,UAAA,CACvB,CAAC,CACC,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAK,CAAAA,CACA,KAAA,CAAAgB,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,GAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,MAAA,CACZ,SAAA,CAAAC,CAAAA,CAAYf,GAAAA,CAACgB,CAAAA,CAAA,CAAK,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,0DAAA,CAA2D,CAAA,CAC3G,QAAAxB,CAAAA,CAAU,SAAA,CACV,GAAGI,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAMoB,CAAAA,CAAgB,CACpB,OAAA,CAAS,wCAAA,CACT,MAAA,CAAQ,yKAAA,CACR,WAAA,CAAa,wCAAA,CACb,KAAA,CAAO,yKACT,CAAA,CAwDMC,CAAAA,CAAAA,CArDc,IAAM,CACxB,GAAIP,CAAAA,CAAO,CACT,IAAIQ,CAAAA,CAAe,CAAC,GAAGR,CAAK,CAAA,CAG5B,GAAIC,CAAAA,EAAYO,CAAAA,CAAa,MAAA,CAASP,CAAAA,CAAU,CAC9C,IAAMQ,CAAAA,CAAYD,CAAAA,CAAa,CAAC,CAAA,CAC1BE,CAAAA,CAAYF,CAAAA,CAAa,KAAA,CAAM,EAAEP,CAAAA,CAAW,CAAA,CAAE,CAAA,CACpDO,CAAAA,CAAe,CAACC,CAAAA,CAAW,CAAE,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,MAAU,CAAA,CAAG,GAAGC,CAAS,EAC5E,CAGA,OAAOF,CAAAA,CAAa,GAAA,CAAI,CAACG,CAAAA,CAAMC,CAAAA,GAAU,CAEvC,IAAMC,CAAAA,CADSD,CAAAA,GAAUJ,CAAAA,CAAa,MAAA,CAAS,CAAA,EACnB,CAACG,CAAAA,CAAK,IAAA,CAElC,OACEG,IAAAA,CAACC,CAAAA,CAAA,CAEC,IAAA,CAAMJ,CAAAA,CAAK,IAAA,CACX,SAAA,CAAWE,CAAAA,CAEV,QAAA,CAAA,CAAAF,CAAAA,CAAK,IAAA,EACJtB,GAAAA,CAACgB,CAAAA,CAAA,CAAK,IAAA,CAAMM,CAAAA,CAAK,IAAA,CAAa,SAAA,CAAU,cAAA,CAAe,CAAA,CAExDA,CAAAA,CAAK,KAAA,CAAA,CAAA,CAPDC,CAQP,CAEJ,CAAC,CACH,CAGA,OAAI5B,CAAAA,CACKN,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAIM,CAAAA,CAAU,CAACgC,CAAAA,CAAOJ,CAAAA,GACtClC,CAAAA,CAAM,cAAA,CAAesC,CAAK,CAAA,CAE1BF,IAAAA,CAAC,IAAA,CAAA,CAAe,SAAA,CAAU,mBAAA,CACvB,QAAA,CAAA,CAAAE,CAAAA,CACAJ,CAAAA,CAAQlC,EAAM,QAAA,CAAS,KAAA,CAAMM,CAAQ,CAAA,CAAI,CAAA,EACxCK,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0EAAA,CAA2E,aAAA,CAAY,MAAA,CACpG,QAAA,CAAAe,CAAAA,CACH,CAAA,CAAA,CAAA,CALKQ,CAOT,CAAA,CAGGI,CACR,CAAA,CAGI,IACT,CAAA,GAEkC,CAC5BC,CAAAA,CAAajB,CAAAA,CAAQA,CAAAA,CAAM,MAAA,CAAUhB,CAAAA,CAAWN,CAAAA,CAAM,QAAA,CAAS,KAAA,CAAMM,CAAQ,CAAA,CAAI,CAAA,CAEvF,OACEK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,YAAA,CAAW,YAAA,CACX,SAAA,CAAWI,CAAAA,CAAMgB,CAAAA,CAAczB,CAAO,CAAA,CAAGF,CAAS,CAAA,CACjD,GAAGM,CAAAA,CAEJ,QAAA,CAAA6B,IAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,0BAAA,CACX,QAAA,CAAA,CAAAZ,GAAAA,EACCY,IAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mBAAA,CACZ,QAAA,CAAA,CAAAA,IAAAA,CAACC,CAAAA,CAAA,CAAe,IAAA,CAAK,GAAA,CACnB,QAAA,CAAA,CAAA1B,GAAAA,CAACgB,CAAAA,CAAA,CAAK,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,CAAA,CAC1CF,CAAAA,CAAAA,CACH,CAAA,CACCc,CAAAA,CAAa,CAAA,EACZ5B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0EAAA,CAA2E,aAAA,CAAY,MAAA,CACpG,QAAA,CAAAe,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAEDJ,CAAAA,CACCO,CAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAAe,GAAA,CAAI,CAACI,CAAAA,CAAMC,CAAAA,GACxBE,IAAAA,CAAC,IAAA,CAAA,CAAe,SAAA,CAAU,mBAAA,CACvB,QAAA,CAAA,CAAAH,CAAAA,CACAC,CAAAA,CAAAA,CAAAA,CAASL,CAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAAe,MAAA,GAAU,CAAA,EAAK,CAAA,EACtClB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0EAAA,CAA2E,aAAA,CAAY,MAAA,CACpG,QAAA,CAAAe,CAAAA,CACH,CAAA,CAAA,CAAA,CALKQ,CAOT,CAAA,CAAA,CAGFL,CAAAA,CAAAA,CAEJ,CAAA,CACF,CAEJ,CACF,EACAR,EAAW,WAAA,CAAc,YAAA,CAWzB,IAAMgB,CAAAA,CAAiBrC,CAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,IAAA,CAAAuC,CAAAA,CAAM,SAAA,CAAAL,CAAAA,CAAY,KAAA,CAAO,QAAA,CAAA7B,CAAAA,CAAU,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GACvD2B,CAAAA,CAEAxB,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,cAAA,CAAa,MAAA,CACb,SAAA,CAAWI,CAAAA,CACT,gDAAA,CACAX,CACF,CAAA,CACC,GAAGM,CAAAA,CAEH,QAAA,CAAAD,CAAAA,CACH,CAAA,CAIAkC,CAAAA,CAEA7B,GAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAM6B,CAAAA,CACN,SAAA,CAAW5B,CAAAA,CACT,qGAAA,CACAX,CACF,CAAA,CACC,GAAGM,CAAAA,CAEH,QAAA,CAAAD,CAAAA,CACH,CAAA,CAKFK,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CACT,oCAAA,CACAX,CACF,CAAA,CACC,GAAGM,CAAAA,CAEH,QAAA,CAAAD,CAAAA,CACH,CAGN,EACA+B,CAAAA,CAAe,WAAA,CAAc,gBAAA,CCpL7B,IAAMI,CAAAA,CAAkBzC,CAAAA,CAAM,UAAA,CAC5B,CAAC,CACC,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAyC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,QAAA,CAAArC,CAAAA,CACA,QAAA,CAAAsC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAAkB,CAChB,CAAE,KAAA,CAAO,YAAA,CAAc,IAAA,CAAM,aAAc,CAC7C,CAAA,CACA,GAAGvC,CACL,CAAA,CAAGC,CAAAA,GAEC4B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CAEb,QAAA,CAAA,CAAAzB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,SAAAiC,CAAAA,EACiBjC,GAAAA,CAAC,GAAA,CAAA,CACb,IAAA,CAAMiC,CAAAA,CAAS,IAAA,CACf,SAAA,CAAU,sKAAA,CACV,KAAA,CAAO,CAAA,cAAA,EAAOA,CAAAA,CAAS,KAAK,CAAA,CAAA,CAE5B,QAAA,CAAAjC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+FAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,eAAA,CAAgB,CAAA,CACvF,CAAA,CACF,CAAA,CAEN,CAAA,CACF,CAAA,CAGAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAAkC,CAAAA,EACiBlC,GAAAA,CAAC,GAAA,CAAA,CACb,IAAA,CAAMkC,CAAAA,CAAS,IAAA,CACf,SAAA,CAAU,sKAAA,CACV,KAAA,CAAO,CAAA,cAAA,EAAOA,CAAAA,CAAS,KAAK,GAE5B,QAAA,CAAAlC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,+FAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CACF,CAAA,CAEN,CAAA,CACF,CAAA,CAGAA,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWI,CAAAA,CAAM,6BAAA,CAA+BX,CAAS,CAAA,CACxD,GAAGM,CAAAA,CAEJ,QAAA,CAAA6B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBAAA,CAEb,QAAA,CAAA,CAAAzB,GAAAA,CAACU,CAAAA,CAAA,CAAW,SAAA,CAAU,MAAA,CACnB,QAAA,CAAAyB,CAAAA,CAAgB,GAAA,CAAI,CAACb,CAAAA,CAAMC,CAAAA,GAC1BvB,GAAAA,CAAC0B,CAAAA,CAAA,CAEC,IAAA,CAAMJ,CAAAA,CAAK,IAAA,CACX,SAAA,CAAWC,IAAUY,CAAAA,CAAgB,MAAA,CAAS,CAAA,CAE7C,QAAA,CAAAb,CAAAA,CAAK,KAAA,CAAA,CAJDC,CAKP,CACD,CAAA,CACH,CAAA,CAGAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,MAAA,CACb,QAAA,CAAA,CAAAzB,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,yBAAA,CAA2B,QAAA,CAAA+B,CAAAA,CAAM,CAAA,CAC/C/B,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,4CAAA,CACV,QAAA,CAAAgC,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CAGAhC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAAL,CAAAA,CACH,CAAA,CAGAK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAAyB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wFAAA,CACZ,QAAA,CAAA,CAAAQ,CAAAA,EACCR,IAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAMQ,CAAAA,CAAS,IAAA,CACf,SAAA,CAAU,+HAAA,CAEV,QAAA,CAAA,CAAAjC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACtE,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,iBAAA,CAAkB,CAAA,CACzF,CAAA,CACCiC,CAAAA,CAAS,KAAA,CAAA,CACZ,CAAA,CAEDC,CAAAA,EACCT,IAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAMS,CAAAA,CAAS,IAAA,CACf,SAAA,CAAU,+HAAA,CAET,QAAA,CAAA,CAAAA,CAAAA,CAAS,KAAA,CACVlC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACtE,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,cAAA,CAAe,CAAA,CACtF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAGN,EACA8B,CAAAA,CAAgB,WAAA,CAAc,iBAAA","file":"chunk-VPOFRDYL.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Avatar 컴포넌트의 props / Avatar component props\n * @typedef {Object} AvatarProps\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 아바타 크기 / Avatar size\n * @property {\"default\" | \"glass\"} [variant=\"default\"] - 아바타 스타일 변형 / Avatar style variant\n * @property {string} [src] - 이미지 URL / Image URL\n * @property {string} [alt] - 이미지 대체 텍스트 / Image alt text\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"glass\"\n src?: string\n alt?: string\n}\n\n/**\n * AvatarImage 컴포넌트의 props\n * @typedef {Object} AvatarImageProps\n * @extends {React.ImgHTMLAttributes<HTMLImageElement>}\n */\nexport interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {}\n\n/**\n * AvatarFallback 컴포넌트의 props\n * @typedef {Object} AvatarFallbackProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface AvatarFallbackProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Avatar 컴포넌트 / Avatar component\n * \n * 사용자 프로필 이미지를 표시하는 컴포넌트입니다.\n * 이미지가 없을 경우 대체 텍스트나 초기 문자를 표시합니다.\n * \n * Component for displaying user profile images.\n * Shows fallback text or initials when image is not available.\n * \n * @component\n * @example\n * // 기본 사용 (이미지) / Basic usage (with image)\n * <Avatar src=\"/user.jpg\" alt=\"사용자\" />\n * \n * @example\n * // 대체 텍스트 / Fallback text\n * <Avatar alt=\"홍길동\">홍</Avatar>\n * \n * @example\n * // Glass 스타일 / Glass style\n * <Avatar variant=\"glass\" size=\"lg\" src=\"/user.jpg\" alt=\"사용자\" />\n * \n * @param {AvatarProps} props - Avatar 컴포넌트의 props / Avatar component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Avatar 컴포넌트 / Avatar component\n */\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, size = \"md\", variant = \"default\", src, alt, children, ...props }, ref) => {\n const sizeClasses = {\n sm: \"w-8 h-8\",\n md: \"w-10 h-10\", \n lg: \"w-12 h-12\"\n }\n\n const variantClasses = {\n default: \"\",\n glass: \"ring-2 ring-white/30 backdrop-blur-sm\"\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"relative flex shrink-0 overflow-hidden rounded-full\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n {...props}\n >\n {src ? (\n <AvatarImage src={src} alt={alt || \"avatar\"} />\n ) : (\n <AvatarFallback>\n {children || (alt ? alt.charAt(0).toUpperCase() : \"U\")}\n </AvatarFallback>\n )}\n </div>\n )\n }\n)\nAvatar.displayName = \"Avatar\"\n\n/**\n * AvatarImage 컴포넌트 / AvatarImage component\n * \n * 아바타 이미지를 표시하는 컴포넌트입니다.\n * Displays the avatar image.\n * \n * @component\n * @param {AvatarImageProps} props - AvatarImage 컴포넌트의 props / AvatarImage component props\n * @param {React.Ref<HTMLImageElement>} ref - img 요소 ref / img element ref\n * @returns {JSX.Element} AvatarImage 컴포넌트 / AvatarImage component\n */\nconst AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n ({ className, ...props }, ref) => (\n <img\n ref={ref}\n className={merge(\"aspect-square h-full w-full object-cover object-center\", className)}\n {...props}\n />\n )\n)\nAvatarImage.displayName = \"AvatarImage\"\n\n/**\n * AvatarFallback 컴포넌트 / AvatarFallback component\n * \n * 아바타 이미지가 없을 때 표시되는 대체 컴포넌트입니다.\n * Fallback component displayed when avatar image is not available.\n * \n * @component\n * @param {AvatarFallbackProps} props - AvatarFallback 컴포넌트의 props / AvatarFallback component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AvatarFallback 컴포넌트 / AvatarFallback component\n */\nconst AvatarFallback = React.forwardRef<HTMLDivElement, AvatarFallbackProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\n \"flex h-full w-full items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400 font-medium\",\n className\n )}\n {...props}\n />\n )\n)\nAvatarFallback.displayName = \"AvatarFallback\"\n\nexport { Avatar, AvatarImage, AvatarFallback } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Card 컴포넌트의 props / Card component props\n * @typedef {Object} CardProps\n * @property {\"default\" | \"outline\" | \"elevated\"} [variant=\"default\"] - 카드 스타일 변형 / Card style variant\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"outline\" | \"elevated\"\n}\n\n/**\n * Card 컴포넌트 / Card component\n * \n * 콘텐츠를 카드 형태로 표시하는 컴포넌트입니다.\n * CardHeader, CardTitle, CardDescription, CardContent, CardFooter와 함께 사용합니다.\n * \n * Component that displays content in card format.\n * Used with CardHeader, CardTitle, CardDescription, CardContent, and CardFooter.\n * \n * @component\n * @example\n * // 기본 카드 / Basic card\n * <Card>\n * <CardHeader>\n * <CardTitle>카드 제목</CardTitle>\n * <CardDescription>카드 설명</CardDescription>\n * </CardHeader>\n * <CardContent>\n * <p>카드 내용</p>\n * </CardContent>\n * <CardFooter>\n * <Button>액션</Button>\n * </CardFooter>\n * </Card>\n * \n * @example\n * // Elevated 스타일 / Elevated style\n * <Card variant=\"elevated\">\n * <CardContent>강조된 카드</CardContent>\n * </Card>\n * \n * @param {CardProps} props - Card 컴포넌트의 props / Card component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Card 컴포넌트 / Card component\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"default\", ...props }, ref) => {\n const variantClasses = {\n default: \"bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700\",\n outline: \"bg-transparent border-2 border-slate-300 dark:border-slate-600\",\n elevated: \"bg-white dark:bg-slate-800 shadow-lg border border-slate-200 dark:border-slate-700\"\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"rounded-lg p-6\",\n variantClasses[variant],\n className\n )}\n {...props}\n />\n )\n }\n)\n\nCard.displayName = \"Card\"\n\n/**\n * CardHeader 컴포넌트의 props / CardHeader component props\n * @typedef {Object} CardHeaderProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardHeader 컴포넌트 / CardHeader component\n * 카드의 헤더 영역을 표시합니다. CardTitle과 CardDescription을 포함합니다.\n * Displays the header area of a card. Contains CardTitle and CardDescription.\n * \n * @component\n * @param {CardHeaderProps} props - CardHeader 컴포넌트의 props / CardHeader component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} CardHeader 컴포넌트 / CardHeader component\n */\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n )\n)\n\nCardHeader.displayName = \"CardHeader\"\n\n/**\n * CardTitle 컴포넌트의 props / CardTitle component props\n * @typedef {Object} CardTitleProps\n * @extends {React.HTMLAttributes<HTMLHeadingElement>}\n */\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\n\n/**\n * CardTitle 컴포넌트 / CardTitle component\n * 카드의 제목을 표시합니다. h3 태그로 렌더링됩니다.\n * Displays the card title. Renders as h3 tag.\n * \n * @component\n * @param {CardTitleProps} props - CardTitle 컴포넌트의 props / CardTitle component props\n * @param {React.Ref<HTMLParagraphElement>} ref - h3 요소 ref / h3 element ref\n * @returns {JSX.Element} CardTitle 컴포넌트 / CardTitle component\n */\nconst CardTitle = React.forwardRef<HTMLParagraphElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={merge(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n )\n)\n\nCardTitle.displayName = \"CardTitle\"\n\n/**\n * CardDescription 컴포넌트의 props / CardDescription component props\n * @typedef {Object} CardDescriptionProps\n * @extends {React.HTMLAttributes<HTMLParagraphElement>}\n */\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * CardDescription 컴포넌트 / CardDescription component\n * 카드의 설명 텍스트를 표시합니다.\n * Displays the card description text.\n * \n * @component\n * @param {CardDescriptionProps} props - CardDescription 컴포넌트의 props / CardDescription component props\n * @param {React.Ref<HTMLParagraphElement>} ref - p 요소 ref / p element ref\n * @returns {JSX.Element} CardDescription 컴포넌트 / CardDescription component\n */\nconst CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={merge(\"text-sm text-slate-500 dark:text-slate-400\", className)}\n {...props}\n />\n )\n)\n\nCardDescription.displayName = \"CardDescription\"\n\n/**\n * CardContent 컴포넌트의 props / CardContent component props\n * @typedef {Object} CardContentProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardContent 컴포넌트 / CardContent component\n * 카드의 메인 콘텐츠 영역을 표시합니다.\n * Displays the main content area of a card.\n * \n * @component\n * @param {CardContentProps} props - CardContent 컴포넌트의 props / CardContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} CardContent 컴포넌트 / CardContent component\n */\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={merge(\"p-6 pt-0\", className)} {...props} />\n )\n)\n\nCardContent.displayName = \"CardContent\"\n\n/**\n * CardFooter 컴포넌트의 props / CardFooter component props\n * @typedef {Object} CardFooterProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardFooter 컴포넌트 / CardFooter component\n * 카드의 푸터 영역을 표시합니다. 주로 액션 버튼을 배치합니다.\n * Displays the footer area of a card. Typically used for action buttons.\n * \n * @component\n * @param {CardFooterProps} props - CardFooter 컴포넌트의 props / CardFooter component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} CardFooter 컴포넌트 / CardFooter component\n */\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n)\n\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * Breadcrumb 항목 타입 / Breadcrumb item type\n */\nexport interface BreadcrumbItemData {\n label: string\n href?: string\n icon?: string\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 {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLDivElement> {\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}\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 className?: string\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 className, \n children, \n items,\n maxItems,\n showHomeIcon,\n homeLabel = \"Home\",\n separator = <Icon name=\"chevronRight\" className=\"w-3 h-3 text-slate-400 dark:text-slate-500 flex-shrink-0\" />, \n variant = 'default', \n ...props \n }, ref) => {\n const variantStyles = {\n default: \"inline-flex items-center text-sm w-fit\",\n subtle: \"inline-flex items-center text-xs bg-white/40 dark:bg-slate-800/40 backdrop-blur-md rounded-md px-3 py-2 border border-slate-200/30 dark:border-white/20 w-fit shadow-sm\",\n transparent: \"inline-flex items-center text-xs w-fit\",\n glass: \"inline-flex items-center text-xs bg-white/30 dark:bg-slate-800/30 backdrop-blur-lg rounded-lg px-4 py-2 border border-slate-200/25 dark:border-white/15 w-fit shadow-lg\"\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 = [firstItem, { label: '...', href: undefined }, ...lastItems]\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\n key={index}\n href={item.href}\n isCurrent={isCurrent}\n >\n {item.icon && (\n <Icon name={item.icon as any} className=\"w-4 h-4 mr-1\" />\n )}\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} className=\"flex items-center\">\n {child}\n {index < React.Children.count(children) - 1 && (\n <span className=\"mx-3 text-slate-400 dark:text-slate-500 flex items-center justify-center\" aria-hidden=\"true\">\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 ? items.length : (children ? React.Children.count(children) : 0)\n \n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={merge(variantStyles[variant], className)}\n {...props}\n >\n <ol className=\"inline-flex items-center\">\n {showHomeIcon && (\n <li className=\"flex items-center\">\n <BreadcrumbItem href=\"/\">\n <Icon name=\"home\" className=\"w-4 h-4 mr-1\" />\n {homeLabel}\n </BreadcrumbItem>\n {itemsCount > 0 && (\n <span className=\"mx-3 text-slate-400 dark:text-slate-500 flex items-center justify-center\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n )}\n {items ? (\n renderedItems?.map((item, index) => (\n <li key={index} className=\"flex items-center\">\n {item}\n {index < (renderedItems?.length || 0) - 1 && (\n <span className=\"mx-3 text-slate-400 dark:text-slate-500 flex items-center justify-center\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n ))\n ) : (\n renderedItems\n )}\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 ({ className, href, isCurrent = false, children, ...props }, ref) => {\n if (isCurrent) {\n return (\n <span\n ref={ref}\n aria-current=\"page\"\n className={merge(\n \"text-slate-500 dark:text-slate-400 font-medium\",\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n if (href) {\n return (\n <a\n href={href}\n className={merge(\n \"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300 transition-colors\",\n className\n )}\n {...props}\n >\n {children}\n </a>\n )\n }\n\n return (\n <span\n ref={ref}\n className={merge(\n \"text-slate-400 dark:text-slate-500\",\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n }\n)\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\n\nexport { Breadcrumb, BreadcrumbItem } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Breadcrumb, BreadcrumbItem } from \"./Breadcrumb\"\n\n/**\n * ComponentLayout 컴포넌트의 props / ComponentLayout component props\n * @typedef {Object} ComponentLayoutProps\n * @property {string} title - 페이지 제목 / Page title\n * @property {string} description - 페이지 설명 / Page description\n * @property {React.ReactNode} children - 페이지 내용 / Page content\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 {Array<Object>} [breadcrumbItems] - Breadcrumb 항목들 / Breadcrumb items\n * @property {string} breadcrumbItems[].label - Breadcrumb 라벨 / Breadcrumb label\n * @property {string} [breadcrumbItems[].href] - Breadcrumb 링크 / Breadcrumb link\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ComponentLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n description: string\n children: React.ReactNode\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n breadcrumbItems?: Array<{\n label: string\n href?: string\n }>\n}\n\n/**\n * ComponentLayout 컴포넌트 / ComponentLayout component\n * \n * 컴포넌트 문서 페이지 레이아웃을 제공하는 컴포넌트입니다.\n * 제목, 설명, Breadcrumb, 이전/다음 페이지 네비게이션을 포함합니다.\n * \n * Component that provides layout for component documentation pages.\n * Includes title, description, Breadcrumb, and previous/next page navigation.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ComponentLayout\n * title=\"Button 컴포넌트\"\n * description=\"버튼 컴포넌트 사용법\"\n * >\n * <Button>예제</Button>\n * </ComponentLayout>\n * \n * @example\n * // 이전/다음 페이지 네비게이션 포함 / With previous/next page navigation\n * <ComponentLayout\n * title=\"Input 컴포넌트\"\n * description=\"입력 컴포넌트 사용법\"\n * prevPage={{ title: \"Button\", href: \"/components/button\" }}\n * nextPage={{ title: \"Select\", href: \"/components/select\" }}\n * >\n * <Input placeholder=\"입력하세요\" />\n * </ComponentLayout>\n * \n * @param {ComponentLayoutProps} props - ComponentLayout 컴포넌트의 props / ComponentLayout component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ComponentLayout 컴포넌트 / ComponentLayout component\n */\nconst ComponentLayout = React.forwardRef<HTMLDivElement, ComponentLayoutProps>(\n ({ \n className, \n title, \n description, \n children, \n prevPage, \n nextPage,\n breadcrumbItems = [\n { label: \"Components\", href: \"/components\" }\n ],\n ...props \n }, ref) => {\n return (\n <div className=\"relative min-h-screen\">\n {/* 고정된 페이지 네비게이션 - 위쪽 */}\n <div className=\"fixed right-4 top-4 z-50 hidden lg:block\">\n <div className=\"flex flex-col space-y-4\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"group p-3 bg-white/80 backdrop-blur-sm border border-slate-200 rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200\"\n title={`이전: ${prevPage.title}`}\n >\n <svg \n className=\"w-5 h-5 text-slate-600 group-hover:text-blue-600 group-active:text-blue-800 transition-colors\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n\n {/* 고정된 페이지 네비게이션 - 아래쪽 */}\n <div className=\"fixed right-4 bottom-4 z-50 hidden lg:block\">\n <div className=\"flex flex-col space-y-4\">\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"group p-3 bg-white/80 backdrop-blur-sm border border-slate-200 rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200\"\n title={`다음: ${nextPage.title}`}\n >\n <svg \n className=\"w-5 h-5 text-slate-600 group-hover:text-blue-600 group-active:text-blue-800 transition-colors\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n\n {/* 메인 콘텐츠 */}\n <div\n ref={ref}\n className={merge(\"container mx-auto px-4 py-8\", className)}\n {...props}\n >\n <div className=\"max-w-4xl mx-auto\">\n {/* 브레드크럼 */}\n <Breadcrumb className=\"mb-6\">\n {breadcrumbItems.map((item, index) => (\n <BreadcrumbItem \n key={index}\n href={item.href}\n isCurrent={index === breadcrumbItems.length - 1}\n >\n {item.label}\n </BreadcrumbItem>\n ))}\n </Breadcrumb>\n\n {/* 페이지 헤더 */}\n <div className=\"mb-8\">\n <h1 className=\"text-4xl font-bold mb-4\">{title}</h1>\n <p className=\"text-lg text-slate-600 dark:text-slate-400\">\n {description}\n </p>\n </div>\n\n {/* 페이지 콘텐츠 */}\n <div className=\"space-y-8\">\n {children}\n </div>\n\n {/* 모바일 페이지 네비게이션 */}\n <div className=\"mt-12 lg:hidden\">\n <div className=\"flex items-center justify-between py-4 border-t border-slate-200 dark:border-slate-700\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"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 <svg className=\"w-4 h-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n {prevPage.title}\n </a>\n )}\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"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 {nextPage.title}\n <svg className=\"w-4 h-4 ml-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n)\nComponentLayout.displayName = \"ComponentLayout\"\n\nexport { ComponentLayout } "]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {u,x,B,y,a as a$2,h,b,e,f,c as c$1,g,t,D,E,i,F,G,j}from'./chunk-SGCVGEDR.mjs';import {a as a$1}from'./chunk-ACEKLG37.mjs';import {l}from'./chunk-DMYT7RZ4.mjs';import {a,c}from'./chunk-UUHAXGMO.mjs';import Ne,{useMemo}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var Pt={50:"50",100:"100",200:"200",300:"300",400:"400",500:"500",600:"600",700:"700",800:"800",900:"900"};function I(t,r,e=""){return `${e}${t}-${Pt[r]}`}function U(t,r){return `${t} dark:${r}`}var ye={default:{border:{light:200,dark:700},background:{light:50,dark:900,opacity:"50"}},outline:{border:{light:300,dark:600},background:"transparent",text:{light:600,dark:400}},elevated:{border:{light:200,dark:700},background:{light:"white",dark:"gray-800"},shadow:"lg"},icon:{background:{light:100,dark:900,opacity:"30"},text:{light:600,dark:400}},badge:{background:{light:50,dark:900,opacity:"30"},text:{light:700,dark:300}}},It={from:500,to:600,border:{light:400,dark:500}};function Ht(t,r){var M,L,ee,me,ge,N,C,X,fe,F,ze,Ke,We,Oe,je;let e={default:ye.default,gradient:It,outline:ye.outline,elevated:ye.elevated,icon:ye.icon,badge:ye.badge},n=(M=e.default)!=null&&M.border?U(`border-${I(t,e.default.border.light)}`,`border-${I(t,e.default.border.dark||e.default.border.light)}`):"",o=(L=e.default)!=null&&L.background?U(`bg-${I(t,e.default.background.light)}${e.default.background.opacity?`/${e.default.background.opacity}`:""}`,`bg-${I(t,e.default.background.dark||e.default.background.light)}${e.default.background.opacity?`/${e.default.background.opacity}`:""}`):"",c=a(n,o),m=(ee=e.gradient)!=null&&ee.from?`from-${I(t,e.gradient.from)}`:"",p=(me=e.gradient)!=null&&me.to?`to-${I(t,e.gradient.to)}`:"",d=(ge=e.gradient)!=null&&ge.border?U(`border-${I(t,e.gradient.border.light)}`,`border-${I(t,e.gradient.border.dark||e.gradient.border.light)}`):"",h=a("bg-gradient-to-br",m,p,d),s=(N=e.outline)!=null&&N.border?`border-2 ${U(`border-${I(t,e.outline.border.light)}`,`border-${I(t,e.outline.border.dark||e.outline.border.light)}`)}`:"",x=((C=e.outline)==null?void 0:C.background)||"bg-transparent",g=(X=e.outline)!=null&&X.text?U(`text-${I(t,e.outline.text.light)}`,`text-${I(t,e.outline.text.dark||e.outline.text.light)}`):"",i=a(s,x,g),u=(fe=e.elevated)!=null&&fe.border?U(`border-${I(t,e.elevated.border.light)}`,`border-${I(t,e.elevated.border.dark||e.elevated.border.light)}`):"",l=(F=e.elevated)!=null&&F.background?U(`bg-${e.elevated.background.light}`,`bg-${e.elevated.background.dark}`):"",f=(ze=e.elevated)!=null&&ze.shadow?`shadow-${e.elevated.shadow}`:"",v=a(u,l,f),y=(Ke=e.icon)!=null&&Ke.background?U(`bg-${I(t,e.icon.background.light)}${e.icon.background.opacity?`/${e.icon.background.opacity}`:""}`,`bg-${I(t,e.icon.background.dark||e.icon.background.light)}${e.icon.background.opacity?`/${e.icon.background.opacity}`:""}`):"",S=(We=e.icon)!=null&&We.text?U(`text-${I(t,e.icon.text.light)}`,`text-${I(t,e.icon.text.dark||e.icon.text.light)}`):"",D=a(y,S),P=(Oe=e.badge)!=null&&Oe.background?U(`bg-${I(t,e.badge.background.light)}${e.badge.background.opacity?`/${e.badge.background.opacity}`:""}`,`bg-${I(t,e.badge.background.dark||e.badge.background.light)}${e.badge.background.opacity?`/${e.badge.background.opacity}`:""}`):"",b=(je=e.badge)!=null&&je.text?U(`text-${I(t,e.badge.text.light)}`,`text-${I(t,e.badge.text.dark||e.badge.text.light)}`):"",T=a(P,b);return {default:c,gradient:h,outline:i,elevated:v,icon:D,badge:T}}var Ae=new Map;function Z(t,r){let e=`${t}-${JSON.stringify({})}`;return Ae.has(e)||Ae.set(e,Ht(t)),Ae.get(e)}function Te(t,r){let e="rounded-2xl border transition-all duration-200";switch(t){case "default":return a(e,r.default);case "gradient":return a(e,"text-white",r.gradient);case "outline":return a(e,r.outline);case "elevated":return a(e,r.elevated);default:return e}}var ot=Ne.forwardRef(({title:t,value:r,description:e,icon:n,trend:o,variant:c="elevated",color:m="blue",loading:p=false,emptyState:d,className:h,...s},x)=>{let g=Z(m),i=c==="gradient",u=i,l$1=useMemo(()=>{let v=Te(c,g);return c==="elevated"?v.replace("rounded-2xl","rounded-3xl"):v},[c,g]),f=v=>typeof v=="number"?v.toLocaleString():v;return !p&&(r==null||r==="")?d?jsx("div",{className:h,...s,children:d}):jsxs("div",{className:a("rounded-2xl border border-slate-100 dark:border-slate-800 p-6",h),...s,children:[jsx("h3",{className:"text-sm font-medium text-slate-500 dark:text-slate-400",children:t}),jsx("p",{className:"mt-2 text-sm text-slate-400",children:"\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."})]}):jsxs("div",{ref:x,className:a("p-6 transition-all duration-200 hover:shadow-xl",l$1,h),...s,children:[jsxs("div",{className:"flex items-start justify-between mb-4",children:[n&&jsx("div",{className:a("w-12 h-12 rounded-lg flex items-center justify-center flex-shrink-0",i?"bg-white/20":g.icon),children:typeof n=="string"?jsx(l,{name:n,className:a("w-6 h-6",u?"text-white":"")}):n}),t&&jsx("span",{className:a("text-sm px-3 py-1 rounded-full font-medium",i?"bg-white/20 text-white":g.badge),children:t})]}),p?jsx("div",{className:"h-10 bg-gray-200 dark:bg-gray-700 rounded animate-pulse mb-2"}):jsx("h3",{className:a("text-3xl font-bold mb-1",u?"text-white":"text-gray-800 dark:text-white"),children:f(r!=null?r:0)}),e&&jsx("p",{className:a("text-sm",u?"text-white/90":"text-gray-600 dark:text-gray-300"),children:e}),o&&!p&&jsxs("div",{className:"mt-3 flex items-center gap-1",children:[jsxs("span",{className:a("text-xs font-medium",o.positive!==false?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400"),children:[o.positive!==false?"\u2191":"\u2193"," ",Math.abs(o.value),"%"]}),jsx("span",{className:a("text-xs",u?"text-white/70":"text-gray-500 dark:text-gray-400"),children:o.label})]})]})});ot.displayName="StatCard";var st=Ne.forwardRef(({title:t,description:r,icon:e,href:n,onClick:o,variant:c="gradient",color:m="blue",loading:p=false,className:d,...h},s)=>{let x=Z(m),g=c==="gradient",i=g||c==="solid",u=useMemo(()=>c==="gradient"?`text-white ${x.gradient}`:c==="outline"?x.outline:{blue:"text-white bg-blue-600 hover:bg-blue-700",purple:"text-white bg-purple-600 hover:bg-purple-700",green:"text-white bg-green-600 hover:bg-green-700",orange:"text-white bg-orange-600 hover:bg-orange-700",red:"text-white bg-red-600 hover:bg-red-700",indigo:"text-white bg-indigo-600 hover:bg-indigo-700",pink:"text-white bg-pink-600 hover:bg-pink-700",gray:"text-white bg-gray-600 hover:bg-gray-700"}[m],[c,x,m]),l$1=a("rounded-2xl p-6 transition-all shadow-lg hover:shadow-xl text-center",u,d),f=jsxs(Fragment,{children:[e&&jsx("div",{className:a("w-12 h-12 rounded-lg flex items-center justify-center mx-auto mb-2",g||c==="solid"?"bg-white/20":c==="outline"?x.icon:""),children:typeof e=="string"?jsx(l,{name:e,className:a("w-6 h-6",i?"text-white":"")}):e}),jsx("h3",{className:a("text-xl font-semibold mb-1",i?"text-white":""),children:t}),r&&jsx("p",{className:a("text-sm",i?"text-white/90":"text-gray-600 dark:text-gray-300"),children:r}),p&&jsx("div",{className:"mt-2 h-4 bg-white/20 rounded animate-pulse"})]});return n?jsx("a",{ref:s,href:n,className:l$1,...h,children:f}):jsx("button",{ref:s,onClick:o,className:l$1,...h,children:f})});st.displayName="QuickActionCard";var Ot={sm:"gap-3",md:"gap-6",lg:"gap-8",xl:"gap-12"},jt={1:"grid-cols-1",2:"grid-cols-1 md:grid-cols-2",3:"grid-cols-1 md:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 md:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5",6:"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6"},Gt={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6"},it=Ne.forwardRef(({columns:t=4,gap:r="md",responsive:e=true,className:n,children:o,...c},m)=>{let p=e?jt[t]:Gt[t];return jsx("div",{ref:m,className:a("grid",p,Ot[r],n),...c,children:o})});it.displayName="DashboardGrid";var nt=Ne.forwardRef(({title:t,items:r,emptyMessage:e="\uD65C\uB3D9 \uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",showHeader:n=true,maxItems:o,onViewAll:c$1,viewAllLabel:m="\uC804\uCCB4 \uBCF4\uAE30",emptyState:p,className:d,...h},s)=>{let x=o?r.slice(0,o):r,g=o&&r.length>o;return jsxs("div",{ref:s,className:a("bg-white dark:bg-gray-800 rounded-2xl shadow-lg border border-gray-200 dark:border-gray-700",d),...h,children:[n&&t&&jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700",children:[jsx("h2",{className:"text-xl font-bold text-gray-800 dark:text-white flex items-center",children:t}),c$1&&jsxs("button",{onClick:c$1,"aria-label":`${m} - ${t||"\uD65C\uB3D9 \uB0B4\uC5ED"}`,className:"text-purple-600 dark:text-purple-400 hover:text-purple-700 dark:hover:text-purple-300 font-medium text-sm transition-colors",children:[m," \u2192"]})]}),x.length>0?jsxs("div",{className:"divide-y divide-gray-200 dark:divide-gray-700",children:[x.map(i=>jsxs("div",{onClick:i.onClick,className:a("p-4 transition-colors",i.onClick&&"hover:bg-gray-50 dark:hover:bg-gray-700/50 cursor-pointer group"),children:[jsxs("div",{className:"flex items-start justify-between mb-2",children:[jsx("div",{className:"flex-1 min-w-0",children:jsxs("div",{className:"flex items-start gap-3",children:[i.icon&&jsx("div",{className:"w-8 h-8 rounded-lg bg-purple-100 dark:bg-purple-900/30 flex items-center justify-center flex-shrink-0 mt-0.5",children:typeof i.icon=="string"?jsx(l,{name:i.icon,className:"w-4 h-4 text-purple-600 dark:text-purple-400"}):i.icon}),jsxs("div",{className:"flex-1 min-w-0",children:[jsx("h3",{className:"text-base font-semibold text-gray-800 dark:text-white mb-1 truncate",children:i.title}),i.description&&jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 line-clamp-2",children:i.description})]})]})}),i.badge&&jsx("div",{className:"ml-2 flex-shrink-0",children:typeof i.badge=="string"?jsx("span",{className:"px-2 py-1 rounded-full text-xs font-medium bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300",children:i.badge}):i.badge})]}),i.metadata&&Object.keys(i.metadata).length>0&&jsx("div",{className:"flex items-center gap-1 flex-wrap mt-2",children:Object.entries(i.metadata).map(([u,l])=>jsxs("span",{className:"text-xs bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300 px-2 py-0.5 rounded",children:[u,": ",String(l)]},u))}),jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-2",children:jsx("time",{dateTime:i.timestamp instanceof Date?i.timestamp.toISOString():typeof i.timestamp=="string"?i.timestamp:void 0,children:c(i.timestamp)})})]},i.id)),g&&jsx("div",{className:"p-4 text-center border-t border-gray-200 dark:border-gray-700",children:jsxs("button",{onClick:c$1,"aria-label":`\uB354 \uB9CE\uC740 \uD65C\uB3D9 \uBCF4\uAE30 - ${r.length-(o||0)}\uAC1C \uB354`,className:"inline-flex items-center text-sm text-purple-600 dark:text-purple-400 hover:text-purple-700 dark:hover:text-purple-300 font-medium transition-colors",children:[jsx("span",{children:"\uB354 \uB9CE\uC740 \uD65C\uB3D9 \uBCF4\uAE30"}),jsxs("span",{className:"ml-1",children:["(",r.length-(o||0),"\uAC1C \uB354)"]}),jsx("span",{className:"ml-1",children:"\u2192"})]})})]}):p||jsxs("div",{className:"text-center py-8",children:[jsx("span",{className:"text-4xl mb-3 block",children:"\u{1F4ED}"}),jsx("p",{className:"text-gray-500 dark:text-gray-400 text-sm",children:e})]})]})});nt.displayName="ActivityFeed";var Qt={basic:{badge:"bg-gradient-to-r from-blue-500 to-cyan-500 text-white",icon:"text-blue-600 dark:text-blue-400"},pro:{badge:"bg-gradient-to-r from-purple-500 to-pink-500 text-white",icon:"text-purple-600 dark:text-purple-400"},premium:{badge:"bg-gradient-to-r from-yellow-400 to-orange-500 text-white",icon:"text-yellow-600 dark:text-yellow-400"},admin:{badge:"bg-gradient-to-r from-red-500 to-pink-500 text-white",icon:"text-red-600 dark:text-red-400"}},Yt={basic:"Basic",pro:"Pro",premium:"Premium",admin:"Admin"},lt=Ne.forwardRef(({name:t,email:r,avatar:e,avatarAlt:n,greeting:o,memberSince:c,membershipTier:m,membershipLabel:p,onSettingsClick:d,settingsHref:h,variant:s="default",showAvatar:x=true,showMembership:g=true,showSettings:i=true,className:u,...l$1},f)=>{let v=b=>(typeof b=="string"?new Date(b):b).toLocaleDateString("ko-KR",{year:"numeric",month:"long",day:"numeric"}),y=m||"basic",S=Qt[y],D=p||Yt[y];return jsxs("div",{ref:f,className:a("relative overflow-hidden p-6",{default:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg border border-gray-200 dark:border-gray-700",gradient:"bg-gradient-to-br from-blue-50 via-purple-50 to-pink-50 dark:from-gray-800 dark:via-gray-800 dark:to-gray-900 rounded-2xl shadow-xl border border-white/20 dark:border-gray-700/20",minimal:"bg-transparent"}[s],u),...l$1,children:[s==="gradient"&&jsxs(Fragment,{children:[jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 opacity-10 dark:opacity-20"}),jsx("div",{className:"absolute inset-0 bg-gradient-to-tr from-cyan-400 via-blue-500 to-purple-600 opacity-5 dark:opacity-15"})]}),jsxs("div",{className:"relative flex items-start gap-6",children:[i&&(d||h)&&jsx("div",{className:"absolute top-0 right-0",children:h?jsx("a",{href:h,className:"p-2 text-gray-400 dark:text-gray-300 hover:text-blue-600 dark:hover:text-blue-400 transition-colors",title:"\uC124\uC815",children:jsx(l,{name:"settings",className:"w-6 h-6"})}):jsx("button",{onClick:d,className:"p-2 text-gray-400 dark:text-gray-300 hover:text-blue-600 dark:hover:text-blue-400 transition-colors",title:"\uC124\uC815",children:jsx(l,{name:"settings",className:"w-6 h-6"})})}),x&&jsx("div",{className:"relative flex-shrink-0",children:e?jsx("img",{src:e,alt:n||t,className:"w-20 h-20 rounded-full border-4 border-white dark:border-gray-700 shadow-lg object-cover"}):jsx("div",{className:"w-20 h-20 rounded-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center border-4 border-white dark:border-gray-700 shadow-lg",children:jsx("span",{className:"text-2xl font-bold text-white",children:t.charAt(0).toUpperCase()})})}),jsxs("div",{className:"flex-1 min-w-0",children:[o&&jsx("div",{className:"text-lg sm:text-xl font-semibold mb-2",children:o.split(" ").map((b,T)=>{let M=/[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/u.test(b);return jsxs("span",{children:[M?jsx("span",{className:"text-gray-900 dark:text-white",children:b}):jsx("span",{className:"text-xl sm:text-2xl font-bold bg-gradient-to-r from-blue-500 to-purple-500 bg-clip-text text-transparent",children:b}),T<o.split(" ").length-1&&" "]},T)})}),jsxs("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3 mb-2",children:[jsxs("span",{className:"text-xl sm:text-2xl font-bold text-gray-900 dark:text-white truncate",children:[t,"!"]}),g&&m&&jsxs("span",{className:a("inline-flex items-center px-3 py-1 rounded-full text-xs font-semibold shadow-lg",S.badge),children:[jsx("svg",{className:"w-3 h-3 mr-1",fill:"currentColor",viewBox:"0 0 20 20",children:y==="premium"?jsx("path",{d:"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"}):y==="admin"?jsx("path",{fillRule:"evenodd",d:"M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}):jsx("path",{fillRule:"evenodd",d:"M6.267 3.455a3.066 3.066 0 001.745-.723 3.066 3.066 0 013.976 0 3.066 3.066 0 001.745.723 3.066 3.066 0 012.812 2.812c.051.643.304 1.254.723 1.745a3.066 3.066 0 010 3.976 3.066 3.066 0 00-.723 1.745 3.066 3.066 0 01-2.812 2.812 3.066 3.066 0 00-1.745.723 3.066 3.066 0 01-3.976 0 3.066 3.066 0 00-1.745-.723 3.066 3.066 0 01-2.812-2.812 3.066 3.066 0 00-.723-1.745 3.066 3.066 0 010-3.976 3.066 3.066 0 00.723-1.745 3.066 3.066 0 012.812-2.812zm7.44 5.252a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),D]})]}),r&&jsx("div",{className:"text-gray-600 dark:text-gray-400 text-sm mb-1 truncate",children:r}),c&&jsxs("div",{className:"text-gray-400 text-xs flex items-center gap-1",children:[jsx(l,{name:"clock",className:"w-3 h-3"}),"\uAC00\uC785\uC77C ",v(c)]})]})]})]})});lt.displayName="ProfileCard";var Zt={basic:{gradient:"bg-gradient-to-r from-blue-500 to-cyan-500",label:"Basic"},pro:{gradient:"bg-gradient-to-r from-purple-500 to-pink-500",label:"Pro"},premium:{gradient:"bg-gradient-to-r from-yellow-400 to-orange-500",label:"Premium"},admin:{gradient:"bg-gradient-to-r from-red-500 to-pink-500",label:"Admin"}},qt={sm:{container:"px-2 py-0.5 text-xs",icon:"w-2.5 h-2.5"},md:{container:"px-3 py-1 text-xs",icon:"w-3 h-3"},lg:{container:"px-4 py-1.5 text-sm",icon:"w-4 h-4"}},dt=Ne.forwardRef(({tier:t,label:r,size:e="md",showIcon:n=true,className:o,...c},m)=>{let p=Zt[t],d=qt[e],h=r||p.label,s=()=>n?t==="premium"?jsx("svg",{className:d.icon,fill:"currentColor",viewBox:"0 0 20 20",children:jsx("path",{d:"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"})}):t==="admin"?jsx("svg",{className:d.icon,fill:"currentColor",viewBox:"0 0 20 20",children:jsx("path",{fillRule:"evenodd",d:"M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"})}):jsx("svg",{className:d.icon,fill:"currentColor",viewBox:"0 0 20 20",children:jsx("path",{fillRule:"evenodd",d:"M6.267 3.455a3.066 3.066 0 001.745-.723 3.066 3.066 0 013.976 0 3.066 3.066 0 001.745.723 3.066 3.066 0 012.812 2.812c.051.643.304 1.254.723 1.745a3.066 3.066 0 010 3.976 3.066 3.066 0 00-.723 1.745 3.066 3.066 0 01-2.812 2.812 3.066 3.066 0 00-1.745.723 3.066 3.066 0 01-3.976 0 3.066 3.066 0 00-1.745-.723 3.066 3.066 0 01-2.812-2.812 3.066 3.066 0 00-.723-1.745 3.066 3.066 0 010-3.976 3.066 3.066 0 00.723-1.745 3.066 3.066 0 012.812-2.812zm7.44 5.252a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}):null;return jsxs("span",{ref:m,className:a("inline-flex items-center rounded-full font-semibold text-white shadow-lg",p.gradient,d.container,o),...c,children:[n&&jsx("span",{className:"mr-1",children:s()}),h]})});dt.displayName="MembershipBadge";var ta={blue:{default:"bg-gradient-to-t from-blue-500 to-blue-400",highlight:"bg-gradient-to-t from-blue-600 to-blue-500 shadow-lg"},purple:{default:"bg-gradient-to-t from-purple-500 to-purple-400",highlight:"bg-gradient-to-t from-purple-600 to-purple-500 shadow-lg"},green:{default:"bg-gradient-to-t from-green-500 to-green-400",highlight:"bg-gradient-to-t from-green-600 to-green-500 shadow-lg"},orange:{default:"bg-gradient-to-t from-orange-500 to-orange-400",highlight:"bg-gradient-to-t from-orange-600 to-orange-500 shadow-lg"},red:{default:"bg-gradient-to-t from-red-500 to-red-400",highlight:"bg-gradient-to-t from-red-600 to-red-500 shadow-lg"},indigo:{default:"bg-gradient-to-t from-indigo-500 to-indigo-400",highlight:"bg-gradient-to-t from-indigo-600 to-indigo-500 shadow-lg"},pink:{default:"bg-gradient-to-t from-pink-500 to-pink-400",highlight:"bg-gradient-to-t from-pink-600 to-pink-500 shadow-lg"},gray:{default:"bg-gradient-to-t from-gray-500 to-gray-400",highlight:"bg-gradient-to-t from-gray-600 to-gray-500 shadow-lg"}},De=Ne.forwardRef(({data:t,labels:r,maxValue:e,height:n=160,showTooltip:o=true,showStats:c=true,color:m="blue",highlightToday:p=true,todayIndex:d,className:h,...s},x)=>{let g=ta[m],i=e||Math.max(...t,1),u=Math.max(i,10),l=d!==void 0?d:t.length-1,f=b=>u===0?8:Math.max(b/u*n,8),v=t.reduce((b,T)=>b+T,0),y=t.length>0?Math.round(v/t.length):0,S=Math.max(...t);Ne.useId();let P=r&&r.length>0?`\uBBF8\uB2C8 \uB9C9\uB300 \uADF8\uB798\uD504 - ${r.length}\uAC1C \uD56D\uBAA9, \uCD5C\uB300\uAC12 ${S.toLocaleString()}, \uD3C9\uADE0 ${y.toLocaleString()}`:`\uBBF8\uB2C8 \uB9C9\uB300 \uADF8\uB798\uD504 - ${t.length}\uAC1C \uD56D\uBAA9, \uCD5C\uB300\uAC12 ${S.toLocaleString()}, \uD3C9\uADE0 ${y.toLocaleString()}`;return jsxs("div",{ref:x,role:"img","aria-label":P,className:a("w-full",h),...s,children:[jsxs("div",{className:"flex items-end justify-between gap-2 px-2 relative",style:{height:`${n+40}px`},children:[jsx("div",{className:"absolute inset-x-2 bottom-8 border-t border-gray-200 dark:border-gray-700 opacity-50"}),t.map((b,T)=>{let M=p&&T===l,L=f(b),ee=M?g.highlight:g.default;return jsxs("div",{className:"flex flex-col items-center flex-1 group relative",children:[o&&jsxs("div",{className:"absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-2 py-1 bg-gray-900 dark:bg-gray-700 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none whitespace-nowrap z-10",children:[b,"\uAC1C",jsx("div",{className:"absolute top-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-gray-900 dark:border-t-gray-700"})]}),jsx("div",{className:"text-xs font-medium text-gray-700 dark:text-gray-300 mb-1 opacity-0 group-hover:opacity-100 transition-opacity duration-200",children:b}),jsx("div",{className:"relative w-full flex-1 flex items-end",children:jsx("div",{className:a("w-full rounded-t-lg transition-all duration-500 ease-out group-hover:scale-105",ee),style:{height:`${L}px`,minHeight:"8px"},children:b>0&&jsx("div",{className:"absolute -top-1 left-1/2 transform -translate-x-1/2 w-2 h-2 bg-white dark:bg-gray-800 rounded-full shadow-sm"})})}),r&&r[T]&&jsx("div",{className:a("text-xs font-medium mt-2 transition-colors duration-200",M?"text-purple-600 dark:text-purple-400":"text-gray-500 dark:text-gray-400"),children:r[T]})]},T)})]}),c&&jsxs("div",{className:"mt-4 flex justify-between items-center text-xs text-gray-500 dark:text-gray-400 px-2",children:[jsxs("div",{children:["\uCD1D: ",v]}),jsxs("div",{children:["\uD3C9\uADE0: ",y]}),jsxs("div",{children:["\uCD5C\uACE0: ",S]})]})]})});De.displayName="MiniBarChart";var oa={blue:"bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-900/20 dark:to-indigo-900/20",purple:"bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-900/20 dark:to-pink-900/20",green:"bg-gradient-to-br from-green-50 to-emerald-100 dark:from-green-900/20 dark:to-emerald-900/20",orange:"bg-gradient-to-br from-orange-50 to-amber-100 dark:from-orange-900/20 dark:to-amber-900/20",red:"bg-gradient-to-br from-red-50 to-rose-100 dark:from-red-900/20 dark:to-rose-900/20",indigo:"bg-gradient-to-br from-indigo-50 to-blue-100 dark:from-indigo-900/20 dark:to-blue-900/20",pink:"bg-gradient-to-br from-pink-50 to-rose-100 dark:from-pink-900/20 dark:to-rose-900/20",gray:"bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-900/20 dark:to-gray-800/20"},mt={blue:"bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-700 hover:to-indigo-700",purple:"bg-gradient-to-r from-purple-600 to-pink-600 hover:from-purple-700 hover:to-pink-700",green:"bg-gradient-to-r from-green-600 to-emerald-600 hover:from-green-700 hover:to-emerald-700",orange:"bg-gradient-to-r from-orange-600 to-amber-600 hover:from-orange-700 hover:to-amber-700",red:"bg-gradient-to-r from-red-600 to-rose-600 hover:from-red-700 hover:to-rose-700",indigo:"bg-gradient-to-r from-indigo-600 to-blue-600 hover:from-indigo-700 hover:to-blue-700",pink:"bg-gradient-to-r from-pink-600 to-rose-600 hover:from-pink-700 hover:to-rose-700",gray:"bg-gradient-to-r from-gray-600 to-gray-700 hover:from-gray-700 hover:to-gray-800"},gt=Ne.forwardRef(({title:t,value:r,subtitle:e,icon:n,color:o="blue",variant:c="default",href:m,onClick:p,loading:d=false,badge:h,footer:s,showAction:x=true,actionLabel:g="\uC790\uC138\uD788 \uBCF4\uAE30",className:i,...u},l$1)=>{let f=Z(o),v=c==="gradient",y=v,S=useMemo(()=>c==="default"?`rounded-xl shadow-lg ${oa[o]}`:c==="gradient"?`rounded-xl shadow-xl text-white ${f.gradient}`:`rounded-xl ${f.outline}`,[c,f,o]),D=b=>typeof b=="number"?b.toLocaleString():b;return jsxs("div",{ref:l$1,className:a("p-6 flex flex-col min-h-[220px] relative overflow-hidden group hover:shadow-xl transition-all duration-300",S,i),...u,children:[jsx("div",{className:a("absolute top-0 right-0 w-32 h-32 bg-gradient-to-bl to-transparent rounded-full -translate-y-16 translate-x-16",o==="blue"?"from-blue-400/10":o==="purple"?"from-purple-400/10":o==="green"?"from-green-400/10":o==="orange"?"from-orange-400/10":o==="red"?"from-red-400/10":o==="indigo"?"from-indigo-400/10":o==="pink"?"from-pink-400/10":"from-gray-400/10")}),jsx("div",{className:a("absolute bottom-0 left-0 w-24 h-24 bg-gradient-to-tr to-transparent rounded-full translate-y-12 -translate-x-12",o==="blue"?"from-blue-400/10":o==="purple"?"from-purple-400/10":o==="green"?"from-green-400/10":o==="orange"?"from-orange-400/10":o==="red"?"from-red-400/10":o==="indigo"?"from-indigo-400/10":o==="pink"?"from-pink-400/10":"from-gray-400/10")}),jsxs("div",{className:"flex items-center justify-between mb-4 relative z-10",children:[jsxs("div",{className:"flex items-center",children:[n&&jsx("div",{className:a("p-2 rounded-lg",v?"bg-white/20":f.icon),children:typeof n=="string"?jsx(l,{name:n,className:a("w-6 h-6",y?"text-white":"")}):n}),jsx("span",{className:a("text-lg font-semibold ml-3",y?"text-white":"text-gray-900 dark:text-white"),children:t})]}),h&&jsx("div",{className:"text-xs font-medium",children:typeof h=="string"?jsx("span",{className:a("px-2 py-1 rounded-full",v?"bg-white/20 text-white":"bg-white/50 dark:bg-gray-800/50 text-gray-700 dark:text-gray-300"),children:h}):h})]}),jsx("div",{className:"flex-1 flex flex-col justify-center relative z-10",children:d?jsx("div",{className:"h-10 bg-gray-200 dark:bg-gray-700 rounded animate-pulse mb-2"}):jsxs(Fragment,{children:[jsx("div",{className:a("text-3xl font-bold mb-2",y?"text-white":"text-gray-900 dark:text-white"),children:D(r)}),e&&jsx("div",{className:a("text-sm mb-4",y?"text-white/90":"text-gray-600 dark:text-gray-400"),children:e})]})}),s&&jsx("div",{className:"relative z-10 mb-4",children:s}),x&&(m||p)&&jsx("div",{className:"relative z-10",children:m?jsx("a",{href:m,className:a("block w-full text-center py-3 rounded-lg font-semibold text-white hover:shadow-lg transition-all duration-200 group-hover:scale-[1.02]",mt[o]),children:g}):jsx("button",{onClick:p,className:a("block w-full text-center py-3 rounded-lg font-semibold text-white hover:shadow-lg transition-all duration-200 group-hover:scale-[1.02]",mt[o]),children:g})})]})});gt.displayName="SummaryCard";var na={info:{container:"bg-gradient-to-r from-blue-50 to-indigo-50 dark:from-blue-900/20 dark:to-indigo-900/20",border:"border-blue-200/50 dark:border-blue-700/30",dot:"bg-blue-500"},warning:{container:"bg-gradient-to-r from-orange-50 to-red-50 dark:from-orange-900/20 dark:to-red-900/20",border:"border-orange-200/50 dark:border-orange-700/30",dot:"bg-red-500"},error:{container:"bg-gradient-to-r from-red-50 to-rose-50 dark:from-red-900/20 dark:to-rose-900/20",border:"border-red-200/50 dark:border-red-700/30",dot:"bg-red-600"},success:{container:"bg-gradient-to-r from-green-50 to-emerald-50 dark:from-green-900/20 dark:to-emerald-900/20",border:"border-green-200/50 dark:border-green-700/30",dot:"bg-green-500"}},la={container:"bg-gradient-to-r from-gray-50 to-gray-100 dark:from-gray-900/20 dark:to-gray-800/20",border:"border-gray-200/50 dark:border-gray-700/30",dot:"bg-gray-500"},bt=Ne.forwardRef(({title:t="\uC54C\uB9BC \uBC0F \uACF5\uC9C0",items:r,emptyMessage:e="\uC54C\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",maxItems:n,onViewAll:o,viewAllLabel:c$1="\uBAA8\uB4E0 \uC54C\uB9BC \uBCF4\uAE30",showHeader:m=true,showCount:p=true,emptyState:d,className:h,...s},x)=>{let g=n?r.slice(0,n):r,i=n&&r.length>n,u=l=>l?na[l]:la;return jsxs("div",{ref:x,className:a("bg-white dark:bg-gray-800 rounded-xl shadow p-6",h),...s,children:[m&&jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsxs("div",{className:"flex items-center",children:[jsx("div",{className:"p-2 bg-orange-500/10 rounded-lg mr-3",children:jsx(l,{name:"bell",className:"w-6 h-6 text-orange-600 dark:text-orange-400"})}),jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:t})]}),p&&r.length>0&&jsxs("span",{className:"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300",children:[r.length,"\uAC1C"]})]}),g.length>0?jsx("div",{className:"space-y-3",children:g.map(l=>{let f=u(l.type),v=jsx("div",{className:a("p-3 rounded-lg border",f.container,f.border,(l.onClick||l.href)&&"cursor-pointer hover:shadow-md transition-all duration-200"),children:jsxs("div",{className:"flex items-start",children:[jsx("div",{className:a("w-2 h-2 rounded-full mt-2 mr-3 flex-shrink-0",f.dot)}),jsxs("div",{className:"flex-1 min-w-0",children:[jsxs("div",{className:"flex items-center justify-between mb-1",children:[jsx("span",{className:"text-sm font-semibold text-gray-900 dark:text-white",children:l.title}),jsx("time",{dateTime:l.timestamp instanceof Date?l.timestamp.toISOString():typeof l.timestamp=="string"?l.timestamp:void 0,className:"text-xs text-gray-500 dark:text-gray-400 ml-2 flex-shrink-0",children:c(l.timestamp)})]}),jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:l.message})]})]})});return l.href?jsx("a",{href:l.href,children:v},l.id):l.onClick?jsx("div",{onClick:l.onClick,children:v},l.id):jsx("div",{children:v},l.id)})}):d||jsxs("div",{className:"text-center py-8",children:[jsx(l,{name:"bell",className:"w-12 h-12 text-gray-400 dark:text-gray-500 mx-auto mb-3"}),jsx("p",{className:"text-gray-500 dark:text-gray-400 text-sm",children:e})]}),i&&o&&jsx("div",{className:"mt-4 text-center",children:jsxs("button",{onClick:o,className:"text-sm text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300 font-medium transition-colors",children:[c$1," (",r.length-(n||0),"\uAC1C \uB354)"]})})]})});bt.displayName="NotificationCard";var pt=Ne.forwardRef(({title:t,value:r,description:e,icon:n,trend:o,chartData:c,chartLabels:m,variant:p="elevated",color:d="blue",loading:h=false,showChart:s=false,className:x,...g},i)=>{let u=Z(d),l$1=p==="gradient",f=l$1,v=useMemo(()=>{let S=Te(p,u);return p==="elevated"?S.replace("rounded-2xl","rounded-3xl"):S},[p,u]),y=S=>typeof S=="number"?S.toLocaleString():S;return jsxs("div",{ref:i,className:a("p-6 transition-all duration-200 hover:shadow-xl",v,x),...g,children:[jsxs("div",{className:"flex items-start justify-between mb-4",children:[n&&jsx("div",{className:a("w-12 h-12 rounded-lg flex items-center justify-center flex-shrink-0",l$1?"bg-white/20":u.icon),children:typeof n=="string"?jsx(l,{name:n,className:a("w-6 h-6",f?"text-white":"")}):n}),t&&jsx("span",{className:a("text-sm px-3 py-1 rounded-full font-medium",l$1?"bg-white/20 text-white":u.badge),children:t})]}),h?jsx("div",{className:"h-10 bg-gray-200 dark:bg-gray-700 rounded animate-pulse mb-2"}):jsx("h3",{className:a("text-3xl font-bold mb-1",f?"text-white":"text-gray-800 dark:text-white"),children:y(r)}),e&&jsx("p",{className:a("text-sm mb-3",f?"text-white/90":"text-gray-600 dark:text-gray-300"),children:e}),s&&c&&c.length>0&&jsx("div",{className:"mt-4 mb-3",children:jsx(De,{data:c,labels:m,color:d,height:100,showStats:false})}),o&&!h&&jsxs("div",{className:"mt-3 flex items-center gap-1",children:[jsxs("span",{className:a("text-xs font-medium",o.positive!==false?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400"),children:[o.positive!==false?"\u2191":"\u2193"," ",Math.abs(o.value),"%"]}),jsx("span",{className:a("text-xs",f?"text-white/70":"text-gray-500 dark:text-gray-400"),children:o.label})]})]})});pt.displayName="MetricCard";var ga={blue:"bg-blue-500",purple:"bg-purple-500",green:"bg-green-500",orange:"bg-orange-500",red:"bg-red-500",indigo:"bg-indigo-500",pink:"bg-pink-500",gray:"bg-gray-500"},ba={sm:{container:"p-4",icon:"w-8 h-8",iconSize:"w-4 h-4",title:"text-sm",value:"text-xl",progress:"h-1.5"},md:{container:"p-6",icon:"w-12 h-12",iconSize:"w-6 h-6",title:"text-base",value:"text-2xl",progress:"h-2"},lg:{container:"p-8",icon:"w-16 h-16",iconSize:"w-8 h-8",title:"text-lg",value:"text-3xl",progress:"h-3"}},xt=Ne.forwardRef(({title:t,current:r,total:e,unit:n="",description:o,icon:c,color:m="blue",variant:p="elevated",showPercentage:d=true,showLabel:h=true,size:s="md",loading:x=false,className:g,...i},u)=>{let l$1=Z(m),f=ba[s],v=e>0?Math.min(Math.max(r/e*100,0),100):0,y=p==="gradient",D={default:`rounded-2xl border ${l$1.default}`,gradient:`rounded-2xl border text-white ${l$1.gradient}`,outline:`rounded-2xl border-2 ${l$1.outline}`,elevated:`rounded-3xl border ${l$1.elevated}`}[p];return jsxs("div",{ref:u,className:a("transition-all duration-200 hover:shadow-xl",D,f.container,g),...i,children:[jsxs("div",{className:"flex items-start justify-between mb-4",children:[c&&jsx("div",{className:a("rounded-lg flex items-center justify-center flex-shrink-0",f.icon,y?"bg-white/20":l$1.icon),children:typeof c=="string"?jsx(l,{name:c,className:a(f.iconSize,y?"text-white":"")}):c}),jsxs("div",{className:"flex-1 ml-4",children:[jsx("h3",{className:a("font-semibold mb-1",f.title,y?"text-white":"text-gray-800 dark:text-white"),children:t}),o&&jsx("p",{className:a("text-sm",y?"text-white/90":"text-gray-600 dark:text-gray-400"),children:o})]})]}),x?jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse"}),jsx("div",{className:"h-2 bg-gray-200 dark:bg-gray-700 rounded animate-pulse"})]}):jsxs(Fragment,{children:[jsxs("div",{className:"flex items-baseline justify-between mb-2",children:[jsxs("span",{className:a("font-bold",f.value,y?"text-white":`text-${m}-600 dark:text-${m}-400`),children:[r.toLocaleString(),n&&jsx("span",{className:"text-sm ml-1",children:n})]}),h&&jsxs("span",{className:a("text-sm",y?"text-white/80":"text-gray-600 dark:text-gray-400"),children:["/ ",e.toLocaleString(),n&&jsx("span",{className:"ml-1",children:n})]})]}),jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden",children:jsx("div",{className:a("rounded-full transition-all duration-500",f.progress,y?`bg-gradient-to-r ${l$1.gradient.replace("bg-gradient-to-br","bg-gradient-to-r").trim()}`:ga[m]),style:{width:`${v}%`}})}),d&&jsx("div",{className:"mt-2 flex justify-end",children:jsxs("span",{className:a("text-xs font-semibold",y?"text-white/90":`text-${m}-600 dark:text-${m}-400`),children:[v.toFixed(1),"%"]})})]})]})});xt.displayName="ProgressCard";var ua={default:{icon:"text-gray-400 dark:text-gray-500",title:"text-gray-900 dark:text-white",description:"text-gray-600 dark:text-gray-400"},warning:{icon:"text-yellow-500 dark:text-yellow-400",title:"text-gray-900 dark:text-white",description:"text-gray-600 dark:text-gray-400"},info:{icon:"text-blue-500 dark:text-blue-400",title:"text-gray-900 dark:text-white",description:"text-gray-600 dark:text-gray-400"},error:{icon:"text-red-500 dark:text-red-400",title:"text-gray-900 dark:text-white",description:"text-gray-600 dark:text-gray-400"},success:{icon:"text-green-500 dark:text-green-400",title:"text-gray-900 dark:text-white",description:"text-gray-600 dark:text-gray-400"}},fa={sm:{container:"py-8",icon:"w-8 h-8 mb-3",title:"text-base",description:"text-sm",button:"text-sm px-4 py-2"},md:{container:"py-12",icon:"w-12 h-12 mb-4",title:"text-lg",description:"text-sm",button:"text-sm px-6 py-2"},lg:{container:"py-16",icon:"w-16 h-16 mb-6",title:"text-xl",description:"text-base",button:"text-base px-8 py-3"}},_=Ne.forwardRef(({icon:t="inbox",title:r,description:e,actionText:n,actionHref:o,actionOnClick:c,variant:m="default",size:p="md",className:d,...h},s)=>{let x=ua[m],g=fa[p],i=n&&(o||c)&&jsx("div",{className:"mt-6",children:o?jsx("a",{href:o,"aria-label":n,className:a("inline-flex items-center justify-center rounded-lg font-medium bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 border border-gray-300 dark:border-gray-600 transition-colors duration-200",g.button),children:n}):jsx("button",{onClick:c,"aria-label":n,className:a("inline-flex items-center justify-center rounded-lg font-medium bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 border border-gray-300 dark:border-gray-600 transition-colors duration-200",g.button),children:n})});return jsxs("div",{ref:s,className:a("text-center",g.container,d),...h,children:[t&&jsx("div",{className:a("mx-auto",x.icon),children:typeof t=="string"?jsx(l,{name:t,className:a("w-full h-full",x.icon)}):t}),jsx("h3",{className:a("font-semibold mb-2",x.title,g.title),children:r}),e&&jsx("p",{className:a("mb-4",x.description,g.description),children:e}),i]})});_.displayName="DashboardEmptyState";var va=72,ya=264,ut=Ne.forwardRef(({logo:t,productSwitcher:r,sections:e,footerActions:n,isCollapsed:o,defaultCollapsed:c=false,onToggleCollapsed:m,collapsedWidth:p=va,expandedWidth:d=ya,mobileBreakpoint:h=1024,overlayBackground:s="rgba(15, 23, 42, 0.45)",className:x,...g},i)=>{let[u$1,l$1]=Ne.useState(c),[f,v]=Ne.useState(false),[y,S]=Ne.useState(false),D=typeof o=="boolean"?o:u$1;Ne.useEffect(()=>{let M=()=>S(window.innerWidth<=h);return M(),window.addEventListener("resize",M),()=>window.removeEventListener("resize",M)},[h]);let P=()=>{let M=!D;l$1(M),m==null||m(M);},b=D?p:d,T=jsxs("aside",{ref:i,role:"navigation","aria-label":"\uB300\uC2DC\uBCF4\uB4DC \uB124\uBE44\uAC8C\uC774\uC158",className:a("flex h-full flex-col border-r border-slate-200/60 bg-white/95 px-3 py-4 shadow-sm dark:border-slate-800 dark:bg-slate-950/80 backdrop-blur transition-[width] duration-200",x),style:{width:b,minWidth:b},...g,children:[jsxs("div",{className:"mb-6 flex items-center justify-between gap-2 px-1",children:[jsxs("div",{className:"flex items-center gap-2",children:[t,!D&&r]}),jsxs("button",{type:"button",onClick:P,"aria-label":D?"\uC0AC\uC774\uB4DC\uBC14 \uD3BC\uCE58\uAE30":"\uC0AC\uC774\uB4DC\uBC14 \uC811\uAE30","aria-expanded":!D,className:"inline-flex h-8 w-8 items-center justify-center rounded-full border border-slate-200 text-slate-500 transition-colors hover:bg-slate-100 dark:border-slate-700 dark:text-slate-300 dark:hover:bg-slate-800",children:[jsx(l,{name:D?"chevronRight":"chevronLeft",className:"h-4 w-4"}),jsx("span",{className:"sr-only",children:"\uC0AC\uC774\uB4DC\uBC14 \uD1A0\uAE00"})]})]}),jsx("div",{className:"flex-1 space-y-6 overflow-y-auto",children:e.map(M=>jsxs("div",{className:"space-y-2",children:[!D&&M.label&&jsx("div",{className:"px-3 text-xs font-medium uppercase tracking-wide text-slate-400 dark:text-slate-500",role:"heading","aria-level":2,children:M.label}),jsx("nav",{className:"space-y-1","aria-label":M.label||"\uB124\uBE44\uAC8C\uC774\uC158",children:M.items.map(L=>{let ee=a("group flex w-full items-center rounded-xl px-3 py-2 text-sm font-medium transition focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/70",L.active?"bg-blue-50 text-blue-600 dark:bg-blue-500/15 dark:text-blue-200":"text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800"),me=jsxs(Fragment,{children:[L.icon&&jsx("span",{className:"mr-3",children:typeof L.icon=="string"?jsx(l,{name:L.icon,className:"h-5 w-5"}):L.icon}),!D&&jsxs(Fragment,{children:[jsx("span",{className:"flex-1 text-left",children:L.label}),L.badge&&jsx("span",{className:"text-xs text-slate-400",children:L.badge})]})]}),ge=L.href?jsx("a",{href:L.href,className:ee,"aria-current":L.active?"page":void 0,children:me},L.id):jsx("button",{type:"button",onClick:L.onClick,className:ee,"aria-pressed":L.active,children:me},L.id);return D?jsx(u,{content:L.label,children:ge},L.id):ge})})]},M.id))}),jsxs("div",{className:"mt-4 border-t border-slate-100 pt-4 dark:border-slate-800",children:[n,jsx("div",{className:"mt-2 hidden text-xs text-slate-400 lg:block",children:jsx("span",{children:"\u24D2 HUA Labs"})})]})]});return jsx(Fragment,{children:y?jsxs(Fragment,{children:[jsxs("button",{className:"inline-flex items-center gap-2 rounded-full border border-slate-200 px-3 py-2 text-sm text-slate-600 shadow-sm dark:border-slate-700 dark:text-slate-200",onClick:()=>v(true),children:[jsx(l,{name:"menu",className:"h-4 w-4"}),"\uBA54\uB274"]}),f&&jsxs("div",{className:"fixed inset-0 z-40 flex",children:[jsx("div",{className:"absolute inset-0",style:{backgroundColor:s},onClick:()=>v(false)}),jsxs("div",{className:"relative z-50 h-full",children:[T,jsx("button",{className:"absolute top-4 right-4 rounded-full border border-slate-200 bg-white p-2 shadow-sm dark:border-slate-700 dark:bg-slate-900",onClick:()=>v(false),children:jsx(l,{name:"close",className:"h-4 w-4"})})]})]})]}):T})});ut.displayName="DashboardSidebar";var ht={approved:{label:"\uC2B9\uC778",badge:"bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-200"},pending:{label:"\uB300\uAE30",badge:"bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-200"},failed:{label:"\uC2E4\uD328",badge:"bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-200"},refunded:{label:"\uD658\uBD88",badge:"bg-sky-100 text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},cancelled:{label:"\uCDE8\uC18C",badge:"bg-slate-100 text-slate-700 dark:bg-slate-500/15 dark:text-slate-200"},review:{label:"\uAC80\uD1A0\uC911",badge:"bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-200"}},vt=[{key:"id",label:"\uAC70\uB798 ID",width:"160px"},{key:"merchant",label:"\uAC00\uB9F9\uC810"},{key:"amount",label:"\uAE08\uC561",align:"right",width:"140px"},{key:"status",label:"\uC0C1\uD0DC",width:"120px"},{key:"method",label:"\uACB0\uC81C\uC218\uB2E8",width:"120px"},{key:"date",label:"\uAC70\uB798 \uC77C\uC2DC",width:"180px"}],yt=({rows:t$1,columns:r=vt,isLoading:e$1=false,caption:n,filters:o,emptyState:c,onRowClick:m,highlightRow:p,statusLabels:d,statusRenderer:h$1,amountFormatter:s,methodFormatter:x,dateFormatter:g$1,locale:i$1="ko-KR",defaultCurrency:u="KRW",className:l,footer:f$1,rowActionLabel:v,rowActionHint:y})=>{let S=r.length>0?r:vt,D=t$1.length>0,P=Ne.useId(),b$1=y?`${P}-row-action-hint`:void 0,T=Ne.useCallback(N=>v?v(N):`${N.id?`\uAC70\uB798 ${N.id}`:"\uAC70\uB798 \uD589"} \uC0C1\uC138 \uBCF4\uAE30`,[v]),M=(N,C)=>{var F;if(h$1)return h$1(N,C);let X=ht[N]||ht.pending,fe=(F=d==null?void 0:d[N])!=null?F:X.label;return jsx(i,{className:a("font-medium px-3 py-1 rounded-full text-xs",X.badge),children:fe})},L=N=>{if(s)return s(N);let C=N.currency||u;try{return jsx("span",{className:"font-semibold text-slate-900 dark:text-slate-100",children:new Intl.NumberFormat(i$1,{style:"currency",currency:C,maximumFractionDigits:2}).format(N.amount)})}catch{return `${N.amount.toLocaleString(i$1)} ${C}`}},ee=N=>{var C;return x?x(N):(C=N.method)!=null?C:"-"},me=N=>g$1?g$1(N):(N.date instanceof Date?N.date:new Date(N.date)).toLocaleString(i$1,{dateStyle:"medium",timeStyle:"short"}),ge=(N,C)=>{var X;if(N.render)return N.render(C);switch(N.key){case "id":return jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"font-medium text-slate-900 dark:text-slate-100",children:C.id}),C.reference&&jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:C.reference})]});case "merchant":return jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"font-medium text-slate-900 dark:text-slate-100",children:C.merchant}),C.customer&&jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:C.customer})]});case "amount":return jsxs("div",{className:"flex flex-col items-end",children:[L(C),typeof C.fee=="number"&&jsxs("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:["\uC218\uC218\uB8CC ",C.fee.toLocaleString(i$1)]})]});case "status":return M(C.status,C);case "method":return jsx("span",{className:"text-slate-700 dark:text-slate-300",children:ee(C)});case "date":return jsx("span",{className:"text-slate-700 dark:text-slate-300",children:me(C)});case "customer":return (X=C.customer)!=null?X:"-";case "fee":return typeof C.fee=="number"?C.fee.toLocaleString(i$1):"-";default:return "-"}};return jsxs("div",{className:a("rounded-2xl border border-slate-200/60 dark:border-slate-800 bg-white dark:bg-slate-900",l),children:[o&&jsx("div",{className:"border-b border-slate-100 dark:border-slate-800 px-4 sm:px-6 py-4",children:o}),jsx("div",{className:"p-4 sm:p-6",children:jsxs("div",{className:"rounded-xl border border-slate-100 dark:border-slate-800 overflow-hidden",children:[jsxs(a$2,{role:"table","aria-label":n&&typeof n=="string"?n:"\uAC70\uB798 \uBAA9\uB85D \uD14C\uC774\uBE14",children:[n&&jsx(h,{children:n}),jsx(b,{className:"bg-slate-50/60 dark:bg-slate-900/40",children:jsx(e,{className:"text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400",children:S.map(N=>jsx(f,{style:{width:N.width},className:a(N.align==="right"?"text-right":N.align==="center"?"text-center":"text-left","text-xs font-semibold"),children:N.label},N.key))})}),jsxs(c$1,{children:[e$1&&jsx(e,{children:jsx(g,{colSpan:S.length,children:jsx(t,{className:"py-4"})})}),!e$1&&!D&&jsx(e,{children:jsx(g,{colSpan:S.length,children:c||jsx(_,{title:"\uAC70\uB798 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",description:"\uD544\uD130\uB97C \uC870\uC815\uD558\uAC70\uB098 \uB0A0\uC9DC \uBC94\uC704\uB97C \uBCC0\uACBD\uD574\uBCF4\uC138\uC694.",icon:"database-backup",size:"md"})})}),!e$1&&t$1.map(N=>{let C=!!m,X=F=>{m&&(F.key==="Enter"||F.key===" "||F.key==="Spacebar")&&(F.preventDefault(),m(N));},fe=C?T(N):void 0;return jsx(e,{tabIndex:C?0:void 0,role:C?"button":void 0,onKeyDown:C?X:void 0,onClick:m?()=>m(N):void 0,"aria-label":fe,"aria-describedby":C&&b$1?b$1:void 0,className:a("text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/70",C&&"cursor-pointer hover:bg-slate-50 dark:hover:bg-slate-800/60",(p==null?void 0:p(N))&&"bg-blue-50/60 dark:bg-blue-900/20"),children:S.map(F=>jsx(g,{className:a(F.align==="right"?"text-right":F.align==="center"?"text-center":"text-left","align-middle"),children:ge(F,N)},F.key))},N.id)})]})]}),!e$1&&D&&f$1&&jsx("div",{className:"border-t border-slate-100 dark:border-slate-800 bg-slate-50/50 dark:bg-slate-900/50 px-4 py-3 text-sm text-slate-600 dark:text-slate-300",children:f$1})]})}),y&&jsx("p",{id:b$1,className:"sr-only",children:y})]})};yt.displayName="TransactionsTable";var Na={primary:"bg-blue-600 text-white hover:bg-blue-700",secondary:"border border-slate-200 text-slate-800 hover:bg-slate-50 dark:border-slate-700 dark:text-white dark:hover:bg-slate-800",ghost:"text-slate-600 hover:text-slate-900 dark:text-slate-300 dark:hover:text-white"},wa=({label:t,onClick:r,href:e,icon:n,appearance:o="secondary",loading:c})=>{let m=jsxs(Fragment,{children:[n&&(typeof n=="string"?jsx(l,{name:n,className:"h-4 w-4"}):n),jsx("span",{children:t})]}),p=a("inline-flex items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors",Na[o]);return e?jsx("a",{className:p,href:e,children:m}):jsx("button",{className:p,onClick:r,disabled:c,children:m})},kt=Ne.forwardRef(({title:t,description:r,meta:e,variant:n="cards",dateRange:o,filters:c,actions:m,onRefresh:p,lastUpdated:d,className:h,...s},x$1)=>{var i;let g=a("w-full",n==="cards"?"rounded-2xl border border-slate-200/70 dark:border-slate-800 bg-white dark:bg-slate-900 shadow-sm":"");return jsx("div",{ref:x$1,className:a(g,h),...s,children:jsxs("div",{className:"flex flex-col gap-4 px-4 py-4 sm:px-6 sm:py-5",children:[jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[jsxs("div",{children:[t&&jsx("div",{className:"text-xl font-semibold text-slate-900 dark:text-slate-50",children:t}),r&&jsx("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:r})]}),jsxs("div",{className:"flex flex-wrap gap-2",children:[o&&jsx(x,{trigger:jsxs(a$1,{variant:"outline",size:"sm",className:"gap-2","aria-label":`\uB0A0\uC9DC \uBC94\uC704 \uC120\uD0DD: ${o.display||"\uB0A0\uC9DC \uBC94\uC704"}`,children:[jsx(l,{name:"calendar",className:"h-4 w-4"}),o.display||"\uB0A0\uC9DC \uBC94\uC704"]}),children:jsxs(B,{className:"max-h-64 overflow-auto",children:[(i=o.presets)==null?void 0:i.map(u=>jsx(y,{onClick:()=>{var l;return (l=o.onSelectPreset)==null?void 0:l.call(o,u)},children:u.label},u.value)),o.onCustomRange&&jsx(y,{onClick:o.onCustomRange,children:"\uC0AC\uC6A9\uC790 \uC9C0\uC815..."})]})}),p&&jsxs(a$1,{variant:"ghost",size:"sm",className:"gap-2 text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white",onClick:p,"aria-label":"\uB370\uC774\uD130 \uC0C8\uB85C\uACE0\uCE68",children:[jsx(l,{name:"refresh",className:"h-4 w-4"}),"\uC0C8\uB85C\uACE0\uCE68"]})]})]}),(c||e||d)&&jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between border-t border-slate-100 dark:border-slate-800 pt-3",children:[jsxs("div",{className:"flex flex-wrap items-center gap-3 text-sm text-slate-600 dark:text-slate-300",children:[c,e]}),d&&jsxs("span",{className:"text-xs text-slate-400",children:["\uC5C5\uB370\uC774\uD2B8: ",d]})]}),m&&m.length>0&&jsx("div",{className:"flex flex-wrap justify-end gap-2 border-t border-slate-100 dark:border-slate-800 pt-4",children:m.map(u=>jsx(wa,{...u},u.label))})]})})});kt.displayName="DashboardToolbar";var Nt={approval:["#22c55e","#f97316","#ef4444"],settlement:["#6366f1","#0ea5e9","#14b8a6"],custom:["#0ea5e9"]},wt=({series:t,categories:r,palette:e="approval",height:n=200,showLegend:o=true,showDots:c=true,showTooltip:m=false,className:p,...d})=>{let h=Nt[e]||Nt.approval,s=r.length>0?r:["\u2014"],x=Math.max(s.length-1,1),g=Math.max(...t.flatMap(l=>l.data),10);Ne.useId();let u=t.length>0?`\uD2B8\uB80C\uB4DC \uCC28\uD2B8 - ${t.length}\uAC1C \uC2DC\uB9AC\uC988, ${s.length}\uAC1C \uCE74\uD14C\uACE0\uB9AC, \uCD5C\uB300\uAC12 ${g.toLocaleString()}`:`\uD2B8\uB80C\uB4DC \uCC28\uD2B8 - ${s.length}\uAC1C \uCE74\uD14C\uACE0\uB9AC`;return jsxs("div",{role:"img","aria-label":u,className:a("rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900 p-4",p),...d,children:[jsxs("div",{className:"relative",style:{height:n},children:[t.map((l,f)=>{let v=l.color||h[f%h.length],y=l.data.map((P,b)=>{var T,M;return {x:b/x*100,y:100-P/g*100,value:P,label:(M=(T=s[b])!=null?T:s[s.length-1])!=null?M:""}});if(y.length===0)return null;let S=y.map((P,b)=>`${b===0?"M":"L"} ${P.x},${P.y}`).join(" "),D=`${S} L 100,100 L 0,100 Z`;return jsxs("svg",{viewBox:"0 0 100 100",preserveAspectRatio:"none",className:"absolute inset-0 h-full w-full",children:[l.area&&jsx("path",{d:D,fill:v,opacity:.08,stroke:"none"}),jsx("path",{d:S,fill:"none",stroke:v,strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round"}),c&&y.map((P,b)=>jsx("circle",{cx:P.x,cy:P.y,r:1.2,fill:"#fff",stroke:v,strokeWidth:.8,children:m&&jsxs("title",{children:[l.label," \xB7 ",P.label,": ",P.value.toLocaleString()]})},`${l.label}-${b}`))]},l.label)}),jsx("div",{className:"absolute inset-x-0 bottom-0 flex text-[10px] text-slate-400",children:s.map((l,f)=>jsx("div",{className:"flex-1 text-center",children:l},l))})]}),o&&jsx("div",{className:"mt-4 flex flex-wrap gap-4 text-sm text-slate-600 dark:text-slate-300",role:"list","aria-label":"\uCC28\uD2B8 \uBC94\uB840",children:t.map((l,f)=>{let v=l.color||h[f%h.length];return jsxs("div",{role:"listitem",className:"flex items-center gap-2",tabIndex:0,"aria-label":`${l.label} \uC2DC\uB9AC\uC988`,onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&y.preventDefault();},children:[jsx("span",{className:"inline-block h-2 w-2 rounded-full",style:{backgroundColor:v},"aria-hidden":"true"}),jsx("span",{children:l.label})]},l.label)})})]})};wt.displayName="TrendChart";var Ra={approved:{label:"\uC2B9\uC778",badge:"bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-200"},pending:{label:"\uB300\uAE30",badge:"bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-200"},failed:{label:"\uC2E4\uD328",badge:"bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-200"},refunded:{label:"\uD658\uBD88",badge:"bg-sky-100 text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},cancelled:{label:"\uCDE8\uC18C",badge:"bg-slate-100 text-slate-700 dark:bg-slate-500/15 dark:text-slate-200"},review:{label:"\uAC80\uD1A0\uC911",badge:"bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-200"}},Ee=(t,r,e="ko-KR")=>{if(typeof t!="number")return "-";try{return new Intl.NumberFormat(e,{style:"currency",currency:r!=null?r:"KRW",maximumFractionDigits:2}).format(t)}catch{return `${t.toLocaleString(e)} ${r!=null?r:""}`.trim()}},Be=(t,r="ko-KR")=>{if(!t)return "-";let e=t instanceof Date?t:new Date(t);return Number.isNaN(e.getTime())?"-":e.toLocaleString(r,{dateStyle:"medium",timeStyle:"short"})},Ta=t=>{switch(t){case "success":return "bg-emerald-50 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-100";case "warning":return "bg-amber-50 text-amber-700 dark:bg-amber-500/20 dark:text-amber-100";case "error":return "bg-rose-50 text-rose-700 dark:bg-rose-500/20 dark:text-rose-100";default:return "bg-slate-50 text-slate-600 dark:bg-slate-800/50 dark:text-slate-100"}},Da=t=>{switch(t){case "completed":return "bg-emerald-50 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-100";case "processing":return "bg-sky-50 text-sky-700 dark:bg-sky-500/20 dark:text-sky-100";case "failed":return "bg-rose-50 text-rose-700 dark:bg-rose-500/20 dark:text-rose-100";case "pending":return "bg-amber-50 text-amber-700 dark:bg-amber-500/20 dark:text-amber-100";default:return "bg-slate-50 text-slate-600 dark:bg-slate-800/50 dark:text-slate-100"}},Ct=({open:t,onClose:r,transaction:e,metadata:n=[],settlement:o,fees:c=[],events:m=[],actions:p,summary:d,loading:h=false,locale:s="ko-KR",defaultCurrency:x="KRW",emptyState:g,className:i$1})=>{var l$1,f,v,y,S,D$1,P;let u=e&&Ra[e.status];return jsxs(D,{open:t,onOpenChange:b=>{b||r();},className:i$1,children:[jsx(E,{onClose:r,children:jsxs("div",{className:"space-y-1",children:[jsxs("div",{className:"flex items-center gap-2 text-xs uppercase tracking-wide text-slate-400",children:[jsx("span",{children:"\uAC70\uB798 \uC0C1\uC138"}),(e==null?void 0:e.reference)&&jsx("span",{className:"rounded-full bg-slate-100 px-2 py-0.5 text-slate-500",children:e.reference})]}),jsxs("div",{className:"flex items-center gap-3",children:[jsx("p",{className:"text-lg font-semibold text-slate-900 dark:text-white",children:(l$1=e==null?void 0:e.id)!=null?l$1:"\u2014"}),u&&jsx(i,{className:a("font-medium px-3 py-1 text-xs rounded-full",u.badge),children:u.label})]}),jsxs("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:[(f=e==null?void 0:e.merchant)!=null?f:"\uAC00\uB9F9\uC810 \uC815\uBCF4 \uC5C6\uC74C"," \xB7 ",(v=e==null?void 0:e.method)!=null?v:"\uACB0\uC81C\uC218\uB2E8 \uBBF8\uC9C0\uC815"]})]})}),jsx(F,{className:"space-y-6",children:h?jsx("div",{className:"space-y-4",children:[...Array(3)].map((b,T)=>jsx("div",{className:"h-20 rounded-2xl border border-slate-100 dark:border-slate-800 animate-pulse bg-slate-50/60 dark:bg-slate-900/40"},T))}):jsxs(Fragment,{children:[jsxs("section",{className:"grid gap-4 rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/40 p-4 md:grid-cols-2","aria-label":"\uAC70\uB798 \uC694\uC57D \uC815\uBCF4",children:[jsxs("div",{className:"space-y-1",children:[jsx("p",{className:"text-xs uppercase text-slate-400",children:"\uAC70\uB798 \uAE08\uC561"}),jsx("p",{className:"text-2xl font-semibold text-slate-900 dark:text-white",children:Ee(e==null?void 0:e.amount,(y=e==null?void 0:e.currency)!=null?y:x,s)}),jsxs("p",{className:"text-xs text-slate-400",children:["\uC0DD\uC131 ",jsx("time",{dateTime:(e==null?void 0:e.createdAt)instanceof Date?e.createdAt.toISOString():typeof(e==null?void 0:e.createdAt)=="string"?e.createdAt:void 0,children:Be(e==null?void 0:e.createdAt,s)})]})]}),jsxs("div",{className:"space-y-2",children:[jsx("p",{className:"text-xs uppercase text-slate-400",children:"\uC694\uC57D"}),d!=null?d:jsxs("p",{className:"text-sm text-slate-600 dark:text-slate-300",children:[(S=e==null?void 0:e.customer)!=null?S:"\uACE0\uAC1D \uC815\uBCF4 \uC5C6\uC74C"," / ",(D$1=e==null?void 0:e.method)!=null?D$1:"\uACB0\uC81C\uC218\uB2E8 \uBBF8\uC9C0\uC815"]})]})]}),n.length>0&&jsxs("section",{className:"rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/40 p-4","aria-label":"\uAC70\uB798 \uC138\uBD80 \uC815\uBCF4",role:"region",children:[jsx("h3",{className:"mb-3 text-sm font-semibold text-slate-900 dark:text-white",children:"\uC138\uBD80 \uC815\uBCF4"}),jsx("dl",{className:"grid gap-4 sm:grid-cols-2",children:n.map(b=>jsxs("div",{className:"flex items-center gap-3",children:[b.icon&&jsx("span",{className:"rounded-lg bg-slate-100 p-2 text-slate-500 dark:bg-slate-800/80","aria-hidden":"true",children:jsx(l,{name:b.icon,className:"h-4 w-4"})}),jsxs("div",{children:[jsx("dt",{className:"text-xs uppercase text-slate-400",children:b.label}),jsx("dd",{className:"text-sm text-slate-700 dark:text-slate-200",children:b.value})]})]},b.label))})]}),o&&jsxs("section",{className:"rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/40 p-4","aria-label":"\uC815\uC0B0 \uC815\uBCF4",role:"region",children:[jsxs("div",{className:"mb-4 flex items-center justify-between",children:[jsxs("div",{children:[jsx("h3",{className:"text-sm font-semibold text-slate-900 dark:text-white",children:"\uC815\uC0B0 \uC815\uBCF4"}),o.note&&jsx("p",{className:"text-xs text-slate-500",children:o.note})]}),o.status&&jsx("span",{className:a("rounded-full px-3 py-1 text-xs font-medium",Da(o.status)),"aria-label":`\uC815\uC0B0 \uC0C1\uD0DC: ${o.status}`,children:o.status})]}),jsxs("dl",{className:"grid gap-4 md:grid-cols-2",children:[jsxs("div",{children:[jsx("dt",{className:"text-xs uppercase text-slate-400",children:"\uC815\uC0B0 \uAE08\uC561"}),jsx("dd",{className:"text-sm text-slate-700 dark:text-slate-200",children:Ee(o.amount,(P=o.currency)!=null?P:x,s)})]}),jsxs("div",{children:[jsx("dt",{className:"text-xs uppercase text-slate-400",children:"\uC608\uC815\uC77C"}),jsx("dd",{className:"text-sm text-slate-700 dark:text-slate-200",children:o.scheduledDate&&jsx("time",{dateTime:o.scheduledDate instanceof Date?o.scheduledDate.toISOString():typeof o.scheduledDate=="string"?o.scheduledDate:void 0,children:Be(o.scheduledDate,s)})})]}),o.bankAccount&&jsxs("div",{children:[jsx("dt",{className:"text-xs uppercase text-slate-400",children:"\uACC4\uC88C"}),jsx("dd",{className:"text-sm text-slate-700 dark:text-slate-200",children:o.bankAccount})]}),o.expectedPayout&&jsxs("div",{children:[jsx("dt",{className:"text-xs uppercase text-slate-400",children:"\uC608\uC0C1 \uC9C0\uAE09"}),jsx("dd",{className:"text-sm text-slate-700 dark:text-slate-200",children:o.expectedPayout})]})]})]}),c.length>0&&jsxs("section",{className:"rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/40 p-4","aria-label":"\uC218\uC218\uB8CC \uB0B4\uC5ED",role:"region",children:[jsx("h3",{className:"mb-3 text-sm font-semibold text-slate-900 dark:text-white",children:"\uC218\uC218\uB8CC"}),jsx("dl",{className:"space-y-3",children:c.map(b=>{var T;return jsxs("div",{className:"flex items-center justify-between text-sm text-slate-700 dark:text-slate-200",children:[jsxs("div",{children:[jsx("dt",{className:"font-medium",children:b.label}),b.description&&jsx("dd",{className:"text-xs text-slate-400",children:b.description})]}),jsx("dd",{children:Ee(b.amount,(T=b.currency)!=null?T:x,s)})]},b.label)})})]}),jsxs("section",{className:"rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/40 p-4","aria-label":"\uC774\uBCA4\uD2B8 \uB85C\uADF8",role:"region",children:[jsx("h3",{className:"mb-4 text-sm font-semibold text-slate-900 dark:text-white",children:"\uC774\uBCA4\uD2B8 \uB85C\uADF8"}),m.length===0?g!=null?g:jsx(_,{icon:"activity",title:"\uC774\uBCA4\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",description:"\uC2B9\uC778/\uC815\uC0B0 \uB4F1 \uC0C1\uD0DC \uBCC0\uD654\uAC00 \uBC1C\uC0DD\uD558\uBA74 \uC790\uB3D9\uC73C\uB85C \uD45C\uC2DC\uB429\uB2C8\uB2E4.",size:"sm"}):jsx("ol",{className:"space-y-3",role:"list","aria-label":"\uC774\uBCA4\uD2B8 \uBAA9\uB85D",children:m.map(b=>{var T;return jsxs("li",{role:"listitem",className:"flex items-start gap-3 rounded-xl border border-slate-100 dark:border-slate-800 p-3",children:[jsx("div",{className:a("rounded-lg p-2",Ta(b.status)),"aria-hidden":"true",children:jsx(l,{name:(T=b.icon)!=null?T:"activity",className:"h-4 w-4"})}),jsxs("div",{className:"flex-1",children:[jsxs("div",{className:"flex items-center justify-between text-sm font-medium text-slate-900 dark:text-white",children:[jsx("span",{children:b.title}),jsx("time",{dateTime:b.timestamp instanceof Date?b.timestamp.toISOString():typeof b.timestamp=="string"?b.timestamp:void 0,className:"text-xs text-slate-400",children:Be(b.timestamp,s)})]}),b.description&&jsx("p",{className:"text-xs text-slate-500 dark:text-slate-300",children:b.description}),b.actor&&jsxs("p",{className:"text-xs text-slate-400 mt-1","aria-label":`\uC2E4\uD589\uC790: ${b.actor}`,children:["by ",b.actor]})]})]},b.id)})})]})]})}),p&&jsx(G,{children:p})]})};Ct.displayName="TransactionDetailDrawer";var La={completed:{dot:"bg-emerald-500 border-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.5)]",border:"border-emerald-200 dark:border-emerald-500/40",text:"text-emerald-700 dark:text-emerald-300",label:"\uC815\uC0B0 \uC644\uB8CC"},processing:{dot:"bg-sky-500 border-sky-500 shadow-[0_0_8px_rgba(14,165,233,0.5)] animate-pulse",border:"border-sky-200 dark:border-sky-500/40",text:"text-sky-700 dark:text-sky-200",label:"\uCC98\uB9AC \uC911"},pending:{dot:"bg-amber-400 border-amber-400",border:"border-amber-200 dark:border-amber-500/40",text:"text-amber-700 dark:text-amber-200",label:"\uB300\uAE30"},failed:{dot:"bg-rose-500 border-rose-500",border:"border-rose-200 dark:border-rose-500/40",text:"text-rose-700 dark:text-rose-300",label:"\uC2E4\uD328"}},$a=(t,r,e="ko-KR")=>{if(typeof t!="number")return;let n=r!=null?r:"KRW";try{return new Intl.NumberFormat(e,{style:"currency",currency:n,maximumFractionDigits:2}).format(t)}catch{return `${t.toLocaleString(e)} ${n}`}},Pa=(t,r="ko-KR")=>{if(!t)return;let e=t instanceof Date?t:new Date(t);if(!Number.isNaN(e.getTime()))return e.toLocaleString(r,{dateStyle:"medium",timeStyle:"short"})},St=({items:t,highlightedId:r,locale:e="ko-KR",defaultCurrency:n="KRW",emptyState:o,className:c,...m})=>{let p=t.length>0;return jsxs("div",{className:a("rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/50 p-4",c),...m,children:[jsx("div",{className:"mb-4 flex items-center justify-between",children:jsxs("div",{children:[jsx("p",{className:"text-sm font-semibold text-slate-900 dark:text-white",children:"\uC815\uC0B0 \uD0C0\uC784\uB77C\uC778"}),jsx("p",{className:"text-xs text-slate-500",children:"\uCC98\uB9AC \uB2E8\uACC4\uBCC4 \uC0C1\uD0DC\uC640 \uAE08\uC561\uC744 \uD655\uC778\uD558\uC138\uC694."})]})}),p?jsx("ol",{className:"space-y-4",role:"list","aria-label":"\uC815\uC0B0 \uD0C0\uC784\uB77C\uC778",children:t.map((d,h)=>{var f;let s=La[d.status],x=$a(d.amount,(f=d.currency)!=null?f:n,e),g=Pa(d.date,e),i=r===d.id,u=h!==t.length-1,l$1=`${d.title}, \uC0C1\uD0DC: ${s.label}${x?`, \uAE08\uC561: ${x}`:""}${g?`, \uB0A0\uC9DC: ${g}`:""}`;return jsxs("li",{role:"listitem","aria-label":l$1,className:"relative flex gap-4",children:[jsxs("div",{className:"flex flex-col items-center",children:[jsx("span",{className:a("z-10 h-3.5 w-3.5 rounded-full border-2 bg-white shadow",s.dot,i&&"scale-110"),"aria-label":`${s.label} \uC0C1\uD0DC`}),u&&jsx("span",{className:"mt-1 flex-1 w-px bg-slate-200 dark:bg-slate-700","aria-hidden":"true"})]}),jsxs("div",{className:a("flex-1 rounded-xl border p-4",s.border,i&&"border-2 shadow-sm"),children:[jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[jsx("span",{className:"text-sm font-semibold text-slate-900 dark:text-white",children:d.title}),jsx("span",{className:a("text-xs font-medium rounded-full px-2 py-0.5",s.text),children:s.label}),d.meta&&jsx("span",{className:"text-xs text-slate-500 dark:text-slate-300",children:d.meta})]}),d.description&&jsx("p",{className:"mt-1 text-sm text-slate-600 dark:text-slate-300",children:d.description}),jsxs("div",{className:"mt-3 flex flex-wrap gap-4 text-xs text-slate-500 dark:text-slate-300",children:[x&&jsxs("div",{className:"flex items-center gap-1 text-sm text-slate-700 dark:text-slate-100",children:[jsx(l,{name:"wallet",className:"h-3.5 w-3.5 text-slate-400"}),x]}),g&&jsxs("div",{className:"flex items-center gap-1",children:[jsx(l,{name:"clock",className:"h-3.5 w-3.5 text-slate-400","aria-hidden":true}),jsx("time",{dateTime:d.date instanceof Date?d.date.toISOString():typeof d.date=="string"?d.date:void 0,children:g})]})]})]})]},d.id)})}):o!=null?o:jsx(_,{icon:"calendar-clock",title:"\uC815\uC0B0 \uB2E8\uACC4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",description:"\uC815\uC0B0 \uC694\uCCAD\uC774 \uC0DD\uC131\uB418\uBA74 \uC790\uB3D9\uC73C\uB85C \uB2E8\uACC4\uAC00 \uCC44\uC6CC\uC9D1\uB2C8\uB2E4.",size:"sm"})]})};St.displayName="SettlementTimeline";var Pe=["#0ea5e9","#6366f1","#22c55e","#f97316","#a855f7","#ef4444"],Ia={normal:"bg-emerald-50 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-100",warning:"bg-amber-50 text-amber-700 dark:bg-amber-500/20 dark:text-amber-100",critical:"bg-rose-50 text-rose-700 dark:bg-rose-500/20 dark:text-rose-100"},Rt=(t,r)=>r<=0?"0%":`${Math.round(t/r*1e3)/10}%`,Tt=({title:t="PG / \uACB0\uC81C\uC218\uB2E8 \uBE44\uC911",description:r="\uB77C\uC6B0\uD305\uBCC4 \uCC98\uB9AC \uBE44\uC728\uACFC \uC0C1\uD0DC",segments:e,totalLabel:n="\uCD1D \uAC70\uB798",totalValue:o,highlightId:c,actions:m,emptyState:p,formatter:d,className:h,...s})=>{let x=e.length>0,g=e.reduce((i,u)=>i+u.value,0);return jsxs("div",{className:a("rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/60 p-5",h),...s,children:[jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[jsxs("div",{children:[jsx("p",{className:"text-sm font-semibold text-slate-900 dark:text-white",children:t}),jsx("p",{className:"text-xs text-slate-500",children:r})]}),m&&jsx("div",{className:"text-xs text-slate-500",children:m})]}),x?jsxs(Fragment,{children:[jsxs("div",{className:"mt-4",children:[jsx("div",{className:"flex h-3 overflow-hidden rounded-full bg-slate-100 dark:bg-slate-800",children:e.map((i,u)=>{var v;let l=g===0?0:i.value/g*100,f=(v=i.color)!=null?v:Pe[u%Pe.length];return jsx("div",{className:"h-full transition-all",style:{width:`${l}%`,backgroundColor:f,opacity:c&&c!==i.id?.4:1},"aria-label":`${i.label} ${Rt(i.value,g)}`},i.id)})}),jsxs("div",{className:"mt-2 text-xs text-slate-500",children:[n,": ",o!=null?o:g.toLocaleString()]})]}),jsx("div",{className:"mt-4 space-y-3",children:e.map((i,u)=>{var S;let l$1=(S=i.color)!=null?S:Pe[u%Pe.length],f=g===0?0:i.value/g*100,v=i.status?Ia[i.status]:null,y=d==null?void 0:d(i,f);return jsxs("div",{className:a("flex flex-wrap items-center gap-3 rounded-xl border border-slate-100 dark:border-slate-800 p-3 transition hover:border-slate-200 dark:hover:border-slate-700",c===i.id&&"border-2 border-slate-200 dark:border-slate-600"),children:[jsxs("div",{className:"flex items-center gap-2 min-w-[3rem]",children:[i.icon&&jsx("span",{className:"rounded-lg bg-slate-100 dark:bg-slate-800 p-1.5 text-slate-500",children:jsx(l,{name:i.icon,className:"h-4 w-4"})}),jsx("div",{className:"h-2 w-12 rounded-full",style:{backgroundColor:l$1},"aria-hidden":"true"})]}),jsxs("div",{className:"flex-1",children:[jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[jsx("span",{className:"text-sm font-medium text-slate-900 dark:text-white",children:i.label}),v&&jsx("span",{className:a("rounded-full px-2 py-0.5 text-[11px] font-medium",v),children:i.status==="critical"?"\uC7A5\uC560":i.status==="warning"?"\uAC10\uC2DC":"\uC815\uC0C1"})]}),jsx("div",{className:"text-xs text-slate-500 dark:text-slate-300",children:i.detail})]}),y!=null?y:jsxs("div",{className:"text-right text-sm text-slate-700 dark:text-slate-100",children:[jsx("div",{className:"font-semibold",children:i.value.toLocaleString()}),jsx("div",{className:"text-xs text-slate-500",children:Rt(i.value,g)})]})]},i.id)})})]}):p!=null?p:jsx(_,{icon:"pie-chart",title:"\uB77C\uC6B0\uD305 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",description:"PG \uB77C\uC6B0\uD305 \uD639\uC740 \uACB0\uC81C\uC218\uB2E8 \uC815\uBCF4\uAC00 \uC218\uC9D1\uB418\uBA74 \uC790\uB3D9\uC73C\uB85C \uD45C\uC2DC\uB429\uB2C8\uB2E4.",size:"sm",className:"mt-4"})]})};Tt.displayName="RoutingBreakdownCard";var Aa={normal:"bg-emerald-50 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-100",warning:"bg-amber-50 text-amber-700 dark:bg-amber-500/20 dark:text-amber-100",critical:"bg-rose-50 text-rose-700 dark:bg-rose-500/20 dark:text-rose-100"},Ea=t=>{if(typeof t=="number")return `${(Math.round(t*10)/10).toFixed(1)}%`},Ba=(t,r,e="ko-KR")=>{if(typeof t!="number")return;let n=r!=null?r:"KRW";try{return new Intl.NumberFormat(e,{style:"currency",currency:n,maximumFractionDigits:0}).format(t)}catch{return `${t.toLocaleString(e)} ${n}`}},Dt=({items:t,isLoading:r=false,filters:e,emptyState:n,onMerchantSelect:o,locale:c="ko-KR",defaultCurrency:m="KRW",className:p,...d})=>{let h=t.length>0;return jsxs("div",{className:a("rounded-2xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/50",p),...d,children:[e&&jsx("div",{className:"border-b border-slate-100 dark:border-slate-800 px-4 py-3 md:px-6",children:e}),jsx("div",{className:"p-4 md:p-6",children:r?jsx("div",{className:"space-y-3",children:[...Array(3)].map((s,x)=>jsx(j,{className:"h-20 rounded-2xl"},x))}):h?jsx("div",{className:"space-y-3",role:"list","aria-label":"\uAC00\uB9F9\uC810 \uBAA9\uB85D",children:t.map(s=>{var l$1,f,v;let x=Ea(s.approvalRate),g=Ba(s.volume,(l$1=s.currency)!=null?l$1:m,c),i$1=s.health?Aa[s.health]:void 0,u=`${s.name}${s.status?`, \uC0C1\uD0DC: ${s.status}`:""}${s.health?`, \uAC74\uAC15 \uC0C1\uD0DC: ${s.health==="critical"?"\uC704\uD5D8":s.health==="warning"?"\uAC10\uC2DC":"\uC815\uC0C1"}`:""}${g?`, \uAC70\uB798\uB7C9: ${g}`:""}${x?`, \uC2B9\uC778\uB960: ${x}`:""}`;return jsxs("button",{type:"button",role:"button",onClick:o?()=>o(s):void 0,disabled:!o,"aria-label":o?`${u} - \uD074\uB9AD\uD558\uC5EC \uC0C1\uC138 \uC815\uBCF4 \uBCF4\uAE30`:u,className:a("w-full rounded-2xl border border-slate-100 dark:border-slate-800 bg-white/90 dark:bg-slate-900/60 p-4 text-left shadow-sm transition hover:border-slate-200 dark:hover:border-slate-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/70",o?"cursor-pointer":"cursor-default opacity-60"),children:[jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[s.icon&&jsx("div",{className:"rounded-xl bg-slate-100 dark:bg-slate-800 p-2 text-slate-500",children:typeof s.icon=="string"?jsx(l,{name:s.icon,className:"h-5 w-5"}):s.icon}),jsxs("div",{className:"flex-1",children:[jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[jsx("p",{className:"text-sm font-semibold text-slate-900 dark:text-white",children:s.name}),s.status&&jsx(i,{className:"bg-slate-100 text-slate-600 dark:bg-slate-800 dark:text-slate-100",children:s.status}),s.tag&&jsx("span",{className:"rounded-full bg-slate-50 px-2 py-0.5 text-[11px] text-slate-500 dark:bg-slate-800/80",children:s.tag}),i$1&&jsx("span",{className:a("rounded-full px-2 py-0.5 text-[11px] font-medium",i$1),children:s.health==="critical"?"\uC704\uD5D8":s.health==="warning"?"\uAC10\uC2DC":"\uC815\uC0C1"})]}),jsxs("div",{className:"text-xs text-slate-500 dark:text-slate-300",children:[(f=s.category)!=null?f:"\uCE74\uD14C\uACE0\uB9AC \uBBF8\uC815"," \xB7 ",(v=s.region)!=null?v:"\uC9C0\uC5ED \uC815\uBCF4 \uC5C6\uC74C"]})]}),jsxs("div",{className:"text-right text-sm text-slate-900 dark:text-white",children:[g&&jsx("div",{className:"font-semibold",children:g}),x&&jsxs("div",{className:"text-xs text-slate-500",children:["\uC2B9\uC778\uB960 ",x]})]})]}),s.metadata&&s.metadata.length>0&&jsx("div",{className:"mt-3 grid gap-3 text-xs text-slate-500 dark:text-slate-300 sm:grid-cols-2",children:s.metadata.map(y=>jsxs("div",{className:"flex items-center gap-2",children:[jsx("span",{className:"text-slate-400",children:y.label}),jsx("span",{className:"text-slate-700 dark:text-slate-100",children:y.value})]},y.label))})]},s.id)})}):n!=null?n:jsx(_,{icon:"store",title:"\uAC00\uB9F9\uC810\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",description:"\uAC80\uC0C9\uC5B4\uB97C \uBCC0\uACBD\uD558\uAC70\uB098 \uC0C8\uB85C\uC6B4 \uAC00\uB9F9\uC810\uC744 \uC628\uBCF4\uB529\uD558\uC138\uC694.",size:"sm",className:"py-6"})})]})};Dt.displayName="MerchantList";var Mt=Ne.forwardRef(({title:t,items:r,columns:e=4,loading:n=false,className:o,...c},m)=>{let p="rounded-2xl border border-[var(--border-subtle)] bg-[var(--surface)] text-[var(--text-strong)] shadow-sm transition-colors",d={primary:{card:`${p} ring-1 ring-[rgba(0,82,204,0.18)] dark:ring-[rgba(59,130,246,0.28)] bg-gradient-to-br from-[rgba(0,82,204,0.08)] via-transparent to-transparent dark:from-[rgba(59,130,246,0.18)]`,label:"text-[var(--brand-primary)]",value:"text-[var(--text-strong)]",icon:"text-[var(--brand-primary)]",iconWrapper:"bg-[rgba(0,82,204,0.12)] dark:bg-[rgba(59,130,246,0.25)]"},secondary:{card:`${p} ring-1 ring-[rgba(11,122,91,0.18)] dark:ring-[rgba(52,211,153,0.25)] bg-gradient-to-br from-[rgba(0,200,151,0.08)] via-transparent to-transparent dark:from-[rgba(52,211,153,0.16)]`,label:"text-[var(--brand-secondary)]",value:"text-[var(--text-strong)]",icon:"text-[var(--brand-secondary)]",iconWrapper:"bg-[rgba(0,200,151,0.12)] dark:bg-[rgba(52,211,153,0.22)]"},warning:{card:`${p} ring-1 ring-[rgba(245,158,11,0.2)] dark:ring-[rgba(251,191,36,0.32)] bg-gradient-to-br from-[rgba(245,158,11,0.1)] via-transparent to-transparent dark:from-[rgba(251,191,36,0.2)]`,label:"text-amber-600",value:"text-[var(--text-strong)]",icon:"text-amber-600",iconWrapper:"bg-[rgba(245,158,11,0.15)] dark:bg-[rgba(251,191,36,0.25)]"},neutral:{card:p,label:"text-[var(--text-muted)]",value:"text-[var(--text-strong)]",icon:"text-[var(--text-muted)]",iconWrapper:"bg-[var(--surface-muted)]"}},h={1:"grid-cols-1",2:"grid-cols-1 lg:grid-cols-2",3:"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3",4:"grid-cols-1 lg:grid-cols-2 xl:grid-cols-4"}[e];return jsxs("div",{ref:m,className:a("w-full",o),...c,children:[t&&jsx("h2",{className:"mb-4 text-lg font-semibold text-gray-900 dark:text-slate-50",children:t}),jsx("div",{className:a("grid gap-5",h),children:n?Array.from({length:e}).map((s,x)=>jsxs("div",{className:"animate-pulse rounded-2xl border border-[var(--border-subtle)] bg-[var(--surface)] p-6",children:[jsx("div",{className:"mb-2 h-4 w-20 rounded bg-[var(--surface-muted)]/80"}),jsx("div",{className:"mb-1 h-8 w-24 rounded bg-[var(--surface-muted)]/80"}),jsx("div",{className:"h-3 w-32 rounded bg-[var(--surface-muted)]/80"})]},x)):r.map((s,x)=>{var g,i,u,l,f;return jsxs("div",{className:a("rounded-xl transition-all duration-200 p-6",d[(g=s.accent)!=null?g:"neutral"].card),children:[jsxs("div",{className:"mb-3 flex items-start justify-between gap-4",children:[jsx("div",{className:a("text-sm font-medium",d[(i=s.accent)!=null?i:"neutral"].label),children:s.label}),s.icon&&jsx("div",{className:a("inline-flex h-10 w-10 items-center justify-center rounded-xl text-base font-semibold",d[(u=s.accent)!=null?u:"neutral"].iconWrapper,d[(l=s.accent)!=null?l:"neutral"].icon),children:s.icon})]}),jsx("div",{className:a("text-2xl font-semibold leading-tight mb-2",d[(f=s.accent)!=null?f:"neutral"].value),children:s.value}),s.description&&jsx("div",{className:"mt-1 text-xs text-gray-500 dark:text-slate-400",children:s.description}),s.trend&&s.trendValue&&jsxs("div",{className:a("mt-2 flex items-center gap-1 text-xs",s.trend==="up"?"text-green-600 dark:text-green-400":s.trend==="down"?"text-red-600 dark:text-red-400":"text-gray-500 dark:text-slate-400"),children:[s.trend==="up"&&"\u2191",s.trend==="down"&&"\u2193",s.trendValue]})]},x)})})]})});Mt.displayName="StatsPanel";var $t=Ne.forwardRef(({title:t,description:r,action:e,className:n,...o},c)=>jsxs("div",{ref:c,className:a("flex items-center justify-between border-b border-gray-100 bg-transparent px-6 py-4 text-gray-900 dark:border-slate-800 dark:text-slate-50",n),...o,children:[jsxs("div",{className:"flex-1",children:[jsx("h3",{className:"text-base font-semibold text-inherit",children:t}),r&&jsx("p",{className:"mt-1 text-sm text-gray-500 dark:text-slate-400",children:r})]}),e&&jsx("div",{className:"flex-shrink-0 ml-4",children:e})]}));$t.displayName="SectionHeader";export{ot as a,st as b,it as c,nt as d,lt as e,dt as f,De as g,gt as h,bt as i,pt as j,xt as k,_ as l,ut as m,yt as n,kt as o,wt as p,Ct as q,St as r,Tt as s,Dt as t,Mt as u,$t as v};//# sourceMappingURL=chunk-YY6ZBUVJ.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-YY6ZBUVJ.mjs.map
|