@hua-labs/ui 1.0.0 → 1.1.0-alpha.0.2
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 +897 -210
- 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-627HOIRV.mjs +2 -0
- package/dist/chunk-627HOIRV.mjs.map +1 -0
- package/dist/chunk-ACEKLG37.mjs +2 -0
- package/dist/chunk-ACEKLG37.mjs.map +1 -0
- package/dist/chunk-E5PN4LUS.mjs +2 -0
- package/dist/chunk-E5PN4LUS.mjs.map +1 -0
- package/dist/chunk-KHEJZ3U4.mjs +2 -0
- package/dist/chunk-KHEJZ3U4.mjs.map +1 -0
- package/dist/chunk-MXGXBG63.mjs +2 -0
- package/dist/chunk-MXGXBG63.mjs.map +1 -0
- package/dist/chunk-R5KCFRYV.mjs +2 -0
- package/dist/chunk-R5KCFRYV.mjs.map +1 -0
- package/dist/chunk-UGSYQDR4.mjs +2 -0
- package/dist/chunk-UGSYQDR4.mjs.map +1 -0
- package/dist/chunk-UUHAXGMO.mjs +2 -0
- package/dist/chunk-UUHAXGMO.mjs.map +1 -0
- package/dist/chunk-VU264VFN.mjs +2 -0
- package/dist/chunk-VU264VFN.mjs.map +1 -0
- package/dist/chunk-ZFS4B5QT.mjs +2 -0
- package/dist/chunk-ZFS4B5QT.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 +559 -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 +92 -25
- package/src/styles/toast.css +23 -0
- package/dist/components/Accordion.js +0 -84
- package/dist/components/Alert.js +0 -61
- package/dist/components/Avatar.js +0 -18
- package/dist/components/Badge.js +0 -15
- package/dist/components/BottomSheet.js +0 -96
- package/dist/components/Breadcrumb.js +0 -47
- package/dist/components/Button.js +0 -23
- package/dist/components/Card.js +0 -18
- package/dist/components/ChatMessage.js +0 -59
- package/dist/components/Checkbox.js +0 -30
- package/dist/components/Command.js +0 -119
- package/dist/components/ConfirmModal.js +0 -53
- package/dist/components/Container.js +0 -23
- package/dist/components/ContextMenu.js +0 -110
- package/dist/components/Divider.js +0 -39
- package/dist/components/Drawer.js +0 -79
- package/dist/components/Dropdown.js +0 -174
- package/dist/components/EmotionAnalysis.js +0 -40
- package/dist/components/EmotionButton.js +0 -16
- package/dist/components/EmotionMeter.js +0 -21
- package/dist/components/EmotionSelector.js +0 -46
- package/dist/components/Grid.js +0 -44
- package/dist/components/Icon.d.ts +0 -26
- package/dist/components/Icon.d.ts.map +0 -1
- package/dist/components/Icon.js +0 -48
- package/dist/components/Input.js +0 -25
- package/dist/components/LanguageToggle.js +0 -61
- package/dist/components/LoadingSpinner.js +0 -37
- package/dist/components/Menu.js +0 -122
- package/dist/components/Modal.js +0 -62
- package/dist/components/PageTransition.js +0 -39
- package/dist/components/Pagination.js +0 -87
- package/dist/components/Popover.js +0 -159
- package/dist/components/Progress.js +0 -51
- package/dist/components/Radio.js +0 -29
- package/dist/components/ScrollArea.js +0 -42
- package/dist/components/ScrollIndicator.js +0 -60
- package/dist/components/ScrollProgress.js +0 -39
- package/dist/components/ScrollToTop.js +0 -46
- package/dist/components/Select.js +0 -29
- package/dist/components/Skeleton.js +0 -71
- package/dist/components/Stack.js +0 -34
- package/dist/components/Switch.js +0 -29
- package/dist/components/Tabs.js +0 -117
- package/dist/components/Textarea.js +0 -31
- package/dist/components/ThemeProvider.js +0 -76
- package/dist/components/ThemeToggle.js +0 -49
- package/dist/components/Toast.js +0 -138
- package/dist/components/Tooltip.js +0 -102
- package/dist/lib/icons.js +0 -321
- package/dist/lib/utils.js +0 -5
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {d,a}from'./chunk-UUHAXGMO.mjs';import*as x from'lucide-react';import {Square,Flag,Brain,Lightbulb,Moon,Sun,Monitor,Share,Bookmark,Star,Heart,Bell,CalendarPlus,Calendar,Clock,Key,Wallet,Shield,Unlock,Lock,Meh,Frown,Smile,Camera,Video,Image,Phone,MessageCircle,Mail,BookOpen,Book,Folder,File,FileText,Zap,Database,Activity,TrendingUp,BarChart3,EyeOff,Eye,LogOut,LogIn,UserPlus,Users,User,HelpCircle,Circle,Check,Info,AlertCircle,XCircle,CheckCircle,Loader2,Copy,Save,RefreshCw,Upload,Download,Minus,Plus,Trash2,Edit,ChevronUp,ChevronDown,ChevronRight,ChevronLeft,ExternalLink,Settings,Search,X as X$1,Menu,ArrowDown,ArrowUp,ArrowRight,ArrowLeft,Home}from'lucide-react';import i,{createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var M={home:Home,arrowLeft:ArrowLeft,arrowRight:ArrowRight,arrowUp:ArrowUp,arrowDown:ArrowDown,menu:Menu,close:X$1,search:Search,settings:Settings,externalLink:ExternalLink,chevronLeft:ChevronLeft,chevronRight:ChevronRight,chevronDown:ChevronDown,chevronUp:ChevronUp,edit:Edit,delete:Trash2,add:Plus,remove:Minus,download:Download,upload:Upload,refresh:RefreshCw,save:Save,copy:Copy,loader:Loader2,success:CheckCircle,error:XCircle,alertCircle:AlertCircle,warning:AlertCircle,info:Info,check:Check,circle:Circle,helpCircle:HelpCircle,user:User,users:Users,userPlus:UserPlus,logIn:LogIn,logOut:LogOut,eye:Eye,eyeOff:EyeOff,chart:BarChart3,barChart:BarChart3,trendingUp:TrendingUp,activity:Activity,database:Database,zap:Zap,fileText:FileText,file:File,folder:Folder,book:Book,bookOpen:BookOpen,mail:Mail,message:MessageCircle,phone:Phone,image:Image,video:Video,camera:Camera,smile:Smile,frown:Frown,meh:Meh,lock:Lock,unlock:Unlock,shield:Shield,wallet:Wallet,key:Key,clock:Clock,calendar:Calendar,calendarPlus:CalendarPlus,bell:Bell,heart:Heart,star:Star,bookmark:Bookmark,share:Share,monitor:Monitor,sun:Sun,moon:Moon,lightbulb:Lightbulb,brain:Brain,flag:Flag,square:Square},E={happy:"smile",sad:"frown",neutral:"meh",excited:"smile",angry:"frown",love:"heart",like:"heart",dislike:"frown"},W={loading:"loader",success:"success",error:"error",warning:"warning",info:"info",locked:"lock",unlocked:"unlock",visible:"eye",hidden:"eyeOff"},Mo={navigation:["home","arrowLeft","arrowRight","arrowUp","arrowDown","menu","close","search","settings","externalLink","chevronLeft","chevronRight","chevronDown","chevronUp"],actions:["edit","delete","add","remove","download","upload","refresh","save","copy"],status:["loader","success","error","alertCircle","warning","info","check","circle"],user:["user","users","userPlus","logIn","logOut","eye","eyeOff"],data:["chart","barChart","trendingUp","activity","database","zap"],files:["fileText","file","folder","book"],communication:["mail","message","phone"],media:["image","video","camera"],emotions:["smile","frown","meh"],security:["lock","unlock","shield"],time:["clock","calendar"],ui:["bell","heart","star","bookmark","share"],theme:["monitor","sun","moon"]};var B={back:"arrowLeft",prev:"arrowLeft",previous:"arrowLeft",forward:"arrowRight",next:"arrowRight",close:"x",cancel:"x",remove:"delete",trash:"delete",plus:"add",new:"add",pencil:"edit",modify:"edit",store:"save",floppy:"save",magnify:"search",person:"user",account:"user",profile:"user",gear:"settings",config:"settings",preferences:"settings",house:"home",main:"home",done:"check",complete:"check",tick:"check",information:"info",help:"info",alert:"warning",caution:"warning",checkmark:"success",checkCircle:"success",fail:"error",cross:"error",xCircle:"error",spinner:"loader",loading:"loader",wait:"loader",reload:"refresh",update:"refresh",sync:"refresh",show:"eye",view:"eye",hide:"eyeOff",hidden:"eyeOff",secure:"lock",locked:"lock",unsecure:"unlock",unlocked:"unlock",get:"download",fetch:"download",post:"upload",send:"share",export:"share",duplicate:"copy",clone:"copy",email:"mail",envelope:"mail",chat:"message",comment:"message",talk:"message",date:"calendar",schedule:"calendar",time:"clock",watch:"clock",document:"fileText",doc:"fileText",text:"fileText",directory:"folder",dir:"folder",picture:"image",img:"image",movie:"video",film:"video",photo:"camera",capture:"camera",start:"play",run:"play",stop:"pause",halt:"pause",like:"heart",love:"heart",favorite:"star",saveBookmark:"bookmark",notification:"bell",notify:"bell",alarm:"bell",prefs:"settings",lookup:"search",dots:"moreHorizontal",moreMenu:"moreHorizontal",moreOptions:"moreVertical",external:"externalLink",outbound:"externalLink",open:"externalLink",url:"link",hyperlink:"link",graph:"barChart",stats:"barChart",analytics:"barChart",db:"database",storage:"database",pulse:"activity",monitor:"activity",up:"trendingUp",down:"trendingDown",lightning:"zap",bolt:"zap",flash:"zap",security:"shield",protect:"shield",password:"key",secret:"key",signin:"logIn",login:"logIn",enter:"logIn",signout:"logOut",logout:"logOut",exit:"logOut",people:"users",group:"users",team:"users",addUser:"userPlus",invite:"userPlus",read:"book",library:"book",reading:"bookOpen",openBook:"bookOpen",light:"sun",day:"sun",dark:"moon",night:"moon",screen:"monitor",display:"monitor",ai:"brain",intelligence:"brain",think:"brain",idea:"lightbulb",bulb:"lightbulb",inspiration:"lightbulb",magic:"sparkles",stars:"sparkles",glitter:"sparkles"};function N(e){if(typeof e!="string")throw new TypeError("iconName must be a string");return B[e]||e}function Wo(e){if(typeof e!="string")throw new TypeError("iconName must be a string");return Object.entries(B).filter(([o,n])=>n===e).map(([o])=>o)}var s={set:"phosphor",weight:"regular",size:20,color:"currentColor",strokeWidth:1.25},z=e=>{switch(e){case "lucide":return 1.25;case "phosphor":return 1.25;case "untitled":return 1.5;default:return 1.25}};var F=createContext(s);function Ro({set:e=s.set,weight:o=s.weight,size:n=s.size,color:a=s.color,strokeWidth:g=s.strokeWidth,children:f}){let l={set:e,weight:o,size:n,color:a,strokeWidth:g};return jsx(F.Provider,{value:l,children:f})}function L(){return useContext(F)}var r=null,Oo={home:{lucide:"Home",phosphor:"House",untitled:"home"},"layout-dashboard":{lucide:"LayoutDashboard",phosphor:"SquaresFour",untitled:"layout-dashboard"},folder:{lucide:"Folder",phosphor:"Folder",untitled:"folder"},"alert-circle":{lucide:"AlertCircle",phosphor:"WarningCircle",untitled:"alert-circle"},alertCircle:{lucide:"AlertCircle",phosphor:"WarningCircle",untitled:"alert-circle"},columns:{lucide:"Columns",phosphor:"Columns",untitled:"columns"},users:{lucide:"Users",phosphor:"Users",untitled:"users"},settings:{lucide:"Settings",phosphor:"Gear",untitled:"settings"},menu:{lucide:"Menu",phosphor:"List",untitled:"menu"},close:{lucide:"X",phosphor:"X",untitled:"close"},chevronLeft:{lucide:"ChevronLeft",phosphor:"CaretLeft",untitled:"chevron-left"},chevronRight:{lucide:"ChevronRight",phosphor:"CaretRight",untitled:"chevron-right"},chevronDown:{lucide:"ChevronDown",phosphor:"CaretDown",untitled:"chevron-down"},chevronUp:{lucide:"ChevronUp",phosphor:"CaretUp",untitled:"chevron-up"},arrowLeft:{lucide:"ArrowLeft",phosphor:"ArrowLeft",untitled:"arrow-left"},arrowRight:{lucide:"ArrowRight",phosphor:"ArrowRight",untitled:"arrow-right"},arrowUp:{lucide:"ArrowUp",phosphor:"ArrowUp",untitled:"arrow-up"},arrowDown:{lucide:"ArrowDown",phosphor:"ArrowDown",untitled:"arrow-down"},add:{lucide:"Plus",phosphor:"Plus",untitled:"add"},edit:{lucide:"Edit",phosphor:"Pencil",untitled:"edit"},pencil:{lucide:"Pencil",phosphor:"Pencil",untitled:"pencil"},delete:{lucide:"Trash2",phosphor:"Trash",untitled:"trash"},trash:{lucide:"Trash2",phosphor:"Trash",untitled:"trash"},upload:{lucide:"Upload",phosphor:"Upload",untitled:"upload"},download:{lucide:"Download",phosphor:"Download",untitled:"download"},x:{lucide:"X",phosphor:"X",untitled:"close"},check:{lucide:"Check",phosphor:"Check",untitled:"check"},search:{lucide:"Search",phosphor:"MagnifyingGlass",untitled:"search"},share:{lucide:"Share",phosphor:"Share",untitled:"share"},copy:{lucide:"Copy",phosphor:"Copy",untitled:"copy"},save:{lucide:"Save",phosphor:"FloppyDisk",untitled:"save"},loader:{lucide:"Loader2",phosphor:"Spinner",untitled:"loader"},loader2:{lucide:"Loader2",phosphor:"Spinner",untitled:"loader"},"check-circle":{lucide:"CheckCircle",phosphor:"CheckCircle",untitled:"check-circle"},checkCircle:{lucide:"CheckCircle",phosphor:"CheckCircle",untitled:"check-circle"},success:{lucide:"CheckCircle",phosphor:"CheckCircle",untitled:"check-circle"},error:{lucide:"XCircle",phosphor:"XCircle",untitled:"error"},warning:{lucide:"AlertCircle",phosphor:"WarningCircle",untitled:"warning"},info:{lucide:"Info",phosphor:"Info",untitled:"info"},refresh:{lucide:"RefreshCw",phosphor:"ArrowClockwise",untitled:"refresh"},refreshCw:{lucide:"RefreshCw",phosphor:"ArrowClockwise",untitled:"refresh"},bell:{lucide:"Bell",phosphor:"Bell",untitled:"bell"},heart:{lucide:"Heart",phosphor:"Heart",untitled:"heart"},star:{lucide:"Star",phosphor:"Star",untitled:"star"},bookmark:{lucide:"Bookmark",phosphor:"Bookmark",untitled:"bookmark"},user:{lucide:"User",phosphor:"User",untitled:"user"},userPlus:{lucide:"UserPlus",phosphor:"UserPlus",untitled:"user-plus"},logIn:{lucide:"LogIn",phosphor:"SignIn",untitled:"log-in"},logOut:{lucide:"LogOut",phosphor:"SignOut",untitled:"log-out"},chrome:{lucide:"Chrome",phosphor:"ChromeLogo",untitled:"chrome"},github:{lucide:"Github",phosphor:"GithubLogo",untitled:"github"},message:{lucide:"MessageCircle",phosphor:"ChatCircle",untitled:"message"},messageSquare:{lucide:"MessageSquare",phosphor:"ChatSquare",untitled:"message-square"},"message-square":{lucide:"MessageSquare",phosphor:"ChatSquare",untitled:"message-square"},inbox:{lucide:"Inbox",phosphor:"Inbox",untitled:"inbox"},calendar:{lucide:"Calendar",phosphor:"Calendar",untitled:"calendar"},calendarPlus:{lucide:"CalendarPlus",phosphor:"CalendarPlus",untitled:"calendar-plus"},checkSquare:{lucide:"CheckSquare",phosphor:"CheckSquare",untitled:"check-square"},clock:{lucide:"Clock",phosphor:"Clock",untitled:"clock"},book:{lucide:"Book",phosphor:"Book",untitled:"book"},bookOpen:{lucide:"BookOpen",phosphor:"BookOpen",untitled:"book-open"},monitor:{lucide:"Monitor",phosphor:"Monitor",untitled:"monitor"},sun:{lucide:"Sun",phosphor:"Sun",untitled:"sun"},moon:{lucide:"Moon",phosphor:"Moon",untitled:"moon"},sparkles:{lucide:"Sparkles",phosphor:"Sparkle",untitled:"sparkles"},lightbulb:{lucide:"Lightbulb",phosphor:"Lightbulb",untitled:"lightbulb"},brain:{lucide:"Brain",phosphor:"Brain",untitled:"brain"},zap:{lucide:"Zap",phosphor:"Lightning",untitled:"zap"},chart:{lucide:"BarChart3",phosphor:"ChartBar",untitled:"chart"},barChart:{lucide:"BarChart",phosphor:"ChartBar",untitled:"bar-chart"},trendingUp:{lucide:"TrendingUp",phosphor:"TrendUp",untitled:"trending-up"},trendingDown:{lucide:"TrendingDown",phosphor:"TrendDown",untitled:"trending-down"},activity:{lucide:"Activity",phosphor:"Activity",untitled:"activity"},database:{lucide:"Database",phosphor:"Database",untitled:"database"},dollarSign:{lucide:"DollarSign",phosphor:"CurrencyDollar",untitled:"dollar-sign"},dollar:{lucide:"DollarSign",phosphor:"CurrencyDollar",untitled:"dollar-sign"},currency:{lucide:"DollarSign",phosphor:"CurrencyDollar",untitled:"currency"},lock:{lucide:"Lock",phosphor:"Lock",untitled:"lock"},unlock:{lucide:"Unlock",phosphor:"LockOpen",untitled:"unlock"},shield:{lucide:"Shield",phosphor:"Shield",untitled:"shield"},key:{lucide:"Key",phosphor:"Key",untitled:"key"},play:{lucide:"Play",phosphor:"Play",untitled:"play"},pause:{lucide:"Pause",phosphor:"Pause",untitled:"pause"},image:{lucide:"Image",phosphor:"Image",untitled:"image"},video:{lucide:"Video",phosphor:"Video",untitled:"video"},camera:{lucide:"Camera",phosphor:"Camera",untitled:"camera"},fileText:{lucide:"FileText",phosphor:"FileText",untitled:"file-text"},file:{lucide:"File",phosphor:"File",untitled:"file"},externalLink:{lucide:"ExternalLink",phosphor:"ArrowSquareOut",untitled:"external-link"},link:{lucide:"Link",phosphor:"Link",untitled:"link"},moreHorizontal:{lucide:"MoreHorizontal",phosphor:"DotsThreeOutline",untitled:"more-horizontal"},moreVertical:{lucide:"MoreVertical",phosphor:"DotsThreeVertical",untitled:"more-vertical"},remove:{lucide:"Minus",phosphor:"Minus",untitled:"remove"},eye:{lucide:"Eye",phosphor:"Eye",untitled:"eye"},eyeOff:{lucide:"EyeOff",phosphor:"EyeSlash",untitled:"eye-off"},smile:{lucide:"Smile",phosphor:"Smiley",untitled:"smile"},frown:{lucide:"Frown",phosphor:"SmileySad",untitled:"frown"},meh:{lucide:"Meh",phosphor:"SmileyMeh",untitled:"meh"},mail:{lucide:"Mail",phosphor:"Envelope",untitled:"mail"},phone:{lucide:"Phone",phosphor:"Phone",untitled:"phone"},flag:{lucide:"Flag",phosphor:"Flag",untitled:"flag"}};async function q(){if(typeof window=="undefined")return null;if(!r)try{r=await import('@phosphor-icons/react');}catch{return console.warn("Phosphor Icons not available. Install @phosphor-icons/react to use."),null}return r}function P(e,o="lucide"){let n=Oo[e];if(!n)return Do(e,o);let a=n[o];switch(o){case "lucide":return x[a]||null;case "phosphor":return r&&(r==null?void 0:r[a])||null;case "untitled":return null;default:return null}}function Do(e,o){switch(o){case "lucide":let n=e.charAt(0).toUpperCase()+e.slice(1),a=e.replace(/([A-Z])/g,(l,R)=>l===e[0]?l.toLowerCase():l);return x[n]||x[e]||x[a]||null;case "phosphor":if(!r)return null;let g=e.charAt(0).toUpperCase()+e.slice(1),f=e.split(/(?=[A-Z])/).map(l=>l.charAt(0).toUpperCase()+l.slice(1)).join("");return (r==null?void 0:r[g])||(r==null?void 0:r[f])||(r==null?void 0:r[e])||null;case "untitled":return null;default:return null}}var H=i.forwardRef(({name:e,size:o,className:n,emotion:a$1,status:g,provider:f,weight:l,animated:R=false,pulse:Z=false,spin:$=false,bounce:J=false,variant:h="default","aria-label":C,"aria-hidden":w},T)=>{var D;let k=L(),u=f||k.set,t=o!=null?o:k.size,K=l||k.weight,Q=k.color,Y=(D=k.strokeWidth)!=null?D:1.25,[ee,oe]=i.useState(false),[re,O]=i.useState(false);i.useEffect(()=>{oe(true),u==="phosphor"?q().then(()=>{O(true);}):O(true);},[u]);let d$1=a$1?E[a$1]:g?W[g]:e;d$1=N(d$1);let I=d({"text-gray-900 dark:text-white":h==="default","text-blue-600 dark:text-blue-400":h==="primary","text-gray-600 dark:text-gray-400":h==="secondary","text-green-600 dark:text-green-400":h==="success","text-yellow-600 dark:text-yellow-400":h==="warning","text-red-600 dark:text-red-400":h==="error","text-gray-500 dark:text-gray-500":h==="muted"});if(!ee||u==="phosphor"&&!re)return jsx("span",{style:{width:t,height:t},className:a(I,n),"aria-hidden":w!==void 0?w:true,"aria-label":C});let p=null;if(u==="lucide"?(p=M[d$1]||null,p||(p=P(d$1,u))):p=P(d$1,u),!p)return console.warn(`Icon "${d$1}" not found for provider "${u}"`),jsx("span",{ref:T,className:a("inline-flex items-center justify-center rounded-full border-2 border-dashed border-gray-300 dark:border-gray-600",I,n),style:{width:t,height:t},"aria-label":C||`\uC544\uC774\uCF58\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: ${d$1}`,title:`Icon not found: ${d$1}`,children:jsx("span",{className:"text-xs text-gray-400 dark:text-gray-500","aria-hidden":"true",children:"?"})});let v={size:typeof t=="number"?t:void 0,width:t,height:t,color:Q};u==="phosphor"?v.weight=K:v.strokeWidth=Y;let te=d({"animate-pulse":Z,"animate-spin":$,"animate-bounce":J,"transition-all duration-200 ease-in-out":R}),y={};return C?(y["aria-label"]=C,y["aria-hidden"]=false):w!==void 0?y["aria-hidden"]=w:y["aria-hidden"]=true,jsx("span",{ref:T,className:a("inline-flex items-center justify-center",te,I,n),style:{width:t,height:t},...y,children:p&&i.createElement(p,{...v,className:I,"aria-hidden":true})})});H.displayName="Icon";var Ao=i.memo(H,(e,o)=>e.name===o.name&&e.size===o.size&&e.className===o.className&&e.emotion===o.emotion&&e.status===o.status&&e.provider===o.provider&&e.animated===o.animated&&e.pulse===o.pulse&&e.spin===o.spin&&e.bounce===o.bounce&&e.variant===o.variant&&e.weight===o.weight&&e["aria-label"]===o["aria-label"]&&e["aria-hidden"]===o["aria-hidden"]),m=Ao;m.displayName="Icon";var V=i.forwardRef((e,o)=>jsx(m,{ref:o,name:"smile",...e}));V.displayName="EmotionIcon";var X=i.forwardRef((e,o)=>jsx(m,{ref:o,name:"info",...e}));X.displayName="StatusIcon";var G=i.forwardRef((e,o)=>jsx(m,{ref:o,name:"loader",status:"loading",spin:true,"aria-label":"\uB85C\uB529 \uC911",...e}));G.displayName="LoadingIcon";var _=i.forwardRef((e,o)=>jsx(m,{ref:o,name:"check",status:"success",variant:"success","aria-label":"\uC131\uACF5",...e}));_.displayName="SuccessIcon";var j=i.forwardRef((e,o)=>jsx(m,{ref:o,name:"alertCircle",status:"error",variant:"error","aria-label":"\uC624\uB958",...e}));j.displayName="ErrorIcon";export{E as a,W as b,Mo as c,Oo as d,B as e,N as f,Wo as g,s as h,z as i,Ro as j,L as k,m as l,V as m,X as n,G as o,_ as p,j as q};//# sourceMappingURL=chunk-UGSYQDR4.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-UGSYQDR4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/icons.ts","../src/lib/icon-aliases.ts","../src/components/Icon/icon-store.ts","../src/components/Icon/IconProvider.tsx","../src/lib/icon-providers.ts","../src/components/Icon/Icon.tsx"],"names":["icons","Home","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Menu","X","Search","Settings","ExternalLink","ChevronLeft","ChevronRight","ChevronDown","ChevronUp","Edit","Trash2","Plus","Minus","Download","Upload","RefreshCw","Save","Copy","Loader2","CheckCircle","XCircle","AlertCircle","Info","Check","Circle","HelpCircle","User","Users","UserPlus","LogIn","LogOut","Eye","EyeOff","BarChart3","TrendingUp","Activity","Database","Zap","FileText","File","Folder","Book","BookOpen","Mail","MessageCircle","Phone","Image","Video","Camera","Smile","Frown","Meh","Lock","Unlock","Shield","Wallet","Key","Clock","Calendar","CalendarPlus","Bell","Heart","Star","Bookmark","Share","Monitor","Sun","Moon","Lightbulb","Brain","Flag","Square","emotionIcons","statusIcons","iconCategories","ICON_ALIASES","resolveIconAlias","iconName","getIconAliases","_","target","alias","defaultIconConfig","getDefaultStrokeWidth","set","IconContext","createContext","IconProvider","weight","size","color","strokeWidth","children","value","jsx","useIconContext","useContext","PhosphorIcons","PROJECT_ICONS","initPhosphorIcons","getIconFromProvider","provider","iconMapping","getIconDirect","mappedName","LucideIcons","lucideName","camelCaseName","match","p1","phosphorName1","phosphorName2","word","IconComponent","React","name","className","emotion","status","animated","pulse","spin","bounce","variant","ariaLabel","ariaHidden","ref","_a","config","iconSet","iconSize","iconWeight","iconColor","iconStrokeWidth","isClient","setIsClient","phosphorReady","setPhosphorReady","variantClasses","mergeMap","merge","iconProps","animationClasses","accessibilityProps","MemoizedIcon","prevProps","nextProps","Icon","EmotionIcon","props","StatusIcon","LoadingIcon","SuccessIcon","ErrorIcon"],"mappings":"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","file":"chunk-UGSYQDR4.mjs","sourcesContent":["/**\n * Core Icons\n * \n * 핵심 아이콘만 포함하여 번들 크기를 최적화합니다.\n * 나머지 아이콘은 동적 fallback으로 처리됩니다.\n * \n * 포함 기준:\n * 1. sum-diary에서 실제 사용 중인 아이콘\n * 2. UI 컴포넌트에서 자주 사용되는 아이콘\n * 3. 각 카테고리의 대표 아이콘\n * \n * 새로운 아이콘이 필요하면 동적 fallback이 자동으로 처리합니다.\n */\n\nimport {\n // Navigation\n Home,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n ArrowDown,\n Menu,\n X,\n Search,\n Settings,\n ExternalLink,\n ChevronLeft,\n ChevronRight,\n ChevronDown,\n ChevronUp,\n \n // Actions\n Edit,\n Trash2,\n Plus,\n Minus,\n Download,\n Upload,\n RefreshCw,\n Save,\n Copy,\n \n // Status & Feedback\n Loader2,\n CheckCircle,\n XCircle,\n AlertCircle,\n Info,\n Check,\n Circle,\n HelpCircle,\n \n // User & Auth\n User,\n Users,\n UserPlus,\n LogIn,\n LogOut,\n Eye,\n EyeOff,\n \n // Data & Analytics\n BarChart3,\n TrendingUp,\n Activity,\n Database,\n Zap,\n \n // Files & Content\n FileText,\n File,\n Folder,\n Book,\n BookOpen,\n \n // Communication\n Mail,\n MessageCircle,\n Phone,\n \n // Media\n Image,\n Video,\n Camera,\n \n // Emotions\n Smile,\n Frown,\n Meh,\n \n // Security\n Lock,\n Unlock,\n Shield,\n Wallet,\n Key,\n \n // Time & Date\n Clock,\n Calendar,\n CalendarPlus,\n \n // UI Elements\n Bell,\n Heart,\n Star,\n Bookmark,\n Share,\n \n // Theme\n Monitor,\n Sun,\n Moon,\n \n // Additional\n Lightbulb,\n Brain,\n Flag,\n Square,\n} from 'lucide-react'\n\n// 핵심 아이콘 객체\nexport const icons = {\n // Navigation\n home: Home,\n arrowLeft: ArrowLeft,\n arrowRight: ArrowRight,\n arrowUp: ArrowUp,\n arrowDown: ArrowDown,\n menu: Menu,\n close: X,\n search: Search,\n settings: Settings,\n externalLink: ExternalLink,\n chevronLeft: ChevronLeft,\n chevronRight: ChevronRight,\n chevronDown: ChevronDown,\n chevronUp: ChevronUp,\n \n // Actions\n edit: Edit,\n delete: Trash2,\n add: Plus,\n remove: Minus,\n download: Download,\n upload: Upload,\n refresh: RefreshCw,\n save: Save,\n copy: Copy,\n \n // Status & Feedback\n loader: Loader2,\n success: CheckCircle,\n error: XCircle,\n alertCircle: AlertCircle,\n warning: AlertCircle, // warning은 alertCircle과 동일\n info: Info,\n check: Check,\n circle: Circle,\n helpCircle: HelpCircle,\n \n // User & Auth\n user: User,\n users: Users,\n userPlus: UserPlus,\n logIn: LogIn,\n logOut: LogOut,\n eye: Eye,\n eyeOff: EyeOff,\n \n // Data & Analytics\n chart: BarChart3,\n barChart: BarChart3,\n trendingUp: TrendingUp,\n activity: Activity,\n database: Database,\n zap: Zap,\n \n // Files & Content\n fileText: FileText,\n file: File,\n folder: Folder,\n book: Book,\n bookOpen: BookOpen,\n \n // Communication\n mail: Mail,\n message: MessageCircle,\n phone: Phone,\n \n // Media\n image: Image,\n video: Video,\n camera: Camera,\n \n // Emotions\n smile: Smile,\n frown: Frown,\n meh: Meh,\n \n // Security\n lock: Lock,\n unlock: Unlock,\n shield: Shield,\n wallet: Wallet,\n key: Key,\n \n // Time & Date\n clock: Clock,\n calendar: Calendar,\n calendarPlus: CalendarPlus,\n \n // UI Elements\n bell: Bell,\n heart: Heart,\n star: Star,\n bookmark: Bookmark,\n share: Share,\n \n // Theme\n monitor: Monitor,\n sun: Sun,\n moon: Moon,\n \n // Additional\n lightbulb: Lightbulb,\n brain: Brain,\n flag: Flag,\n square: Square,\n} as const\n\n// 아이콘 이름 타입\nexport type IconName = keyof typeof icons\n\n// 감정별 아이콘 매핑\nexport const emotionIcons = {\n happy: 'smile',\n sad: 'frown',\n neutral: 'meh',\n excited: 'smile', // laugh 대신 smile 사용\n angry: 'frown', // angry 대신 frown 사용\n love: 'heart',\n like: 'heart', // thumbsUp 대신 heart 사용\n dislike: 'frown', // thumbsDown 대신 frown 사용\n} as const\n\n// 상태별 아이콘 매핑\nexport const statusIcons = {\n loading: 'loader',\n success: 'success',\n error: 'error',\n warning: 'warning',\n info: 'info',\n locked: 'lock',\n unlocked: 'unlock',\n visible: 'eye',\n hidden: 'eyeOff',\n} as const\n\n// 아이콘 카테고리별 그룹화 (참고용)\nexport const iconCategories = {\n navigation: ['home', 'arrowLeft', 'arrowRight', 'arrowUp', 'arrowDown', 'menu', 'close', 'search', 'settings', 'externalLink', 'chevronLeft', 'chevronRight', 'chevronDown', 'chevronUp'],\n actions: ['edit', 'delete', 'add', 'remove', 'download', 'upload', 'refresh', 'save', 'copy'],\n status: ['loader', 'success', 'error', 'alertCircle', 'warning', 'info', 'check', 'circle'],\n user: ['user', 'users', 'userPlus', 'logIn', 'logOut', 'eye', 'eyeOff'],\n data: ['chart', 'barChart', 'trendingUp', 'activity', 'database', 'zap'],\n files: ['fileText', 'file', 'folder', 'book'],\n communication: ['mail', 'message', 'phone'],\n media: ['image', 'video', 'camera'],\n emotions: ['smile', 'frown', 'meh'],\n security: ['lock', 'unlock', 'shield'],\n time: ['clock', 'calendar'],\n ui: ['bell', 'heart', 'star', 'bookmark', 'share'],\n theme: ['monitor', 'sun', 'moon'],\n} as const\n","/**\n * Icon Aliases\n * \n * 여러 이름이 같은 아이콘을 가리키도록 하는 alias 시스템\n * DX 향상을 위해 직관적인 이름들을 지원합니다.\n */\n\nexport const ICON_ALIASES: Record<string, string> = {\n // Navigation aliases\n 'back': 'arrowLeft',\n 'prev': 'arrowLeft',\n 'previous': 'arrowLeft',\n 'forward': 'arrowRight',\n 'next': 'arrowRight',\n \n // Close aliases\n 'close': 'x',\n 'cancel': 'x',\n \n // Delete aliases\n 'remove': 'delete',\n 'trash': 'delete',\n \n // Add aliases\n 'plus': 'add',\n 'new': 'add',\n \n // Edit aliases\n 'pencil': 'edit',\n 'modify': 'edit',\n \n // Save aliases\n 'store': 'save',\n 'floppy': 'save',\n \n // Search aliases\n 'magnify': 'search',\n \n // User aliases\n 'person': 'user',\n 'account': 'user',\n 'profile': 'user',\n \n // Settings aliases\n 'gear': 'settings',\n 'config': 'settings',\n 'preferences': 'settings',\n \n // Home aliases\n 'house': 'home',\n 'main': 'home',\n \n // Check aliases\n 'done': 'check',\n 'complete': 'check',\n 'tick': 'check',\n \n // Info aliases\n 'information': 'info',\n 'help': 'info',\n \n // Warning aliases\n 'alert': 'warning',\n 'caution': 'warning',\n \n // Success aliases\n 'checkmark': 'success',\n 'checkCircle': 'success',\n \n // Error aliases\n 'fail': 'error',\n 'cross': 'error',\n 'xCircle': 'error',\n \n // Loading aliases\n 'spinner': 'loader',\n 'loading': 'loader',\n 'wait': 'loader',\n \n // Refresh aliases\n 'reload': 'refresh',\n 'update': 'refresh',\n 'sync': 'refresh',\n \n // Eye aliases\n 'show': 'eye',\n 'view': 'eye',\n 'hide': 'eyeOff',\n 'hidden': 'eyeOff',\n \n // Lock aliases\n 'secure': 'lock',\n 'locked': 'lock',\n 'unsecure': 'unlock',\n 'unlocked': 'unlock',\n \n // Download aliases\n 'get': 'download',\n 'fetch': 'download',\n \n // Upload aliases\n 'post': 'upload',\n \n // Share aliases\n 'send': 'share',\n 'export': 'share',\n \n // Copy aliases\n 'duplicate': 'copy',\n 'clone': 'copy',\n \n // Mail aliases\n 'email': 'mail',\n 'envelope': 'mail',\n \n // Message aliases\n 'chat': 'message',\n 'comment': 'message',\n 'talk': 'message',\n \n // Calendar aliases\n 'date': 'calendar',\n 'schedule': 'calendar',\n \n // Clock aliases\n 'time': 'clock',\n 'watch': 'clock',\n \n // File aliases\n 'document': 'fileText',\n 'doc': 'fileText',\n 'text': 'fileText',\n \n // Folder aliases\n 'directory': 'folder',\n 'dir': 'folder',\n \n // Image aliases\n 'picture': 'image',\n 'img': 'image',\n \n // Video aliases\n 'movie': 'video',\n 'film': 'video',\n \n // Camera aliases\n 'photo': 'camera',\n 'capture': 'camera',\n \n // Play aliases\n 'start': 'play',\n 'run': 'play',\n \n // Pause aliases\n 'stop': 'pause',\n 'halt': 'pause',\n \n // Heart aliases\n 'like': 'heart',\n 'love': 'heart',\n \n // Star aliases\n 'favorite': 'star',\n \n // Bookmark aliases\n 'saveBookmark': 'bookmark',\n \n // Bell aliases\n 'notification': 'bell',\n 'notify': 'bell',\n 'alarm': 'bell',\n \n // Settings aliases\n 'prefs': 'settings',\n \n // Search aliases (duplicate removed - see line 37)\n 'lookup': 'search',\n \n // More aliases\n 'dots': 'moreHorizontal',\n 'moreMenu': 'moreHorizontal',\n 'moreOptions': 'moreVertical',\n \n // External link aliases\n 'external': 'externalLink',\n 'outbound': 'externalLink',\n 'open': 'externalLink',\n \n // Link aliases\n 'url': 'link',\n 'hyperlink': 'link',\n \n // Chart aliases\n 'graph': 'barChart',\n 'stats': 'barChart',\n 'analytics': 'barChart',\n \n // Database aliases\n 'db': 'database',\n 'storage': 'database',\n \n // Activity aliases\n 'pulse': 'activity',\n 'monitor': 'activity',\n \n // Trending aliases\n 'up': 'trendingUp',\n 'down': 'trendingDown',\n \n // Zap aliases\n 'lightning': 'zap',\n 'bolt': 'zap',\n 'flash': 'zap',\n \n // Shield aliases\n 'security': 'shield',\n 'protect': 'shield',\n \n // Key aliases\n 'password': 'key',\n 'secret': 'key',\n \n // Log in aliases\n 'signin': 'logIn',\n 'login': 'logIn',\n 'enter': 'logIn',\n \n // Log out aliases\n 'signout': 'logOut',\n 'logout': 'logOut',\n 'exit': 'logOut',\n \n // Users aliases\n 'people': 'users',\n 'group': 'users',\n 'team': 'users',\n \n // User plus aliases\n 'addUser': 'userPlus',\n 'invite': 'userPlus',\n \n // Book aliases\n 'read': 'book',\n 'library': 'book',\n \n // Book open aliases\n 'reading': 'bookOpen',\n 'openBook': 'bookOpen',\n \n // Sun aliases\n 'light': 'sun',\n 'day': 'sun',\n \n // Moon aliases\n 'dark': 'moon',\n 'night': 'moon',\n \n // Monitor aliases\n 'screen': 'monitor',\n 'display': 'monitor',\n \n // Brain aliases\n 'ai': 'brain',\n 'intelligence': 'brain',\n 'think': 'brain',\n \n // Lightbulb aliases\n 'idea': 'lightbulb',\n 'bulb': 'lightbulb',\n 'inspiration': 'lightbulb',\n \n // Sparkles aliases\n 'magic': 'sparkles',\n 'stars': 'sparkles',\n 'glitter': 'sparkles',\n} as const\n\n/**\n * Resolve icon alias to actual icon name\n * \n * @param iconName - 아이콘 이름 또는 별칭 / Icon name or alias\n * @returns 실제 아이콘 이름 / Actual icon name\n * @throws {TypeError} iconName이 문자열이 아닌 경우\n */\nexport function resolveIconAlias(iconName: string): string {\n if (typeof iconName !== 'string') {\n throw new TypeError('iconName must be a string');\n }\n return ICON_ALIASES[iconName] || iconName;\n}\n\n/**\n * Get all aliases for an icon name\n * \n * @param iconName - 아이콘 이름 / Icon name\n * @returns 해당 아이콘의 모든 별칭 배열 / Array of all aliases for the icon\n * @throws {TypeError} iconName이 문자열이 아닌 경우\n */\nexport function getIconAliases(iconName: string): string[] {\n if (typeof iconName !== 'string') {\n throw new TypeError('iconName must be a string');\n }\n return Object.entries(ICON_ALIASES)\n .filter(([_, target]) => target === iconName)\n .map(([alias]) => alias);\n}\n\n\n","/**\n * Icon Config Types\n * \n * Icon 시스템의 설정 타입 정의\n * 상태관리는 서비스 레벨에서 관리 (Zustand 등)\n */\n\nexport type IconSet = 'lucide' | 'phosphor' | 'untitled'\n\nexport type PhosphorWeight = 'thin' | 'light' | 'regular' | 'bold' | 'duotone' | 'fill'\n\nexport interface IconConfig {\n set: IconSet\n weight: PhosphorWeight\n size: number\n color: string\n strokeWidth?: number // Lucide/Untitled용\n}\n\nexport const defaultIconConfig: IconConfig = {\n set: 'phosphor',\n weight: 'regular',\n size: 20,\n color: 'currentColor',\n strokeWidth: 1.25,\n}\n\n/**\n * 세트별 기본 strokeWidth\n */\nexport const getDefaultStrokeWidth = (set: IconSet): number => {\n switch (set) {\n case 'lucide':\n return 1.25\n case 'phosphor':\n return 1.25 // Phosphor는 weight 사용\n case 'untitled':\n return 1.5\n default:\n return 1.25\n }\n}\n","'use client'\n\n/**\n * IconProvider - Icon 시스템 전역 설정 Provider\n * \n * React Context를 사용하여 전역 아이콘 설정을 제공합니다.\n * 서비스 레벨에서 Zustand 등으로 상태관리 후 props로 전달 가능합니다.\n * \n * IconProvider - Global Icon Settings Provider\n * \n * Provides global icon settings using React Context API.\n * Can be integrated with state management (e.g., Zustand) at the service level.\n */\n\nimport React, { createContext, useContext } from 'react'\nimport { type IconConfig, type IconSet, type PhosphorWeight, defaultIconConfig } from './icon-store'\n\n/**\n * IconProvider 컴포넌트 Props\n * \n * IconProvider component props interface.\n * \n * @interface IconProviderProps\n */\nexport interface IconProviderProps {\n /** 아이콘 세트 (lucide, phosphor, untitled) / Icon set (lucide, phosphor, untitled) */\n set?: IconSet\n /** Phosphor 아이콘 weight (thin, light, regular, bold, duotone, fill) / Phosphor icon weight */\n weight?: PhosphorWeight\n /** 기본 아이콘 크기 / Default icon size */\n size?: number\n /** 기본 아이콘 색상 / Default icon color */\n color?: string\n /** Lucide/Untitled 아이콘 stroke width / Lucide/Untitled icon stroke width */\n strokeWidth?: number\n /** 자식 컴포넌트 / Child components */\n children: React.ReactNode\n}\n\ninterface IconContextValue extends IconConfig {}\n\nconst IconContext = createContext<IconContextValue>(defaultIconConfig)\n\n/**\n * IconProvider 컴포넌트\n * \n * 전역 아이콘 설정을 Context로 제공합니다.\n * 서비스에서 Zustand로 관리한 값을 props로 전달할 수 있습니다.\n * \n * IconProvider component\n * \n * Provides global icon settings through Context API.\n * Can receive values managed by Zustand at the service level.\n * \n * @component\n * @example\n * ```tsx\n * // 기본 사용 / Basic usage\n * <IconProvider set=\"phosphor\" weight=\"regular\" size={20}>\n * <App />\n * </IconProvider>\n * \n * // Zustand와 함께 사용 / With Zustand\n * const iconConfig = useIconStore(state => state.iconConfig)\n * <IconProvider {...iconConfig}>\n * <App />\n * </IconProvider>\n * \n * // Lucide 아이콘 사용 / Using Lucide icons\n * <IconProvider set=\"lucide\" size={24} strokeWidth={1.5}>\n * <App />\n * </IconProvider>\n * ```\n * \n * @param props - IconProvider 컴포넌트 props / IconProvider component props\n * @returns IconProvider 컴포넌트 / IconProvider component\n */\nexport function IconProvider({\n set = defaultIconConfig.set,\n weight = defaultIconConfig.weight,\n size = defaultIconConfig.size,\n color = defaultIconConfig.color,\n strokeWidth = defaultIconConfig.strokeWidth,\n children,\n}: IconProviderProps) {\n const value: IconContextValue = {\n set,\n weight,\n size,\n color,\n strokeWidth,\n }\n\n return (\n <IconContext.Provider value={value}>\n {children}\n </IconContext.Provider>\n )\n}\n\n/**\n * useIconContext Hook\n * \n * Icon Context를 사용하는 Hook입니다.\n * Icon 컴포넌트 내부에서 사용됩니다.\n * \n * Hook to use Icon Context.\n * Used internally by Icon component.\n * \n * @returns Icon 설정 값 / Icon configuration value\n * \n * @example\n * ```tsx\n * // Icon 컴포넌트 내부에서 사용 / Used inside Icon component\n * const config = useIconContext()\n * const iconSet = config.set\n * const iconSize = config.size\n * ```\n */\nexport function useIconContext(): IconContextValue {\n return useContext(IconContext)\n}\n\n// Re-export types for convenience\nexport type { IconSet, PhosphorWeight, IconConfig } from './icon-store'\nexport { defaultIconConfig, getDefaultStrokeWidth } from './icon-store'\n\n","/**\n * Icon Provider System\n * \n * Supports multiple icon libraries:\n * - Lucide Icons (default)\n * - Phosphor Icons\n * - Untitled Icons (SVG-based)\n * \n * Only imports icons that are actually used in the project for optimal bundle size.\n */\n\nimport * as LucideIcons from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\n\n// Phosphor Icons - lazy loaded, tree-shakeable\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet PhosphorIcons: any = null\n\n// Icon Provider Type\nexport type IconProvider = 'lucide' | 'phosphor' | 'untitled'\n\n// Icon Provider Configuration\nexport interface IconProviderConfig {\n provider: IconProvider\n prefix?: string\n}\n\n/**\n * Project-specific icon list\n * These are the icons actually used in SumUp project\n * Only these icons will be loaded for optimal bundle size\n */\nexport const PROJECT_ICONS = {\n // Navigation & Layout\n 'home': { lucide: 'Home', phosphor: 'House', untitled: 'home' },\n 'layout-dashboard': { lucide: 'LayoutDashboard', phosphor: 'SquaresFour', untitled: 'layout-dashboard' },\n 'folder': { lucide: 'Folder', phosphor: 'Folder', untitled: 'folder' },\n 'alert-circle': { lucide: 'AlertCircle', phosphor: 'WarningCircle', untitled: 'alert-circle' },\n 'alertCircle': { lucide: 'AlertCircle', phosphor: 'WarningCircle', untitled: 'alert-circle' },\n 'columns': { lucide: 'Columns', phosphor: 'Columns', untitled: 'columns' },\n 'users': { lucide: 'Users', phosphor: 'Users', untitled: 'users' },\n 'settings': { lucide: 'Settings', phosphor: 'Gear', untitled: 'settings' },\n 'menu': { lucide: 'Menu', phosphor: 'List', untitled: 'menu' },\n 'close': { lucide: 'X', phosphor: 'X', untitled: 'close' },\n 'chevronLeft': { lucide: 'ChevronLeft', phosphor: 'CaretLeft', untitled: 'chevron-left' },\n 'chevronRight': { lucide: 'ChevronRight', phosphor: 'CaretRight', untitled: 'chevron-right' },\n 'chevronDown': { lucide: 'ChevronDown', phosphor: 'CaretDown', untitled: 'chevron-down' },\n 'chevronUp': { lucide: 'ChevronUp', phosphor: 'CaretUp', untitled: 'chevron-up' },\n 'arrowLeft': { lucide: 'ArrowLeft', phosphor: 'ArrowLeft', untitled: 'arrow-left' },\n 'arrowRight': { lucide: 'ArrowRight', phosphor: 'ArrowRight', untitled: 'arrow-right' },\n 'arrowUp': { lucide: 'ArrowUp', phosphor: 'ArrowUp', untitled: 'arrow-up' },\n 'arrowDown': { lucide: 'ArrowDown', phosphor: 'ArrowDown', untitled: 'arrow-down' },\n\n // Actions\n 'add': { lucide: 'Plus', phosphor: 'Plus', untitled: 'add' },\n 'edit': { lucide: 'Edit', phosphor: 'Pencil', untitled: 'edit' },\n 'pencil': { lucide: 'Pencil', phosphor: 'Pencil', untitled: 'pencil' },\n 'delete': { lucide: 'Trash2', phosphor: 'Trash', untitled: 'trash' },\n 'trash': { lucide: 'Trash2', phosphor: 'Trash', untitled: 'trash' },\n 'upload': { lucide: 'Upload', phosphor: 'Upload', untitled: 'upload' },\n 'download': { lucide: 'Download', phosphor: 'Download', untitled: 'download' },\n 'x': { lucide: 'X', phosphor: 'X', untitled: 'close' },\n 'check': { lucide: 'Check', phosphor: 'Check', untitled: 'check' },\n 'search': { lucide: 'Search', phosphor: 'MagnifyingGlass', untitled: 'search' },\n 'share': { lucide: 'Share', phosphor: 'Share', untitled: 'share' },\n 'copy': { lucide: 'Copy', phosphor: 'Copy', untitled: 'copy' },\n 'save': { lucide: 'Save', phosphor: 'FloppyDisk', untitled: 'save' },\n\n // Status & Feedback\n 'loader': { lucide: 'Loader2', phosphor: 'Spinner', untitled: 'loader' },\n 'loader2': { lucide: 'Loader2', phosphor: 'Spinner', untitled: 'loader' },\n 'check-circle': { lucide: 'CheckCircle', phosphor: 'CheckCircle', untitled: 'check-circle' },\n 'checkCircle': { lucide: 'CheckCircle', phosphor: 'CheckCircle', untitled: 'check-circle' },\n 'success': { lucide: 'CheckCircle', phosphor: 'CheckCircle', untitled: 'check-circle' },\n 'error': { lucide: 'XCircle', phosphor: 'XCircle', untitled: 'error' },\n 'warning': { lucide: 'AlertCircle', phosphor: 'WarningCircle', untitled: 'warning' },\n 'info': { lucide: 'Info', phosphor: 'Info', untitled: 'info' },\n 'refresh': { lucide: 'RefreshCw', phosphor: 'ArrowClockwise', untitled: 'refresh' },\n 'refreshCw': { lucide: 'RefreshCw', phosphor: 'ArrowClockwise', untitled: 'refresh' },\n 'bell': { lucide: 'Bell', phosphor: 'Bell', untitled: 'bell' },\n 'heart': { lucide: 'Heart', phosphor: 'Heart', untitled: 'heart' },\n 'star': { lucide: 'Star', phosphor: 'Star', untitled: 'star' },\n 'bookmark': { lucide: 'Bookmark', phosphor: 'Bookmark', untitled: 'bookmark' },\n\n // User & Auth\n 'user': { lucide: 'User', phosphor: 'User', untitled: 'user' },\n 'userPlus': { lucide: 'UserPlus', phosphor: 'UserPlus', untitled: 'user-plus' },\n 'logIn': { lucide: 'LogIn', phosphor: 'SignIn', untitled: 'log-in' },\n 'logOut': { lucide: 'LogOut', phosphor: 'SignOut', untitled: 'log-out' },\n 'chrome': { lucide: 'Chrome', phosphor: 'ChromeLogo', untitled: 'chrome' },\n 'github': { lucide: 'Github', phosphor: 'GithubLogo', untitled: 'github' },\n 'message': { lucide: 'MessageCircle', phosphor: 'ChatCircle', untitled: 'message' },\n\n // Content\n 'messageSquare': { lucide: 'MessageSquare', phosphor: 'ChatSquare', untitled: 'message-square' },\n 'message-square': { lucide: 'MessageSquare', phosphor: 'ChatSquare', untitled: 'message-square' },\n 'inbox': { lucide: 'Inbox', phosphor: 'Inbox', untitled: 'inbox' },\n 'calendar': { lucide: 'Calendar', phosphor: 'Calendar', untitled: 'calendar' },\n 'calendarPlus': { lucide: 'CalendarPlus', phosphor: 'CalendarPlus', untitled: 'calendar-plus' },\n 'checkSquare': { lucide: 'CheckSquare', phosphor: 'CheckSquare', untitled: 'check-square' },\n 'clock': { lucide: 'Clock', phosphor: 'Clock', untitled: 'clock' },\n 'book': { lucide: 'Book', phosphor: 'Book', untitled: 'book' },\n 'bookOpen': { lucide: 'BookOpen', phosphor: 'BookOpen', untitled: 'book-open' },\n\n // Theme & UI\n 'monitor': { lucide: 'Monitor', phosphor: 'Monitor', untitled: 'monitor' },\n 'sun': { lucide: 'Sun', phosphor: 'Sun', untitled: 'sun' },\n 'moon': { lucide: 'Moon', phosphor: 'Moon', untitled: 'moon' },\n\n // AI & Features\n 'sparkles': { lucide: 'Sparkles', phosphor: 'Sparkle', untitled: 'sparkles' },\n 'lightbulb': { lucide: 'Lightbulb', phosphor: 'Lightbulb', untitled: 'lightbulb' },\n 'brain': { lucide: 'Brain', phosphor: 'Brain', untitled: 'brain' },\n 'zap': { lucide: 'Zap', phosphor: 'Lightning', untitled: 'zap' },\n\n // Data & Analytics\n 'chart': { lucide: 'BarChart3', phosphor: 'ChartBar', untitled: 'chart' },\n 'barChart': { lucide: 'BarChart', phosphor: 'ChartBar', untitled: 'bar-chart' },\n 'trendingUp': { lucide: 'TrendingUp', phosphor: 'TrendUp', untitled: 'trending-up' },\n 'trendingDown': { lucide: 'TrendingDown', phosphor: 'TrendDown', untitled: 'trending-down' },\n 'activity': { lucide: 'Activity', phosphor: 'Activity', untitled: 'activity' },\n 'database': { lucide: 'Database', phosphor: 'Database', untitled: 'database' },\n 'dollarSign': { lucide: 'DollarSign', phosphor: 'CurrencyDollar', untitled: 'dollar-sign' },\n 'dollar': { lucide: 'DollarSign', phosphor: 'CurrencyDollar', untitled: 'dollar-sign' },\n 'currency': { lucide: 'DollarSign', phosphor: 'CurrencyDollar', untitled: 'currency' },\n\n // Security\n 'lock': { lucide: 'Lock', phosphor: 'Lock', untitled: 'lock' },\n 'unlock': { lucide: 'Unlock', phosphor: 'LockOpen', untitled: 'unlock' },\n 'shield': { lucide: 'Shield', phosphor: 'Shield', untitled: 'shield' },\n 'key': { lucide: 'Key', phosphor: 'Key', untitled: 'key' },\n\n // Media\n 'play': { lucide: 'Play', phosphor: 'Play', untitled: 'play' },\n 'pause': { lucide: 'Pause', phosphor: 'Pause', untitled: 'pause' },\n 'image': { lucide: 'Image', phosphor: 'Image', untitled: 'image' },\n 'video': { lucide: 'Video', phosphor: 'Video', untitled: 'video' },\n 'camera': { lucide: 'Camera', phosphor: 'Camera', untitled: 'camera' },\n\n // Files\n 'fileText': { lucide: 'FileText', phosphor: 'FileText', untitled: 'file-text' },\n 'file': { lucide: 'File', phosphor: 'File', untitled: 'file' },\n\n // Navigation\n 'externalLink': { lucide: 'ExternalLink', phosphor: 'ArrowSquareOut', untitled: 'external-link' },\n 'link': { lucide: 'Link', phosphor: 'Link', untitled: 'link' },\n 'moreHorizontal': { lucide: 'MoreHorizontal', phosphor: 'DotsThreeOutline', untitled: 'more-horizontal' },\n 'moreVertical': { lucide: 'MoreVertical', phosphor: 'DotsThreeVertical', untitled: 'more-vertical' },\n\n // Priority\n 'remove': { lucide: 'Minus', phosphor: 'Minus', untitled: 'remove' },\n\n // Eye (password)\n 'eye': { lucide: 'Eye', phosphor: 'Eye', untitled: 'eye' },\n 'eyeOff': { lucide: 'EyeOff', phosphor: 'EyeSlash', untitled: 'eye-off' },\n\n // Emotions\n 'smile': { lucide: 'Smile', phosphor: 'Smiley', untitled: 'smile' },\n 'frown': { lucide: 'Frown', phosphor: 'SmileySad', untitled: 'frown' },\n 'meh': { lucide: 'Meh', phosphor: 'SmileyMeh', untitled: 'meh' },\n\n // Social\n 'mail': { lucide: 'Mail', phosphor: 'Envelope', untitled: 'mail' },\n 'phone': { lucide: 'Phone', phosphor: 'Phone', untitled: 'phone' },\n\n // Additional\n 'flag': { lucide: 'Flag', phosphor: 'Flag', untitled: 'flag' },\n} as const\n\n/**\n * Initialize Phosphor Icons (lazy load)\n * Only loads when Phosphor provider is used\n * Uses tree-shaking to only include used icons\n */\nexport async function initPhosphorIcons() {\n if (typeof window === 'undefined') return null\n\n if (!PhosphorIcons) {\n try {\n // Dynamic import with tree-shaking support\n // Only icons actually used will be included in bundle\n const phosphorModule = await import('@phosphor-icons/react')\n PhosphorIcons = phosphorModule\n } catch (error) {\n console.warn('Phosphor Icons not available. Install @phosphor-icons/react to use.')\n return null\n }\n }\n return PhosphorIcons\n}\n\n/**\n * Get icon from provider\n * Only resolves icons that are in PROJECT_ICONS for optimal bundle size\n * \n * @param iconName - 아이콘 이름 / Icon name\n * @param provider - 아이콘 프로바이더 / Icon provider\n * @returns 아이콘 컴포넌트 또는 null / Icon component or null\n */\nexport function getIconFromProvider(\n iconName: string,\n provider: IconProvider | 'lucide' | 'phosphor' | 'untitled' = 'lucide'\n): LucideIcon | React.ComponentType<Record<string, unknown>> | null {\n // Check if icon is in project icon list\n const iconMapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n\n if (!iconMapping) {\n // Fallback to direct lookup for backward compatibility\n return getIconDirect(iconName, provider)\n }\n\n const mappedName = iconMapping[provider]\n\n switch (provider) {\n case 'lucide':\n return (LucideIcons as unknown as Record<string, LucideIcon>)[mappedName] || null\n\n case 'phosphor':\n if (!PhosphorIcons) {\n return null\n }\n return PhosphorIcons?.[mappedName] || null\n\n case 'untitled':\n // Untitled Icons are SVG-based, handled separately\n return null\n\n default:\n return null\n }\n}\n\n/**\n * Direct icon lookup (fallback for icons not in PROJECT_ICONS)\n * \n * 동적으로 Lucide 아이콘을 가져옵니다.\n * icons.ts에 없는 아이콘도 사용 가능하도록 합니다.\n * \n * Dynamically loads Lucide icons.\n * Allows using icons not in icons.ts.\n * \n * @param iconName - 아이콘 이름 / Icon name\n * @param provider - 아이콘 프로바이더 / Icon provider\n * @returns 아이콘 컴포넌트 또는 null / Icon component or null\n */\nfunction getIconDirect(\n iconName: string,\n provider: IconProvider | 'lucide' | 'phosphor' | 'untitled'\n): LucideIcon | React.ComponentType<Record<string, unknown>> | null {\n switch (provider) {\n case 'lucide':\n // icons.ts에 없는 아이콘을 동적으로 찾기\n // PascalCase 변환 시도\n const lucideName = iconName.charAt(0).toUpperCase() + iconName.slice(1)\n // camelCase도 시도\n const camelCaseName = iconName.replace(/([A-Z])/g, (match, p1) =>\n match === iconName[0] ? match.toLowerCase() : match\n )\n\n return (LucideIcons as unknown as Record<string, LucideIcon>)[lucideName] ||\n (LucideIcons as unknown as Record<string, LucideIcon>)[iconName] ||\n (LucideIcons as unknown as Record<string, LucideIcon>)[camelCaseName] ||\n null\n\n case 'phosphor':\n if (!PhosphorIcons) {\n return null\n }\n const phosphorName1 = iconName.charAt(0).toUpperCase() + iconName.slice(1)\n const phosphorName2 = iconName\n .split(/(?=[A-Z])/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n return PhosphorIcons?.[phosphorName1] ||\n PhosphorIcons?.[phosphorName2] ||\n PhosphorIcons?.[iconName] ||\n null\n\n case 'untitled':\n return null\n\n default:\n return null\n }\n}\n\n/**\n * Get icon name for provider\n * \n * 프로바이더별 아이콘 이름을 가져옵니다.\n * Gets icon name for the specified provider.\n * \n * @param iconName - 아이콘 이름 / Icon name\n * @param provider - 아이콘 프로바이더 / Icon provider\n * @returns 프로바이더별 아이콘 이름 / Icon name for provider\n */\nexport function getIconNameForProvider(\n iconName: string,\n provider: IconProvider | 'lucide' | 'phosphor' | 'untitled'\n): string {\n const iconMapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n if (iconMapping && iconMapping[provider]) {\n return iconMapping[provider]\n }\n return iconName\n}\n\n/**\n * Get all project icon names\n */\nexport function getProjectIconNames(): string[] {\n return Object.keys(PROJECT_ICONS)\n}\n","import React from 'react'\nimport type { LucideProps } from 'lucide-react'\nimport { merge, mergeMap } from '../../lib/utils'\nimport { icons, IconName, emotionIcons, statusIcons } from '../../lib/icons'\nimport { getIconFromProvider, initPhosphorIcons } from '../../lib/icon-providers'\nimport { resolveIconAlias } from '../../lib/icon-aliases'\nimport { useIconContext, type IconSet } from './IconProvider'\nimport { type PhosphorWeight } from './icon-store'\nimport type { AllIconName } from '../../lib/icon-names'\n\n/**\n * Icon 컴포넌트 Props\n * \n * Icon component props interface.\n * \n * @interface IconProps\n */\nexport interface IconProps {\n /** 아이콘 이름 / Icon name */\n name: AllIconName\n /** 아이콘 크기 (숫자 또는 문자열) / Icon size (number or string) */\n size?: number | string\n /** 추가 CSS 클래스 / Additional CSS classes */\n className?: string\n /** 감정 아이콘 타입 / Emotion icon type */\n emotion?: keyof typeof emotionIcons\n /** 상태 아이콘 타입 / Status icon type */\n status?: keyof typeof statusIcons\n /** 아이콘 프로바이더 오버라이드 (전역 설정 무시) / Icon provider override (ignores global config) */\n provider?: IconSet\n /** 부드러운 애니메이션 효과 / Smooth animation effect */\n animated?: boolean\n /** 펄스 애니메이션 / Pulse animation */\n pulse?: boolean\n /** 회전 애니메이션 / Spin animation */\n spin?: boolean\n /** 바운스 애니메이션 / Bounce animation */\n bounce?: boolean\n /** 색상 변형 / Color variant */\n variant?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'muted'\n /** Phosphor 아이콘 weight 오버라이드 / Phosphor icon weight override */\n weight?: PhosphorWeight\n /** 스크린 리더용 라벨 (의미 있는 아이콘인 경우) / Screen reader label (for meaningful icons) */\n 'aria-label'?: string\n /** 장식용 아이콘인 경우 true (스크린 리더에서 숨김) / Set to true for decorative icons (hidden from screen readers) */\n 'aria-hidden'?: boolean\n}\n\n/**\n * Icon 컴포넌트\n * \n * 다중 아이콘 라이브러리(Lucide, Phosphor, Untitled)를 지원하는 통합 아이콘 컴포넌트입니다.\n * IconProvider를 통해 전역 설정을 관리할 수 있으며, 개별 아이콘에서도 설정을 오버라이드할 수 있습니다.\n * \n * Icon component that supports multiple icon libraries (Lucide, Phosphor, Untitled).\n * Global settings can be managed through IconProvider, and individual icons can override settings.\n * \n * @component\n * @example\n * ```tsx\n * // 기본 사용 / Basic usage\n * <Icon name=\"heart\" />\n * \n * // 크기 지정 / Specify size\n * <Icon name=\"user\" size={24} />\n * \n * // 색상 변형 / Color variant\n * <Icon name=\"check\" variant=\"success\" />\n * \n * // 애니메이션 / Animation\n * <Icon name=\"loader\" spin />\n * <Icon name=\"heart\" pulse />\n * \n * // 접근성 / Accessibility\n * <Icon name=\"search\" aria-label=\"검색\" />\n * <Icon name=\"decorative-icon\" aria-hidden />\n * \n * // 감정 아이콘 / Emotion icon\n * <Icon emotion=\"happy\" />\n * \n * // 상태 아이콘 / Status icon\n * <Icon status=\"loading\" spin />\n * ```\n * \n * @param props - Icon 컴포넌트 props / Icon component props\n * @returns Icon 컴포넌트 / Icon component\n */\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(({\n name,\n size,\n className,\n emotion,\n status,\n provider,\n weight,\n animated = false,\n pulse = false,\n spin = false,\n bounce = false,\n variant = 'default',\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden\n}, ref) => {\n // Context에서 전역 설정 가져오기\n const config = useIconContext()\n \n // prop으로 오버라이드 가능, 없으면 Context에서 가져옴\n const iconSet = provider || config.set\n const iconSize = size ?? config.size\n const iconWeight = weight || config.weight\n const iconColor = config.color\n const iconStrokeWidth = config.strokeWidth ?? 1.25\n \n // 클라이언트 사이드에서만 아이콘 렌더링 (hydration 오류 방지)\n const [isClient, setIsClient] = React.useState(false)\n const [phosphorReady, setPhosphorReady] = React.useState(false)\n \n React.useEffect(() => {\n setIsClient(true)\n \n // Phosphor Icons 초기화 (provider가 phosphor일 때만)\n if (iconSet === 'phosphor') {\n initPhosphorIcons().then(() => {\n setPhosphorReady(true)\n })\n } else {\n setPhosphorReady(true)\n }\n }, [iconSet])\n\n // 감정이나 상태가 지정되면 해당 아이콘으로 오버라이드\n let iconName = emotion ? emotionIcons[emotion] : \n status ? statusIcons[status] : \n name\n \n // Alias 해결 (back, prev → arrowLeft 등)\n iconName = resolveIconAlias(iconName) as AllIconName\n \n // 색상 변형 클래스 (먼저 선언 - fallback에서 사용)\n const variantClasses = mergeMap({\n 'text-gray-900 dark:text-white': variant === 'default',\n 'text-blue-600 dark:text-blue-400': variant === 'primary',\n 'text-gray-600 dark:text-gray-400': variant === 'secondary',\n 'text-green-600 dark:text-green-400': variant === 'success',\n 'text-yellow-600 dark:text-yellow-400': variant === 'warning',\n 'text-red-600 dark:text-red-400': variant === 'error',\n 'text-gray-500 dark:text-gray-500': variant === 'muted',\n })\n \n // 서버사이드에서는 빈 span 반환 (hydration 오류 방지)\n // Return empty span on server-side (prevent hydration errors)\n if (!isClient || (iconSet === 'phosphor' && !phosphorReady)) {\n return (\n <span\n style={{ width: iconSize, height: iconSize }}\n className={merge(variantClasses, className)}\n aria-hidden={ariaHidden !== undefined ? ariaHidden : true}\n aria-label={ariaLabel}\n />\n )\n }\n\n // Provider에 따라 아이콘 가져오기\n type IconComponentType = React.ComponentType<LucideProps | React.SVGProps<SVGSVGElement> | Record<string, unknown>>\n let IconComponent: IconComponentType | null = null\n \n if (iconSet === 'lucide') {\n // 1. icons.ts에서 먼저 찾기 (실제 사용되는 아이콘만 포함)\n // 타입 단언: AllIconName에는 있지만 icons 객체에 없는 경우를 위해\n IconComponent = (icons[iconName as IconName] || null) as IconComponentType | null\n \n // 2. 없으면 동적으로 Lucide에서 가져오기 (fallback)\n if (!IconComponent) {\n IconComponent = getIconFromProvider(iconName, iconSet) as IconComponentType | null\n }\n } else {\n // Phosphor나 다른 provider는 getIconFromProvider 사용\n // phosphorReady가 true일 때만 호출됨 (위에서 체크)\n IconComponent = getIconFromProvider(iconName, iconSet) as IconComponentType | null\n }\n \n if (!IconComponent) {\n console.warn(`Icon \"${iconName}\" not found for provider \"${iconSet}\"`)\n // Fallback: 빈 원형 아이콘 표시 (에러 표시)\n // Fallback: display empty circle icon (error indicator)\n return (\n <span\n ref={ref}\n className={merge(\n 'inline-flex items-center justify-center rounded-full border-2 border-dashed border-gray-300 dark:border-gray-600',\n variantClasses,\n className\n )}\n style={{ width: iconSize, height: iconSize }}\n aria-label={ariaLabel || `아이콘을 찾을 수 없음: ${iconName}`}\n title={`Icon not found: ${iconName}`}\n >\n <span className=\"text-xs text-gray-400 dark:text-gray-500\" aria-hidden=\"true\">\n ?\n </span>\n </span>\n )\n }\n \n // 세트별 props 준비\n type IconPropsType = LucideProps & {\n size?: number\n width?: number | string\n height?: number | string\n color?: string\n weight?: PhosphorWeight\n strokeWidth?: number\n }\n \n const iconProps: IconPropsType = {\n size: typeof iconSize === 'number' ? iconSize : undefined,\n width: typeof iconSize === 'string' ? iconSize : iconSize,\n height: typeof iconSize === 'string' ? iconSize : iconSize,\n color: iconColor,\n } as IconPropsType\n \n // Phosphor는 weight 사용\n if (iconSet === 'phosphor') {\n iconProps.weight = iconWeight\n } else {\n // Lucide/Untitled는 strokeWidth 사용\n iconProps.strokeWidth = iconStrokeWidth\n }\n\n // 애니메이션 클래스 생성\n const animationClasses = mergeMap({\n 'animate-pulse': pulse,\n 'animate-spin': spin,\n 'animate-bounce': bounce,\n 'transition-all duration-200 ease-in-out': animated,\n })\n\n // 접근성 속성 결정 / Determine accessibility attributes\n // aria-label이 제공되면 사용, 없으면 aria-hidden이 true인지 확인\n // If aria-label is provided, use it; otherwise check if aria-hidden is true\n const accessibilityProps: React.AriaAttributes = {}\n \n if (ariaLabel) {\n accessibilityProps['aria-label'] = ariaLabel\n accessibilityProps['aria-hidden'] = false\n } else if (ariaHidden !== undefined) {\n accessibilityProps['aria-hidden'] = ariaHidden\n } else {\n // 기본값: 장식용으로 간주 (의미 있는 아이콘은 명시적으로 aria-label 제공 필요)\n // Default: considered decorative (meaningful icons should explicitly provide aria-label)\n accessibilityProps['aria-hidden'] = true\n }\n\n return (\n <span\n ref={ref}\n className={merge(\n 'inline-flex items-center justify-center',\n animationClasses,\n variantClasses,\n className\n )}\n style={{ width: iconSize, height: iconSize }}\n {...accessibilityProps}\n >\n {IconComponent && React.createElement(IconComponent, { \n ...iconProps,\n className: variantClasses,\n 'aria-hidden': true // SVG 내부 요소는 항상 숨김 (외부 span이 접근성 담당)\n } as React.ComponentProps<typeof IconComponent>)}\n </span>\n )\n})\n\nIconComponent.displayName = 'Icon'\n\n// 성능 최적화: React.memo 적용\n// Performance optimization: Apply React.memo\n// forwardRef와 함께 사용할 때는 React.memo로 감싸기\n// When using with forwardRef, wrap with React.memo\nconst MemoizedIcon = React.memo(IconComponent, (prevProps, nextProps) => {\n // props 비교 함수: 변경된 props만 체크\n // Props comparison function: only check changed props\n return (\n prevProps.name === nextProps.name &&\n prevProps.size === nextProps.size &&\n prevProps.className === nextProps.className &&\n prevProps.emotion === nextProps.emotion &&\n prevProps.status === nextProps.status &&\n prevProps.provider === nextProps.provider &&\n prevProps.animated === nextProps.animated &&\n prevProps.pulse === nextProps.pulse &&\n prevProps.spin === nextProps.spin &&\n prevProps.bounce === nextProps.bounce &&\n prevProps.variant === nextProps.variant &&\n prevProps.weight === nextProps.weight &&\n prevProps['aria-label'] === nextProps['aria-label'] &&\n prevProps['aria-hidden'] === nextProps['aria-hidden']\n )\n})\n\n// 타입 안전성을 위해 export\n// Export for type safety\nexport const Icon = MemoizedIcon as typeof IconComponent\n\nIcon.displayName = 'Icon'\n\n/**\n * EmotionIcon 컴포넌트\n * \n * 감정을 표현하는 아이콘 컴포넌트입니다.\n * Icon component for expressing emotions.\n * \n * @component\n * @example\n * ```tsx\n * <EmotionIcon emotion=\"happy\" />\n * <EmotionIcon emotion=\"sad\" size={24} />\n * ```\n */\nexport const EmotionIcon = React.forwardRef<HTMLSpanElement, Omit<IconProps, 'name'> & { emotion: keyof typeof emotionIcons }>(\n (props, ref) => <Icon ref={ref} name=\"smile\" {...props} />\n)\n\nEmotionIcon.displayName = 'EmotionIcon'\n\n/**\n * StatusIcon 컴포넌트\n * \n * 상태를 표현하는 아이콘 컴포넌트입니다.\n * Icon component for expressing status.\n * \n * @component\n * @example\n * ```tsx\n * <StatusIcon status=\"loading\" spin />\n * <StatusIcon status=\"success\" variant=\"success\" />\n * ```\n */\nexport const StatusIcon = React.forwardRef<HTMLSpanElement, Omit<IconProps, 'name'> & { status: keyof typeof statusIcons }>(\n (props, ref) => <Icon ref={ref} name=\"info\" {...props} />\n)\n\nStatusIcon.displayName = 'StatusIcon'\n\n/**\n * LoadingIcon 컴포넌트\n * \n * 로딩 상태를 표시하는 전용 아이콘 컴포넌트입니다.\n * Dedicated icon component for displaying loading status.\n * \n * @component\n * @example\n * ```tsx\n * <LoadingIcon />\n * <LoadingIcon size={32} />\n * ```\n */\nexport const LoadingIcon = React.forwardRef<HTMLDivElement, Omit<IconProps, 'name' | 'status'>>(\n (props, ref) => (\n <Icon ref={ref} name=\"loader\" status=\"loading\" spin aria-label=\"로딩 중\" {...props} />\n )\n)\n\nLoadingIcon.displayName = 'LoadingIcon'\n\n/**\n * SuccessIcon 컴포넌트\n * \n * 성공 상태를 표시하는 전용 아이콘 컴포넌트입니다.\n * Dedicated icon component for displaying success status.\n * \n * @component\n * @example\n * ```tsx\n * <SuccessIcon />\n * <SuccessIcon size={24} />\n * ```\n */\nexport const SuccessIcon = React.forwardRef<HTMLDivElement, Omit<IconProps, 'name' | 'status'>>(\n (props, ref) => (\n <Icon ref={ref} name=\"check\" status=\"success\" variant=\"success\" aria-label=\"성공\" {...props} />\n )\n)\n\nSuccessIcon.displayName = 'SuccessIcon'\n\n/**\n * ErrorIcon 컴포넌트\n * \n * 에러 상태를 표시하는 전용 아이콘 컴포넌트입니다.\n * Dedicated icon component for displaying error status.\n * \n * @component\n * @example\n * ```tsx\n * <ErrorIcon />\n * <ErrorIcon size={24} />\n * ```\n */\nexport const ErrorIcon = React.forwardRef<HTMLDivElement, Omit<IconProps, 'name' | 'status'>>(\n (props, ref) => (\n <Icon ref={ref} name=\"alertCircle\" status=\"error\" variant=\"error\" aria-label=\"오류\" {...props} />\n )\n)\n\nErrorIcon.displayName = 'ErrorIcon'\n\n"]}
|
|
@@ -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 {a}from'./chunk-UUHAXGMO.mjs';import T,{createContext,useContext,useState,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';var f=createContext(void 0);function P(){let t=useContext(f);if(!t)throw new Error("useToast must be used within a ToastProvider");return t}function M({children:t,maxToasts:n=5,position:a="top-right"}){let[s,r]=useState([]),i=useCallback(o=>{r(u=>u.filter(g=>g.id!==o));},[]),c=useCallback(o=>{let u=Math.random().toString(36).substr(2,9),g={...o,id:u};r(x=>[...x,g].slice(-n)),o.duration!==0&&setTimeout(()=>{i(u);},o.duration||5e3);},[n,i]),m=useCallback(()=>{r([]);},[]);return jsxs(f.Provider,{value:{toasts:s,addToast:c,removeToast:i,clearToasts:m},children:[t,jsx(k,{toasts:s,removeToast:i,position:a})]})}function k({toasts:t,removeToast:n,position:a$1}){let s={"top-right":"top-4 right-4","top-left":"top-4 left-4","bottom-right":"bottom-4 right-4","bottom-left":"bottom-4 left-4","top-center":"top-4 left-1/2 transform -translate-x-1/2","bottom-center":"bottom-4 left-1/2 transform -translate-x-1/2"};return t.length===0?null:jsx("div",{className:a("fixed z-50 space-y-3 max-w-sm",s[a$1]),children:t.map(r=>jsx(w,{toast:r,onRemove:n},r.id))})}function w({toast:t,onRemove:n}){let[a$1,s]=useState(false);T.useEffect(()=>{s(true);},[]);let r=()=>{s(false),setTimeout(()=>n(t.id),300);},i=o=>{switch(o){case "success":return "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-800 dark:text-green-200";case "error":return "bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800 text-red-800 dark:text-red-200";case "warning":return "bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800 text-yellow-800 dark:text-yellow-200";case "info":return "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-800 dark:text-blue-200"}},c=o=>{switch(o){case "success":return "text-green-500 dark:text-green-400";case "error":return "text-red-500 dark:text-red-400";case "warning":return "text-yellow-500 dark:text-yellow-400";case "info":return "text-blue-500 dark:text-blue-400"}},m=o=>{switch(o){case "success":return jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})});case "error":return jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})});case "warning":return jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"})});case "info":return jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})})}};return jsxs("div",{className:a("flex items-start p-4 rounded-xl border shadow-lg backdrop-blur-sm transition-all duration-300 transform",i(t.type),a$1?"translate-x-0 opacity-100 scale-100":"translate-x-full opacity-0 scale-95"),style:{animation:a$1?"slideInRight 0.3s cubic-bezier(0.16, 1, 0.3, 1)":void 0},children:[jsxs("div",{className:a("flex-shrink-0 mr-3",c(t.type)),children:[" ",m(t.type)]}),jsxs("div",{className:"flex-1 min-w-0",children:[t.title&&jsxs("h4",{className:"text-sm font-semibold mb-1",children:[" ",t.title]}),jsx("p",{className:"text-sm leading-relaxed",children:t.message}),t.action&&jsx("button",{onClick:t.action.onClick,className:"mt-3 text-sm font-medium underline hover:no-underline transition-all duration-200",children:t.action.label})]}),jsxs("div",{className:"flex-shrink-0 ml-4",children:[" ",jsx("button",{onClick:r,className:a("inline-flex rounded-md p-1.5 focus:outline-none focus:ring-2 focus:ring-offset-2 transition-all duration-200 hover:bg-black/5 dark:hover:bg-white/5",c(t.type)),"aria-label":"\uB2EB\uAE30",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})]})}export{P as a,M as b};//# sourceMappingURL=chunk-VU264VFN.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-VU264VFN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Toast.tsx"],"names":["ToastContext","createContext","useToast","context","useContext","ToastProvider","children","maxToasts","position","toasts","setToasts","useState","removeToast","useCallback","id","prev","toast","addToast","newToast","clearToasts","jsxs","jsx","ToastContainer","positionClasses","merge","ToastItem","onRemove","isVisible","setIsVisible","React","handleRemove","getToastStyles","type","getIconStyles","getToastIcon"],"mappings":"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","file":"chunk-VU264VFN.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { createContext, useContext, useState, useCallback } from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Toast 메시지 타입 / Toast message type\n * @typedef {Object} Toast\n * @property {string} id - Toast 고유 ID / Toast unique ID\n * @property {\"success\" | \"error\" | \"warning\" | \"info\"} type - Toast 타입 / Toast type\n * @property {string} [title] - Toast 제목 / Toast title\n * @property {string} message - Toast 메시지 / Toast message\n * @property {number} [duration] - 표시 시간(ms), 0이면 자동 제거 안 함 / Display duration (ms), 0 means no auto-remove\n * @property {Object} [action] - 액션 버튼 / Action button\n * @property {string} action.label - 액션 버튼 레이블 / Action button label\n * @property {() => void} action.onClick - 액션 버튼 클릭 핸들러 / Action button click handler\n */\nexport interface Toast {\n id: string\n type: \"success\" | \"error\" | \"warning\" | \"info\"\n title?: string\n message: string\n duration?: number\n action?: {\n label: string\n onClick: () => void\n }\n}\n\n// Toast Context 타입\ninterface ToastContextType {\n toasts: Toast[]\n addToast: (toast: Omit<Toast, \"id\">) => void\n removeToast: (id: string) => void\n clearToasts: () => void\n}\n\n// Toast Context 생성\nconst ToastContext = createContext<ToastContextType | undefined>(undefined)\n\n/**\n * useToast Hook\n * \n * Toast를 추가, 제거, 초기화하는 훅입니다.\n * ToastProvider 내부에서만 사용 가능합니다.\n * \n * Hook for adding, removing, and clearing toasts.\n * Can only be used within ToastProvider.\n * \n * @example\n * const { addToast, removeToast, clearToasts } = useToast()\n * \n * addToast({\n * type: \"success\",\n * message: \"저장되었습니다\",\n * duration: 3000\n * })\n * \n * @returns {ToastContextType} Toast 컨텍스트 값 / Toast context value\n * @throws {Error} ToastProvider 외부에서 사용 시 에러 발생 / Error when used outside ToastProvider\n */\nexport function useToast(): ToastContextType {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\")\n }\n return context\n}\n\n/**\n * ToastProvider 컴포넌트의 props / ToastProvider component props\n * @typedef {Object} ToastProviderProps\n * @property {React.ReactNode} children - 자식 컴포넌트 / Child components\n * @property {number} [maxToasts=5] - 최대 Toast 개수 / Maximum number of toasts\n * @property {\"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\" | \"bottom-center\"} [position=\"top-right\"] - Toast 표시 위치 / Toast display position\n */\ninterface ToastProviderProps {\n children: React.ReactNode\n maxToasts?: number\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\" | \"bottom-center\"\n}\n\n/**\n * ToastProvider 컴포넌트 / ToastProvider component\n * \n * Toast 시스템의 컨텍스트를 제공하는 Provider 컴포넌트입니다.\n * 앱의 루트 레벨에서 사용하여 전역 Toast 기능을 활성화합니다.\n * \n * Provider component that provides context for the Toast system.\n * Use at the root level of your app to enable global Toast functionality.\n * \n * @component\n * @example\n * // App.tsx\n * <ToastProvider position=\"top-center\" maxToasts={3}>\n * <App />\n * </ToastProvider>\n * \n * @example\n * // 컴포넌트에서 사용 / Usage in component\n * const { addToast } = useToast()\n * \n * const handleSave = () => {\n * addToast({\n * type: \"success\",\n * message: \"저장되었습니다\",\n * title: \"성공\"\n * })\n * }\n * \n * @param {ToastProviderProps} props - ToastProvider 컴포넌트의 props / ToastProvider component props\n * @returns {JSX.Element} ToastProvider 컴포넌트 / ToastProvider component\n * \n * @todo 접근성 개선: ToastItem에 role=\"alert\" 또는 role=\"status\" 추가 필요 / Accessibility: Add role=\"alert\" or role=\"status\" to ToastItem\n * @todo 접근성 개선: aria-live=\"polite\" 또는 aria-live=\"assertive\" 추가 필요 / Accessibility: Add aria-live=\"polite\" or aria-live=\"assertive\"\n */\nexport function ToastProvider({\n children,\n maxToasts = 5,\n position = \"top-right\"\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<Toast[]>([])\n\n const removeToast = useCallback((id: string) => {\n setToasts(prev => prev.filter(toast => toast.id !== id))\n }, [])\n\n const addToast = useCallback((toast: Omit<Toast, \"id\">) => {\n const id = Math.random().toString(36).substr(2, 9)\n const newToast: Toast = { ...toast, id }\n\n setToasts(prev => {\n const updatedToasts = [...prev, newToast]\n return updatedToasts.slice(-maxToasts) // 최대 개수 제한\n })\n\n // 자동 제거\n if (toast.duration !== 0) {\n setTimeout(() => {\n removeToast(id)\n }, toast.duration || 5000)\n }\n }, [maxToasts, removeToast])\n\n const clearToasts = useCallback(() => {\n setToasts([])\n }, [])\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, clearToasts }}>\n {children}\n <ToastContainer toasts={toasts} removeToast={removeToast} position={position} />\n </ToastContext.Provider>\n )\n}\n\n// Toast Container Props\ninterface ToastContainerProps {\n toasts: Toast[]\n removeToast: (id: string) => void\n position: string\n}\n\n// Toast Container\nfunction ToastContainer({ toasts, removeToast, position }: ToastContainerProps) {\n const positionClasses = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"top-center\": \"top-4 left-1/2 transform -translate-x-1/2\",\n \"bottom-center\": \"bottom-4 left-1/2 transform -translate-x-1/2\"\n }\n\n if (toasts.length === 0) return null\n\n return (\n <div className={merge(\n \"fixed z-50 space-y-3 max-w-sm\", // 12px 간격\n positionClasses[position as keyof typeof positionClasses]\n )}>\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onRemove={removeToast} />\n ))}\n </div>\n )\n}\n\n// Toast Item Props\ninterface ToastItemProps {\n toast: Toast\n onRemove: (id: string) => void\n}\n\n// Toast Item\nfunction ToastItem({ toast, onRemove }: ToastItemProps) {\n const [isVisible, setIsVisible] = useState(false)\n\n React.useEffect(() => {\n setIsVisible(true)\n }, [])\n\n const handleRemove = () => {\n setIsVisible(false)\n setTimeout(() => onRemove(toast.id), 300)\n }\n\n const getToastStyles = (type: Toast[\"type\"]) => {\n switch (type) {\n case \"success\":\n return \"bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-800 dark:text-green-200\"\n case \"error\":\n return \"bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800 text-red-800 dark:text-red-200\"\n case \"warning\":\n return \"bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800 text-yellow-800 dark:text-yellow-200\"\n case \"info\":\n return \"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-800 dark:text-blue-200\"\n }\n }\n\n const getIconStyles = (type: Toast[\"type\"]) => {\n switch (type) {\n case \"success\":\n return \"text-green-500 dark:text-green-400\"\n case \"error\":\n return \"text-red-500 dark:text-red-400\"\n case \"warning\":\n return \"text-yellow-500 dark:text-yellow-400\"\n case \"info\":\n return \"text-blue-500 dark:text-blue-400\"\n }\n }\n\n const getToastIcon = (type: Toast[\"type\"]) => {\n switch (type) {\n case \"success\":\n return (\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n case \"error\":\n return (\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n )\n case \"warning\":\n return (\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n )\n case \"info\":\n return (\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n }\n }\n\n return (\n <div\n className={merge(\n \"flex items-start p-4 rounded-xl border shadow-lg backdrop-blur-sm transition-all duration-300 transform\",\n getToastStyles(toast.type),\n isVisible\n ? \"translate-x-0 opacity-100 scale-100\"\n : \"translate-x-full opacity-0 scale-95\"\n )}\n style={{\n animation: isVisible ? \"slideInRight 0.3s cubic-bezier(0.16, 1, 0.3, 1)\" : undefined\n }}\n >\n {/* 아이콘 */}\n <div className={merge(\"flex-shrink-0 mr-3\", getIconStyles(toast.type))}> {/* 12px 여백 */}\n {getToastIcon(toast.type)}\n </div>\n\n {/* 내용 */}\n <div className=\"flex-1 min-w-0\">\n {toast.title && (\n <h4 className=\"text-sm font-semibold mb-1\"> {/* 4px 여백 */}\n {toast.title}\n </h4>\n )}\n <p className=\"text-sm leading-relaxed\">\n {toast.message}\n </p>\n\n {/* 액션 버튼 */}\n {toast.action && (\n <button\n onClick={toast.action.onClick}\n className=\"mt-3 text-sm font-medium underline hover:no-underline transition-all duration-200\" // 12px 여백\n >\n {toast.action.label}\n </button>\n )}\n </div>\n\n {/* 닫기 버튼 */}\n <div className=\"flex-shrink-0 ml-4\"> {/* 16px 여백 */}\n <button\n onClick={handleRemove}\n className={merge(\n \"inline-flex rounded-md p-1.5 focus:outline-none focus:ring-2 focus:ring-offset-2 transition-all duration-200 hover:bg-black/5 dark:hover:bg-white/5\",\n getIconStyles(toast.type)\n )}\n aria-label=\"닫기\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n )\n}\n\n// 편의 함수들\nexport const showToast = (toast: Omit<Toast, \"id\">) => {\n // 이 함수는 ToastProvider 내부에서만 사용 가능\n\n}\n\nexport const showSuccessToast = (message: string, title?: string, duration?: number) => {\n\n}\n\nexport const showErrorToast = (message: string, title?: string, duration?: number) => {\n\n}\n\nexport const showWarningToast = (message: string, title?: string, duration?: number) => {\n\n}\n\nexport const showInfoToast = (message: string, title?: string, duration?: number) => {\n\n} "]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$1}from'./chunk-ACEKLG37.mjs';import {l}from'./chunk-UGSYQDR4.mjs';import {a}from'./chunk-UUHAXGMO.mjs';import A from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var oe=A.forwardRef(({className:r,type:l,...t},n)=>{let g=t["aria-invalid"],s=g!==void 0?g:false;return jsx("input",{type:l,className:a("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 hover:border-blue-400 hover:shadow-sm",s&&"border-red-500 focus-visible:ring-red-500",r),ref:n,"aria-invalid":s||void 0,...t})});oe.displayName="Input";var le=A.forwardRef(({className:r,children:l,trigger:t,open:n,onOpenChange:g,position:s="bottom",align:o="center",offset:c=8,disabled:f=false,...k},d)=>{let[i,N]=A.useState(false),y=A.useRef(null),x=A.useRef(null),m=n!==void 0,b=m?n:i,h=v=>{f||(m||N(v),g==null||g(v));},D=()=>{h(!b);};A.useEffect(()=>{let v=I=>{y.current&&x.current&&!y.current.contains(I.target)&&!x.current.contains(I.target)&&h(false);};if(b)return document.addEventListener("mousedown",v),()=>{document.removeEventListener("mousedown",v);}},[b]);let M=()=>{let v="absolute z-50";switch(s){case "top":return a(v,"bottom-full left-0",`mb-${Math.max(1,Math.floor(c/4))}`);case "bottom":return a(v,"top-full left-0",`mt-${Math.max(1,Math.floor(c/4))}`);case "left":return a(v,"right-full top-0",`mr-${Math.max(1,Math.floor(c/4))}`);case "right":return a(v,"left-full top-0",`ml-${Math.max(1,Math.floor(c/4))}`);default:return a(v,"top-full left-0",`mt-${Math.max(1,Math.floor(c/4))}`)}},R=()=>{switch(o){case "start":return s==="top"||s==="bottom"?"left-0":"top-0";case "end":return s==="top"||s==="bottom"?"right-0":"bottom-0";default:return s==="top"||s==="bottom"?"left-1/2 -translate-x-1/2":"top-1/2 -translate-y-1/2"}},F=()=>{let v="absolute w-0 h-0 border-4 border-transparent";switch(s){case "top":return `${v} top-full left-1/2 -translate-x-1/2 border-t-gray-200 dark:border-t-gray-700`;case "bottom":return `${v} bottom-full left-1/2 -translate-x-1/2 border-b-gray-200 dark:border-b-gray-700`;case "left":return `${v} left-full top-1/2 -translate-y-1/2 border-l-gray-200 dark:border-l-gray-700`;case "right":return `${v} right-full top-1/2 -translate-y-1/2 border-r-gray-200 dark:border-r-gray-700`;default:return `${v} bottom-full left-1/2 -translate-x-1/2 border-b-gray-200 dark:border-b-gray-700`}};return jsxs("div",{ref:d,className:a("relative",r),...k,children:[jsx("div",{ref:y,onClick:D,className:"inline-block cursor-pointer",children:t}),b&&jsxs("div",{ref:x,className:a("bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-4 min-w-[200px]",M(),R()),children:[jsx("div",{className:F()}),jsx("div",{className:"relative z-10",children:l})]})]})});le.displayName="Popover";var Me=A.forwardRef(({className:r,children:l,...t},n)=>jsx("div",{ref:n,className:a("inline-block cursor-pointer",r),...t,children:l}));Me.displayName="PopoverTrigger";var De=A.forwardRef(({className:r,children:l,...t},n)=>jsx("div",{ref:n,className:a("bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg p-4",r),...t,children:l}));De.displayName="PopoverContent";var Re=A.forwardRef(({className:r,children:l,onSubmit:t,variant:n="default",...g},s)=>jsx("form",{ref:s,onSubmit:f=>{f.preventDefault(),t==null||t(f);},className:a({default:"space-y-6",glass:"space-y-6 bg-white/10 backdrop-blur-sm border border-white/20 rounded-xl p-6 shadow-xl dark:bg-slate-800/20 dark:border-slate-700/50"}[n],r),...g,children:l}));Re.displayName="Form";var Te=A.forwardRef(({className:r,children:l,error:t,required:n,...g},s)=>{let o=A.useId(),c=A.Children.map(l,f=>{if(A.isValidElement(f)){let k=f.props,d=f.type,i=false;if(typeof d=="object"&&d!==null){let y=d,x=y.displayName,m=y.name;i=x==="Input"||x==="Select"||x==="Textarea"||m==="Input"||m==="Select"||m==="Textarea";}let N=typeof d=="string"&&["input","select","textarea"].includes(d.toLowerCase());if(i||N){let y=k["aria-describedby"],x=t?y?`${y} ${o}`:o:y;return A.cloneElement(f,{"aria-describedby":x,"aria-invalid":t?true:k["aria-invalid"],required:n||k.required})}}return f});return jsxs("div",{ref:s,className:a("space-y-2",r),...g,children:[c,t&&jsx("p",{id:o,className:"text-sm text-red-600 dark:text-red-400",role:"alert","aria-live":"polite",children:t})]})});Te.displayName="FormField";var Le=A.forwardRef(({className:r,children:l,inline:t=false,...n},g)=>jsx("div",{ref:g,className:a(t?"flex gap-4":"space-y-4",r),...n,children:l}));Le.displayName="FormGroup";var Ie=A.forwardRef(({className:r,children:l,required:t=false,error:n=false,disabled:g=false,variant:s="default",...o},c)=>{let f={default:a("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",n&&"text-red-600 dark:text-red-400",g&&"text-slate-400 dark:text-slate-500",!n&&!g&&"text-slate-700 dark:text-slate-300"),glass:a("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",n&&"text-red-400",g&&"text-white/50",!n&&!g&&"text-white")};return jsxs("label",{ref:c,className:a(f[s],r),"aria-required":t?true:void 0,...o,children:[l,t&&jsx("span",{className:s==="glass"?"text-red-400 ml-1":"text-red-500 ml-1","aria-label":"\uD544\uC218 \uD544\uB4DC",children:"*"})]})});Ie.displayName="Label";var Se=A.forwardRef(({className:r,variant:l$1="default",size:t="md",error:n=false,success:g=false,label:s,description:o,id:c,...f},k)=>{var D;let d=c||A.useId(),i=s?`${d}-label`:void 0,N=o?`${d}-description`:void 0,y={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"},x={sm:12,md:14,lg:16},m={default:"border-gray-300 bg-white text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-blue-400",outline:"border-2 border-gray-200 bg-transparent text-blue-600 focus:ring-blue-500 dark:border-gray-700 dark:focus:ring-blue-400",filled:"border-transparent bg-gray-50 text-blue-600 focus:bg-white focus:ring-blue-500 dark:bg-gray-700 dark:focus:bg-gray-800 dark:focus:ring-blue-400",glass:"border-white/30 bg-white/10 backdrop-blur-sm text-white focus:ring-blue-400/50 focus:bg-white/20 dark:border-slate-600/50 dark:bg-slate-800/10 dark:focus:ring-blue-400/50 dark:focus:bg-slate-700/20"},b=n?"border-red-500 focus:ring-red-500 dark:border-red-400 dark:focus:ring-red-400":g?"border-green-500 focus:ring-green-500 dark:border-green-400 dark:focus:ring-green-400":"",h=(D=f.checked)!=null?D:false;return jsxs("div",{className:"flex items-start space-x-3",children:[jsxs("div",{className:"relative",children:[jsx("input",{type:"checkbox",id:d,className:a("peer absolute inset-0 w-full h-full opacity-0 cursor-pointer z-10",r),ref:k,"aria-checked":h,"aria-invalid":n,"aria-label":s?void 0:f["aria-label"],"aria-labelledby":s?i:void 0,"aria-describedby":N,role:"checkbox",...f}),jsx("div",{className:a("flex items-center justify-center rounded border transition-all duration-200 cursor-pointer relative","peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2","peer-hover:border-blue-400 peer-hover:shadow-sm","peer-disabled:cursor-not-allowed peer-disabled:opacity-50 peer-disabled:hover:border-gray-300",y[t],m[l$1],b,h&&"bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500 shadow-md shadow-blue-500/20",!h&&"bg-white dark:bg-gray-800"),children:jsx(l,{name:"check",size:x[t],className:a("text-white transition-all duration-200",h?"opacity-100 scale-100":"opacity-0 scale-0")})})]}),(s||o)&&jsxs("div",{className:"flex flex-col",children:[s&&jsx("label",{htmlFor:d,id:i,className:"text-sm font-medium text-gray-900 dark:text-white cursor-pointer",children:s}),o&&jsx("p",{id:N,className:"text-sm text-gray-500 dark:text-gray-400",children:o})]})]})});Se.displayName="Checkbox";var Pe=A.forwardRef(({className:r,variant:l="default",size:t="md",error:n=false,success:g=false,label:s,description:o,id:c,...f},k)=>{var h;let d=c||A.useId(),i=s?`${d}-label`:void 0,N=o?`${d}-description`:void 0,y={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"},x={sm:"w-1.5 h-1.5",md:"w-2 h-2",lg:"w-2.5 h-2.5"},m={default:"border-gray-300 bg-white text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-blue-400",outline:"border-2 border-gray-200 bg-transparent text-blue-600 focus:ring-blue-500 dark:border-gray-700 dark:focus:ring-blue-400",filled:"border-transparent bg-gray-50 text-blue-600 focus:bg-white focus:ring-blue-500 dark:bg-gray-700 dark:focus:bg-gray-800 dark:focus:ring-blue-400",glass:"border-white/30 bg-white/10 backdrop-blur-sm text-white focus:ring-blue-400/50 focus:bg-white/20 dark:border-slate-600/50 dark:bg-slate-800/10 dark:focus:ring-blue-400/50 dark:focus:bg-slate-700/20"},b=n?"border-red-500 focus:ring-red-500 dark:border-red-400 dark:focus:ring-red-400":g?"border-green-500 focus:ring-green-500 dark:border-green-400 dark:focus:ring-green-400":"";return jsxs("div",{className:"flex items-start space-x-3",children:[jsxs("div",{className:"relative",children:[jsx("input",{type:"radio",id:d,className:a("peer sr-only",r),ref:k,"aria-checked":(h=f.checked)!=null?h:false,"aria-invalid":n,"aria-label":s?void 0:f["aria-label"],"aria-labelledby":s?i:void 0,"aria-describedby":N,role:"radio",...f}),jsx("div",{className:a("flex items-center justify-center rounded-full border transition-all duration-200 cursor-pointer","peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2","peer-disabled:cursor-not-allowed peer-disabled:opacity-50",y[t],m[l],b,"peer-checked:border-blue-600 dark:peer-checked:border-blue-500"),children:jsx("div",{className:a("rounded-full bg-blue-600 dark:bg-blue-500 opacity-0 peer-checked:opacity-100 transition-opacity duration-200",x[t])})})]}),(s||o)&&jsxs("div",{className:"flex flex-col",children:[s&&jsx("label",{htmlFor:d,id:i,className:"text-sm font-medium text-gray-900 dark:text-white cursor-pointer",children:s}),o&&jsx("p",{id:N,className:"text-sm text-gray-500 dark:text-gray-400",children:o})]})]})});Pe.displayName="Radio";var Ae=A.forwardRef(({className:r,variant:l$1="default",size:t="md",error:n=false,success:g=false,leftIcon:s,placeholder:o,children:c,"aria-label":f,"aria-invalid":k,...d},i)=>{let N={default:"border-gray-300 bg-white text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:focus:border-blue-400 dark:focus:ring-blue-400",outline:"border-2 border-gray-200 bg-transparent text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-700 dark:text-white dark:focus:border-blue-400 dark:focus:ring-blue-400",filled:"border-transparent bg-gray-50 text-gray-900 focus:bg-white focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:text-white dark:focus:bg-gray-800 dark:focus:border-blue-400 dark:focus:ring-blue-400",ghost:"border-transparent bg-transparent text-gray-900 focus:bg-gray-50 focus:border-gray-300 focus:ring-gray-500 dark:text-white dark:focus:bg-gray-800 dark:focus:border-gray-600 dark:focus:ring-gray-400",glass:"border-white/30 bg-white/10 backdrop-blur-sm text-white focus:border-blue-400/50 focus:ring-blue-400/20 focus:bg-white/20 dark:border-slate-600/50 dark:bg-slate-800/10 dark:text-slate-200 dark:focus:border-blue-400/50 dark:focus:ring-blue-400/20 dark:focus:bg-slate-700/20"},y={sm:"h-8 px-3 text-sm",md:"h-10 px-4 text-base",lg:"h-12 px-4 text-lg"},x=n?"border-red-500 focus:border-red-500 focus:ring-red-500 dark:border-red-400 dark:focus:border-red-400 dark:focus:ring-red-400":g?"border-green-500 focus:border-green-500 focus:ring-green-500 dark:border-green-400 dark:focus:border-green-400 dark:focus:ring-green-400":"",m=A.useRef(null),b=A.useCallback(M=>{m.current=M,typeof i=="function"?i(M):i&&(i.current=M);},[i]),[h,D]=A.useState(false);return jsxs("div",{className:"relative",children:[s&&jsx("div",{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500 pointer-events-none z-10",children:s}),jsxs("select",{ref:b,className:a("flex w-full appearance-none rounded-md border transition-all duration-200","focus:outline-none focus:ring-2 focus:ring-offset-2","hover:border-blue-400 hover:shadow-sm","disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-gray-300",N[l$1],y[t],x,s?"pl-10":"","pr-10",r),"aria-label":f||(o?void 0:"\uC120\uD0DD"),"aria-invalid":k!==void 0?k:n||void 0,onFocus:M=>{var R;D(true),(R=d.onFocus)==null||R.call(d,M);},onBlur:M=>{var R;D(false),(R=d.onBlur)==null||R.call(d,M);},...d,children:[o&&jsx("option",{value:"",disabled:true,children:o}),c]}),jsx("div",{className:a("absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 dark:text-gray-500 pointer-events-none transition-transform duration-200",h&&"rotate-180"),children:jsx(l,{name:"chevronDown",size:16})})]})});Ae.displayName="Select";var $e=A.forwardRef(({className:r,...l},t)=>jsx("option",{className:r||"",ref:t,...l}));$e.displayName="SelectOption";var ze=A.forwardRef(({className:r,variant:l="default",size:t="md",error:n=false,success:g=false,label:s,description:o,id:c,...f},k)=>{var h;let d=c||A.useId(),i=s?`${d}-label`:void 0,N=o?`${d}-description`:void 0,y={sm:"w-8 h-4",md:"w-11 h-6",lg:"w-14 h-7"},x={sm:"w-3 h-3",md:"w-5 h-5",lg:"w-6 h-6"},m={default:"bg-gray-200 peer-checked:bg-blue-600 dark:bg-gray-700 dark:peer-checked:bg-blue-500",outline:"bg-transparent border-2 border-gray-300 peer-checked:border-blue-600 peer-checked:bg-blue-600 dark:border-gray-600 dark:peer-checked:border-blue-500 dark:peer-checked:bg-blue-500",filled:"bg-gray-100 peer-checked:bg-blue-600 dark:bg-gray-800 dark:peer-checked:bg-blue-500",glass:"bg-white/20 backdrop-blur-sm border border-white/30 peer-checked:bg-blue-400/50 peer-checked:border-blue-300/50 dark:bg-slate-800/20 dark:border-slate-700/50 dark:peer-checked:bg-blue-400/50 dark:peer-checked:border-blue-300/50"},b=n?"bg-red-200 peer-checked:bg-red-600 dark:bg-red-800 dark:peer-checked:bg-red-500":g?"bg-green-200 peer-checked:bg-green-600 dark:bg-green-800 dark:peer-checked:bg-green-500":"";return jsxs("div",{className:"flex items-start space-x-3",children:[jsxs("div",{className:"relative",children:[jsx("input",{type:"checkbox",id:d,className:a("peer sr-only",r),ref:k,"aria-checked":(h=f.checked)!=null?h:false,"aria-invalid":n,"aria-label":s?void 0:f["aria-label"],"aria-labelledby":s?i:void 0,"aria-describedby":N,role:"switch",...f}),jsx("div",{className:a("relative inline-flex cursor-pointer items-center rounded-full transition-colors duration-200 ease-in-out","peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2","peer-disabled:cursor-not-allowed peer-disabled:opacity-50",y[t],m[l],b),children:jsx("div",{className:a("pointer-events-none block rounded-full bg-white shadow-lg ring-0 transition-transform duration-200 ease-in-out","peer-checked:translate-x-full",x[t],t==="sm"?"translate-x-0.5 peer-checked:translate-x-4.5":"",t==="md"?"translate-x-0.5 peer-checked:translate-x-5.5":"",t==="lg"?"translate-x-0.5 peer-checked:translate-x-7":"")})})]}),(s||o)&&jsxs("div",{className:"flex flex-col",children:[s&&jsx("label",{htmlFor:d,id:i,className:"text-sm font-medium text-gray-900 dark:text-white cursor-pointer",children:s}),o&&jsx("p",{id:N,className:"text-sm text-gray-500 dark:text-gray-400",children:o})]})]})});ze.displayName="Switch";var Ye=A.forwardRef(({className:r,variant:l="default",size:t="md",showValue:n=false,showLabel:g=false,label:s,min:o=0,max:c=100,step:f=1,value:k=0,onValueChange:d,orientation:i="horizontal",disabled:N=false,...y},x)=>{let m=Array.isArray(k),b=m?k:[k],h=w=>{let T=parseFloat(w.target.value);if(d)if(m){let O=parseInt(w.target.dataset.index||"0"),$=[...b];$[O]=T,d($);}else d(T);},D={default:"bg-gray-200 dark:bg-gray-700",primary:"bg-blue-200 dark:bg-blue-700",success:"bg-green-200 dark:bg-green-700",warning:"bg-yellow-200 dark:bg-yellow-700",danger:"bg-red-200 dark:bg-red-700"},M={default:"bg-gray-400 hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400",primary:"bg-blue-500 hover:bg-blue-600 dark:bg-blue-400 dark:hover:bg-blue-500",success:"bg-green-500 hover:bg-green-600 dark:bg-green-400 dark:hover:bg-green-500",warning:"bg-yellow-500 hover:bg-yellow-600 dark:bg-yellow-400 dark:hover:bg-yellow-500",danger:"bg-red-500 hover:bg-red-600 dark:bg-red-400 dark:hover:bg-red-500"},R={sm:i==="horizontal"?"h-1":"w-1",md:i==="horizontal"?"h-2":"w-2",lg:i==="horizontal"?"h-3":"w-3"},F={sm:"w-3 h-3",md:"w-4 h-4",lg:"w-6 h-6"},v=i==="vertical"?"flex-col h-full":"flex-row w-full",I=(w=0)=>jsx("input",{ref:w===0?x:void 0,type:"range",min:o,max:c,step:f,value:b[w],onChange:h,"data-index":w,disabled:N,className:a("appearance-none cursor-pointer rounded-full transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",R[t],D[l],i==="vertical"?"writing-mode: bt-lr; -webkit-appearance: slider-vertical":"",r),style:{...i==="vertical"&&{writingMode:"vertical-rl",WebkitAppearance:"slider-vertical"}},...y},w),u=()=>n?m?jsx("div",{className:"flex gap-2 text-sm text-gray-600 dark:text-gray-400",children:b.map((w,T)=>jsx("span",{className:"font-mono",children:w},T))}):jsx("span",{className:"text-sm font-mono text-gray-600 dark:text-gray-400",children:b[0]}):null;return jsxs("div",{className:a("flex items-center gap-4",v),children:[g&&s&&jsx("label",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 min-w-0",children:s}),jsxs("div",{className:"flex-1 relative",children:[jsxs("div",{className:a("relative",i==="vertical"?"h-full":"w-full"),children:[jsx("div",{className:a("absolute rounded-full",R[t],D[l],i==="vertical"?"w-full bottom-0":"h-full left-0")}),m?jsx("div",{className:a("absolute rounded-full bg-blue-500 dark:bg-blue-400",R[t],i==="vertical"?"w-full bottom-0":"h-full left-0"),style:{...i==="vertical"?{bottom:`${(b[0]-o)/(c-o)*100}%`,height:`${(b[1]-b[0])/(c-o)*100}%`}:{left:`${(b[0]-o)/(c-o)*100}%`,width:`${(b[1]-b[0])/(c-o)*100}%`}}}):jsx("div",{className:a("absolute rounded-full bg-blue-500 dark:bg-blue-400",R[t],i==="vertical"?"w-full bottom-0":"h-full left-0"),style:{...i==="vertical"?{height:`${(b[0]-o)/(c-o)*100}%`}:{width:`${(b[0]-o)/(c-o)*100}%`}}}),m?b.map((w,T)=>jsx("div",{className:a("absolute rounded-full border-2 border-white shadow-lg transition-all duration-200 hover:scale-110",F[t],M[l],i==="vertical"?"left-1/2 transform -translate-x-1/2":"top-1/2 transform -translate-y-1/2"),style:{...i==="vertical"?{bottom:`${(b[T]-o)/(c-o)*100}%`}:{left:`${(b[T]-o)/(c-o)*100}%`}}},T)):jsx("div",{className:a("absolute rounded-full border-2 border-white shadow-lg transition-all duration-200 hover:scale-110",F[t],M[l],i==="vertical"?"left-1/2 transform -translate-x-1/2":"top-1/2 transform -translate-y-1/2"),style:{...i==="vertical"?{bottom:`${(b[0]-o)/(c-o)*100}%`}:{left:`${(b[0]-o)/(c-o)*100}%`}}})]}),jsx("div",{className:"absolute inset-0 opacity-0",children:m?b.map((w,T)=>I(T)):I()})]}),u()]})});Ye.displayName="Slider";var Ue=A.forwardRef(({className:r,variant:l="default",size:t="md",error:n=false,success:g=false,resize:s="vertical",...o},c)=>{let f={default:"border-gray-300 bg-white text-gray-900 placeholder-gray-500 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 transition-all duration-200 hover:border-blue-400 hover:shadow-sm",outline:"border-2 border-gray-200 bg-transparent text-gray-900 placeholder-gray-500 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 transition-all duration-200 hover:border-blue-400 hover:shadow-sm",filled:"border-transparent bg-gray-50 text-gray-900 placeholder-gray-500 focus:bg-white focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:bg-gray-800 dark:focus:border-blue-400 dark:focus:ring-blue-400 transition-all duration-200 hover:bg-gray-100 dark:hover:bg-gray-600",ghost:"border-transparent bg-transparent text-gray-900 placeholder-gray-500 focus:bg-gray-50 focus:border-gray-300 focus:ring-gray-500 dark:text-white dark:placeholder-gray-400 dark:focus:bg-gray-800 dark:focus:border-gray-600 dark:focus:ring-gray-400 transition-all duration-200 hover:bg-gray-50 dark:hover:bg-gray-800",glass:"border-white/30 bg-white/10 backdrop-blur-sm text-white placeholder-white/60 focus:border-blue-400/50 focus:ring-blue-400/20 focus:bg-white/20 dark:border-slate-600/50 dark:bg-slate-800/10 dark:text-slate-200 dark:placeholder-slate-400 dark:focus:border-blue-400/50 dark:focus:ring-blue-400/20 dark:focus:bg-slate-700/20 transition-all duration-200 hover:border-blue-400/40 hover:bg-white/15 dark:hover:bg-slate-700/15"},k={sm:"px-3 py-2 text-sm min-h-[80px]",md:"px-4 py-3 text-base min-h-[100px]",lg:"px-4 py-3 text-lg min-h-[120px]"},d={none:"resize-none",vertical:"resize-y",horizontal:"resize-x",both:"resize"},i=n?"border-red-500 focus:border-red-500 focus:ring-red-500 dark:border-red-400 dark:focus:border-red-400 dark:focus:ring-red-400":g?"border-green-500 focus:border-green-500 focus:ring-green-500 dark:border-green-400 dark:focus:border-green-400 dark:focus:ring-green-400":"",N=o["aria-invalid"],y=n||(N!==void 0?N:false);return jsx("textarea",{className:a("flex w-full rounded-md border transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",f[l],k[t],d[s],i,r),ref:c,"aria-invalid":y||void 0,...o})});Ue.displayName="Textarea";var Ke={sm:"h-8 text-sm px-3",md:"h-10 text-sm px-4",lg:"h-12 text-base px-5"},qe=(r,l="YYYY-MM-DD",t="ko-KR")=>{if(!r)return "";let n=r.getFullYear(),g=String(r.getMonth()+1).padStart(2,"0"),s=String(r.getDate()).padStart(2,"0");return l.replace("YYYY",String(n)).replace("MM",g).replace("DD",s)},Ge=(r,l)=>new Date(r,l+1,0).getDate(),We=(r,l)=>new Date(r,l,1).getDay(),_e=A.forwardRef(({value:r,onChange:l$1,minDate:t,maxDate:n,placeholder:g="\uB0A0\uC9DC\uB97C \uC120\uD0DD\uD558\uC138\uC694",disabled:s=false,error:o=false,dateFormat:c="YYYY-MM-DD",locale:f="ko-KR",size:k="md",className:d,...i},N)=>{let[y,x]=A.useState(false),[m,b]=A.useState(r?new Date(r.getFullYear(),r.getMonth()):new Date),[h,D]=A.useState(null),M=r?qe(r,c,f):"",R=e=>{t&&e<t||n&&e>n||(l$1==null||l$1(e),x(false));},F=()=>{b(new Date(m.getFullYear(),m.getMonth()-1));},v=()=>{b(new Date(m.getFullYear(),m.getMonth()+1));},I=()=>{let e=new Date;e.setHours(0,0,0,0),R(e);},u=m.getFullYear(),w=m.getMonth(),T=Ge(u,w),O=We(u,w),$=f==="ko-KR"?["\uC77C","\uC6D4","\uD654","\uC218","\uBAA9","\uAE08","\uD1A0"]:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],j=e=>!!(t&&e<t||n&&e>n),ee=e=>r?e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()&&e.getDate()===r.getDate():false,re=e=>{let p=new Date;return e.getFullYear()===p.getFullYear()&&e.getMonth()===p.getMonth()&&e.getDate()===p.getDate()},Y=[];for(let e=O-1;e>=0;e--){let p=new Date(u,w,-e);Y.push(p);}for(let e=1;e<=T;e++)Y.push(new Date(u,w,e));let te=42-Y.length;for(let e=1;e<=te;e++)Y.push(new Date(u,w+1,e));let ae=jsxs("button",{type:"button",disabled:s,className:a("flex w-full items-center justify-between rounded-lg border bg-white px-4 py-2 text-left text-sm transition-colors","hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2","dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700",o&&"border-red-500 focus:ring-red-500",s&&"cursor-not-allowed opacity-50",Ke[k]),"aria-label":M||g,children:[jsx("span",{className:a("flex-1",!M&&"text-gray-400 dark:text-gray-500"),children:M||g}),jsx(l,{name:"calendar",className:a("ml-2 h-4 w-4 transition-transform",y&&"rotate-180")})]});return jsx("div",{ref:N,className:a("relative",d),...i,children:jsx(le,{open:y,onOpenChange:x,trigger:ae,position:"bottom",align:"start",children:jsx("div",{className:"w-auto p-0",children:jsxs("div",{className:"p-4",children:[jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsx("button",{type:"button",onClick:F,className:"rounded-lg p-2 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors","aria-label":"\uC774\uC804 \uB2EC",children:jsx(l,{name:"chevronLeft",className:"h-4 w-4"})}),jsxs("div",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:[u,"\uB144 ",w+1,"\uC6D4"]}),jsx("button",{type:"button",onClick:v,className:"rounded-lg p-2 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors","aria-label":"\uB2E4\uC74C \uB2EC",children:jsx(l,{name:"chevronRight",className:"h-4 w-4"})})]}),jsx("div",{className:"grid grid-cols-7 gap-1 mb-2",children:$.map((e,p)=>jsx("div",{className:a("text-center text-xs font-medium py-2",p===0&&"text-red-500 dark:text-red-400",p===6&&"text-blue-500 dark:text-blue-400"),children:e},p))}),jsx("div",{className:"grid grid-cols-7 gap-1",children:Y.map((e,p)=>{if(!e)return jsx("div",{},p);let S=e.getMonth()===w,V=j(e),se=ee(e),ke=re(e),xe=h&&e.getFullYear()===h.getFullYear()&&e.getMonth()===h.getMonth()&&e.getDate()===h.getDate();return jsx("button",{type:"button",disabled:V,onClick:()=>R(e),onMouseEnter:()=>D(e),onMouseLeave:()=>D(null),className:a("relative h-9 w-9 rounded-lg text-sm font-medium transition-all","hover:bg-blue-50 dark:hover:bg-blue-900/20","focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1",!S&&"text-gray-400 dark:text-gray-500",V&&"cursor-not-allowed opacity-30",se&&"bg-blue-600 text-white hover:bg-blue-700 shadow-md",ke&&!se&&"ring-2 ring-blue-500",xe&&!se&&"bg-blue-100 dark:bg-blue-900/30"),"aria-label":`${u}\uB144 ${w+1}\uC6D4 ${e.getDate()}\uC77C`,children:e.getDate()},p)})}),jsx("div",{className:"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700",children:jsx(a$1,{variant:"outline",size:"sm",onClick:I,className:"w-full",children:"\uC624\uB298"})})]})})})})});_e.displayName="DatePicker";var ge=r=>{if(r===0)return "0 Bytes";let l=1024,t=["Bytes","KB","MB","GB"],n=Math.floor(Math.log(r)/Math.log(l));return Math.round(r/Math.pow(l,n)*100)/100+" "+t[n]},Je=r=>r.startsWith("image/")?"image":r.startsWith("video/")?"video":r.includes("pdf")||r.includes("word")||r.includes("document")||r.includes("excel")||r.includes("spreadsheet")?"fileText":"file",Qe=A.forwardRef(({files:r=[],onChange:l$1,onRemove:t,multiple:n=false,accept:g,maxSize:s,maxFiles:o,disabled:c=false,dragDrop:f=true,placeholder:k="\uD30C\uC77C\uC744 \uC120\uD0DD\uD558\uAC70\uB098 \uC5EC\uAE30\uC5D0 \uB4DC\uB798\uADF8\uD558\uC138\uC694",size:d="md",className:i,...N},y)=>{let x=A.useRef(null),[m,b]=A.useState(false),h=u=>{if(!u||u.length===0)return;let w=Array.from(u);if(o&&r.length+w.length>o){alert(`\uCD5C\uB300 ${o}\uAC1C\uC758 \uD30C\uC77C\uB9CC \uC5C5\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`);return}let T=w.filter(O=>s&&O.size>s?(alert(`\uD30C\uC77C \uD06C\uAE30\uB294 ${ge(s)}\uB97C \uCD08\uACFC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${O.name}`),false):true);T.length>0&&(l$1==null||l$1(T));},D=()=>{var u;c||(u=x.current)==null||u.click();},M=u=>{u.preventDefault(),!c&&f&&b(true);},R=u=>{u.preventDefault(),b(false);},F=u=>{u.preventDefault(),b(false),!c&&f&&h(u.dataTransfer.files);},v=u=>{t==null||t(u);},I={sm:"p-4",md:"p-6",lg:"p-8"};return jsxs("div",{ref:y,className:a("w-full",i),...N,children:[jsxs("div",{onClick:D,onDragOver:M,onDragLeave:R,onDrop:F,className:a("relative border-2 border-dashed rounded-xl transition-all cursor-pointer","bg-gray-50 dark:bg-gray-900/50","border-gray-300 dark:border-gray-700",m&&"border-blue-500 bg-blue-50 dark:bg-blue-900/20",c&&"cursor-not-allowed opacity-50",I[d]),children:[jsx("input",{ref:x,type:"file",multiple:n,accept:g,disabled:c,onChange:u=>h(u.target.files),className:"hidden","aria-label":"\uD30C\uC77C \uC120\uD0DD"}),jsxs("div",{className:"flex flex-col items-center justify-center text-center",children:[jsx("div",{className:a("rounded-full bg-blue-100 dark:bg-blue-900/30 p-4 mb-4",m&&"bg-blue-200 dark:bg-blue-900/50"),children:jsx(l,{name:"upload",className:a("h-8 w-8 text-blue-600 dark:text-blue-400",m&&"scale-110")})}),jsx("p",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:k}),jsxs("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:[g&&`\uC9C0\uC6D0 \uD615\uC2DD: ${g}`,s&&` \u2022 \uCD5C\uB300 \uD06C\uAE30: ${ge(s)}`,o&&` \u2022 \uCD5C\uB300 ${o}\uAC1C`]})]})]}),r.length>0&&jsx("div",{className:"mt-4 space-y-2",children:r.map(u=>jsxs("div",{className:a("flex items-center gap-3 p-3 rounded-lg border","bg-white dark:bg-gray-800","border-gray-200 dark:border-gray-700",u.status==="error"&&"border-red-300 dark:border-red-700 bg-red-50 dark:bg-red-900/20"),children:[jsx("div",{className:"flex-shrink-0",children:jsx("div",{className:"rounded-lg bg-gray-100 dark:bg-gray-700 p-2",children:jsx(l,{name:Je(u.type),className:"h-5 w-5 text-gray-600 dark:text-gray-400"})})}),jsxs("div",{className:"flex-1 min-w-0",children:[jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white truncate",children:u.name}),jsxs("div",{className:"flex items-center gap-2 mt-1",children:[jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:ge(u.size)}),u.status==="uploading"&&u.progress!==void 0&&jsxs(Fragment,{children:[jsx("div",{className:"flex-1 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden",children:jsx("div",{className:"h-full bg-blue-600 transition-all duration-300",style:{width:`${u.progress}%`}})}),jsxs("span",{className:"text-xs text-gray-500 dark:text-gray-400",children:[u.progress,"%"]})]}),u.status==="success"&&jsxs("span",{className:"text-xs text-green-600 dark:text-green-400 flex items-center gap-1",children:[jsx(l,{name:"check",className:"h-3 w-3"}),"\uC644\uB8CC"]}),u.status==="error"&&jsx("span",{className:"text-xs text-red-600 dark:text-red-400",children:u.error||"\uC5C5\uB85C\uB4DC \uC2E4\uD328"})]})]}),t&&jsx("button",{type:"button",onClick:()=>v(u),className:"flex-shrink-0 rounded-lg p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors","aria-label":"\uD30C\uC77C \uC81C\uAC70",children:jsx(l,{name:"close",className:"h-4 w-4 text-gray-500 dark:text-gray-400"})})]},u.id))})]})});Qe.displayName="Upload";var Ze={sm:"h-8 text-sm",md:"h-10 text-sm",lg:"h-12 text-base"},je=A.forwardRef(({options:r,value:l$1,onChange:t,placeholder:n="\uAC80\uC0C9\uD558\uAC70\uB098 \uC120\uD0DD\uD558\uC138\uC694",disabled:g=false,error:s=false,loading:o=false,maxHeight:c=300,clearable:f=true,filterable:k=true,onSearch:d,emptyText:i="\uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",size:N="md",className:y,...x},m)=>{let[b,h]=A.useState(false),[D,M]=A.useState(""),[R,F]=A.useState(r),[v,I]=A.useState(-1),[u,w]=A.useState(false),T=A.useRef(null),O=A.useRef(null),$=A.useMemo(()=>r.find(e=>e.value===l$1),[r,l$1]);A.useEffect(()=>{$?M($.label):l$1||M("");},[$,l$1]),A.useEffect(()=>{if(d){w(true);let e=d(D);e instanceof Promise?e.then(p=>{F(p),w(false);}):(F(e),w(false));}else if(k)if(!D.trim())F(r);else {let e=r.filter(p=>{var S;return p.label.toLowerCase().includes(D.toLowerCase())||p.value.toLowerCase().includes(D.toLowerCase())||((S=p.description)==null?void 0:S.toLowerCase().includes(D.toLowerCase()))});F(e);}else F(r);},[D,r,k,d]);let j=e=>{let p=e.target.value;M(p),h(true),I(-1),!p&&f&&(t==null||t(""));},ee=()=>{h(true);},re=e=>{var p;(p=O.current)!=null&&p.contains(e.relatedTarget)||(h(false),I(-1),$&&M($.label));},Y=e=>{var p;M(e.label),t==null||t(e.value,e),h(false),(p=T.current)==null||p.blur();},te=()=>{var e;M(""),t==null||t(""),(e=T.current)==null||e.focus();},ae=e=>{var p;if(!b||R.length===0){e.key==="ArrowDown"&&h(true);return}switch(e.key){case "ArrowDown":e.preventDefault(),I(S=>S<R.length-1?S+1:S);break;case "ArrowUp":e.preventDefault(),I(S=>S>0?S-1:-1);break;case "Enter":e.preventDefault(),v>=0&&R[v]&&Y(R[v]);break;case "Escape":h(false),(p=T.current)==null||p.blur();break}};return jsxs("div",{ref:m,className:a("relative w-full",y),...x,children:[jsxs("div",{className:"relative",children:[jsx(oe,{ref:T,type:"text",value:D,onChange:j,onFocus:ee,onBlur:re,onKeyDown:ae,placeholder:n,disabled:g,"aria-invalid":s,"aria-autocomplete":"list","aria-expanded":b,"aria-controls":"autocomplete-list",className:a(Ze[N],"pr-10")}),jsx("div",{className:"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1",children:o||u?jsx(l,{name:"loader",className:"h-4 w-4 animate-spin text-gray-400"}):f&&D?jsx("button",{type:"button",onClick:te,className:"rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors","aria-label":"\uC9C0\uC6B0\uAE30",children:jsx(l,{name:"close",className:"h-4 w-4 text-gray-400"})}):jsx(l,{name:"chevronDown",className:"h-4 w-4 text-gray-400"})})]}),b&&jsx("div",{ref:O,id:"autocomplete-list",role:"listbox",className:a("absolute z-50 w-full mt-1 rounded-lg border shadow-lg","bg-white dark:bg-gray-800","border-gray-200 dark:border-gray-700","overflow-hidden"),style:{maxHeight:`${c}px`},children:jsx("div",{className:"overflow-y-auto",style:{maxHeight:`${c}px`},children:R.length===0?jsx("div",{className:"px-4 py-8 text-center text-sm text-gray-500 dark:text-gray-400",children:i}):R.map((e,p)=>{let S=v===p,V=l$1===e.value;return jsx("div",{role:"option","aria-selected":V,onClick:()=>Y(e),onMouseEnter:()=>I(p),className:a("px-4 py-3 cursor-pointer transition-colors","hover:bg-gray-100 dark:hover:bg-gray-700",S&&"bg-blue-50 dark:bg-blue-900/20",V&&"bg-blue-100 dark:bg-blue-900/30"),children:jsxs("div",{className:"flex items-center gap-3",children:[e.icon&&jsx("div",{className:"flex-shrink-0 text-gray-400",children:e.icon}),jsxs("div",{className:"flex-1 min-w-0",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white",children:e.label}),V&&jsx(l,{name:"check",className:"h-4 w-4 text-blue-600 dark:text-blue-400 flex-shrink-0"})]}),e.description&&jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-0.5",children:e.description})]})]})},e.value)})})})]})});je.displayName="Autocomplete";export{oe as a,le as b,Me as c,De as d,Re as e,Te as f,Le as g,Ie as h,Se as i,Pe as j,Ae as k,$e as l,ze as m,Ye as n,Ue as o,_e as p,Qe as q,je as r};//# sourceMappingURL=chunk-ZFS4B5QT.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-ZFS4B5QT.mjs.map
|