@hua-labs/ui 1.1.0-alpha.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +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-DMYT7RZ4.mjs.map
2
- //# sourceMappingURL=chunk-DMYT7RZ4.mjs.map
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
@@ -1 +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-DMYT7RZ4.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 (deprecated: IconSet 사용 권장)\n// @deprecated Use IconSet from './components/Icon/icon-store' instead\nexport type IconProvider = 'lucide' | 'phosphor' | 'untitled'\n\n// Icon Provider Configuration\nexport interface IconProviderConfig {\n /** @deprecated Use IconSet from './components/Icon/icon-store' instead */\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 - 아이콘 프로바이더 (deprecated: IconSet 사용 권장) / Icon provider (deprecated: use IconSet instead)\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 - 아이콘 프로바이더 (deprecated: IconSet 사용 권장) / Icon provider (deprecated: use IconSet instead)\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 - 아이콘 프로바이더 (deprecated: IconSet 사용 권장) / Icon provider (deprecated: use IconSet instead)\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"]}
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"]}