@hua-labs/ui 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -67
- package/dist/{ComponentLayout-btJq4TjA.d.mts → ComponentLayout-DrZpz0yv.d.mts} +1 -1
- package/dist/Section-BWzyshgX.d.mts +67 -0
- package/dist/advanced/dashboard.d.ts.map +1 -1
- package/dist/advanced-dashboard.d.mts +1 -1
- package/dist/advanced-dashboard.js +4 -4
- package/dist/advanced-dashboard.js.map +1 -1
- package/dist/advanced-dashboard.mjs +3 -3
- package/dist/advanced-dashboard.mjs.map +1 -1
- package/dist/advanced-emotion.js +1 -1
- package/dist/advanced-emotion.js.map +1 -1
- package/dist/advanced-emotion.mjs +1 -1
- package/dist/advanced-motion.d.mts +65 -1
- package/dist/advanced-motion.js +14 -14
- package/dist/advanced-motion.js.map +1 -1
- package/dist/advanced-motion.mjs +1 -1
- package/dist/advanced.d.mts +4 -4
- package/dist/advanced.js +16 -16
- package/dist/advanced.js.map +1 -1
- package/dist/advanced.mjs +3 -3
- package/dist/advanced.mjs.map +1 -1
- package/dist/chunk-3CCF7U3P.mjs +3 -0
- package/dist/{chunk-IFSEJVOR.mjs.map → chunk-3CCF7U3P.mjs.map} +1 -1
- package/dist/chunk-3GAUTZXQ.mjs +3 -0
- package/dist/{chunk-X7ZIWYRC.mjs.map → chunk-3GAUTZXQ.mjs.map} +1 -1
- package/dist/chunk-42RGFEL2.mjs +3 -0
- package/dist/chunk-42RGFEL2.mjs.map +1 -0
- package/dist/chunk-4NJE7D6X.mjs +3 -0
- package/dist/chunk-4NJE7D6X.mjs.map +1 -0
- package/dist/chunk-6HVJFEDA.mjs +3 -0
- package/dist/chunk-6HVJFEDA.mjs.map +1 -0
- package/dist/chunk-7OYT3QSY.mjs +3 -0
- package/dist/chunk-7OYT3QSY.mjs.map +1 -0
- package/dist/chunk-ANYZ56VB.mjs +3 -0
- package/dist/{chunk-QQCELXFD.mjs.map → chunk-ANYZ56VB.mjs.map} +1 -1
- package/dist/chunk-AOSXB5JJ.mjs +4 -0
- package/dist/{chunk-GLZKT7JN.mjs.map → chunk-AOSXB5JJ.mjs.map} +1 -1
- package/dist/chunk-B544MRF7.mjs +3 -0
- package/dist/{chunk-SDFHJ4GB.mjs.map → chunk-B544MRF7.mjs.map} +1 -1
- package/dist/chunk-CVWWS25A.mjs +3 -0
- package/dist/chunk-CVWWS25A.mjs.map +1 -0
- package/dist/chunk-DYNBM24D.mjs +3 -0
- package/dist/{chunk-OSCMSA2Q.mjs.map → chunk-DYNBM24D.mjs.map} +1 -1
- package/dist/{chunk-NBJUE7NR.mjs → chunk-FX57OSYG.mjs} +2 -2
- package/dist/{chunk-NBJUE7NR.mjs.map → chunk-FX57OSYG.mjs.map} +1 -1
- package/dist/chunk-IJSYSNM5.mjs +3 -0
- package/dist/{chunk-IN7RWQCJ.mjs.map → chunk-IJSYSNM5.mjs.map} +1 -1
- package/dist/chunk-KJZGOL2Z.mjs +3 -0
- package/dist/{chunk-LOYAJIWO.mjs.map → chunk-KJZGOL2Z.mjs.map} +1 -1
- package/dist/chunk-KYRIUUQP.mjs +3 -0
- package/dist/{chunk-PAEKNQWW.mjs.map → chunk-KYRIUUQP.mjs.map} +1 -1
- package/dist/chunk-LSA7DU3N.mjs +73 -0
- package/dist/chunk-LSA7DU3N.mjs.map +1 -0
- package/dist/chunk-MDLCJASB.mjs +3 -0
- package/dist/{chunk-LH77I6HO.mjs.map → chunk-MDLCJASB.mjs.map} +1 -1
- package/dist/chunk-N56BUOCD.mjs +3 -0
- package/dist/{chunk-XV3Y7QVU.mjs.map → chunk-N56BUOCD.mjs.map} +1 -1
- package/dist/chunk-OFYITQXI.mjs +13 -0
- package/dist/chunk-OFYITQXI.mjs.map +1 -0
- package/dist/chunk-OZNST3EZ.mjs +3 -0
- package/dist/{chunk-SGEP3CQE.mjs.map → chunk-OZNST3EZ.mjs.map} +1 -1
- package/dist/chunk-RS6RKW5U.mjs +13 -0
- package/dist/{chunk-6KTHJ3EL.mjs.map → chunk-RS6RKW5U.mjs.map} +1 -1
- package/dist/{chunk-C4OACMTB.mjs → chunk-TXBZZJNR.mjs} +2 -2
- package/dist/{chunk-C4OACMTB.mjs.map → chunk-TXBZZJNR.mjs.map} +1 -1
- package/dist/chunk-TZ4YSHMC.mjs +3 -0
- package/dist/{chunk-UWHCM3S6.mjs.map → chunk-TZ4YSHMC.mjs.map} +1 -1
- package/dist/chunk-U6CTBZ2U.mjs +3 -0
- package/dist/chunk-U6CTBZ2U.mjs.map +1 -0
- package/dist/{chunk-PYBYZVSL.mjs → chunk-WP7VFE77.mjs} +2 -2
- package/dist/{chunk-PYBYZVSL.mjs.map → chunk-WP7VFE77.mjs.map} +1 -1
- package/dist/{chunk-FFH4ZFKS.mjs → chunk-XCZMLKPK.mjs} +2 -2
- package/dist/{chunk-FFH4ZFKS.mjs.map → chunk-XCZMLKPK.mjs.map} +1 -1
- package/dist/chunk-XGHT7WMO.mjs +3 -0
- package/dist/chunk-XGHT7WMO.mjs.map +1 -0
- package/dist/chunk-XL4KTJ4L.mjs +3 -0
- package/dist/{chunk-VWSBJUNI.mjs.map → chunk-XL4KTJ4L.mjs.map} +1 -1
- package/dist/chunk-Z74YUUVT.mjs +3 -0
- package/dist/chunk-Z74YUUVT.mjs.map +1 -0
- package/dist/chunk-ZXZIHU7J.mjs +8 -0
- package/dist/{chunk-N7M6RIN4.mjs.map → chunk-ZXZIHU7J.mjs.map} +1 -1
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Popover.d.ts +2 -0
- package/dist/components/Popover.d.ts.map +1 -1
- package/dist/components/Progress.d.ts +1 -0
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Section.d.ts +44 -0
- package/dist/components/Section.d.ts.map +1 -0
- package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
- package/dist/components/advanced/DotNav.d.ts +26 -0
- package/dist/components/advanced/DotNav.d.ts.map +1 -0
- package/dist/components/advanced/HorizontalScroll.d.ts +20 -0
- package/dist/components/advanced/HorizontalScroll.d.ts.map +1 -0
- package/dist/components/advanced/ImageReveal.d.ts +24 -0
- package/dist/components/advanced/ImageReveal.d.ts.map +1 -0
- package/dist/components/advanced/index.d.ts +6 -0
- package/dist/components/advanced/index.d.ts.map +1 -1
- package/dist/data.mjs +2 -2
- package/dist/data.mjs.map +1 -1
- package/dist/feedback.mjs +1 -1
- package/dist/form.js +3 -3
- package/dist/form.js.map +1 -1
- package/dist/form.mjs +4 -4
- package/dist/form.mjs.map +1 -1
- package/dist/{icons-Bj_nr8Ba.d.mts → icons-DmhQEH_E.d.mts} +6 -1
- package/dist/iconsax-extended.js +1 -1
- package/dist/iconsax-extended.js.map +1 -1
- package/dist/iconsax-extended.mjs +1 -1
- package/dist/iconsax-extended.mjs.map +1 -1
- package/dist/index.d.mts +9 -27
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/landing/LandingAbout.d.ts +3 -0
- package/dist/landing/LandingAbout.d.ts.map +1 -0
- package/dist/landing/LandingCTA.d.ts +3 -0
- package/dist/landing/LandingCTA.d.ts.map +1 -0
- package/dist/landing/LandingContact.d.ts +3 -0
- package/dist/landing/LandingContact.d.ts.map +1 -0
- package/dist/landing/LandingExperience.d.ts +3 -0
- package/dist/landing/LandingExperience.d.ts.map +1 -0
- package/dist/landing/LandingFeatures.d.ts +3 -0
- package/dist/landing/LandingFeatures.d.ts.map +1 -0
- package/dist/landing/LandingHero.d.ts +3 -0
- package/dist/landing/LandingHero.d.ts.map +1 -0
- package/dist/landing/LandingLogoCloud.d.ts +3 -0
- package/dist/landing/LandingLogoCloud.d.ts.map +1 -0
- package/dist/landing/LandingMetrics.d.ts +3 -0
- package/dist/landing/LandingMetrics.d.ts.map +1 -0
- package/dist/landing/LandingProjects.d.ts +3 -0
- package/dist/landing/LandingProjects.d.ts.map +1 -0
- package/dist/landing/LandingProvider.d.ts +4 -0
- package/dist/landing/LandingProvider.d.ts.map +1 -0
- package/dist/landing/LandingShowcase.d.ts +3 -0
- package/dist/landing/LandingShowcase.d.ts.map +1 -0
- package/dist/landing/LandingSkills.d.ts +3 -0
- package/dist/landing/LandingSkills.d.ts.map +1 -0
- package/dist/landing/LandingStats.d.ts +3 -0
- package/dist/landing/LandingStats.d.ts.map +1 -0
- package/dist/landing/LandingTestimonials.d.ts +3 -0
- package/dist/landing/LandingTestimonials.d.ts.map +1 -0
- package/dist/landing/index.d.ts +47 -0
- package/dist/landing/index.d.ts.map +1 -0
- package/dist/landing/themes/app.d.ts +3 -0
- package/dist/landing/themes/app.d.ts.map +1 -0
- package/dist/landing/themes/corporate.d.ts +3 -0
- package/dist/landing/themes/corporate.d.ts.map +1 -0
- package/dist/landing/themes/dashboard.d.ts +3 -0
- package/dist/landing/themes/dashboard.d.ts.map +1 -0
- package/dist/landing/themes/immersive.d.ts +3 -0
- package/dist/landing/themes/immersive.d.ts.map +1 -0
- package/dist/landing/themes/index.d.ts +15 -0
- package/dist/landing/themes/index.d.ts.map +1 -0
- package/dist/landing/themes/marketing.d.ts +3 -0
- package/dist/landing/themes/marketing.d.ts.map +1 -0
- package/dist/landing/themes/portfolio.d.ts +3 -0
- package/dist/landing/themes/portfolio.d.ts.map +1 -0
- package/dist/landing/themes/product.d.ts +3 -0
- package/dist/landing/themes/product.d.ts.map +1 -0
- package/dist/landing/types.d.ts +346 -0
- package/dist/landing/types.d.ts.map +1 -0
- package/dist/landing.d.mts +417 -0
- package/dist/landing.js +100 -0
- package/dist/landing.js.map +1 -0
- package/dist/landing.mjs +31 -0
- package/dist/landing.mjs.map +1 -0
- package/dist/lib/icons.d.ts +6 -1
- package/dist/lib/icons.d.ts.map +1 -1
- package/dist/navigation.d.mts +1 -1
- package/dist/navigation.js +2 -2
- package/dist/navigation.js.map +1 -1
- package/dist/navigation.mjs +1 -1
- package/dist/navigation.mjs.map +1 -1
- package/dist/overlay.d.mts +2 -0
- package/dist/overlay.js +1 -1
- package/dist/overlay.js.map +1 -1
- package/dist/overlay.mjs +1 -1
- package/dist/overlay.mjs.map +1 -1
- package/dist/sdui.js +4 -4
- package/dist/sdui.js.map +1 -1
- package/dist/sdui.mjs +1 -1
- package/dist/sdui.mjs.map +1 -1
- package/package.json +16 -10
- package/src/styles/landing.css +107 -0
- package/src/styles/utilities.css +58 -0
- package/dist/chunk-6KTHJ3EL.mjs +0 -13
- package/dist/chunk-BXX2TZUB.mjs +0 -3
- package/dist/chunk-BXX2TZUB.mjs.map +0 -1
- package/dist/chunk-COR6CDMA.mjs +0 -83
- package/dist/chunk-COR6CDMA.mjs.map +0 -1
- package/dist/chunk-GLZKT7JN.mjs +0 -4
- package/dist/chunk-HN5LSP6L.mjs +0 -3
- package/dist/chunk-HN5LSP6L.mjs.map +0 -1
- package/dist/chunk-IFSEJVOR.mjs +0 -3
- package/dist/chunk-IN7RWQCJ.mjs +0 -3
- package/dist/chunk-LH77I6HO.mjs +0 -3
- package/dist/chunk-LOYAJIWO.mjs +0 -3
- package/dist/chunk-LPAG7DCA.mjs +0 -3
- package/dist/chunk-LPAG7DCA.mjs.map +0 -1
- package/dist/chunk-N7M6RIN4.mjs +0 -8
- package/dist/chunk-OSCMSA2Q.mjs +0 -3
- package/dist/chunk-PAEKNQWW.mjs +0 -3
- package/dist/chunk-QQCELXFD.mjs +0 -3
- package/dist/chunk-RPUS7G7Q.mjs +0 -3
- package/dist/chunk-RPUS7G7Q.mjs.map +0 -1
- package/dist/chunk-SDFHJ4GB.mjs +0 -3
- package/dist/chunk-SGEP3CQE.mjs +0 -3
- package/dist/chunk-UUHAXGMO.mjs +0 -3
- package/dist/chunk-UUHAXGMO.mjs.map +0 -1
- package/dist/chunk-UWHCM3S6.mjs +0 -3
- package/dist/chunk-VWSBJUNI.mjs +0 -3
- package/dist/chunk-X7ZIWYRC.mjs +0 -3
- package/dist/chunk-XV3Y7QVU.mjs +0 -3
package/dist/navigation.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export{a as Breadcrumb,b as BreadcrumbItem}from'./chunk-LOYAJIWO.mjs';import {l}from'./chunk-HN5LSP6L.mjs';import {a as a$1}from'./chunk-6KTHJ3EL.mjs';import {a}from'./chunk-UUHAXGMO.mjs';import p,{useState,useEffect}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var A=p.forwardRef(({className:n,value:e,defaultValue:t,onValueChange:o,variant:s="pills",scale:l="medium",children:m,...d},f)=>{let [g,c]=p.useState(e||t||""),b=e!==void 0,x=b?e:g;return p.useEffect(()=>{e!==void 0&&c(e);},[e]),jsx("div",{ref:f,className:a("w-full",n),...d,children:p.Children.map(m,u=>p.isValidElement(u)?p.cloneElement(u,{value:x,variant:s,scale:l}):u)})});A.displayName="Navigation";var B=p.forwardRef(({className:n,value:e,onValueChange:t,variant:o="pills",scale:s="medium",children:l,...m},d)=>{let f=()=>{switch(o){case "pills":return "bg-muted p-1 rounded-xl";case "underline":return "border-b border-border";case "cards":return "bg-muted/50 p-1 rounded-xl";default:return "bg-muted p-1 rounded-xl"}},g=()=>{switch(s){case "small":return "gap-1";case "large":return "gap-3";default:return "gap-2"}};return jsx("div",{ref:d,className:a("flex",f(),g(),n),...m,children:p.Children.map(l,c=>p.isValidElement(c)?p.cloneElement(c,{value:e,variant:o,scale:s}):c)})});B.displayName="NavigationList";var O=p.forwardRef(({className:n,value:e,onValueChange:t,variant:o="pills",scale:s="medium",active:l=false,children:m,...d},f)=>{let g=()=>{switch(o){case "pills":return a("rounded-lg px-3 py-2 text-sm font-medium transition-all",l?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground");case "underline":return a("border-b-2 px-3 py-2 text-sm font-medium transition-all",l?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground");case "cards":return a("rounded-lg px-3 py-2 text-sm font-medium transition-all",l?"bg-background text-foreground shadow-sm border border-border":"text-muted-foreground hover:text-foreground");default:return a("rounded-lg px-3 py-2 text-sm font-medium transition-all",l?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground")}},c=()=>{switch(s){case "small":return "text-xs px-2 py-1";case "large":return "text-base px-4 py-3";default:return "text-sm px-3 py-2"}},b=()=>{t==null||t(e);};return jsx("button",{ref:f,className:a(g(),c(),"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2",n),onClick:b,...d,children:m})});O.displayName="NavigationItem";var j=p.forwardRef(({className:n,active:e=false,...t},o)=>e?jsx("div",{ref:o,className:a("mt-4",n),...t}):null);j.displayName="NavigationContent";var H=A;H.List=B;H.Item=O;H.Content=j;var C=p.forwardRef(({className:n,currentPage:e,totalPages:t,onPageChange:o,showFirstLast:s=true,showPrevNext:l=true,maxVisiblePages:m=5,size:d="md",variant:f="default",shape:g="square",...c},b)=>{let x=()=>{let r=[],R=Math.floor(m/2),h=Math.max(1,e-R),P=Math.min(t,e+R);P-h+1<m&&(h===1?P=Math.min(t,h+m-1):h=Math.max(1,P-m+1)),h>1&&(r.push(1),h>2&&r.push("..."));for(let D=h;D<=P;D++)r.push(D);return P<t&&(P<t-1&&r.push("..."),r.push(t)),r},v=()=>{switch(d){case "sm":return "h-8 px-2 text-sm";case "lg":return "h-12 px-4 text-base";default:return "h-10 px-3 text-sm"}},u=()=>g==="circle"?"rounded-full aspect-square flex items-center justify-center":"rounded-md",N=(r=false)=>{switch(f){case "outlined":return a("border border-border",r?"bg-primary border-primary text-primary-foreground":"bg-background text-foreground hover:bg-muted");case "minimal":return a("border-0",r?"bg-primary/10 text-primary":"bg-transparent text-foreground hover:bg-muted");default:return a("border-0",r?"bg-primary text-primary-foreground":"bg-background text-foreground hover:bg-muted")}},M=r=>{r>=1&&r<=t&&r!==e&&o(r);},G=x();return jsxs("div",{ref:b,className:a("flex items-center justify-center gap-1",n),...c,children:[s&&e>1&&jsx("button",{onClick:()=>M(1),className:a("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uCCAB \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M11 19l-7-7 7-7M19 19l-7-7 7-7"})})}),l&&e>1&&jsx("button",{onClick:()=>M(e-1),className:a("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uC774\uC804 \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),G.map((r,R)=>jsx(p.Fragment,{children:r==="..."?jsx("span",{className:a("inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-muted-foreground",v()),children:"..."}):jsx("button",{onClick:()=>M(r),className:a("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N(r===e)),"aria-label":`${r}\uD398\uC774\uC9C0\uB85C \uC774\uB3D9`,"aria-current":r===e?"page":void 0,children:r})},R)),l&&e<t&&jsx("button",{onClick:()=>M(e+1),className:a("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uB2E4\uC74C \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})}),s&&e<t&&jsx("button",{onClick:()=>M(t),className:a("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 5l7 7-7 7M5 5l7 7-7 7"})})})]})});C.displayName="Pagination";var V=p.forwardRef(({className:n,...e},t)=>jsx(C,{ref:t,variant:"outlined",className:n,...e}));V.displayName="PaginationOutlined";var q=p.forwardRef(({className:n,...e},t)=>jsx(C,{ref:t,variant:"minimal",className:n,...e}));q.displayName="PaginationMinimal";var z=p.forwardRef(({totalItems:n=0,itemsPerPage:e=10,showInfo:t=true,className:o,...s},l)=>{let m=(s.currentPage-1)*e+1,d=Math.min(s.currentPage*e,n);return jsxs("div",{className:a("flex flex-col sm:flex-row items-center justify-between gap-4",o),children:[t&&jsx("div",{className:"text-sm text-foreground",children:n>0?jsxs(Fragment,{children:[jsx("span",{className:"font-medium",children:m})," - ",jsx("span",{className:"font-medium",children:d})," of ",jsx("span",{className:"font-medium",children:n})," results"]}):"No results"}),jsx(C,{ref:l,...s})]})});z.displayName="PaginationWithInfo";var _=p.forwardRef(({className:n,prevPage:e,nextPage:t,showOnMobile:o=false,...s},l$1)=>!e&&!t?null:jsxs("div",{ref:l$1,className:a("flex items-center justify-between py-4",!o&&"hidden md:flex",n),...s,children:[jsx("div",{className:"flex-1",children:e&&jsxs("a",{href:e.href,className:"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[jsx(l,{name:"chevronLeft",className:"w-4 h-4 mr-2 transition-transform group-hover:-translate-x-1"}),jsx("span",{className:"hidden sm:inline",children:e.title})]})}),jsx("div",{className:"flex-1 flex justify-end",children:t&&jsxs("a",{href:t.href,className:"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[jsx("span",{className:"hidden sm:inline mr-2",children:t.title}),jsx(l,{name:"chevronRight",className:"w-4 h-4 transition-transform group-hover:translate-x-1"})]})})]}));_.displayName="PageNavigation";var T=p.forwardRef(({children:n,className:e,duration:t=300,variant:o="fade",loadingVariant:s="ripple",loadingText:l="\uD398\uC774\uC9C0 \uB85C\uB529 \uC911...",showLoading:m=true,onTransitionStart:d,onTransitionEnd:f},g)=>{let[c,b]=useState(true),[x,v]=useState(false);useEffect(()=>{let N=setTimeout(()=>{b(false),v(true),f==null||f();},t);return d==null||d(),()=>clearTimeout(N)},[t,d,f]);let u={fade:a("transition-opacity duration-300 ease-in-out",x?"opacity-100":"opacity-0"),slide:a("transition-transform duration-300 ease-in-out",x?"translate-x-0":"translate-x-full"),scale:a("transition-all duration-300 ease-in-out",x?"scale-100 opacity-100":"scale-95 opacity-0"),flip:a("transition-all duration-500 ease-in-out",x?"rotate-y-0 opacity-100":"rotate-y-90 opacity-0")};return c&&m?jsx("div",{className:a("flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-indigo-50 to-purple-50 dark:from-slate-900 dark:to-slate-800",e),children:jsx(a$1,{size:"lg",variant:s,text:l})}):jsx("div",{ref:g,className:a("w-full",u[o],e),style:{transitionDuration:`${t}ms`},children:n})});T.displayName="PageTransition";var Y=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"fade",...n})),Z=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"slide",...n})),ee=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"scale",...n})),te=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"flip",...n}));Y.displayName="FadeTransition";Z.displayName="SlideTransition";ee.displayName="ScaleTransition";te.displayName="FlipTransition";export{H as Navigation,j as NavigationContent,O as NavigationItem,B as NavigationList,_ as PageNavigation,T as PageTransition,C as Pagination,q as PaginationMinimal,V as PaginationOutlined,z as PaginationWithInfo};//# sourceMappingURL=navigation.mjs.map
|
|
2
|
+
export{a as Breadcrumb,b as BreadcrumbItem}from'./chunk-KJZGOL2Z.mjs';import {l}from'./chunk-7OYT3QSY.mjs';import {a}from'./chunk-RS6RKW5U.mjs';import {b}from'./chunk-U6CTBZ2U.mjs';import p,{useState,useEffect}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var A=p.forwardRef(({className:n,value:e,defaultValue:t,onValueChange:o,variant:s="pills",scale:l="medium",children:m,...d},f)=>{let [g,c]=p.useState(e||t||""),b$1=e!==void 0,x=b$1?e:g;return p.useEffect(()=>{e!==void 0&&c(e);},[e]),jsx("div",{ref:f,className:b("w-full",n),...d,children:p.Children.map(m,u=>p.isValidElement(u)?p.cloneElement(u,{value:x,variant:s,scale:l}):u)})});A.displayName="Navigation";var B=p.forwardRef(({className:n,value:e,onValueChange:t,variant:o="pills",scale:s="medium",children:l,...m},d)=>{let f=()=>{switch(o){case "pills":return "bg-muted p-1 rounded-xl";case "underline":return "border-b border-border";case "cards":return "bg-muted/50 p-1 rounded-xl";default:return "bg-muted p-1 rounded-xl"}},g=()=>{switch(s){case "small":return "gap-1";case "large":return "gap-3";default:return "gap-2"}};return jsx("div",{ref:d,className:b("flex",f(),g(),n),...m,children:p.Children.map(l,c=>p.isValidElement(c)?p.cloneElement(c,{value:e,variant:o,scale:s}):c)})});B.displayName="NavigationList";var O=p.forwardRef(({className:n,value:e,onValueChange:t,variant:o="pills",scale:s="medium",active:l=false,children:m,...d},f)=>{let g=()=>{switch(o){case "pills":return b("rounded-lg px-3 py-2 text-sm font-medium transition-all",l?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground");case "underline":return b("border-b-2 px-3 py-2 text-sm font-medium transition-all",l?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground");case "cards":return b("rounded-lg px-3 py-2 text-sm font-medium transition-all",l?"bg-background text-foreground shadow-sm border border-border":"text-muted-foreground hover:text-foreground");default:return b("rounded-lg px-3 py-2 text-sm font-medium transition-all",l?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground")}},c=()=>{switch(s){case "small":return "text-xs px-2 py-1";case "large":return "text-base px-4 py-3";default:return "text-sm px-3 py-2"}},b$1=()=>{t==null||t(e);};return jsx("button",{ref:f,className:b(g(),c(),"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2",n),onClick:b$1,...d,children:m})});O.displayName="NavigationItem";var j=p.forwardRef(({className:n,active:e=false,...t},o)=>e?jsx("div",{ref:o,className:b("mt-4",n),...t}):null);j.displayName="NavigationContent";var H=A;H.List=B;H.Item=O;H.Content=j;var C=p.forwardRef(({className:n,currentPage:e,totalPages:t,onPageChange:o,showFirstLast:s=true,showPrevNext:l=true,maxVisiblePages:m=5,size:d="md",variant:f="default",shape:g="square",...c},b$1)=>{let x=()=>{let r=[],R=Math.floor(m/2),h=Math.max(1,e-R),P=Math.min(t,e+R);P-h+1<m&&(h===1?P=Math.min(t,h+m-1):h=Math.max(1,P-m+1)),h>1&&(r.push(1),h>2&&r.push("..."));for(let D=h;D<=P;D++)r.push(D);return P<t&&(P<t-1&&r.push("..."),r.push(t)),r},v=()=>{switch(d){case "sm":return "h-8 px-2 text-sm";case "lg":return "h-12 px-4 text-base";default:return "h-10 px-3 text-sm"}},u=()=>g==="circle"?"rounded-full aspect-square flex items-center justify-center":"rounded-md",N=(r=false)=>{switch(f){case "outlined":return b("border border-border",r?"bg-primary border-primary text-primary-foreground":"bg-background text-foreground hover:bg-muted");case "minimal":return b("border-0",r?"bg-primary/10 text-primary":"bg-transparent text-foreground hover:bg-muted");default:return b("border-0",r?"bg-primary text-primary-foreground":"bg-background text-foreground hover:bg-muted")}},M=r=>{r>=1&&r<=t&&r!==e&&o(r);},G=x();return jsxs("div",{ref:b$1,className:b("flex items-center justify-center gap-1",n),...c,children:[s&&e>1&&jsx("button",{onClick:()=>M(1),className:b("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uCCAB \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M11 19l-7-7 7-7M19 19l-7-7 7-7"})})}),l&&e>1&&jsx("button",{onClick:()=>M(e-1),className:b("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uC774\uC804 \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),G.map((r,R)=>jsx(p.Fragment,{children:r==="..."?jsx("span",{className:b("inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-muted-foreground",v()),children:"..."}):jsx("button",{onClick:()=>M(r),className:b("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N(r===e)),"aria-label":`${r}\uD398\uC774\uC9C0\uB85C \uC774\uB3D9`,"aria-current":r===e?"page":void 0,children:r})},R)),l&&e<t&&jsx("button",{onClick:()=>M(e+1),className:b("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uB2E4\uC74C \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})}),s&&e<t&&jsx("button",{onClick:()=>M(t),className:b("inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",v(),u(),N()),"aria-label":"\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0\uB85C \uC774\uB3D9",children:jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 5l7 7-7 7M5 5l7 7-7 7"})})})]})});C.displayName="Pagination";var V=p.forwardRef(({className:n,...e},t)=>jsx(C,{ref:t,variant:"outlined",className:n,...e}));V.displayName="PaginationOutlined";var q=p.forwardRef(({className:n,...e},t)=>jsx(C,{ref:t,variant:"minimal",className:n,...e}));q.displayName="PaginationMinimal";var z=p.forwardRef(({totalItems:n=0,itemsPerPage:e=10,showInfo:t=true,className:o,...s},l)=>{let m=(s.currentPage-1)*e+1,d=Math.min(s.currentPage*e,n);return jsxs("div",{className:b("flex flex-col sm:flex-row items-center justify-between gap-4",o),children:[t&&jsx("div",{className:"text-sm text-foreground",children:n>0?jsxs(Fragment,{children:[jsx("span",{className:"font-medium",children:m})," - ",jsx("span",{className:"font-medium",children:d})," of ",jsx("span",{className:"font-medium",children:n})," results"]}):"No results"}),jsx(C,{ref:l,...s})]})});z.displayName="PaginationWithInfo";var _=p.forwardRef(({className:n,prevPage:e,nextPage:t,showOnMobile:o=false,...s},l$1)=>!e&&!t?null:jsxs("div",{ref:l$1,className:b("flex items-center justify-between py-4",!o&&"hidden md:flex",n),...s,children:[jsx("div",{className:"flex-1",children:e&&jsxs("a",{href:e.href,className:"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[jsx(l,{name:"chevronLeft",className:"w-4 h-4 mr-2 transition-transform group-hover:-translate-x-1"}),jsx("span",{className:"hidden sm:inline",children:e.title})]})}),jsx("div",{className:"flex-1 flex justify-end",children:t&&jsxs("a",{href:t.href,className:"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[jsx("span",{className:"hidden sm:inline mr-2",children:t.title}),jsx(l,{name:"chevronRight",className:"w-4 h-4 transition-transform group-hover:translate-x-1"})]})})]}));_.displayName="PageNavigation";var T=p.forwardRef(({children:n,className:e,duration:t=300,variant:o="fade",loadingVariant:s="ripple",loadingText:l="\uD398\uC774\uC9C0 \uB85C\uB529 \uC911...",showLoading:m=true,onTransitionStart:d,onTransitionEnd:f},g)=>{let[c,b$1]=useState(true),[x,v]=useState(false);useEffect(()=>{let N=setTimeout(()=>{b$1(false),v(true),f==null||f();},t);return d==null||d(),()=>clearTimeout(N)},[t,d,f]);let u={fade:b("transition-opacity duration-300 ease-in-out",x?"opacity-100":"opacity-0"),slide:b("transition-transform duration-300 ease-in-out",x?"translate-x-0":"translate-x-full"),scale:b("transition-all duration-300 ease-in-out",x?"scale-100 opacity-100":"scale-95 opacity-0"),flip:b("transition-all duration-500 ease-in-out",x?"rotate-y-0 opacity-100":"rotate-y-90 opacity-0")};return c&&m?jsx("div",{className:b("flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-indigo-50 to-purple-50 dark:from-slate-900 dark:to-slate-800",e),children:jsx(a,{size:"lg",variant:s,text:l})}):jsx("div",{ref:g,className:b("w-full",u[o],e),style:{transitionDuration:`${t}ms`},children:n})});T.displayName="PageTransition";var Y=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"fade",...n})),Z=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"slide",...n})),ee=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"scale",...n})),te=p.forwardRef((n,e)=>jsx(T,{ref:e,variant:"flip",...n}));Y.displayName="FadeTransition";Z.displayName="SlideTransition";ee.displayName="ScaleTransition";te.displayName="FlipTransition";export{H as Navigation,j as NavigationContent,O as NavigationItem,B as NavigationList,_ as PageNavigation,T as PageTransition,C as Pagination,q as PaginationMinimal,V as PaginationOutlined,z as PaginationWithInfo};//# sourceMappingURL=navigation.mjs.map
|
|
3
3
|
//# sourceMappingURL=navigation.mjs.map
|
package/dist/navigation.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Navigation.tsx","../src/components/Pagination.tsx","../src/components/PageNavigation.tsx","../src/components/PageTransition.tsx"],"names":["Navigation","React","className","value","defaultValue","onValueChange","variant","scale","children","props","ref","activeTab","setActiveTab","isControlled","currentValue","jsx","merge","child","NavigationList","_onValueChange","getStyleClasses","getScaleClasses","NavigationItem","active","handleClick","NavigationContent","NavigationComponent","Pagination","currentPage","totalPages","onPageChange","showFirstLast","showPrevNext","maxVisiblePages","size","shape","getVisiblePages","pages","halfVisible","start","end","i","getSizeClasses","getShapeClasses","getVariantClasses","isActive","handlePageClick","page","visiblePages","jsxs","index","PaginationOutlined","PaginationMinimal","PaginationWithInfo","totalItems","itemsPerPage","showInfo","startItem","endItem","Fragment","PageNavigation","prevPage","nextPage","showOnMobile","Icon","PageTransition","duration","loadingVariant","loadingText","showLoading","onTransitionStart","onTransitionEnd","isLoading","setIsLoading","useState","isVisible","setIsVisible","useEffect","timer","transitionClasses","LoadingSpinner","FadeTransition","SlideTransition","ScaleTransition","FlipTransition"],"mappings":"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","file":"navigation.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Navigation 컴포넌트의 props / Navigation component props\n * @typedef {Object} NavigationProps\n * @property {string} [value] - 제어 모드에서 활성 탭 값 / Active tab value in controlled mode\n * @property {string} [defaultValue] - 비제어 모드에서 기본 활성 탭 값 / Default active tab value in uncontrolled mode\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>}\n */\nexport interface NavigationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n}\n\n/**\n * Navigation 컴포넌트 / Navigation component\n * \n * 탭 네비게이션 컴포넌트입니다.\n * NavigationList, NavigationItem, NavigationContent와 함께 사용합니다.\n * \n * Tab navigation component.\n * Used with NavigationList, NavigationItem, and NavigationContent.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Navigation>\n * <Navigation.List>\n * <Navigation.Item value=\"tab1\">탭 1</Navigation.Item>\n * <Navigation.Item value=\"tab2\">탭 2</Navigation.Item>\n * </Navigation.List>\n * <Navigation.Content value=\"tab1\">내용 1</Navigation.Content>\n * </Navigation>\n * \n * @param {NavigationProps} props - Navigation 컴포넌트의 props / Navigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Navigation 컴포넌트 / Navigation component\n */\nconst Navigation = React.forwardRef<HTMLDivElement, NavigationProps>(\n ({ \n className, \n value,\n defaultValue,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props \n }, ref) => {\n const [activeTab, setActiveTab] = React.useState(value || defaultValue || \"\")\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : activeTab\n\n const _handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue)\n }\n onValueChange?.(newValue)\n }\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value)\n }\n }, [value])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"w-full\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value: currentValue,\n variant,\n scale\n } as Partial<NavigationListProps | NavigationItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nNavigation.displayName = \"Navigation\"\n\n/**\n * NavigationList 컴포넌트의 props / NavigationList component props\n * @typedef {Object} NavigationListProps\n * @property {string} [value] - 활성 탭 값 / Active tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>}\n */\nexport interface NavigationListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'> {\n value?: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n}\n\nconst NavigationList = React.forwardRef<HTMLDivElement, NavigationListProps>(\n ({\n className,\n value,\n onValueChange: _onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props\n }, ref) => {\n const getStyleClasses = () => {\n switch (variant) {\n case \"pills\":\n return \"bg-muted p-1 rounded-xl\"\n case \"underline\":\n return \"border-b border-border\"\n case \"cards\":\n return \"bg-muted/50 p-1 rounded-xl\"\n default:\n return \"bg-muted p-1 rounded-xl\"\n }\n }\n\n const getScaleClasses = () => {\n switch (scale) {\n case \"small\":\n return \"gap-1\"\n case \"large\":\n return \"gap-3\"\n default:\n return \"gap-2\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex\",\n getStyleClasses(),\n getScaleClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n variant,\n scale\n } as Partial<NavigationItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nNavigationList.displayName = \"NavigationList\"\n\n/**\n * NavigationItem 컴포넌트의 props / NavigationItem component props\n * @typedef {Object} NavigationItemProps\n * @property {string} value - 탭 값 / Tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant] - Navigation 스타일 변형 (자동으로 설정됨) / Navigation style variant (auto-set)\n * @property {\"small\" | \"medium\" | \"large\"} [scale] - Navigation 크기 (자동으로 설정됨) / Navigation size (auto-set)\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'>}\n */\nexport interface NavigationItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'> {\n value: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n active?: boolean\n}\n\nconst NavigationItem = React.forwardRef<HTMLButtonElement, NavigationItemProps>(\n ({ \n className, \n value,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n active = false,\n children,\n ...props \n }, ref) => {\n const getStyleClasses = () => {\n switch (variant) {\n case \"pills\":\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )\n case \"underline\":\n return merge(\n \"border-b-2 px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )\n case \"cards\":\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"bg-background text-foreground shadow-sm border border-border\"\n : \"text-muted-foreground hover:text-foreground\"\n )\n default:\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )\n }\n }\n\n const getScaleClasses = () => {\n switch (scale) {\n case \"small\":\n return \"text-xs px-2 py-1\"\n case \"large\":\n return \"text-base px-4 py-3\"\n default:\n return \"text-sm px-3 py-2\"\n }\n }\n\n const handleClick = () => {\n onValueChange?.(value)\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n getStyleClasses(),\n getScaleClasses(),\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nNavigationItem.displayName = \"NavigationItem\"\n\n/**\n * NavigationContent 컴포넌트의 props / NavigationContent component props\n * @typedef {Object} NavigationContentProps\n * @property {string} value - 탭 값 / Tab value\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface NavigationContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n active?: boolean\n}\n\nconst NavigationContent = React.forwardRef<HTMLDivElement, NavigationContentProps>(\n ({ className, active = false, ...props }, ref) => {\n if (!active) return null\n\n return (\n <div\n ref={ref}\n className={merge(\"mt-4\", className)}\n {...props}\n />\n )\n }\n)\nNavigationContent.displayName = \"NavigationContent\"\n\n// 서브컴포넌트 타입 정의\nexport interface NavigationComponent extends React.ForwardRefExoticComponent<NavigationProps & React.RefAttributes<HTMLDivElement>> {\n List: typeof NavigationList\n Item: typeof NavigationItem\n Content: typeof NavigationContent\n}\n\nconst NavigationComponent = Navigation as NavigationComponent\nNavigationComponent.List = NavigationList\nNavigationComponent.Item = NavigationItem\nNavigationComponent.Content = NavigationContent\n\nexport { NavigationComponent as Navigation, NavigationList, NavigationItem, NavigationContent } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Pagination 컴포넌트의 props / Pagination component props\n * @typedef {Object} PaginationProps\n * @property {number} currentPage - 현재 페이지 번호 / Current page number\n * @property {number} totalPages - 전체 페이지 수 / Total number of pages\n * @property {(page: number) => void} onPageChange - 페이지 변경 콜백 / Page change callback\n * @property {boolean} [showFirstLast=true] - 첫/마지막 페이지 버튼 표시 여부 / Show first/last page buttons\n * @property {boolean} [showPrevNext=true] - 이전/다음 페이지 버튼 표시 여부 / Show previous/next page buttons\n * @property {number} [maxVisiblePages=5] - 최대 표시 페이지 수 / Maximum visible page numbers\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Pagination 크기 / Pagination size\n * @property {\"default\" | \"outlined\" | \"minimal\"} [variant=\"default\"] - Pagination 스타일 변형 / Pagination style variant\n * @property {\"square\" | \"circle\"} [shape=\"square\"] - 버튼 모양 / Button shape\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface PaginationProps extends React.HTMLAttributes<HTMLDivElement> {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n showFirstLast?: boolean\n showPrevNext?: boolean\n maxVisiblePages?: number\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"outlined\" | \"minimal\"\n shape?: \"square\" | \"circle\"\n}\n\n/**\n * Pagination 컴포넌트 / Pagination component\n * \n * 페이지네이션 컨트롤을 제공하는 컴포넌트입니다.\n * 첫/마지막 페이지, 이전/다음 페이지 버튼을 지원하며,\n * 많은 페이지가 있을 경우 자동으로 생략 표시(...)를 합니다.\n * \n * Component that provides pagination controls.\n * Supports first/last page and previous/next page buttons,\n * and automatically shows ellipsis (...) when there are many pages.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [page, setPage] = useState(1)\n * \n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n * \n * @example\n * // Outlined 스타일, 원형 버튼 / Outlined style, circular buttons\n * <Pagination\n * currentPage={page}\n * totalPages={20}\n * onPageChange={setPage}\n * variant=\"outlined\"\n * shape=\"circle\"\n * />\n * \n * @param {PaginationProps} props - Pagination 컴포넌트의 props / Pagination component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Pagination 컴포넌트 / Pagination component\n */\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n ({ \n className, \n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n showPrevNext = true,\n maxVisiblePages = 5,\n size = \"md\",\n variant = \"default\",\n shape = \"square\",\n ...props \n }, ref) => {\n const getVisiblePages = () => {\n const pages: (number | string)[] = []\n const halfVisible = Math.floor(maxVisiblePages / 2)\n \n let start = Math.max(1, currentPage - halfVisible)\n let end = Math.min(totalPages, currentPage + halfVisible)\n \n // 조정\n if (end - start + 1 < maxVisiblePages) {\n if (start === 1) {\n end = Math.min(totalPages, start + maxVisiblePages - 1)\n } else {\n start = Math.max(1, end - maxVisiblePages + 1)\n }\n }\n \n // 첫 페이지\n if (start > 1) {\n pages.push(1)\n if (start > 2) {\n pages.push(\"...\")\n }\n }\n \n // 중간 페이지들\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n \n // 마지막 페이지\n if (end < totalPages) {\n if (end < totalPages - 1) {\n pages.push(\"...\")\n }\n pages.push(totalPages)\n }\n \n return pages\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-8 px-2 text-sm\" // 32px 높이, 8px 패딩\n case \"lg\":\n return \"h-12 px-4 text-base\" // 48px 높이, 16px 패딩\n default:\n return \"h-10 px-3 text-sm\" // 40px 높이, 12px 패딩\n }\n }\n\n const getShapeClasses = () => {\n switch (shape) {\n case \"circle\":\n return \"rounded-full aspect-square flex items-center justify-center\"\n default:\n return \"rounded-md\"\n }\n }\n\n const getVariantClasses = (isActive: boolean = false) => {\n switch (variant) {\n case \"outlined\":\n return merge(\n \"border border-border\",\n isActive\n ? \"bg-primary border-primary text-primary-foreground\"\n : \"bg-background text-foreground hover:bg-muted\"\n )\n case \"minimal\":\n return merge(\n \"border-0\",\n isActive\n ? \"bg-primary/10 text-primary\"\n : \"bg-transparent text-foreground hover:bg-muted\"\n )\n default:\n return merge(\n \"border-0\",\n isActive\n ? \"bg-primary text-primary-foreground\"\n : \"bg-background text-foreground hover:bg-muted\"\n )\n }\n }\n\n const handlePageClick = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page)\n }\n }\n\n const visiblePages = getVisiblePages()\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex items-center justify-center gap-1\",\n className\n )}\n {...props}\n >\n {/* 첫 페이지 버튼 */}\n {showFirstLast && currentPage > 1 && (\n <button\n onClick={() => handlePageClick(1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"첫 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 19l-7-7 7-7M19 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* 이전 페이지 버튼 */}\n {showPrevNext && currentPage > 1 && (\n <button\n onClick={() => handlePageClick(currentPage - 1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"이전 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* 페이지 번호들 */}\n {visiblePages.map((page, index) => (\n <React.Fragment key={index}>\n {page === \"...\" ? (\n <span className={merge(\n \"inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-muted-foreground\",\n getSizeClasses()\n )}>\n ...\n </span>\n ) : (\n <button\n onClick={() => handlePageClick(page as number)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses(page === currentPage)\n )}\n aria-label={`${page}페이지로 이동`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n\n {/* 다음 페이지 버튼 */}\n {showPrevNext && currentPage < totalPages && (\n <button\n onClick={() => handlePageClick(currentPage + 1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"다음 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )}\n\n {/* 마지막 페이지 버튼 */}\n {showFirstLast && currentPage < totalPages && (\n <button\n onClick={() => handlePageClick(totalPages)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"마지막 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n </button>\n )}\n </div>\n )\n }\n)\nPagination.displayName = \"Pagination\"\n\n// 편의 컴포넌트들\nexport const PaginationOutlined = React.forwardRef<HTMLDivElement, Omit<PaginationProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Pagination ref={ref} variant=\"outlined\" className={className} {...props} />\n )\n)\nPaginationOutlined.displayName = \"PaginationOutlined\"\n\nexport const PaginationMinimal = React.forwardRef<HTMLDivElement, Omit<PaginationProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Pagination ref={ref} variant=\"minimal\" className={className} {...props} />\n )\n)\nPaginationMinimal.displayName = \"PaginationMinimal\"\n\n// 복합 컴포넌트들\nexport const PaginationWithInfo = React.forwardRef<HTMLDivElement, PaginationProps & { \n totalItems?: number\n itemsPerPage?: number\n showInfo?: boolean\n}>(\n ({ \n totalItems = 0, \n itemsPerPage = 10, \n showInfo = true, \n className, \n ...props \n }, ref) => {\n const startItem = (props.currentPage - 1) * itemsPerPage + 1\n const endItem = Math.min(props.currentPage * itemsPerPage, totalItems)\n \n return (\n <div className={merge(\"flex flex-col sm:flex-row items-center justify-between gap-4\", className)}>\n {showInfo && (\n <div className=\"text-sm text-foreground\">\n {totalItems > 0 ? (\n <>\n <span className=\"font-medium\">{startItem}</span>\n {\" - \"}\n <span className=\"font-medium\">{endItem}</span>\n {\" of \"}\n <span className=\"font-medium\">{totalItems}</span>\n {\" results\"}\n </>\n ) : (\n \"No results\"\n )}\n </div>\n )}\n <Pagination ref={ref} {...props} />\n </div>\n )\n }\n)\nPaginationWithInfo.displayName = \"PaginationWithInfo\"\n\nexport { Pagination } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * PageNavigation 컴포넌트의 props / PageNavigation component props\n * @typedef {Object} PageNavigationProps\n * @property {Object} [prevPage] - 이전 페이지 정보 / Previous page information\n * @property {string} prevPage.title - 이전 페이지 제목 / Previous page title\n * @property {string} prevPage.href - 이전 페이지 링크 / Previous page link\n * @property {Object} [nextPage] - 다음 페이지 정보 / Next page information\n * @property {string} nextPage.title - 다음 페이지 제목 / Next page title\n * @property {string} nextPage.href - 다음 페이지 링크 / Next page link\n * @property {boolean} [showOnMobile=false] - 모바일에서 표시 여부 / Show on mobile\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface PageNavigationProps extends React.HTMLAttributes<HTMLDivElement> {\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n showOnMobile?: boolean\n}\n\n/**\n * PageNavigation 컴포넌트 / PageNavigation component\n * \n * 이전/다음 페이지로 이동하는 네비게이션 컴포넌트입니다.\n * 문서 페이지나 가이드 페이지에서 사용하기 적합합니다.\n * \n * Navigation component for moving to previous/next pages.\n * Suitable for documentation or guide pages.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <PageNavigation\n * prevPage={{ title: \"이전 페이지\", href: \"/prev\" }}\n * nextPage={{ title: \"다음 페이지\", href: \"/next\" }}\n * />\n * \n * @param {PageNavigationProps} props - PageNavigation 컴포넌트의 props / PageNavigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} PageNavigation 컴포넌트 / PageNavigation component\n */\nconst PageNavigation = React.forwardRef<HTMLDivElement, PageNavigationProps>(\n ({ \n className, \n prevPage, \n nextPage, \n showOnMobile = false,\n ...props \n }, ref) => {\n if (!prevPage && !nextPage) {\n return null\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex items-center justify-between py-4\",\n !showOnMobile && \"hidden md:flex\",\n className\n )}\n {...props}\n >\n {/* 이전 페이지 */}\n <div className=\"flex-1\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <Icon \n name=\"chevronLeft\" \n className=\"w-4 h-4 mr-2 transition-transform group-hover:-translate-x-1\" \n />\n <span className=\"hidden sm:inline\">{prevPage.title}</span>\n </a>\n )}\n </div>\n\n {/* 다음 페이지 */}\n <div className=\"flex-1 flex justify-end\">\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span className=\"hidden sm:inline mr-2\">{nextPage.title}</span>\n <Icon \n name=\"chevronRight\" \n className=\"w-4 h-4 transition-transform group-hover:translate-x-1\" \n />\n </a>\n )}\n </div>\n </div>\n )\n }\n)\nPageNavigation.displayName = \"PageNavigation\"\n\nexport { PageNavigation } ","'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport { merge } from '../lib/utils'\nimport { LoadingSpinner } from './LoadingSpinner'\n\n/**\n * PageTransition 컴포넌트의 props / PageTransition component props\n * @typedef {Object} PageTransitionProps\n * @property {React.ReactNode} children - 페이지 내용 / Page content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {number} [duration=300] - 전환 지속 시간 (ms) / Transition duration (ms)\n * @property {'fade' | 'slide' | 'scale' | 'flip'} [variant='fade'] - 전환 애니메이션 타입 / Transition animation type\n * @property {'default' | 'dots' | 'bars' | 'ring' | 'ripple'} [loadingVariant='ripple'] - 로딩 스피너 타입 / Loading spinner type\n * @property {string} [loadingText='페이지 로딩 중...'] - 로딩 텍스트 / Loading text\n * @property {boolean} [showLoading=true] - 로딩 표시 여부 / Show loading\n * @property {() => void} [onTransitionStart] - 전환 시작 콜백 / Transition start callback\n * @property {() => void} [onTransitionEnd] - 전환 종료 콜백 / Transition end callback\n */\nexport interface PageTransitionProps {\n children: React.ReactNode\n className?: string\n duration?: number\n variant?: 'fade' | 'slide' | 'scale' | 'flip'\n loadingVariant?: 'default' | 'dots' | 'bars' | 'ring' | 'ripple'\n loadingText?: string\n showLoading?: boolean\n onTransitionStart?: () => void\n onTransitionEnd?: () => void\n}\n\n/**\n * PageTransition 컴포넌트 / PageTransition component\n * \n * 페이지 전환 애니메이션을 제공하는 컴포넌트입니다.\n * 다양한 전환 효과와 로딩 스피너를 지원합니다.\n * \n * Component that provides page transition animations.\n * Supports various transition effects and loading spinners.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <PageTransition>\n * <div>페이지 내용</div>\n * </PageTransition>\n * \n * @example\n * // Slide 전환 / Slide transition\n * <PageTransition\n * variant=\"slide\"\n * duration={500}\n * loadingVariant=\"dots\"\n * >\n * <div>페이지 내용</div>\n * </PageTransition>\n * \n * @param {PageTransitionProps} props - PageTransition 컴포넌트의 props / PageTransition component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} PageTransition 컴포넌트 / PageTransition component\n */\nexport const PageTransition = React.forwardRef<HTMLDivElement, PageTransitionProps>(({\n children,\n className,\n duration = 300,\n variant = 'fade',\n loadingVariant = 'ripple',\n loadingText = '페이지 로딩 중...',\n showLoading = true,\n onTransitionStart,\n onTransitionEnd\n}, ref) => {\n const [isLoading, setIsLoading] = useState(true)\n const [isVisible, setIsVisible] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsLoading(false)\n setIsVisible(true)\n onTransitionEnd?.()\n }, duration)\n\n onTransitionStart?.()\n\n return () => clearTimeout(timer)\n }, [duration, onTransitionStart, onTransitionEnd])\n\n const transitionClasses = {\n fade: merge(\n 'transition-opacity duration-300 ease-in-out',\n isVisible ? 'opacity-100' : 'opacity-0'\n ),\n slide: merge(\n 'transition-transform duration-300 ease-in-out',\n isVisible ? 'translate-x-0' : 'translate-x-full'\n ),\n scale: merge(\n 'transition-all duration-300 ease-in-out',\n isVisible ? 'scale-100 opacity-100' : 'scale-95 opacity-0'\n ),\n flip: merge(\n 'transition-all duration-500 ease-in-out',\n isVisible ? 'rotate-y-0 opacity-100' : 'rotate-y-90 opacity-0'\n )\n }\n\n if (isLoading && showLoading) {\n return (\n <div className={merge('flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-indigo-50 to-purple-50 dark:from-slate-900 dark:to-slate-800', className)}>\n <LoadingSpinner\n size=\"lg\"\n variant={loadingVariant}\n text={loadingText}\n />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n 'w-full',\n transitionClasses[variant],\n className\n )}\n style={{ transitionDuration: `${duration}ms` }}\n >\n {children}\n </div>\n )\n})\n\nPageTransition.displayName = 'PageTransition'\n\n// Convenience components for different transition types\nexport const FadeTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"fade\" {...props} />\n))\n\nexport const SlideTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"slide\" {...props} />\n))\n\nexport const ScaleTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"scale\" {...props} />\n))\n\nexport const FlipTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"flip\" {...props} />\n))\n\n// Add displayName for convenience components\nFadeTransition.displayName = 'FadeTransition'\nSlideTransition.displayName = 'SlideTransition'\nScaleTransition.displayName = 'ScaleTransition'\nFlipTransition.displayName = 'FlipTransition' "]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Navigation.tsx","../src/components/Pagination.tsx","../src/components/PageNavigation.tsx","../src/components/PageTransition.tsx"],"names":["Navigation","React","className","value","defaultValue","onValueChange","variant","scale","children","props","ref","activeTab","setActiveTab","isControlled","currentValue","jsx","merge","child","NavigationList","_onValueChange","getStyleClasses","getScaleClasses","NavigationItem","active","handleClick","NavigationContent","NavigationComponent","Pagination","currentPage","totalPages","onPageChange","showFirstLast","showPrevNext","maxVisiblePages","size","shape","getVisiblePages","pages","halfVisible","start","end","i","getSizeClasses","getShapeClasses","getVariantClasses","isActive","handlePageClick","page","visiblePages","jsxs","index","PaginationOutlined","PaginationMinimal","PaginationWithInfo","totalItems","itemsPerPage","showInfo","startItem","endItem","Fragment","PageNavigation","prevPage","nextPage","showOnMobile","Icon","PageTransition","duration","loadingVariant","loadingText","showLoading","onTransitionStart","onTransitionEnd","isLoading","setIsLoading","useState","isVisible","setIsVisible","useEffect","timer","transitionClasses","LoadingSpinner","FadeTransition","SlideTransition","ScaleTransition","FlipTransition"],"mappings":"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","file":"navigation.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Navigation 컴포넌트의 props / Navigation component props\n * @typedef {Object} NavigationProps\n * @property {string} [value] - 제어 모드에서 활성 탭 값 / Active tab value in controlled mode\n * @property {string} [defaultValue] - 비제어 모드에서 기본 활성 탭 값 / Default active tab value in uncontrolled mode\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>}\n */\nexport interface NavigationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n}\n\n/**\n * Navigation 컴포넌트 / Navigation component\n * \n * 탭 네비게이션 컴포넌트입니다.\n * NavigationList, NavigationItem, NavigationContent와 함께 사용합니다.\n * \n * Tab navigation component.\n * Used with NavigationList, NavigationItem, and NavigationContent.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Navigation>\n * <Navigation.List>\n * <Navigation.Item value=\"tab1\">탭 1</Navigation.Item>\n * <Navigation.Item value=\"tab2\">탭 2</Navigation.Item>\n * </Navigation.List>\n * <Navigation.Content value=\"tab1\">내용 1</Navigation.Content>\n * </Navigation>\n * \n * @param {NavigationProps} props - Navigation 컴포넌트의 props / Navigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Navigation 컴포넌트 / Navigation component\n */\nconst Navigation = React.forwardRef<HTMLDivElement, NavigationProps>(\n ({ \n className, \n value,\n defaultValue,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props \n }, ref) => {\n const [activeTab, setActiveTab] = React.useState(value || defaultValue || \"\")\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : activeTab\n\n const _handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue)\n }\n onValueChange?.(newValue)\n }\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value)\n }\n }, [value])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"w-full\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value: currentValue,\n variant,\n scale\n } as Partial<NavigationListProps | NavigationItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nNavigation.displayName = \"Navigation\"\n\n/**\n * NavigationList 컴포넌트의 props / NavigationList component props\n * @typedef {Object} NavigationListProps\n * @property {string} [value] - 활성 탭 값 / Active tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>}\n */\nexport interface NavigationListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'> {\n value?: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n}\n\nconst NavigationList = React.forwardRef<HTMLDivElement, NavigationListProps>(\n ({\n className,\n value,\n onValueChange: _onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props\n }, ref) => {\n const getStyleClasses = () => {\n switch (variant) {\n case \"pills\":\n return \"bg-muted p-1 rounded-xl\"\n case \"underline\":\n return \"border-b border-border\"\n case \"cards\":\n return \"bg-muted/50 p-1 rounded-xl\"\n default:\n return \"bg-muted p-1 rounded-xl\"\n }\n }\n\n const getScaleClasses = () => {\n switch (scale) {\n case \"small\":\n return \"gap-1\"\n case \"large\":\n return \"gap-3\"\n default:\n return \"gap-2\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex\",\n getStyleClasses(),\n getScaleClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n variant,\n scale\n } as Partial<NavigationItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nNavigationList.displayName = \"NavigationList\"\n\n/**\n * NavigationItem 컴포넌트의 props / NavigationItem component props\n * @typedef {Object} NavigationItemProps\n * @property {string} value - 탭 값 / Tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant] - Navigation 스타일 변형 (자동으로 설정됨) / Navigation style variant (auto-set)\n * @property {\"small\" | \"medium\" | \"large\"} [scale] - Navigation 크기 (자동으로 설정됨) / Navigation size (auto-set)\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'>}\n */\nexport interface NavigationItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'> {\n value: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n active?: boolean\n}\n\nconst NavigationItem = React.forwardRef<HTMLButtonElement, NavigationItemProps>(\n ({ \n className, \n value,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n active = false,\n children,\n ...props \n }, ref) => {\n const getStyleClasses = () => {\n switch (variant) {\n case \"pills\":\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )\n case \"underline\":\n return merge(\n \"border-b-2 px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )\n case \"cards\":\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"bg-background text-foreground shadow-sm border border-border\"\n : \"text-muted-foreground hover:text-foreground\"\n )\n default:\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )\n }\n }\n\n const getScaleClasses = () => {\n switch (scale) {\n case \"small\":\n return \"text-xs px-2 py-1\"\n case \"large\":\n return \"text-base px-4 py-3\"\n default:\n return \"text-sm px-3 py-2\"\n }\n }\n\n const handleClick = () => {\n onValueChange?.(value)\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n getStyleClasses(),\n getScaleClasses(),\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nNavigationItem.displayName = \"NavigationItem\"\n\n/**\n * NavigationContent 컴포넌트의 props / NavigationContent component props\n * @typedef {Object} NavigationContentProps\n * @property {string} value - 탭 값 / Tab value\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface NavigationContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n active?: boolean\n}\n\nconst NavigationContent = React.forwardRef<HTMLDivElement, NavigationContentProps>(\n ({ className, active = false, ...props }, ref) => {\n if (!active) return null\n\n return (\n <div\n ref={ref}\n className={merge(\"mt-4\", className)}\n {...props}\n />\n )\n }\n)\nNavigationContent.displayName = \"NavigationContent\"\n\n// 서브컴포넌트 타입 정의\nexport interface NavigationComponent extends React.ForwardRefExoticComponent<NavigationProps & React.RefAttributes<HTMLDivElement>> {\n List: typeof NavigationList\n Item: typeof NavigationItem\n Content: typeof NavigationContent\n}\n\nconst NavigationComponent = Navigation as NavigationComponent\nNavigationComponent.List = NavigationList\nNavigationComponent.Item = NavigationItem\nNavigationComponent.Content = NavigationContent\n\nexport { NavigationComponent as Navigation, NavigationList, NavigationItem, NavigationContent } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Pagination 컴포넌트의 props / Pagination component props\n * @typedef {Object} PaginationProps\n * @property {number} currentPage - 현재 페이지 번호 / Current page number\n * @property {number} totalPages - 전체 페이지 수 / Total number of pages\n * @property {(page: number) => void} onPageChange - 페이지 변경 콜백 / Page change callback\n * @property {boolean} [showFirstLast=true] - 첫/마지막 페이지 버튼 표시 여부 / Show first/last page buttons\n * @property {boolean} [showPrevNext=true] - 이전/다음 페이지 버튼 표시 여부 / Show previous/next page buttons\n * @property {number} [maxVisiblePages=5] - 최대 표시 페이지 수 / Maximum visible page numbers\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Pagination 크기 / Pagination size\n * @property {\"default\" | \"outlined\" | \"minimal\"} [variant=\"default\"] - Pagination 스타일 변형 / Pagination style variant\n * @property {\"square\" | \"circle\"} [shape=\"square\"] - 버튼 모양 / Button shape\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface PaginationProps extends React.HTMLAttributes<HTMLDivElement> {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n showFirstLast?: boolean\n showPrevNext?: boolean\n maxVisiblePages?: number\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"outlined\" | \"minimal\"\n shape?: \"square\" | \"circle\"\n}\n\n/**\n * Pagination 컴포넌트 / Pagination component\n * \n * 페이지네이션 컨트롤을 제공하는 컴포넌트입니다.\n * 첫/마지막 페이지, 이전/다음 페이지 버튼을 지원하며,\n * 많은 페이지가 있을 경우 자동으로 생략 표시(...)를 합니다.\n * \n * Component that provides pagination controls.\n * Supports first/last page and previous/next page buttons,\n * and automatically shows ellipsis (...) when there are many pages.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [page, setPage] = useState(1)\n * \n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n * \n * @example\n * // Outlined 스타일, 원형 버튼 / Outlined style, circular buttons\n * <Pagination\n * currentPage={page}\n * totalPages={20}\n * onPageChange={setPage}\n * variant=\"outlined\"\n * shape=\"circle\"\n * />\n * \n * @param {PaginationProps} props - Pagination 컴포넌트의 props / Pagination component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Pagination 컴포넌트 / Pagination component\n */\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n ({ \n className, \n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n showPrevNext = true,\n maxVisiblePages = 5,\n size = \"md\",\n variant = \"default\",\n shape = \"square\",\n ...props \n }, ref) => {\n const getVisiblePages = () => {\n const pages: (number | string)[] = []\n const halfVisible = Math.floor(maxVisiblePages / 2)\n \n let start = Math.max(1, currentPage - halfVisible)\n let end = Math.min(totalPages, currentPage + halfVisible)\n \n // 조정\n if (end - start + 1 < maxVisiblePages) {\n if (start === 1) {\n end = Math.min(totalPages, start + maxVisiblePages - 1)\n } else {\n start = Math.max(1, end - maxVisiblePages + 1)\n }\n }\n \n // 첫 페이지\n if (start > 1) {\n pages.push(1)\n if (start > 2) {\n pages.push(\"...\")\n }\n }\n \n // 중간 페이지들\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n \n // 마지막 페이지\n if (end < totalPages) {\n if (end < totalPages - 1) {\n pages.push(\"...\")\n }\n pages.push(totalPages)\n }\n \n return pages\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-8 px-2 text-sm\" // 32px 높이, 8px 패딩\n case \"lg\":\n return \"h-12 px-4 text-base\" // 48px 높이, 16px 패딩\n default:\n return \"h-10 px-3 text-sm\" // 40px 높이, 12px 패딩\n }\n }\n\n const getShapeClasses = () => {\n switch (shape) {\n case \"circle\":\n return \"rounded-full aspect-square flex items-center justify-center\"\n default:\n return \"rounded-md\"\n }\n }\n\n const getVariantClasses = (isActive: boolean = false) => {\n switch (variant) {\n case \"outlined\":\n return merge(\n \"border border-border\",\n isActive\n ? \"bg-primary border-primary text-primary-foreground\"\n : \"bg-background text-foreground hover:bg-muted\"\n )\n case \"minimal\":\n return merge(\n \"border-0\",\n isActive\n ? \"bg-primary/10 text-primary\"\n : \"bg-transparent text-foreground hover:bg-muted\"\n )\n default:\n return merge(\n \"border-0\",\n isActive\n ? \"bg-primary text-primary-foreground\"\n : \"bg-background text-foreground hover:bg-muted\"\n )\n }\n }\n\n const handlePageClick = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page)\n }\n }\n\n const visiblePages = getVisiblePages()\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex items-center justify-center gap-1\",\n className\n )}\n {...props}\n >\n {/* 첫 페이지 버튼 */}\n {showFirstLast && currentPage > 1 && (\n <button\n onClick={() => handlePageClick(1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"첫 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 19l-7-7 7-7M19 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* 이전 페이지 버튼 */}\n {showPrevNext && currentPage > 1 && (\n <button\n onClick={() => handlePageClick(currentPage - 1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"이전 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* 페이지 번호들 */}\n {visiblePages.map((page, index) => (\n <React.Fragment key={index}>\n {page === \"...\" ? (\n <span className={merge(\n \"inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-muted-foreground\",\n getSizeClasses()\n )}>\n ...\n </span>\n ) : (\n <button\n onClick={() => handlePageClick(page as number)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses(page === currentPage)\n )}\n aria-label={`${page}페이지로 이동`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n\n {/* 다음 페이지 버튼 */}\n {showPrevNext && currentPage < totalPages && (\n <button\n onClick={() => handlePageClick(currentPage + 1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"다음 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )}\n\n {/* 마지막 페이지 버튼 */}\n {showFirstLast && currentPage < totalPages && (\n <button\n onClick={() => handlePageClick(totalPages)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"마지막 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n </button>\n )}\n </div>\n )\n }\n)\nPagination.displayName = \"Pagination\"\n\n// 편의 컴포넌트들\nexport const PaginationOutlined = React.forwardRef<HTMLDivElement, Omit<PaginationProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Pagination ref={ref} variant=\"outlined\" className={className} {...props} />\n )\n)\nPaginationOutlined.displayName = \"PaginationOutlined\"\n\nexport const PaginationMinimal = React.forwardRef<HTMLDivElement, Omit<PaginationProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Pagination ref={ref} variant=\"minimal\" className={className} {...props} />\n )\n)\nPaginationMinimal.displayName = \"PaginationMinimal\"\n\n// 복합 컴포넌트들\nexport const PaginationWithInfo = React.forwardRef<HTMLDivElement, PaginationProps & { \n totalItems?: number\n itemsPerPage?: number\n showInfo?: boolean\n}>(\n ({ \n totalItems = 0, \n itemsPerPage = 10, \n showInfo = true, \n className, \n ...props \n }, ref) => {\n const startItem = (props.currentPage - 1) * itemsPerPage + 1\n const endItem = Math.min(props.currentPage * itemsPerPage, totalItems)\n \n return (\n <div className={merge(\"flex flex-col sm:flex-row items-center justify-between gap-4\", className)}>\n {showInfo && (\n <div className=\"text-sm text-foreground\">\n {totalItems > 0 ? (\n <>\n <span className=\"font-medium\">{startItem}</span>\n {\" - \"}\n <span className=\"font-medium\">{endItem}</span>\n {\" of \"}\n <span className=\"font-medium\">{totalItems}</span>\n {\" results\"}\n </>\n ) : (\n \"No results\"\n )}\n </div>\n )}\n <Pagination ref={ref} {...props} />\n </div>\n )\n }\n)\nPaginationWithInfo.displayName = \"PaginationWithInfo\"\n\nexport { Pagination } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * PageNavigation 컴포넌트의 props / PageNavigation component props\n * @typedef {Object} PageNavigationProps\n * @property {Object} [prevPage] - 이전 페이지 정보 / Previous page information\n * @property {string} prevPage.title - 이전 페이지 제목 / Previous page title\n * @property {string} prevPage.href - 이전 페이지 링크 / Previous page link\n * @property {Object} [nextPage] - 다음 페이지 정보 / Next page information\n * @property {string} nextPage.title - 다음 페이지 제목 / Next page title\n * @property {string} nextPage.href - 다음 페이지 링크 / Next page link\n * @property {boolean} [showOnMobile=false] - 모바일에서 표시 여부 / Show on mobile\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface PageNavigationProps extends React.HTMLAttributes<HTMLDivElement> {\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n showOnMobile?: boolean\n}\n\n/**\n * PageNavigation 컴포넌트 / PageNavigation component\n * \n * 이전/다음 페이지로 이동하는 네비게이션 컴포넌트입니다.\n * 문서 페이지나 가이드 페이지에서 사용하기 적합합니다.\n * \n * Navigation component for moving to previous/next pages.\n * Suitable for documentation or guide pages.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <PageNavigation\n * prevPage={{ title: \"이전 페이지\", href: \"/prev\" }}\n * nextPage={{ title: \"다음 페이지\", href: \"/next\" }}\n * />\n * \n * @param {PageNavigationProps} props - PageNavigation 컴포넌트의 props / PageNavigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} PageNavigation 컴포넌트 / PageNavigation component\n */\nconst PageNavigation = React.forwardRef<HTMLDivElement, PageNavigationProps>(\n ({ \n className, \n prevPage, \n nextPage, \n showOnMobile = false,\n ...props \n }, ref) => {\n if (!prevPage && !nextPage) {\n return null\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex items-center justify-between py-4\",\n !showOnMobile && \"hidden md:flex\",\n className\n )}\n {...props}\n >\n {/* 이전 페이지 */}\n <div className=\"flex-1\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <Icon \n name=\"chevronLeft\" \n className=\"w-4 h-4 mr-2 transition-transform group-hover:-translate-x-1\" \n />\n <span className=\"hidden sm:inline\">{prevPage.title}</span>\n </a>\n )}\n </div>\n\n {/* 다음 페이지 */}\n <div className=\"flex-1 flex justify-end\">\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"group inline-flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span className=\"hidden sm:inline mr-2\">{nextPage.title}</span>\n <Icon \n name=\"chevronRight\" \n className=\"w-4 h-4 transition-transform group-hover:translate-x-1\" \n />\n </a>\n )}\n </div>\n </div>\n )\n }\n)\nPageNavigation.displayName = \"PageNavigation\"\n\nexport { PageNavigation } ","'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport { merge } from '../lib/utils'\nimport { LoadingSpinner } from './LoadingSpinner'\n\n/**\n * PageTransition 컴포넌트의 props / PageTransition component props\n * @typedef {Object} PageTransitionProps\n * @property {React.ReactNode} children - 페이지 내용 / Page content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {number} [duration=300] - 전환 지속 시간 (ms) / Transition duration (ms)\n * @property {'fade' | 'slide' | 'scale' | 'flip'} [variant='fade'] - 전환 애니메이션 타입 / Transition animation type\n * @property {'default' | 'dots' | 'bars' | 'ring' | 'ripple'} [loadingVariant='ripple'] - 로딩 스피너 타입 / Loading spinner type\n * @property {string} [loadingText='페이지 로딩 중...'] - 로딩 텍스트 / Loading text\n * @property {boolean} [showLoading=true] - 로딩 표시 여부 / Show loading\n * @property {() => void} [onTransitionStart] - 전환 시작 콜백 / Transition start callback\n * @property {() => void} [onTransitionEnd] - 전환 종료 콜백 / Transition end callback\n */\nexport interface PageTransitionProps {\n children: React.ReactNode\n className?: string\n duration?: number\n variant?: 'fade' | 'slide' | 'scale' | 'flip'\n loadingVariant?: 'default' | 'dots' | 'bars' | 'ring' | 'ripple'\n loadingText?: string\n showLoading?: boolean\n onTransitionStart?: () => void\n onTransitionEnd?: () => void\n}\n\n/**\n * PageTransition 컴포넌트 / PageTransition component\n * \n * 페이지 전환 애니메이션을 제공하는 컴포넌트입니다.\n * 다양한 전환 효과와 로딩 스피너를 지원합니다.\n * \n * Component that provides page transition animations.\n * Supports various transition effects and loading spinners.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <PageTransition>\n * <div>페이지 내용</div>\n * </PageTransition>\n * \n * @example\n * // Slide 전환 / Slide transition\n * <PageTransition\n * variant=\"slide\"\n * duration={500}\n * loadingVariant=\"dots\"\n * >\n * <div>페이지 내용</div>\n * </PageTransition>\n * \n * @param {PageTransitionProps} props - PageTransition 컴포넌트의 props / PageTransition component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} PageTransition 컴포넌트 / PageTransition component\n */\nexport const PageTransition = React.forwardRef<HTMLDivElement, PageTransitionProps>(({\n children,\n className,\n duration = 300,\n variant = 'fade',\n loadingVariant = 'ripple',\n loadingText = '페이지 로딩 중...',\n showLoading = true,\n onTransitionStart,\n onTransitionEnd\n}, ref) => {\n const [isLoading, setIsLoading] = useState(true)\n const [isVisible, setIsVisible] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsLoading(false)\n setIsVisible(true)\n onTransitionEnd?.()\n }, duration)\n\n onTransitionStart?.()\n\n return () => clearTimeout(timer)\n }, [duration, onTransitionStart, onTransitionEnd])\n\n const transitionClasses = {\n fade: merge(\n 'transition-opacity duration-300 ease-in-out',\n isVisible ? 'opacity-100' : 'opacity-0'\n ),\n slide: merge(\n 'transition-transform duration-300 ease-in-out',\n isVisible ? 'translate-x-0' : 'translate-x-full'\n ),\n scale: merge(\n 'transition-all duration-300 ease-in-out',\n isVisible ? 'scale-100 opacity-100' : 'scale-95 opacity-0'\n ),\n flip: merge(\n 'transition-all duration-500 ease-in-out',\n isVisible ? 'rotate-y-0 opacity-100' : 'rotate-y-90 opacity-0'\n )\n }\n\n if (isLoading && showLoading) {\n return (\n <div className={merge('flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-indigo-50 to-purple-50 dark:from-slate-900 dark:to-slate-800', className)}>\n <LoadingSpinner\n size=\"lg\"\n variant={loadingVariant}\n text={loadingText}\n />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n 'w-full',\n transitionClasses[variant],\n className\n )}\n style={{ transitionDuration: `${duration}ms` }}\n >\n {children}\n </div>\n )\n})\n\nPageTransition.displayName = 'PageTransition'\n\n// Convenience components for different transition types\nexport const FadeTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"fade\" {...props} />\n))\n\nexport const SlideTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"slide\" {...props} />\n))\n\nexport const ScaleTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"scale\" {...props} />\n))\n\nexport const FlipTransition = React.forwardRef<HTMLDivElement, Omit<PageTransitionProps, 'variant'>>((props, ref) => (\n <PageTransition ref={ref} variant=\"flip\" {...props} />\n))\n\n// Add displayName for convenience components\nFadeTransition.displayName = 'FadeTransition'\nSlideTransition.displayName = 'SlideTransition'\nScaleTransition.displayName = 'ScaleTransition'\nFlipTransition.displayName = 'FlipTransition' "]}
|
package/dist/overlay.d.mts
CHANGED
|
@@ -114,6 +114,8 @@ interface PopoverProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
114
114
|
disabled?: boolean;
|
|
115
115
|
/** Popover 콘텐츠 영역 추가 클래스 / Additional class for popover content area */
|
|
116
116
|
contentClassName?: string;
|
|
117
|
+
/** 트리거를 full-width로 렌더링 (DatePicker 등) / Render trigger as full-width */
|
|
118
|
+
fullWidth?: boolean;
|
|
117
119
|
}
|
|
118
120
|
/**
|
|
119
121
|
* Popover 컴포넌트 / Popover component
|
package/dist/overlay.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var H=require('react'),reactDom=require('react-dom'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),classVarianceAuthority=require('class-variance-authority'),ssr=require('@phosphor-icons/react/dist/ssr');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var H__default=/*#__PURE__*/_interopDefault(H);function s(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function le(e){let o=Object.entries(e).filter(([,r])=>r).map(([r])=>r);return s(...o)}function mo(...e){return H__default.default.useCallback(o=>{e.forEach(r=>{r&&(typeof r=="function"?r(o):r.current=o);});},e)}var ne=H__default.default.forwardRef(({className:e,isOpen:o,onClose:r,children:t,size:n="md",closable:a,closeOnOverlayClick:R=true,title:u,description:k,showBackdrop:P=true,backdropClassName:E,centered:b=true},S)=>{let h=a!=null?a:true,x=H__default.default.useRef(null),p=mo(S,x);H__default.default.useEffect(()=>{let c=v=>{v.key==="Escape"&&r();};if(o){document.addEventListener("keydown",c);let v=window.innerWidth-document.documentElement.clientWidth;document.body.style.overflow="hidden",document.body.style.paddingRight=`${v}px`;}return ()=>{document.removeEventListener("keydown",c),document.body.style.overflow="unset",document.body.style.paddingRight="unset";}},[o,r]);let l=c=>{R&&c.target===c.currentTarget&&r();},i={sm:"max-w-xs",md:"max-w-sm",lg:"max-w-md",xl:"max-w-lg","2xl":"max-w-xl","3xl":"max-w-2xl"},m=H__default.default.useId(),C=H__default.default.useId(),N=u?`modal-title-${m}`:void 0,L=k?`modal-description-${C}`:void 0,[f,d]=H__default.default.useState(false);if(H__default.default.useEffect(()=>{d(true);},[]),!o)return null;let A=jsxRuntime.jsxs("div",{className:s("fixed inset-0 z-50 overflow-y-auto",e),onClick:l,role:"dialog","aria-modal":"true","aria-labelledby":N,"aria-describedby":L,children:[P&&jsxRuntime.jsx("div",{className:s("fixed inset-0 bg-black/60 backdrop-blur-md transition-opacity duration-300 pointer-events-none",E)}),jsxRuntime.jsx("div",{className:s("flex h-full justify-center p-4",b?"items-center":"items-start pt-16"),children:jsxRuntime.jsxs("div",{ref:p,className:s("relative bg-[var(--modal-bg)] rounded-lg shadow-2xl border border-[var(--modal-border)] transform transition-all duration-300 ease-out",i[n]),style:{animation:"modalSlideIn 0.3s cubic-bezier(0.16, 1, 0.3, 1)"},children:[u&&jsxRuntime.jsxs("div",{className:"relative z-10 px-6 pt-6 pb-4 border-b border-border/50",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-4 mb-2",children:[jsxRuntime.jsx("h2",{id:N,className:"text-xl font-semibold text-foreground flex-1 min-w-0",children:u}),h&&jsxRuntime.jsx("button",{onClick:r,className:"flex-shrink-0 p-2 text-muted-foreground hover:text-foreground transition-all duration-200 rounded-full hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 z-20","aria-label":"\uB2EB\uAE30",children:jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),k&&jsxRuntime.jsx("p",{id:L,className:"text-sm text-muted-foreground",children:k})]}),!u&&h&&jsxRuntime.jsx("button",{onClick:r,className:"absolute top-4 right-4 p-2 text-muted-foreground hover:text-foreground transition-all duration-200 rounded-full hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 z-20","aria-label":"\uB2EB\uAE30",children:jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),jsxRuntime.jsx("div",{className:`relative z-10 ${u?"px-6 mb-6":"p-6"}`,children:t})]})})]});return f&&typeof document!="undefined"?reactDom.createPortal(A,document.body):null});ne.displayName="Modal";var xe="[transition:transform_180ms_cubic-bezier(0.34,1.56,0.64,1),box-shadow_200ms_ease-out]",we=classVarianceAuthority.cva("inline-flex items-center justify-center whitespace-nowrap font-medium transition-all duration-200 disabled:pointer-events-none disabled:opacity-50 min-w-fit focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--color-background)]",{variants:{variant:{default:"bg-[var(--color-primary)] text-[var(--color-primary-foreground)] hover:opacity-90",destructive:"bg-[var(--color-destructive)] text-[var(--color-destructive-foreground)] hover:opacity-90 focus-visible:ring-[var(--color-destructive)]",outline:"border-2 border-[var(--color-border)] bg-transparent text-[var(--color-foreground)] hover:bg-[var(--color-accent)] hover:text-[var(--color-accent-foreground)] focus-visible:ring-offset-0",secondary:"bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)] hover:opacity-80",ghost:"bg-transparent text-[var(--color-foreground)] hover:bg-[var(--color-accent)] hover:text-[var(--color-accent-foreground)] focus-visible:ring-offset-0",link:"bg-transparent text-[var(--color-primary)] underline hover:opacity-80 focus-visible:ring-offset-0",gradient:"bg-gradient-to-r from-[var(--btn-gradient-from,theme(colors.teal.500))] to-[var(--btn-gradient-to,theme(colors.cyan.500))] text-white hover:shadow-lg",neon:"bg-slate-900 dark:bg-slate-950 text-teal-400 border border-teal-500/50 shadow-lg shadow-[var(--btn-neon-glow,theme(colors.teal.500/20%))] hover:shadow-[var(--btn-neon-glow,theme(colors.teal.500/40%))] hover:border-teal-400",glass:"bg-white/50 dark:bg-slate-900/50 backdrop-blur-md border border-slate-200/50 dark:border-slate-700/50 text-slate-900 dark:text-slate-100 hover:bg-white/70 dark:hover:bg-slate-900/70"},size:{sm:"h-8 px-4 py-2 text-sm",md:"h-10 px-6 py-2 text-base",lg:"h-12 px-8 py-3 text-lg",xl:"h-14 px-10 py-4 text-xl",icon:"h-10 w-10 p-0"},rounded:{sm:"rounded",md:"rounded-md",lg:"rounded-lg",full:"rounded-full"},shadow:{none:"",sm:"shadow-sm",md:"shadow-md",lg:"shadow-lg",xl:"shadow-xl"},hover:{springy:`hover:scale-[1.015] hover:shadow-md active:scale-[0.985] ${xe} transform-gpu`,scale:"hover:scale-[1.015] active:scale-[0.985] transition-transform duration-150 ease-out transform-gpu",glow:"hover:shadow-lg hover:shadow-primary/25 transition-shadow duration-200",slide:`hover:-translate-y-0.5 hover:shadow-md ${xe} transform-gpu`,none:""},fullWidth:{true:"w-full",false:""}},defaultVariants:{variant:"default",size:"md",rounded:"md",shadow:"md",hover:"springy",fullWidth:false}}),ce={blue:"from-teal-500 to-cyan-500",purple:"from-purple-500 to-pink-500",green:"from-green-500 to-emerald-500 dark:from-green-400 dark:to-emerald-400",orange:"from-orange-500 to-red-500 dark:from-orange-300 dark:to-red-300",pink:"from-pink-500 to-rose-500"};function vo(...e){return o=>{e.forEach(r=>{typeof r=="function"?r(o):r!=null&&(r.current=o);});}}function xo(e,o){return r=>{e==null||e(r),r.defaultPrevented||o==null||o(r);}}function wo(e,o){if(!(!e&&!o))return clsx.clsx(e,o)}function yo(e,o){if(!(!e&&!o))return {...e,...o}}function ko(e,o){let r={...e};for(let t in o){let n=e[t],a=o[t];/^on[A-Z]/.test(t)?n&&a?r[t]=xo(n,a):r[t]=a||n:t==="className"?r[t]=wo(n,a):t==="style"?r[t]=yo(n,a):r[t]=a!==void 0?a:n;}return r}function Co(e){return H__default.default.isValidElement(e)}var de=H__default.default.forwardRef(({children:e,...o},r)=>{let t=H__default.default.Children.toArray(e);if(t.length!==1)return process.env.NODE_ENV!=="production"&&console.warn("[Slot] asChild\uB294 \uC815\uD655\uD788 \uD558\uB098\uC758 \uC790\uC2DD \uC694\uC18C\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."),null;let n=t[0];if(!Co(n))return process.env.NODE_ENV!=="production"&&console.warn("[Slot] \uC790\uC2DD\uC740 \uC720\uD6A8\uD55C React \uC694\uC18C\uC5EC\uC57C \uD569\uB2C8\uB2E4."),null;let a=n.props,R=n.ref,u=ko(o,a),k=vo(r,R);return H__default.default.cloneElement(n,{...u,ref:k})});de.displayName="Slot";var Ro=typeof window!="undefined";function No(){let[e,o]=H__default.default.useState(false);return H__default.default.useEffect(()=>{var n;if(!Ro||!("matchMedia"in window))return;let r=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>o(!!r.matches);return t(),(n=r.addEventListener)==null||n.call(r,"change",t),()=>{var a;return (a=r.removeEventListener)==null?void 0:a.call(r,"change",t)}},[]),e}var ye=H__default.default.forwardRef(function({variant:o="default",size:r="md",loading:t=false,icon:n,iconPosition:a="left",gradient:R="blue",customGradient:u,rounded:k="md",shadow:P="md",hover:E="springy",fullWidth:b,iconOnly:S,className:h,children:x,disabled:p,asChild:l=false,...i},m){let C=No(),N=o==="gradient"?u?`bg-gradient-to-r ${u}`:`bg-gradient-to-r ${ce[R]||ce.blue}`:void 0,L=s(we({variant:o,size:r,rounded:k,shadow:P,hover:C?"none":E,fullWidth:b!=null?b:false}),N,h),d=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[t&&jsxRuntime.jsxs("span",{role:"status","aria-live":"polite",className:"-ml-1 mr-2 inline-flex",children:[jsxRuntime.jsxs("svg",{className:"animate-spin h-4 w-4",viewBox:"0 0 24 24",fill:"none",children:[jsxRuntime.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsxRuntime.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),jsxRuntime.jsx("span",{className:"sr-only",children:"\uB85C\uB529 \uC911"})]}),!t&&n&&a==="left"&&jsxRuntime.jsx("span",{className:"mr-2",children:n}),x,!t&&n&&a==="right"&&jsxRuntime.jsx("span",{className:"ml-2",children:n})]});if(S&&!("aria-label"in i)&&process.env.NODE_ENV!=="production"&&console.warn("[Button] iconOnly \uC0AC\uC6A9 \uC2DC aria-label\uC744 \uC81C\uACF5\uD558\uC138\uC694."),l){let I={className:L,ref:m,disabled:p||t,"aria-busy":t||void 0,"aria-disabled":p||t||void 0,...i};return jsxRuntime.jsx(de,{...I,children:x})}if("href"in i&&i.href){let{onClick:I,target:W,rel:w,href:g,"aria-label":Q,className:ee,...y}=i,O=!!p||t,J=$=>{if(O){$.preventDefault(),$.stopPropagation();return}I==null||I($);};return jsxRuntime.jsx("a",{ref:m,href:g,className:s(L,ee),onClick:J,"aria-busy":t||void 0,"aria-disabled":O||void 0,tabIndex:O?-1:y.tabIndex,target:W,rel:W==="_blank"?w!=null?w:"noopener noreferrer":w,...y,children:d})}let{className:A,...c}=i,v=!!p||t;return jsxRuntime.jsx("button",{ref:m,className:s(L,A),type:"button",disabled:v,"aria-busy":t||void 0,"aria-disabled":v||void 0,...c,children:d})});ye.displayName="Button";var he=ye;var ke=H__default.default.forwardRef(({isOpen:e,onClose:o,onConfirm:r,title:t,message:n,warning:a,confirmText:R="\uD655\uC778",cancelText:u="\uCDE8\uC18C",confirmButtonText:k,type:P="danger",loading:E=false,disabled:b=false,showInput:S=false,inputValue:h="",onInputChange:x,inputPlaceholder:p,inputLabel:l,requiredInputValue:i,showCancel:m=true,size:C="md"},N)=>{let f={danger:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-destructive",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"})}),bgColor:"bg-destructive/10",buttonColor:"bg-destructive hover:bg-destructive/90 focus:ring-destructive",textColor:"text-destructive"},warning:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-yellow-600 dark:text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"})}),bgColor:"bg-yellow-100 dark:bg-yellow-900/20",buttonColor:"bg-yellow-600 hover:bg-yellow-700 focus:ring-yellow-500",textColor:"text-yellow-600 dark:text-yellow-400"},info:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),bgColor:"bg-primary/10",buttonColor:"bg-primary hover:bg-primary/80 focus:ring-ring",textColor:"text-primary"},success:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),bgColor:"bg-green-100 dark:bg-green-900/20",buttonColor:"bg-green-600 hover:bg-green-700 focus:ring-green-500",textColor:"text-green-600 dark:text-green-400"},error:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-destructive",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),bgColor:"bg-destructive/10",buttonColor:"bg-destructive hover:bg-destructive/90 focus:ring-destructive",textColor:"text-destructive"}}[P],A=b||E||!(!S||!i||h===i);return jsxRuntime.jsx(ne,{isOpen:e,onClose:o,closable:false,size:C,children:jsxRuntime.jsxs("div",{className:"text-center",children:[jsxRuntime.jsx("div",{className:s("mx-auto flex items-center justify-center h-16 w-16 rounded-full mb-6",f.bgColor),children:f.icon}),jsxRuntime.jsxs("h3",{className:"text-xl font-semibold text-foreground mb-4",children:[" ",t]}),jsxRuntime.jsxs("div",{className:"mb-6",children:[" ",jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground",children:n}),a&&jsxRuntime.jsx("p",{className:s("text-sm mt-3 font-medium",f.textColor),children:a})]}),S&&jsxRuntime.jsxs("div",{className:"mb-6",children:[" ",jsxRuntime.jsxs("label",{htmlFor:"confirmInput",className:"block text-sm font-medium text-foreground mb-3 text-left",children:[" ",l]}),jsxRuntime.jsx("input",{type:"text",id:"confirmInput",value:h,onChange:c=>x==null?void 0:x(c.target.value),placeholder:p,className:"w-full px-4 py-3 border border-input rounded-lg focus:outline-none focus:ring-1 focus:ring-destructive focus:border-transparent bg-background text-foreground transition-colors"})]}),jsxRuntime.jsxs("div",{className:s("flex gap-3","justify-center"),children:[m&&jsxRuntime.jsx(he,{variant:"outline",onClick:o,disabled:E,className:"px-6 py-3",children:u}),jsxRuntime.jsx(he,{variant:"default",onClick:r,disabled:A,className:s("px-6 py-3",f.buttonColor),children:E?jsxRuntime.jsxs("div",{className:"flex items-center",children:[jsxRuntime.jsxs("svg",{className:"animate-spin -ml-1 mr-2 h-4 w-4 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[jsxRuntime.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsxRuntime.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"\uCC98\uB9AC \uC911..."]}):k||R})]})]})})});ke.displayName="ConfirmModal";var Re=H__default.default.forwardRef(({className:e,children:o,trigger:r,open:t,onOpenChange:n,position:a="bottom",align:R="center",offset:u=8,disabled:k=false,contentClassName:P,...E},b)=>{let[S,h]=H__default.default.useState(false),x=H__default.default.useRef(null),p=H__default.default.useRef(null),l=t!==void 0,i=l?t:S,m=H__default.default.useCallback(d=>{k||(l||h(d),n==null||n(d));},[k,l,n]),C=()=>{m(!i);};H__default.default.useEffect(()=>{let d=A=>{x.current&&p.current&&!x.current.contains(A.target)&&!p.current.contains(A.target)&&m(false);};if(i)return document.addEventListener("mousedown",d),()=>{document.removeEventListener("mousedown",d);}},[i,m]);let N=()=>{let d="absolute z-50";switch(a){case "top":return s(d,"bottom-full",`mb-${Math.max(1,Math.floor(u/4))}`);case "bottom":return s(d,"top-full",`mt-${Math.max(1,Math.floor(u/4))}`);case "left":return s(d,"right-full",`mr-${Math.max(1,Math.floor(u/4))}`);case "right":return s(d,"left-full",`ml-${Math.max(1,Math.floor(u/4))}`);default:return s(d,"top-full",`mt-${Math.max(1,Math.floor(u/4))}`)}},L=()=>{switch(R){case "start":return a==="top"||a==="bottom"?"left-0":"top-0";case "end":return a==="top"||a==="bottom"?"right-0":"bottom-0";default:return a==="top"||a==="bottom"?"left-1/2 -translate-x-1/2":"top-1/2 -translate-y-1/2"}},f=()=>{let d="absolute w-0 h-0 border-4 border-transparent";switch(a){case "top":return `${d} top-full left-1/2 -translate-x-1/2 border-t-gray-200 dark:border-t-gray-700`;case "bottom":return `${d} bottom-full left-1/2 -translate-x-1/2 border-b-gray-200 dark:border-b-gray-700`;case "left":return `${d} left-full top-1/2 -translate-y-1/2 border-l-gray-200 dark:border-l-gray-700`;case "right":return `${d} right-full top-1/2 -translate-y-1/2 border-r-gray-200 dark:border-r-gray-700`;default:return `${d} bottom-full left-1/2 -translate-x-1/2 border-b-gray-200 dark:border-b-gray-700`}};return jsxRuntime.jsxs("div",{ref:b,className:s("relative",e),...E,children:[jsxRuntime.jsx("div",{ref:x,onClick:C,className:"inline-block cursor-pointer",children:r}),i&&jsxRuntime.jsxs("div",{ref:p,className:s("bg-popover text-popover-foreground border border-border rounded-lg shadow-lg p-4 min-w-[200px]",N(),L(),P),children:[jsxRuntime.jsx("div",{className:f()}),jsxRuntime.jsx("div",{className:"relative z-10",children:o})]})]})});Re.displayName="Popover";var Ne=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("inline-block cursor-pointer",e),...r,children:o}));Ne.displayName="PopoverTrigger";var Ie=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("bg-popover text-popover-foreground border border-border rounded-lg shadow-lg p-4",e),...r,children:o}));Ie.displayName="PopoverContent";var Se=H__default.default.forwardRef(({className:e,trigger:o,children:r,open:t,onOpenChange:n,placement:a="bottom",align:R="start",offset:u=8,disabled:k=false,showArrow:P=true,...E},b)=>{let[S,h]=H__default.default.useState(false),[x,p]=H__default.default.useState({x:0,y:0}),l=H__default.default.useRef(null),i=H__default.default.useRef(null),m=t!==void 0,C=m?t:S,N=H__default.default.useCallback(c=>{k||(m||h(c),n==null||n(c));},[k,m,n]),L=()=>{N(!C);},f=H__default.default.useCallback(()=>{if(!l.current||!i.current)return;let c=l.current.getBoundingClientRect(),v=i.current.getBoundingClientRect(),I=window.innerWidth,W=window.innerHeight,w=0,g=0;switch(a){case "top":w=c.left,g=c.top-u;break;case "bottom":w=c.left,g=c.bottom+u;break;case "left":w=c.left-u,g=c.top;break;case "right":w=c.right+u,g=c.top;break}switch(R){case "center":a==="top"||a==="bottom"?w=c.left+c.width/2-v.width/2:g=c.top+c.height/2-v.height/2;break;case "end":a==="top"||a==="bottom"?w=c.right-v.width:g=c.bottom-v.height;break;}w<8&&(w=8),w+v.width>I-8&&(w=I-v.width-8),g<8&&(g=8),g+v.height>W-8&&(g=W-v.height-8),p({x:w,y:g});},[a,R,u]);H__default.default.useEffect(()=>{if(C)return f(),window.addEventListener("resize",f),window.addEventListener("scroll",f),()=>{window.removeEventListener("resize",f),window.removeEventListener("scroll",f);}},[C,f]),H__default.default.useEffect(()=>{let c=v=>{l.current&&i.current&&!l.current.contains(v.target)&&!i.current.contains(v.target)&&N(false);};if(C)return document.addEventListener("mousedown",c),()=>{document.removeEventListener("mousedown",c);}},[C,N]);let d=()=>{switch(a){case "top":return "bottom-full left-0 mb-2";case "bottom":return "top-full left-0 mt-2";case "left":return "right-full top-0 mr-2";case "right":return "left-full top-0 ml-2";default:return "top-full left-0 mt-2"}},A=()=>{switch(a){case "top":return "top-full left-4 -translate-x-1/2 border-t-gray-100 dark:border-t-gray-800";case "bottom":return "bottom-full left-4 -translate-x-1/2 border-b-gray-100 dark:border-b-gray-800";case "left":return "left-full top-4 -translate-y-1/2 border-l-gray-100 dark:border-l-gray-800";case "right":return "right-full top-4 -translate-y-1/2 border-r-gray-100 dark:border-r-gray-800";default:return "bottom-full left-4 -translate-x-1/2 border-b-gray-100 dark:border-b-gray-800"}};return jsxRuntime.jsxs("div",{ref:b,className:s("relative",e),...E,children:[jsxRuntime.jsx("div",{ref:l,onClick:L,className:"inline-block cursor-pointer",children:o}),C&&jsxRuntime.jsxs("div",{ref:i,className:s("absolute z-50 bg-[var(--dropdown-bg)] rounded-lg shadow-xl backdrop-blur-sm","min-w-[200px] py-2",d()),style:{transform:`translate(${x.x}px, ${x.y}px)`,boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)"},children:[P&&jsxRuntime.jsx("div",{className:s("absolute w-0 h-0 border-4 border-transparent",A())}),jsxRuntime.jsx("div",{className:"relative z-10",children:r})]})]})});Se.displayName="Dropdown";var Le=H__default.default.forwardRef(({className:e,icon:o,variant:r="default",children:t,disabled:n,...a},R)=>jsxRuntime.jsxs("button",{ref:R,className:s("w-full flex items-center gap-3 px-4 py-3 text-sm font-medium transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:bg-muted",(()=>{switch(r){case "destructive":return "text-destructive hover:bg-destructive/10";case "disabled":return "text-muted-foreground cursor-not-allowed";default:return "text-foreground hover:bg-muted"}})(),e),disabled:n||r==="disabled",...a,children:[o&&jsxRuntime.jsx("div",{className:"flex-shrink-0 w-4 h-4",children:o}),jsxRuntime.jsx("span",{className:"flex-1 text-left",children:t})]}));Le.displayName="DropdownItem";var Me=H__default.default.forwardRef(({className:e,...o},r)=>jsxRuntime.jsx("div",{ref:r,className:s("h-px bg-border my-2",e),...o}));Me.displayName="DropdownSeparator";var Te=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide",e),...r,children:o}));Te.displayName="DropdownLabel";var De=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("py-1",e),...r,children:o}));De.displayName="DropdownMenu";var Pe=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("space-y-1",e),...r,children:o}));Pe.displayName="DropdownGroup";var Ve={home:ssr.House,arrowLeft:ssr.ArrowLeft,arrowRight:ssr.ArrowRight,arrowUp:ssr.ArrowUp,arrowDown:ssr.ArrowDown,menu:ssr.List,close:ssr.X,search:ssr.MagnifyingGlass,settings:ssr.Gear,externalLink:ssr.ArrowSquareOut,chevronLeft:ssr.CaretLeft,chevronRight:ssr.CaretRight,chevronDown:ssr.CaretDown,chevronUp:ssr.CaretUp,edit:ssr.Pencil,delete:ssr.Trash,add:ssr.Plus,remove:ssr.Minus,download:ssr.Download,upload:ssr.Upload,refresh:ssr.ArrowClockwise,save:ssr.FloppyDisk,copy:ssr.Copy,loader:ssr.SpinnerGap,success:ssr.CheckCircle,error:ssr.XCircle,alertCircle:ssr.WarningCircle,warning:ssr.WarningCircle,info:ssr.Info,check:ssr.Check,circle:ssr.Circle,helpCircle:ssr.Question,user:ssr.User,users:ssr.Users,userPlus:ssr.UserPlus,logIn:ssr.SignIn,logOut:ssr.SignOut,eye:ssr.Eye,eyeOff:ssr.EyeSlash,chart:ssr.ChartBar,barChart:ssr.ChartBar,trendingUp:ssr.TrendUp,activity:ssr.Pulse,database:ssr.Database,zap:ssr.Lightning,fileText:ssr.FileText,file:ssr.File,folder:ssr.Folder,book:ssr.Book,bookOpen:ssr.BookOpen,mail:ssr.Envelope,message:ssr.ChatCircle,phone:ssr.Phone,image:ssr.Image,video:ssr.Video,camera:ssr.Camera,smile:ssr.Smiley,frown:ssr.SmileySad,meh:ssr.SmileyMeh,lock:ssr.Lock,unlock:ssr.LockOpen,shield:ssr.Shield,wallet:ssr.Wallet,key:ssr.Key,clock:ssr.Clock,calendar:ssr.Calendar,calendarPlus:ssr.CalendarPlus,bell:ssr.Bell,heart:ssr.Heart,star:ssr.Star,bookmark:ssr.Bookmark,share:ssr.Share,monitor:ssr.Monitor,sun:ssr.Sun,moon:ssr.Moon,lightbulb:ssr.Lightbulb,brain:ssr.Brain,flag:ssr.Flag,square:ssr.Square,sparkle:ssr.Sparkle,sparkles:ssr.Sparkle,globe:ssr.Globe,smartphone:ssr.DeviceMobile,deviceMobile:ssr.DeviceMobile,floppyDisk:ssr.FloppyDisk,ticket:ssr.Ticket,clipboard:ssr.Clipboard,wifi:ssr.WifiHigh,wifiOff:ssr.WifiSlash,cpu:ssr.Cpu,mask:ssr.MaskHappy,bold:ssr.TextB,italic:ssr.TextItalic,strikethrough:ssr.TextStrikethrough,heading:ssr.TextHOne,link:ssr.Link,code:ssr.Code,fileCode:ssr.FileCode,quote:ssr.Quotes,list:ssr.List,listOrdered:ssr.ListNumbers,minus:ssr.Minus},Ue={happy:"smile",sad:"frown",neutral:"meh",excited:"smile",angry:"frown",love:"heart",like:"heart",dislike:"frown"},We={loading:"loader",success:"success",error:"error",warning:"warning",info:"info",locked:"lock",unlocked:"unlock",visible:"eye",hidden:"eyeOff"};function $e(e){return !e||!/[-_]/.test(e)&&/^[a-z]/.test(e)?e:/^[A-Z]+$/.test(e)?e.toLowerCase():/^[A-Z]/.test(e)&&!/[-_]/.test(e)?e.charAt(0).toLowerCase()+e.slice(1):e.split(/[-_]/).map((o,r)=>r===0?o.toLowerCase():o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()).join("")}var T=null,D=null;var Fe={home:{lucide:"Home",phosphor:"House",iconsax:"Home2"},"layout-dashboard":{lucide:"LayoutDashboard",phosphor:"SquaresFour"},folder:{lucide:"Folder",phosphor:"Folder",iconsax:"Folder"},"alert-circle":{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Danger"},alertCircle:{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Danger"},columns:{lucide:"Columns",phosphor:"Columns"},users:{lucide:"Users",phosphor:"Users",iconsax:"People"},settings:{lucide:"Settings",phosphor:"Gear"},menu:{lucide:"Menu",phosphor:"List",iconsax:"Menu"},close:{lucide:"X",phosphor:"X",iconsax:"CloseCircle"},chevronLeft:{lucide:"ChevronLeft",phosphor:"CaretLeft",iconsax:"ArrowLeft2"},chevronRight:{lucide:"ChevronRight",phosphor:"CaretRight",iconsax:"ArrowRight2"},chevronDown:{lucide:"ChevronDown",phosphor:"CaretDown",iconsax:"ArrowDown2"},chevronUp:{lucide:"ChevronUp",phosphor:"CaretUp",iconsax:"ArrowUp2"},arrowLeft:{lucide:"ArrowLeft",phosphor:"ArrowLeft",iconsax:"ArrowLeft"},arrowRight:{lucide:"ArrowRight",phosphor:"ArrowRight",iconsax:"ArrowRight"},arrowUp:{lucide:"ArrowUp",phosphor:"ArrowUp",iconsax:"ArrowUp"},arrowDown:{lucide:"ArrowDown",phosphor:"ArrowDown",iconsax:"ArrowDown"},add:{lucide:"Plus",phosphor:"Plus",iconsax:"Add"},edit:{lucide:"Edit",phosphor:"Pencil"},pencil:{lucide:"Pencil",phosphor:"Pencil"},delete:{lucide:"Trash2",phosphor:"Trash",iconsax:"Trash"},trash:{lucide:"Trash2",phosphor:"Trash",iconsax:"Trash"},upload:{lucide:"Upload",phosphor:"Upload",iconsax:"Upload"},download:{lucide:"Download",phosphor:"Download",iconsax:"Download"},x:{lucide:"X",phosphor:"X"},check:{lucide:"Check",phosphor:"Check",iconsax:"Check"},search:{lucide:"Search",phosphor:"MagnifyingGlass",iconsax:"SearchNormal"},share:{lucide:"Share",phosphor:"Share"},copy:{lucide:"Copy",phosphor:"Copy"},save:{lucide:"Save",phosphor:"FloppyDisk"},loader:{lucide:"Loader2",phosphor:"Spinner"},loader2:{lucide:"Loader2",phosphor:"Spinner"},"check-circle":{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},checkCircle:{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},success:{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},error:{lucide:"XCircle",phosphor:"XCircle",iconsax:"CloseCircle"},warning:{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Warning2"},info:{lucide:"Info",phosphor:"Info",iconsax:"InfoCircle"},refresh:{lucide:"RefreshCw",phosphor:"ArrowClockwise",iconsax:"Refresh"},refreshCw:{lucide:"RefreshCw",phosphor:"ArrowClockwise",iconsax:"Refresh"},bell:{lucide:"Bell",phosphor:"Bell",iconsax:"Bell"},heart:{lucide:"Heart",phosphor:"Heart",iconsax:"Heart"},star:{lucide:"Star",phosphor:"Star",iconsax:"Star"},bookmark:{lucide:"Bookmark",phosphor:"Bookmark"},user:{lucide:"User",phosphor:"User",iconsax:"User"},userPlus:{lucide:"UserPlus",phosphor:"UserPlus",iconsax:"UserAdd"},logIn:{lucide:"LogIn",phosphor:"SignIn",iconsax:"Login"},logOut:{lucide:"LogOut",phosphor:"SignOut",iconsax:"Logout"},chrome:{lucide:"Chrome",phosphor:"ChromeLogo",iconsax:"Chrome"},github:{lucide:"Github",phosphor:"GithubLogo"},message:{lucide:"MessageCircle",phosphor:"ChatCircle"},messageSquare:{lucide:"MessageSquare",phosphor:"ChatSquare"},"message-square":{lucide:"MessageSquare",phosphor:"ChatSquare"},inbox:{lucide:"Inbox",phosphor:"Inbox"},calendar:{lucide:"Calendar",phosphor:"Calendar"},calendarPlus:{lucide:"CalendarPlus",phosphor:"CalendarPlus"},checkSquare:{lucide:"CheckSquare",phosphor:"CheckSquare",iconsax:"TickSquare"},clock:{lucide:"Clock",phosphor:"Clock"},book:{lucide:"Book",phosphor:"Book",iconsax:"Book"},bookOpen:{lucide:"BookOpen",phosphor:"BookOpen",iconsax:"Book"},monitor:{lucide:"Monitor",phosphor:"Monitor",iconsax:"Monitor"},sun:{lucide:"Sun",phosphor:"Sun",iconsax:"Sun"},moon:{lucide:"Moon",phosphor:"Moon",iconsax:"Moon"},sparkle:{lucide:"Sparkle",phosphor:"Sparkle"},sparkles:{lucide:"Sparkles",phosphor:"Sparkle"},lightbulb:{lucide:"Lightbulb",phosphor:"Lightbulb"},brain:{lucide:"Brain",phosphor:"Brain"},zap:{lucide:"Zap",phosphor:"Lightning"},globe:{lucide:"Globe",phosphor:"Globe",iconsax:"Global"},deviceMobile:{lucide:"Smartphone",phosphor:"DeviceMobile"},smartphone:{lucide:"Smartphone",phosphor:"DeviceMobile"},floppyDisk:{lucide:"Save",phosphor:"FloppyDisk"},chart:{lucide:"BarChart3",phosphor:"ChartBar"},barChart:{lucide:"BarChart",phosphor:"ChartBar"},trendingUp:{lucide:"TrendingUp",phosphor:"TrendUp"},trendingDown:{lucide:"TrendingDown",phosphor:"TrendDown"},activity:{lucide:"Activity",phosphor:"Pulse"},database:{lucide:"Database",phosphor:"Database"},dollarSign:{lucide:"DollarSign",phosphor:"CurrencyDollar"},dollar:{lucide:"DollarSign",phosphor:"CurrencyDollar"},currency:{lucide:"DollarSign",phosphor:"CurrencyDollar"},layers:{lucide:"Layers",phosphor:"Stack"},ban:{lucide:"Ban",phosphor:"Prohibit"},lock:{lucide:"Lock",phosphor:"Lock",iconsax:"Lock"},unlock:{lucide:"Unlock",phosphor:"LockOpen",iconsax:"Unlock"},shield:{lucide:"Shield",phosphor:"Shield",iconsax:"Shield"},key:{lucide:"Key",phosphor:"Key"},play:{lucide:"Play",phosphor:"Play",iconsax:"Play"},pause:{lucide:"Pause",phosphor:"Pause",iconsax:"Pause"},image:{lucide:"Image",phosphor:"Image",iconsax:"Image"},video:{lucide:"Video",phosphor:"Video",iconsax:"Video"},camera:{lucide:"Camera",phosphor:"Camera",iconsax:"Camera"},fileText:{lucide:"FileText",phosphor:"FileText"},file:{lucide:"File",phosphor:"File"},externalLink:{lucide:"ExternalLink",phosphor:"ArrowSquareOut"},link:{lucide:"Link",phosphor:"Link",iconsax:"Link"},moreHorizontal:{lucide:"MoreHorizontal",phosphor:"DotsThreeOutline"},moreVertical:{lucide:"MoreVertical",phosphor:"DotsThreeVertical"},remove:{lucide:"Minus",phosphor:"Minus",iconsax:"Minus"},eye:{lucide:"Eye",phosphor:"Eye",iconsax:"Eye"},eyeOff:{lucide:"EyeOff",phosphor:"EyeSlash",iconsax:"EyeSlash"},smile:{lucide:"Smile",phosphor:"Smiley",iconsax:"EmojiHappy"},frown:{lucide:"Frown",phosphor:"SmileySad",iconsax:"EmojiSad"},meh:{lucide:"Meh",phosphor:"SmileyMeh",iconsax:"EmojiNormal"},mail:{lucide:"Mail",phosphor:"Envelope"},phone:{lucide:"Phone",phosphor:"Phone"},flag:{lucide:"Flag",phosphor:"Flag",iconsax:"Flag"},rocket:{lucide:"Rocket",phosphor:"Rocket",iconsax:"Rocket"},ticket:{lucide:"Ticket",phosphor:"Ticket",iconsax:"Ticket"},clipboard:{lucide:"ClipboardList",phosphor:"Clipboard",iconsax:"Sticker"},wifi:{lucide:"Wifi",phosphor:"WifiHigh",iconsax:"Wifi"},wifiOff:{lucide:"WifiOff",phosphor:"WifiSlash"},cpu:{lucide:"Cpu",phosphor:"Cpu",iconsax:"Computing"},mask:{lucide:"Drama",phosphor:"MaskHappy",iconsax:"EmojiHappy"},bold:{lucide:"Bold",phosphor:"TextB"},italic:{lucide:"Italic",phosphor:"TextItalic"},strikethrough:{lucide:"Strikethrough",phosphor:"TextStrikethrough"},heading:{lucide:"Heading",phosphor:"TextHOne"},code:{lucide:"Code",phosphor:"Code",iconsax:"Code"},fileCode:{lucide:"FileCode",phosphor:"FileCode"},quote:{lucide:"Quote",phosphor:"Quotes",iconsax:"QuoteUp"},list:{lucide:"List",phosphor:"List"},listOrdered:{lucide:"ListOrdered",phosphor:"ListNumbers"},minus:{lucide:"Minus",phosphor:"Minus",iconsax:"Minus"}};async function _e(){if(typeof window=="undefined")return null;if(!T)try{T=await import('@phosphor-icons/react');}catch{return console.warn("Phosphor Icons not available. Install @phosphor-icons/react to use."),null}return T}async function je(){if(typeof window=="undefined")return null;if(!D)try{D=await import('lucide-react');}catch{return console.warn("Lucide Icons not available. Install lucide-react to use lucide provider."),null}return D}function ie(e,o="phosphor"){let r=Fe[e];if(!r)return dt(e,o);let t=r[o];switch(o){case "phosphor":return !t||!T?null:(T==null?void 0:T[t])||null;case "lucide":return !t||!D?null:(D==null?void 0:D[t])||null;case "iconsax":{return null;}default:return null}}function dt(e,o){switch(o){case "phosphor":{if(!T)return null;let r=e.charAt(0).toUpperCase()+e.slice(1),t=e.split(/(?=[A-Z])/).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("");return (T==null?void 0:T[r])||(T==null?void 0:T[t])||(T==null?void 0:T[e])||null}case "lucide":{if(!D)return null;let r=e.charAt(0).toUpperCase()+e.slice(1),t=e.replace(/([A-Z])/g,n=>n===e[0]?n.toLowerCase():n);return (D==null?void 0:D[r])||(D==null?void 0:D[e])||(D==null?void 0:D[t])||null}case "iconsax":{return null;}default:return null}}function Ge(e,o){let r=Fe[e];if(r){let t=r[o];if(t)return t}return e}var ge={"arrow-left":"arrowLeft","arrow-right":"arrowRight","arrow-up":"arrowUp","arrow-down":"arrowDown","chevron-left":"chevronLeft","chevron-right":"chevronRight","chevron-up":"chevronUp","chevron-down":"chevronDown","external-link":"externalLink","more-horizontal":"moreHorizontal","more-vertical":"moreVertical","user-plus":"userPlus","log-in":"logIn","log-out":"logOut","check-circle":"checkCircle","check-square":"checkSquare","alert-circle":"alertCircle","eye-off":"eyeOff","file-text":"fileText","book-open":"bookOpen","bar-chart":"barChart","trending-up":"trendingUp","trending-down":"trendingDown","message-square":"messageSquare","calendar-plus":"calendarPlus","refresh-cw":"refreshCw","dollar-sign":"dollarSign","layout-dashboard":"layoutDashboard","device-mobile":"deviceMobile","floppy-disk":"floppyDisk",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 qe(e){if(!e||typeof e!="string")return {normalized:e||"",wasAlias:false};let o=$e(e),r=ge[e]||ge[o];return r?{normalized:r,wasAlias:true,originalAlias:e}:{normalized:o,wasAlias:false}}var Ke={set:"lucide",weight:"regular",size:20,color:"currentColor",strokeWidth:1.25,iconsaxVariant:"line"};var ht=H.createContext(Ke);function Ye(){return H.useContext(ht)}var Xe=H__default.default.forwardRef(({name:e,size:o,className:r,emotion:t,status:n,provider:a,weight:R,animated:u=false,pulse:k=false,spin:P=false,bounce:E=false,variant:b="default","aria-label":S,"aria-hidden":h},x)=>{var O,J;let p=Ye(),l=a||p.set,i=o!=null?o:p.size,m=R||p.weight,C=p.color,N=(O=p.strokeWidth)!=null?O:1.25,L=(J=p.iconsaxVariant)!=null?J:"line",[f,d]=H__default.default.useState(false),[A,c]=H__default.default.useState(false);H__default.default.useEffect(()=>{d(true),l==="lucide"?je().then(()=>c(true)):l==="phosphor"?_e().then(()=>c(true)):c(true);},[l]);let v=H__default.default.useMemo(()=>{let $=t?Ue[t]:n?We[n]:e,{normalized:ve}=qe($),uo=Ge(ve,l);return {normalized:ve,providerName:uo}},[e,t,n,l]),I=v.normalized,W=H__default.default.useMemo(()=>{return null},[l,v.providerName,f,L]),w=le({"text-current":b==="default","text-primary":b==="primary","text-muted-foreground":b==="secondary"||b==="muted","text-green-600 dark:text-green-400":b==="success","text-yellow-600 dark:text-yellow-400":b==="warning","text-destructive":b==="error"});if(!f)return jsxRuntime.jsx("span",{style:{width:i,height:i},className:s(w,r),"aria-hidden":h!==void 0?h:true,"aria-label":S});let g=null;if(l==="phosphor"?(g=Ve[I]||null,!g&&A&&(g=ie(I,l))):l==="iconsax"?(g=W,g||(g=ie(I,l))):g=ie(I,l),!g)return l==="iconsax"&&true?process.env.NODE_ENV==="development"&&console.warn(`Icon "${I}" \u2014 iconsax resolver not registered. Use HuaProvider with icons.set='iconsax', or add: import '@hua-labs/ui/iconsax'`):console.warn(`Icon "${I}" not found for provider "${l}"`),jsxRuntime.jsx("span",{ref:x,className:s("inline-flex items-center justify-center rounded-full border-2 border-dashed border-border",w,r),style:{width:i,height:i},"aria-label":S||`\uC544\uC774\uCF58\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: ${I}`,title:`Icon not found: ${I}`,children:jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground","aria-hidden":"true",children:"?"})});let Q={size:typeof i=="number"?i:void 0,width:i,height:i,color:C};l==="phosphor"?Q.weight=m:Q.strokeWidth=N;let ee=le({"animate-pulse":k,"animate-spin":P,"animate-bounce":E,"transition-all duration-200 ease-in-out":u}),y={};return S?(y["aria-label"]=S,y["aria-hidden"]=false):h!==void 0?y["aria-hidden"]=h:y["aria-hidden"]=true,jsxRuntime.jsx("span",{ref:x,className:s("inline-flex items-center justify-center",ee,w,r),style:{width:i,height:i},...y,children:g&&H__default.default.createElement(g,{...Q,className:w,"aria-hidden":true})})});Xe.displayName="Icon";var ft=H__default.default.memo(Xe,(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"]),V=ft;V.displayName="Icon";var Ze=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"smile",...e}));Ze.displayName="EmotionIcon";var Qe=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"info",...e}));Qe.displayName="StatusIcon";var Je=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"loader",status:"loading",spin:true,"aria-label":"\uB85C\uB529 \uC911",...e}));Je.displayName="LoadingIcon";var eo=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"check",status:"success",variant:"success","aria-label":"\uC131\uACF5",...e}));eo.displayName="SuccessIcon";var oo=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"alertCircle",status:"error",variant:"error","aria-label":"\uC624\uB958",...e}));oo.displayName="ErrorIcon";var ro=H__default.default.forwardRef(({isOpen:e,onClose:o,children:r,className:t,side:n="right",size:a="md",showBackdrop:R=true,backdropClassName:u,closeOnBackdropClick:k=true,closeOnEscape:P=true,closable:E=true,...b},S)=>{let h=e!=null?e:false,x=()=>{o==null||o();},[p,l]=H__default.default.useState(false),[i,m]=H__default.default.useState(false);if(H__default.default.useEffect(()=>{if(h){l(true),m(true);let f=setTimeout(()=>m(false),50);return ()=>clearTimeout(f)}else {m(true);let f=setTimeout(()=>{l(false),m(false);},300);return ()=>clearTimeout(f)}},[h]),H__default.default.useEffect(()=>{if(!P)return;let f=d=>{d.key==="Escape"&&h&&x();};return h&&(document.addEventListener("keydown",f),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",f),document.body.style.overflow="";}},[h,P]),!p)return null;let C={sm:n==="left"||n==="right"?"w-80":"h-64",md:n==="left"||n==="right"?"w-96":"h-96",lg:n==="left"||n==="right"?"w-[28rem]":"h-[32rem]",xl:n==="left"||n==="right"?"w-[32rem]":"h-[40rem]",full:n==="left"||n==="right"?"w-full":"h-full"},N={left:"left-0 top-0 h-full",right:"right-0 top-0 h-full",top:"top-0 left-0 w-full",bottom:"bottom-0 left-0 w-full"},L={left:h?"translate-x-0":"-translate-x-full",right:h?"translate-x-0":"translate-x-full",top:h?"translate-y-0":"-translate-y-full",bottom:h?"translate-y-0":"translate-y-full"};return jsxRuntime.jsxs("div",{className:"fixed inset-0 z-50",children:[R&&jsxRuntime.jsx("div",{className:s("absolute inset-0 bg-black/60 backdrop-blur-md transition-opacity duration-300",i?h?"opacity-100":"opacity-0":"",u),onClick:k?x:void 0}),jsxRuntime.jsx("div",{ref:S,className:s("absolute bg-background/95 backdrop-blur-xl border border-border/50 shadow-2xl transition-transform duration-300 ease-out",C[a],N[n],L[n],t),...b,children:r})]})});ro.displayName="Drawer";var to=H__default.default.forwardRef(({children:e,className:o,showCloseButton:r=true,onClose:t,...n},a)=>jsxRuntime.jsxs("div",{ref:a,className:s("flex items-center justify-between p-6 border-b border-border/50",o),...n,children:[jsxRuntime.jsx("div",{className:"flex-1",children:e}),r&&jsxRuntime.jsx("button",{onClick:t,className:"p-2 rounded-lg hover:bg-muted transition-colors",children:jsxRuntime.jsx(V,{name:"close",size:20})})]}));to.displayName="DrawerHeader";var no=H__default.default.forwardRef(({children:e,className:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("flex-1 p-6 overflow-y-auto",o),...r,children:e}));no.displayName="DrawerContent";var ao=H__default.default.forwardRef(({children:e,className:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("flex items-center justify-end gap-3 p-6 border-t border-border/50",o),...r,children:e}));ao.displayName="DrawerFooter";var io=H__default.default.forwardRef(({isOpen:e,onClose:o,children:r,className:t,height:n="md",showBackdrop:a=true,backdropClassName:R,closeOnBackdropClick:u=true,closeOnEscape:k=true,showDragHandle:P=true,closable:E=true,snapPoints:b=[25,50,75,100],defaultSnap:S=50,...h},x)=>{let p=e!=null?e:false,l=()=>{o==null||o();},[i,m]=H__default.default.useState(false),[C,N]=H__default.default.useState(false),[L,f]=H__default.default.useState(S),[d,A]=H__default.default.useState(false),[c,v]=H__default.default.useState(0),[I,W]=H__default.default.useState(0),w={sm:"h-64",md:"h-96",lg:"h-[32rem]",xl:"h-[40rem]",full:"h-full"};H__default.default.useEffect(()=>{if(p){m(true),N(true);let y=setTimeout(()=>N(false),50);return ()=>clearTimeout(y)}else {N(true);let y=setTimeout(()=>{m(false),N(false);},300);return ()=>clearTimeout(y)}},[p]),H__default.default.useEffect(()=>{if(!k)return;let y=O=>{O.key==="Escape"&&p&&l();};return p&&(document.addEventListener("keydown",y),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",y),document.body.style.overflow="";}},[p,k]);let g=y=>{A(true),v(y.touches[0].clientY),W(y.touches[0].clientY);},Q=y=>{d&&W(y.touches[0].clientY);},ee=()=>{if(!d)return;A(false);let y=I-c,O=100;if(y>O)l();else if(y<-O){let J=b.indexOf(L),$=Math.min(J+1,b.length-1);f(b[$]);}};return i?jsxRuntime.jsxs("div",{className:"fixed inset-0 z-50",children:[a&&jsxRuntime.jsx("div",{className:s("absolute inset-0 bg-black/60 backdrop-blur-md transition-opacity duration-300",C?p?"opacity-100":"opacity-0":"",R),onClick:u?l:void 0}),jsxRuntime.jsxs("div",{ref:x,className:s("absolute bottom-0 left-0 right-0 bg-background/95 backdrop-blur-xl border-t border-border/50 shadow-2xl rounded-t-lg transition-transform duration-300 ease-out pb-safe",n!=="full"?w[n]:"",C?p?"translate-y-0":"translate-y-full":"",t),style:{height:n==="full"?`${L}%`:void 0,maxHeight:n!=="full"?void 0:"100%",transform:d?`translateY(${I-c}px)`:void 0},onTouchStart:g,onTouchMove:Q,onTouchEnd:ee,...h,children:[P&&jsxRuntime.jsx("div",{className:"flex justify-center pt-3 pb-2",children:jsxRuntime.jsx("div",{className:"w-12 h-1.5 bg-muted-foreground/30 rounded-full"})}),r]})]}):null});io.displayName="BottomSheet";var lo=H__default.default.forwardRef(({children:e,className:o,showCloseButton:r=true,onClose:t,...n},a)=>jsxRuntime.jsxs("div",{ref:a,className:s("flex items-center justify-between px-6 py-4",o),...n,children:[jsxRuntime.jsx("div",{className:"flex-1",children:e}),r&&jsxRuntime.jsx("button",{onClick:t,className:"p-2 rounded-lg hover:bg-muted transition-colors",children:jsxRuntime.jsx(V,{name:"close",size:20})})]}));lo.displayName="BottomSheetHeader";var co=H__default.default.forwardRef(({children:e,className:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("flex-1 px-6 pb-6 overflow-y-auto",o),...r,children:e}));co.displayName="BottomSheetContent";
|
|
1
|
+
'use strict';var H=require('react'),reactDom=require('react-dom'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),classVarianceAuthority=require('class-variance-authority'),ssr=require('@phosphor-icons/react/dist/ssr');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var H__default=/*#__PURE__*/_interopDefault(H);function s(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function le(e){let o=Object.entries(e).filter(([,r])=>r).map(([r])=>r);return s(...o)}function mo(...e){return H__default.default.useCallback(o=>{e.forEach(r=>{r&&(typeof r=="function"?r(o):r.current=o);});},e)}var ne=H__default.default.forwardRef(({className:e,isOpen:o,onClose:r,children:t,size:n="md",closable:a,closeOnOverlayClick:R=true,title:d,description:k,showBackdrop:E=true,backdropClassName:A,centered:b=true},S)=>{let h=a!=null?a:true,C=H__default.default.useRef(null),u=mo(S,C);H__default.default.useEffect(()=>{let l=v=>{v.key==="Escape"&&r();};if(o){document.addEventListener("keydown",l);let v=window.innerWidth-document.documentElement.clientWidth;document.body.style.overflow="hidden",document.body.style.paddingRight=`${v}px`;}return ()=>{document.removeEventListener("keydown",l),document.body.style.overflow="unset",document.body.style.paddingRight="unset";}},[o,r]);let c=l=>{R&&l.target===l.currentTarget&&r();},i={sm:"max-w-xs",md:"max-w-sm",lg:"max-w-md",xl:"max-w-lg","2xl":"max-w-xl","3xl":"max-w-2xl"},m=H__default.default.useId(),x=H__default.default.useId(),N=d?`modal-title-${m}`:void 0,L=k?`modal-description-${x}`:void 0,[f,T]=H__default.default.useState(false);if(H__default.default.useEffect(()=>{T(true);},[]),!o)return null;let p=jsxRuntime.jsxs("div",{className:s("fixed inset-0 z-50 overflow-y-auto",e),onClick:c,role:"dialog","aria-modal":"true","aria-labelledby":N,"aria-describedby":L,children:[E&&jsxRuntime.jsx("div",{className:s("fixed inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300 pointer-events-none",A)}),jsxRuntime.jsx("div",{className:s("flex h-full justify-center p-4",b?"items-center":"items-start pt-16"),children:jsxRuntime.jsxs("div",{ref:u,className:s("relative bg-[var(--modal-bg)] rounded-lg shadow-2xl border border-[var(--modal-border)] transform transition-all duration-300 ease-out",i[n]),style:{animation:"modalSlideIn 0.3s cubic-bezier(0.16, 1, 0.3, 1)"},children:[d&&jsxRuntime.jsxs("div",{className:"relative z-10 px-6 pt-6 pb-4 border-b border-border/50",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-4 mb-2",children:[jsxRuntime.jsx("h2",{id:N,className:"text-xl font-semibold text-foreground flex-1 min-w-0",children:d}),h&&jsxRuntime.jsx("button",{onClick:r,className:"flex-shrink-0 p-2 text-muted-foreground hover:text-foreground transition-all duration-200 rounded-full hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 z-20","aria-label":"\uB2EB\uAE30",children:jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),k&&jsxRuntime.jsx("p",{id:L,className:"text-sm text-muted-foreground",children:k})]}),!d&&h&&jsxRuntime.jsx("button",{onClick:r,className:"absolute top-4 right-4 p-2 text-muted-foreground hover:text-foreground transition-all duration-200 rounded-full hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 z-20","aria-label":"\uB2EB\uAE30",children:jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),jsxRuntime.jsx("div",{className:`relative z-10 ${d?"px-6 mb-6":"p-6"}`,children:t})]})})]});return f&&typeof document!="undefined"?reactDom.createPortal(p,document.body):null});ne.displayName="Modal";var xe="[transition:transform_180ms_cubic-bezier(0.34,1.56,0.64,1),box-shadow_200ms_ease-out]",we=classVarianceAuthority.cva("inline-flex items-center justify-center whitespace-nowrap font-medium transition-all duration-200 disabled:pointer-events-none disabled:opacity-50 min-w-fit focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--color-background)]",{variants:{variant:{default:"bg-[var(--color-primary)] text-[var(--color-primary-foreground)] hover:opacity-90",destructive:"bg-[var(--color-destructive)] text-[var(--color-destructive-foreground)] hover:opacity-90 focus-visible:ring-[var(--color-destructive)]",outline:"border-2 border-[var(--color-border)] bg-transparent text-[var(--color-foreground)] hover:bg-[var(--color-accent)] hover:text-[var(--color-accent-foreground)] focus-visible:ring-offset-0",secondary:"bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)] hover:opacity-80",ghost:"bg-transparent text-[var(--color-foreground)] hover:bg-[var(--color-accent)] hover:text-[var(--color-accent-foreground)] focus-visible:ring-offset-0",link:"bg-transparent text-[var(--color-primary)] underline hover:opacity-80 focus-visible:ring-offset-0",gradient:"bg-gradient-to-r from-[var(--btn-gradient-from,theme(colors.teal.500))] to-[var(--btn-gradient-to,theme(colors.cyan.500))] text-white hover:shadow-lg",neon:"bg-slate-900 dark:bg-slate-950 text-teal-400 border border-teal-500/50 shadow-lg shadow-[var(--btn-neon-glow,theme(colors.teal.500/20%))] hover:shadow-[var(--btn-neon-glow,theme(colors.teal.500/40%))] hover:border-teal-400",glass:"bg-white/50 dark:bg-slate-900/50 backdrop-blur-md border border-slate-200/50 dark:border-slate-700/50 text-slate-900 dark:text-slate-100 hover:bg-white/70 dark:hover:bg-slate-900/70"},size:{sm:"h-8 px-4 py-2 text-sm",md:"h-10 px-6 py-2 text-base",lg:"h-12 px-8 py-3 text-lg",xl:"h-14 px-10 py-4 text-xl",icon:"h-10 w-10 p-0"},rounded:{sm:"rounded",md:"rounded-md",lg:"rounded-lg",full:"rounded-full"},shadow:{none:"",sm:"shadow-sm",md:"shadow-md",lg:"shadow-lg",xl:"shadow-xl"},hover:{springy:`hover:scale-[1.015] hover:shadow-md active:scale-[0.985] ${xe} transform-gpu`,scale:"hover:scale-[1.015] active:scale-[0.985] transition-transform duration-150 ease-out transform-gpu",glow:"hover:shadow-lg hover:shadow-primary/25 transition-shadow duration-200",slide:`hover:-translate-y-0.5 hover:shadow-md ${xe} transform-gpu`,none:""},fullWidth:{true:"w-full",false:""}},defaultVariants:{variant:"default",size:"md",rounded:"md",shadow:"md",hover:"springy",fullWidth:false}}),ce={blue:"from-teal-500 to-cyan-500",purple:"from-purple-500 to-pink-500",green:"from-green-500 to-emerald-500 dark:from-green-400 dark:to-emerald-400",orange:"from-orange-500 to-red-500 dark:from-orange-300 dark:to-red-300",pink:"from-pink-500 to-rose-500"};function vo(...e){return o=>{e.forEach(r=>{typeof r=="function"?r(o):r!=null&&(r.current=o);});}}function xo(e,o){return r=>{e==null||e(r),r.defaultPrevented||o==null||o(r);}}function wo(e,o){if(!(!e&&!o))return clsx.clsx(e,o)}function yo(e,o){if(!(!e&&!o))return {...e,...o}}function ko(e,o){let r={...e};for(let t in o){let n=e[t],a=o[t];/^on[A-Z]/.test(t)?n&&a?r[t]=xo(n,a):r[t]=a||n:t==="className"?r[t]=wo(n,a):t==="style"?r[t]=yo(n,a):r[t]=a!==void 0?a:n;}return r}function Co(e){return H__default.default.isValidElement(e)}var de=H__default.default.forwardRef(({children:e,...o},r)=>{let t=H__default.default.Children.toArray(e);if(t.length!==1)return process.env.NODE_ENV!=="production"&&console.warn("[Slot] asChild\uB294 \uC815\uD655\uD788 \uD558\uB098\uC758 \uC790\uC2DD \uC694\uC18C\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."),null;let n=t[0];if(!Co(n))return process.env.NODE_ENV!=="production"&&console.warn("[Slot] \uC790\uC2DD\uC740 \uC720\uD6A8\uD55C React \uC694\uC18C\uC5EC\uC57C \uD569\uB2C8\uB2E4."),null;let a=n.props,R=n.ref,d=ko(o,a),k=vo(r,R);return H__default.default.cloneElement(n,{...d,ref:k})});de.displayName="Slot";var Ro=typeof window!="undefined";function No(){let[e,o]=H__default.default.useState(false);return H__default.default.useEffect(()=>{var n;if(!Ro||!("matchMedia"in window))return;let r=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>o(!!r.matches);return t(),(n=r.addEventListener)==null||n.call(r,"change",t),()=>{var a;return (a=r.removeEventListener)==null?void 0:a.call(r,"change",t)}},[]),e}var ye=H__default.default.forwardRef(function({variant:o="default",size:r="md",loading:t=false,icon:n,iconPosition:a="left",gradient:R="blue",customGradient:d,rounded:k="md",shadow:E="md",hover:A="springy",fullWidth:b,iconOnly:S,className:h,children:C,disabled:u,asChild:c=false,...i},m){let x=No(),N=o==="gradient"?d?`bg-gradient-to-r ${d}`:`bg-gradient-to-r ${ce[R]||ce.blue}`:void 0,L=s(we({variant:o,size:r,rounded:k,shadow:E,hover:x?"none":A,fullWidth:b!=null?b:false}),N,h),T=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[t&&jsxRuntime.jsxs("span",{role:"status","aria-live":"polite",className:"-ml-1 mr-2 inline-flex",children:[jsxRuntime.jsxs("svg",{className:"animate-spin h-4 w-4",viewBox:"0 0 24 24",fill:"none",children:[jsxRuntime.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsxRuntime.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),jsxRuntime.jsx("span",{className:"sr-only",children:"\uB85C\uB529 \uC911"})]}),!t&&n&&a==="left"&&jsxRuntime.jsx("span",{className:"mr-2",children:n}),C,!t&&n&&a==="right"&&jsxRuntime.jsx("span",{className:"ml-2",children:n})]});if(S&&!("aria-label"in i)&&process.env.NODE_ENV!=="production"&&console.warn("[Button] iconOnly \uC0AC\uC6A9 \uC2DC aria-label\uC744 \uC81C\uACF5\uD558\uC138\uC694."),c){let I={className:L,ref:m,disabled:u||t,"aria-busy":t||void 0,"aria-disabled":u||t||void 0,...i};return jsxRuntime.jsx(de,{...I,children:C})}if("href"in i&&i.href){let{onClick:I,target:W,rel:w,href:g,"aria-label":Q,className:ee,...y}=i,O=!!u||t,J=$=>{if(O){$.preventDefault(),$.stopPropagation();return}I==null||I($);};return jsxRuntime.jsx("a",{ref:m,href:g,className:s(L,ee),onClick:J,"aria-busy":t||void 0,"aria-disabled":O||void 0,tabIndex:O?-1:y.tabIndex,target:W,rel:W==="_blank"?w!=null?w:"noopener noreferrer":w,...y,children:T})}let{className:p,...l}=i,v=!!u||t;return jsxRuntime.jsx("button",{ref:m,className:s(L,p),type:"button",disabled:v,"aria-busy":t||void 0,"aria-disabled":v||void 0,...l,children:T})});ye.displayName="Button";var he=ye;var ke=H__default.default.forwardRef(({isOpen:e,onClose:o,onConfirm:r,title:t,message:n,warning:a,confirmText:R="\uD655\uC778",cancelText:d="\uCDE8\uC18C",confirmButtonText:k,type:E="danger",loading:A=false,disabled:b=false,showInput:S=false,inputValue:h="",onInputChange:C,inputPlaceholder:u,inputLabel:c,requiredInputValue:i,showCancel:m=true,size:x="md"},N)=>{let f={danger:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-destructive",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"})}),bgColor:"bg-destructive/10",buttonColor:"bg-destructive hover:bg-destructive/90 focus:ring-destructive",textColor:"text-destructive"},warning:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-yellow-600 dark:text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"})}),bgColor:"bg-yellow-100 dark:bg-yellow-900/20",buttonColor:"bg-yellow-600 hover:bg-yellow-700 focus:ring-yellow-500",textColor:"text-yellow-600 dark:text-yellow-400"},info:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),bgColor:"bg-primary/10",buttonColor:"bg-primary hover:bg-primary/80 focus:ring-ring",textColor:"text-primary"},success:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),bgColor:"bg-green-100 dark:bg-green-900/20",buttonColor:"bg-green-600 hover:bg-green-700 focus:ring-green-500",textColor:"text-green-600 dark:text-green-400"},error:{icon:jsxRuntime.jsx("svg",{className:"h-6 w-6 text-destructive",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),bgColor:"bg-destructive/10",buttonColor:"bg-destructive hover:bg-destructive/90 focus:ring-destructive",textColor:"text-destructive"}}[E],p=b||A||!(!S||!i||h===i);return jsxRuntime.jsx(ne,{isOpen:e,onClose:o,closable:false,size:x,children:jsxRuntime.jsxs("div",{className:"text-center",children:[jsxRuntime.jsx("div",{className:s("mx-auto flex items-center justify-center h-16 w-16 rounded-full mb-6",f.bgColor),children:f.icon}),jsxRuntime.jsxs("h3",{className:"text-xl font-semibold text-foreground mb-4",children:[" ",t]}),jsxRuntime.jsxs("div",{className:"mb-6",children:[" ",jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground",children:n}),a&&jsxRuntime.jsx("p",{className:s("text-sm mt-3 font-medium",f.textColor),children:a})]}),S&&jsxRuntime.jsxs("div",{className:"mb-6",children:[" ",jsxRuntime.jsxs("label",{htmlFor:"confirmInput",className:"block text-sm font-medium text-foreground mb-3 text-left",children:[" ",c]}),jsxRuntime.jsx("input",{type:"text",id:"confirmInput",value:h,onChange:l=>C==null?void 0:C(l.target.value),placeholder:u,className:"w-full px-4 py-3 border border-input rounded-lg focus:outline-none focus:ring-1 focus:ring-destructive focus:border-transparent bg-background text-foreground transition-colors"})]}),jsxRuntime.jsxs("div",{className:s("flex gap-3","justify-center"),children:[m&&jsxRuntime.jsx(he,{variant:"outline",onClick:o,disabled:A,className:"px-6 py-3",children:d}),jsxRuntime.jsx(he,{variant:"default",onClick:r,disabled:p,className:s("px-6 py-3",f.buttonColor),children:A?jsxRuntime.jsxs("div",{className:"flex items-center",children:[jsxRuntime.jsxs("svg",{className:"animate-spin -ml-1 mr-2 h-4 w-4 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[jsxRuntime.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsxRuntime.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"\uCC98\uB9AC \uC911..."]}):k||R})]})]})})});ke.displayName="ConfirmModal";var Re=H__default.default.forwardRef(({className:e,children:o,trigger:r,open:t,onOpenChange:n,position:a="bottom",align:R="center",offset:d=8,disabled:k=false,contentClassName:E,fullWidth:A=false,...b},S)=>{let[h,C]=H__default.default.useState(false),u=H__default.default.useRef(null),c=H__default.default.useRef(null),i=t!==void 0,m=i?t:h,x=H__default.default.useCallback(p=>{k||(i||C(p),n==null||n(p));},[k,i,n]),N=()=>{x(!m);};H__default.default.useEffect(()=>{let p=l=>{u.current&&c.current&&!u.current.contains(l.target)&&!c.current.contains(l.target)&&x(false);};if(m)return document.addEventListener("mousedown",p),()=>{document.removeEventListener("mousedown",p);}},[m,x]);let L=()=>{let p="absolute z-50";switch(a){case "top":return s(p,"bottom-full",`mb-${Math.max(1,Math.floor(d/4))}`);case "bottom":return s(p,"top-full",`mt-${Math.max(1,Math.floor(d/4))}`);case "left":return s(p,"right-full",`mr-${Math.max(1,Math.floor(d/4))}`);case "right":return s(p,"left-full",`ml-${Math.max(1,Math.floor(d/4))}`);default:return s(p,"top-full",`mt-${Math.max(1,Math.floor(d/4))}`)}},f=()=>{switch(R){case "start":return a==="top"||a==="bottom"?"left-0":"top-0";case "end":return a==="top"||a==="bottom"?"right-0":"bottom-0";default:return a==="top"||a==="bottom"?"left-1/2 -translate-x-1/2":"top-1/2 -translate-y-1/2"}},T=()=>{let p="absolute w-0 h-0 border-4 border-transparent";switch(a){case "top":return `${p} top-full left-1/2 -translate-x-1/2 border-t-gray-200 dark:border-t-gray-700`;case "bottom":return `${p} bottom-full left-1/2 -translate-x-1/2 border-b-gray-200 dark:border-b-gray-700`;case "left":return `${p} left-full top-1/2 -translate-y-1/2 border-l-gray-200 dark:border-l-gray-700`;case "right":return `${p} right-full top-1/2 -translate-y-1/2 border-r-gray-200 dark:border-r-gray-700`;default:return `${p} bottom-full left-1/2 -translate-x-1/2 border-b-gray-200 dark:border-b-gray-700`}};return jsxRuntime.jsxs("div",{ref:S,className:s("relative",e),...b,children:[jsxRuntime.jsx("div",{ref:u,onClick:N,className:s(A?"block w-full":"inline-block","cursor-pointer"),children:r}),m&&jsxRuntime.jsxs("div",{ref:c,className:s("bg-popover text-popover-foreground border border-border rounded-lg shadow-lg p-4 min-w-[200px]",L(),f(),E),children:[jsxRuntime.jsx("div",{className:T()}),jsxRuntime.jsx("div",{className:"relative z-10",children:o})]})]})});Re.displayName="Popover";var Ne=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("inline-block cursor-pointer",e),...r,children:o}));Ne.displayName="PopoverTrigger";var Ie=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("bg-popover text-popover-foreground border border-border rounded-lg shadow-lg p-4",e),...r,children:o}));Ie.displayName="PopoverContent";var Se=H__default.default.forwardRef(({className:e,trigger:o,children:r,open:t,onOpenChange:n,placement:a="bottom",align:R="start",offset:d=8,disabled:k=false,showArrow:E=true,...A},b)=>{let[S,h]=H__default.default.useState(false),[C,u]=H__default.default.useState({x:0,y:0}),c=H__default.default.useRef(null),i=H__default.default.useRef(null),m=t!==void 0,x=m?t:S,N=H__default.default.useCallback(l=>{k||(m||h(l),n==null||n(l));},[k,m,n]),L=()=>{N(!x);},f=H__default.default.useCallback(()=>{if(!c.current||!i.current)return;let l=c.current.getBoundingClientRect(),v=i.current.getBoundingClientRect(),I=window.innerWidth,W=window.innerHeight,w=0,g=0;switch(a){case "top":w=l.left,g=l.top-d;break;case "bottom":w=l.left,g=l.bottom+d;break;case "left":w=l.left-d,g=l.top;break;case "right":w=l.right+d,g=l.top;break}switch(R){case "center":a==="top"||a==="bottom"?w=l.left+l.width/2-v.width/2:g=l.top+l.height/2-v.height/2;break;case "end":a==="top"||a==="bottom"?w=l.right-v.width:g=l.bottom-v.height;break;}w<8&&(w=8),w+v.width>I-8&&(w=I-v.width-8),g<8&&(g=8),g+v.height>W-8&&(g=W-v.height-8),u({x:w,y:g});},[a,R,d]);H__default.default.useEffect(()=>{if(x)return f(),window.addEventListener("resize",f),window.addEventListener("scroll",f),()=>{window.removeEventListener("resize",f),window.removeEventListener("scroll",f);}},[x,f]),H__default.default.useEffect(()=>{let l=v=>{c.current&&i.current&&!c.current.contains(v.target)&&!i.current.contains(v.target)&&N(false);};if(x)return document.addEventListener("mousedown",l),()=>{document.removeEventListener("mousedown",l);}},[x,N]);let T=()=>{switch(a){case "top":return "bottom-full left-0 mb-2";case "bottom":return "top-full left-0 mt-2";case "left":return "right-full top-0 mr-2";case "right":return "left-full top-0 ml-2";default:return "top-full left-0 mt-2"}},p=()=>{switch(a){case "top":return "top-full left-4 -translate-x-1/2 border-t-gray-100 dark:border-t-gray-800";case "bottom":return "bottom-full left-4 -translate-x-1/2 border-b-gray-100 dark:border-b-gray-800";case "left":return "left-full top-4 -translate-y-1/2 border-l-gray-100 dark:border-l-gray-800";case "right":return "right-full top-4 -translate-y-1/2 border-r-gray-100 dark:border-r-gray-800";default:return "bottom-full left-4 -translate-x-1/2 border-b-gray-100 dark:border-b-gray-800"}};return jsxRuntime.jsxs("div",{ref:b,className:s("relative",e),...A,children:[jsxRuntime.jsx("div",{ref:c,onClick:L,className:"inline-block cursor-pointer",children:o}),x&&jsxRuntime.jsxs("div",{ref:i,className:s("absolute z-50 bg-[var(--dropdown-bg)] rounded-lg shadow-xl backdrop-blur-sm","min-w-[200px] py-2",T()),style:{transform:`translate(${C.x}px, ${C.y}px)`,boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)"},children:[E&&jsxRuntime.jsx("div",{className:s("absolute w-0 h-0 border-4 border-transparent",p())}),jsxRuntime.jsx("div",{className:"relative z-10",children:r})]})]})});Se.displayName="Dropdown";var Le=H__default.default.forwardRef(({className:e,icon:o,variant:r="default",children:t,disabled:n,...a},R)=>jsxRuntime.jsxs("button",{ref:R,className:s("w-full flex items-center gap-3 px-4 py-3 text-sm font-medium transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:bg-muted",(()=>{switch(r){case "destructive":return "text-destructive hover:bg-destructive/10";case "disabled":return "text-muted-foreground cursor-not-allowed";default:return "text-foreground hover:bg-muted"}})(),e),disabled:n||r==="disabled",...a,children:[o&&jsxRuntime.jsx("div",{className:"flex-shrink-0 w-4 h-4",children:o}),jsxRuntime.jsx("span",{className:"flex-1 text-left",children:t})]}));Le.displayName="DropdownItem";var Me=H__default.default.forwardRef(({className:e,...o},r)=>jsxRuntime.jsx("div",{ref:r,className:s("h-px bg-border my-2",e),...o}));Me.displayName="DropdownSeparator";var Te=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide",e),...r,children:o}));Te.displayName="DropdownLabel";var De=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("py-1",e),...r,children:o}));De.displayName="DropdownMenu";var Pe=H__default.default.forwardRef(({className:e,children:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("space-y-1",e),...r,children:o}));Pe.displayName="DropdownGroup";var Ve={home:ssr.House,arrowLeft:ssr.ArrowLeft,arrowRight:ssr.ArrowRight,arrowUp:ssr.ArrowUp,arrowDown:ssr.ArrowDown,menu:ssr.List,close:ssr.X,search:ssr.MagnifyingGlass,settings:ssr.Gear,externalLink:ssr.ArrowSquareOut,chevronLeft:ssr.CaretLeft,chevronRight:ssr.CaretRight,chevronDown:ssr.CaretDown,chevronUp:ssr.CaretUp,edit:ssr.Pencil,delete:ssr.Trash,add:ssr.Plus,remove:ssr.Minus,download:ssr.Download,upload:ssr.Upload,refresh:ssr.ArrowClockwise,save:ssr.FloppyDisk,copy:ssr.Copy,loader:ssr.SpinnerGap,success:ssr.CheckCircle,error:ssr.XCircle,alertCircle:ssr.WarningCircle,warning:ssr.WarningCircle,info:ssr.Info,check:ssr.Check,circle:ssr.Circle,helpCircle:ssr.Question,user:ssr.User,users:ssr.Users,userPlus:ssr.UserPlus,logIn:ssr.SignIn,logOut:ssr.SignOut,eye:ssr.Eye,eyeOff:ssr.EyeSlash,chart:ssr.ChartBar,barChart:ssr.ChartBar,trendingUp:ssr.TrendUp,activity:ssr.Pulse,database:ssr.Database,zap:ssr.Lightning,fileText:ssr.FileText,file:ssr.File,folder:ssr.Folder,book:ssr.Book,bookOpen:ssr.BookOpen,mail:ssr.Envelope,message:ssr.ChatCircle,phone:ssr.Phone,image:ssr.Image,video:ssr.Video,camera:ssr.Camera,smile:ssr.Smiley,frown:ssr.SmileySad,meh:ssr.SmileyMeh,lock:ssr.Lock,unlock:ssr.LockOpen,shield:ssr.Shield,wallet:ssr.Wallet,key:ssr.Key,clock:ssr.Clock,calendar:ssr.Calendar,calendarPlus:ssr.CalendarPlus,bell:ssr.Bell,heart:ssr.Heart,star:ssr.Star,bookmark:ssr.Bookmark,share:ssr.Share,monitor:ssr.Monitor,sun:ssr.Sun,moon:ssr.Moon,lightbulb:ssr.Lightbulb,brain:ssr.Brain,flag:ssr.Flag,square:ssr.Square,sparkle:ssr.Sparkle,sparkles:ssr.Sparkle,globe:ssr.Globe,smartphone:ssr.DeviceMobile,deviceMobile:ssr.DeviceMobile,floppyDisk:ssr.FloppyDisk,ticket:ssr.Ticket,clipboard:ssr.Clipboard,wifi:ssr.WifiHigh,wifiOff:ssr.WifiSlash,cpu:ssr.Cpu,mask:ssr.MaskHappy,rocket:ssr.Rocket,layout:ssr.Layout,megaphone:ssr.Megaphone,layers:ssr.Stack,ban:ssr.Prohibit,bold:ssr.TextB,italic:ssr.TextItalic,strikethrough:ssr.TextStrikethrough,heading:ssr.TextHOne,link:ssr.Link,code:ssr.Code,fileCode:ssr.FileCode,quote:ssr.Quotes,list:ssr.List,listOrdered:ssr.ListNumbers,minus:ssr.Minus},Ue={happy:"smile",sad:"frown",neutral:"meh",excited:"smile",angry:"frown",love:"heart",like:"heart",dislike:"frown"},We={loading:"loader",success:"success",error:"error",warning:"warning",info:"info",locked:"lock",unlocked:"unlock",visible:"eye",hidden:"eyeOff"};function $e(e){return !e||!/[-_]/.test(e)&&/^[a-z]/.test(e)?e:/^[A-Z]+$/.test(e)?e.toLowerCase():/^[A-Z]/.test(e)&&!/[-_]/.test(e)?e.charAt(0).toLowerCase()+e.slice(1):e.split(/[-_]/).map((o,r)=>r===0?o.toLowerCase():o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()).join("")}var D=null,P=null;var Fe={home:{lucide:"Home",phosphor:"House",iconsax:"Home2"},"layout-dashboard":{lucide:"LayoutDashboard",phosphor:"SquaresFour"},folder:{lucide:"Folder",phosphor:"Folder",iconsax:"Folder"},"alert-circle":{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Danger"},alertCircle:{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Danger"},columns:{lucide:"Columns",phosphor:"Columns"},users:{lucide:"Users",phosphor:"Users",iconsax:"People"},settings:{lucide:"Settings",phosphor:"Gear"},menu:{lucide:"Menu",phosphor:"List",iconsax:"Menu"},close:{lucide:"X",phosphor:"X",iconsax:"CloseCircle"},chevronLeft:{lucide:"ChevronLeft",phosphor:"CaretLeft",iconsax:"ArrowLeft2"},chevronRight:{lucide:"ChevronRight",phosphor:"CaretRight",iconsax:"ArrowRight2"},chevronDown:{lucide:"ChevronDown",phosphor:"CaretDown",iconsax:"ArrowDown2"},chevronUp:{lucide:"ChevronUp",phosphor:"CaretUp",iconsax:"ArrowUp2"},arrowLeft:{lucide:"ArrowLeft",phosphor:"ArrowLeft",iconsax:"ArrowLeft"},arrowRight:{lucide:"ArrowRight",phosphor:"ArrowRight",iconsax:"ArrowRight"},arrowUp:{lucide:"ArrowUp",phosphor:"ArrowUp",iconsax:"ArrowUp"},arrowDown:{lucide:"ArrowDown",phosphor:"ArrowDown",iconsax:"ArrowDown"},add:{lucide:"Plus",phosphor:"Plus",iconsax:"Add"},edit:{lucide:"Edit",phosphor:"Pencil"},pencil:{lucide:"Pencil",phosphor:"Pencil"},delete:{lucide:"Trash2",phosphor:"Trash",iconsax:"Trash"},trash:{lucide:"Trash2",phosphor:"Trash",iconsax:"Trash"},upload:{lucide:"Upload",phosphor:"Upload",iconsax:"Upload"},download:{lucide:"Download",phosphor:"Download",iconsax:"Download"},x:{lucide:"X",phosphor:"X"},check:{lucide:"Check",phosphor:"Check",iconsax:"Check"},search:{lucide:"Search",phosphor:"MagnifyingGlass",iconsax:"SearchNormal"},share:{lucide:"Share",phosphor:"Share"},copy:{lucide:"Copy",phosphor:"Copy"},save:{lucide:"Save",phosphor:"FloppyDisk"},loader:{lucide:"Loader2",phosphor:"Spinner"},loader2:{lucide:"Loader2",phosphor:"Spinner"},"check-circle":{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},checkCircle:{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},success:{lucide:"CheckCircle",phosphor:"CheckCircle",iconsax:"TickCircle"},error:{lucide:"XCircle",phosphor:"XCircle",iconsax:"CloseCircle"},warning:{lucide:"AlertCircle",phosphor:"WarningCircle",iconsax:"Warning2"},info:{lucide:"Info",phosphor:"Info",iconsax:"InfoCircle"},refresh:{lucide:"RefreshCw",phosphor:"ArrowClockwise",iconsax:"Refresh"},refreshCw:{lucide:"RefreshCw",phosphor:"ArrowClockwise",iconsax:"Refresh"},bell:{lucide:"Bell",phosphor:"Bell",iconsax:"Bell"},heart:{lucide:"Heart",phosphor:"Heart",iconsax:"Heart"},star:{lucide:"Star",phosphor:"Star",iconsax:"Star"},bookmark:{lucide:"Bookmark",phosphor:"Bookmark"},user:{lucide:"User",phosphor:"User",iconsax:"User"},userPlus:{lucide:"UserPlus",phosphor:"UserPlus",iconsax:"UserAdd"},logIn:{lucide:"LogIn",phosphor:"SignIn",iconsax:"Login"},logOut:{lucide:"LogOut",phosphor:"SignOut",iconsax:"Logout"},chrome:{lucide:"Chrome",phosphor:"ChromeLogo",iconsax:"Chrome"},github:{lucide:"Github",phosphor:"GithubLogo"},message:{lucide:"MessageCircle",phosphor:"ChatCircle"},messageSquare:{lucide:"MessageSquare",phosphor:"ChatSquare"},"message-square":{lucide:"MessageSquare",phosphor:"ChatSquare"},inbox:{lucide:"Inbox",phosphor:"Inbox"},calendar:{lucide:"Calendar",phosphor:"Calendar"},calendarPlus:{lucide:"CalendarPlus",phosphor:"CalendarPlus"},checkSquare:{lucide:"CheckSquare",phosphor:"CheckSquare",iconsax:"TickSquare"},clock:{lucide:"Clock",phosphor:"Clock"},book:{lucide:"Book",phosphor:"Book",iconsax:"Book"},bookOpen:{lucide:"BookOpen",phosphor:"BookOpen",iconsax:"Book"},monitor:{lucide:"Monitor",phosphor:"Monitor",iconsax:"Monitor"},sun:{lucide:"Sun",phosphor:"Sun",iconsax:"Sun"},moon:{lucide:"Moon",phosphor:"Moon",iconsax:"Moon"},sparkle:{lucide:"Sparkle",phosphor:"Sparkle"},sparkles:{lucide:"Sparkles",phosphor:"Sparkle"},lightbulb:{lucide:"Lightbulb",phosphor:"Lightbulb"},brain:{lucide:"Brain",phosphor:"Brain"},zap:{lucide:"Zap",phosphor:"Lightning"},globe:{lucide:"Globe",phosphor:"Globe",iconsax:"Global"},deviceMobile:{lucide:"Smartphone",phosphor:"DeviceMobile"},smartphone:{lucide:"Smartphone",phosphor:"DeviceMobile"},floppyDisk:{lucide:"Save",phosphor:"FloppyDisk"},chart:{lucide:"BarChart3",phosphor:"ChartBar"},barChart:{lucide:"BarChart",phosphor:"ChartBar"},trendingUp:{lucide:"TrendingUp",phosphor:"TrendUp"},trendingDown:{lucide:"TrendingDown",phosphor:"TrendDown"},activity:{lucide:"Activity",phosphor:"Pulse"},database:{lucide:"Database",phosphor:"Database"},dollarSign:{lucide:"DollarSign",phosphor:"CurrencyDollar"},dollar:{lucide:"DollarSign",phosphor:"CurrencyDollar"},currency:{lucide:"DollarSign",phosphor:"CurrencyDollar"},layers:{lucide:"Layers",phosphor:"Stack"},ban:{lucide:"Ban",phosphor:"Prohibit"},lock:{lucide:"Lock",phosphor:"Lock",iconsax:"Lock"},unlock:{lucide:"Unlock",phosphor:"LockOpen",iconsax:"Unlock"},shield:{lucide:"Shield",phosphor:"Shield",iconsax:"Shield"},key:{lucide:"Key",phosphor:"Key"},play:{lucide:"Play",phosphor:"Play",iconsax:"Play"},pause:{lucide:"Pause",phosphor:"Pause",iconsax:"Pause"},image:{lucide:"Image",phosphor:"Image",iconsax:"Image"},video:{lucide:"Video",phosphor:"Video",iconsax:"Video"},camera:{lucide:"Camera",phosphor:"Camera",iconsax:"Camera"},fileText:{lucide:"FileText",phosphor:"FileText"},file:{lucide:"File",phosphor:"File"},externalLink:{lucide:"ExternalLink",phosphor:"ArrowSquareOut"},link:{lucide:"Link",phosphor:"Link",iconsax:"Link"},moreHorizontal:{lucide:"MoreHorizontal",phosphor:"DotsThreeOutline"},moreVertical:{lucide:"MoreVertical",phosphor:"DotsThreeVertical"},remove:{lucide:"Minus",phosphor:"Minus",iconsax:"Minus"},eye:{lucide:"Eye",phosphor:"Eye",iconsax:"Eye"},eyeOff:{lucide:"EyeOff",phosphor:"EyeSlash",iconsax:"EyeSlash"},smile:{lucide:"Smile",phosphor:"Smiley",iconsax:"EmojiHappy"},frown:{lucide:"Frown",phosphor:"SmileySad",iconsax:"EmojiSad"},meh:{lucide:"Meh",phosphor:"SmileyMeh",iconsax:"EmojiNormal"},mail:{lucide:"Mail",phosphor:"Envelope"},phone:{lucide:"Phone",phosphor:"Phone"},flag:{lucide:"Flag",phosphor:"Flag",iconsax:"Flag"},rocket:{lucide:"Rocket",phosphor:"Rocket",iconsax:"Rocket"},ticket:{lucide:"Ticket",phosphor:"Ticket",iconsax:"Ticket"},clipboard:{lucide:"ClipboardList",phosphor:"Clipboard",iconsax:"Sticker"},wifi:{lucide:"Wifi",phosphor:"WifiHigh",iconsax:"Wifi"},wifiOff:{lucide:"WifiOff",phosphor:"WifiSlash"},cpu:{lucide:"Cpu",phosphor:"Cpu",iconsax:"Computing"},mask:{lucide:"Drama",phosphor:"MaskHappy",iconsax:"EmojiHappy"},bold:{lucide:"Bold",phosphor:"TextB"},italic:{lucide:"Italic",phosphor:"TextItalic"},strikethrough:{lucide:"Strikethrough",phosphor:"TextStrikethrough"},heading:{lucide:"Heading",phosphor:"TextHOne"},code:{lucide:"Code",phosphor:"Code",iconsax:"Code"},fileCode:{lucide:"FileCode",phosphor:"FileCode"},quote:{lucide:"Quote",phosphor:"Quotes",iconsax:"QuoteUp"},list:{lucide:"List",phosphor:"List"},listOrdered:{lucide:"ListOrdered",phosphor:"ListNumbers"},minus:{lucide:"Minus",phosphor:"Minus",iconsax:"Minus"}};async function _e(){if(typeof window=="undefined")return null;if(!D)try{D=await import('@phosphor-icons/react');}catch{return console.warn("Phosphor Icons not available. Install @phosphor-icons/react to use."),null}return D}async function je(){if(typeof window=="undefined")return null;if(!P)try{P=await import('lucide-react');}catch{return console.warn("Lucide Icons not available. Install lucide-react to use lucide provider."),null}return P}function ie(e,o="phosphor"){let r=Fe[e];if(!r)return mt(e,o);let t=r[o];switch(o){case "phosphor":return !t||!D?null:(D==null?void 0:D[t])||null;case "lucide":return !t||!P?null:(P==null?void 0:P[t])||null;case "iconsax":{return null;}default:return null}}function mt(e,o){switch(o){case "phosphor":{if(!D)return null;let r=e.charAt(0).toUpperCase()+e.slice(1),t=e.split(/(?=[A-Z])/).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("");return (D==null?void 0:D[r])||(D==null?void 0:D[t])||(D==null?void 0:D[e])||null}case "lucide":{if(!P)return null;let r=e.charAt(0).toUpperCase()+e.slice(1),t=e.replace(/([A-Z])/g,n=>n===e[0]?n.toLowerCase():n);return (P==null?void 0:P[r])||(P==null?void 0:P[e])||(P==null?void 0:P[t])||null}case "iconsax":{return null;}default:return null}}function Ge(e,o){let r=Fe[e];if(r){let t=r[o];if(t)return t}return e}var ge={"arrow-left":"arrowLeft","arrow-right":"arrowRight","arrow-up":"arrowUp","arrow-down":"arrowDown","chevron-left":"chevronLeft","chevron-right":"chevronRight","chevron-up":"chevronUp","chevron-down":"chevronDown","external-link":"externalLink","more-horizontal":"moreHorizontal","more-vertical":"moreVertical","user-plus":"userPlus","log-in":"logIn","log-out":"logOut","check-circle":"checkCircle","check-square":"checkSquare","alert-circle":"alertCircle","eye-off":"eyeOff","file-text":"fileText","book-open":"bookOpen","bar-chart":"barChart","trending-up":"trendingUp","trending-down":"trendingDown","message-square":"messageSquare","calendar-plus":"calendarPlus","refresh-cw":"refreshCw","dollar-sign":"dollarSign","layout-dashboard":"layoutDashboard","device-mobile":"deviceMobile","floppy-disk":"floppyDisk",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 qe(e){if(!e||typeof e!="string")return {normalized:e||"",wasAlias:false};let o=$e(e),r=ge[e]||ge[o];return r?{normalized:r,wasAlias:true,originalAlias:e}:{normalized:o,wasAlias:false}}var Ke={set:"phosphor",weight:"regular",size:20,color:"currentColor",strokeWidth:1.25,iconsaxVariant:"line"};var vt=H.createContext(Ke);function Ye(){return H.useContext(vt)}var Xe=H__default.default.forwardRef(({name:e,size:o,className:r,emotion:t,status:n,provider:a,weight:R,animated:d=false,pulse:k=false,spin:E=false,bounce:A=false,variant:b="default","aria-label":S,"aria-hidden":h},C)=>{var O,J;let u=Ye(),c=a||u.set,i=o!=null?o:u.size,m=R||u.weight,x=u.color,N=(O=u.strokeWidth)!=null?O:1.25,L=(J=u.iconsaxVariant)!=null?J:"line",[f,T]=H__default.default.useState(false),[p,l]=H__default.default.useState(false);H__default.default.useEffect(()=>{T(true),c==="lucide"?je().then(()=>l(true)):c==="phosphor"?_e().then(()=>l(true)):l(true);},[c]);let v=H__default.default.useMemo(()=>{let $=t?Ue[t]:n?We[n]:e,{normalized:ve}=qe($),uo=Ge(ve,c);return {normalized:ve,providerName:uo}},[e,t,n,c]),I=v.normalized,W=H__default.default.useMemo(()=>{return null},[c,v.providerName,f,L]),w=le({"text-current":b==="default","text-primary":b==="primary","text-muted-foreground":b==="secondary"||b==="muted","text-green-600 dark:text-green-400":b==="success","text-yellow-600 dark:text-yellow-400":b==="warning","text-destructive":b==="error"});if(!f)return jsxRuntime.jsx("span",{style:{width:i,height:i},className:s(w,r),"aria-hidden":h!==void 0?h:true,"aria-label":S});let g=null;if(c==="phosphor"?(g=Ve[I]||null,!g&&p&&(g=ie(I,c))):c==="iconsax"?(g=W,g||(g=ie(I,c))):g=ie(I,c),!g)return c==="iconsax"&&true?process.env.NODE_ENV==="development"&&console.warn(`Icon "${I}" \u2014 iconsax resolver not registered. Use HuaProvider with icons.set='iconsax', or add: import '@hua-labs/ui/iconsax'`):console.warn(`Icon "${I}" not found for provider "${c}"`),jsxRuntime.jsx("span",{ref:C,className:s("inline-flex items-center justify-center rounded-full border-2 border-dashed border-border",w,r),style:{width:i,height:i},"aria-label":S||`\uC544\uC774\uCF58\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: ${I}`,title:`Icon not found: ${I}`,children:jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground","aria-hidden":"true",children:"?"})});let Q={size:typeof i=="number"?i:void 0,width:i,height:i,color:x};c==="phosphor"?Q.weight=m:Q.strokeWidth=N;let ee=le({"animate-pulse":k,"animate-spin":E,"animate-bounce":A,"transition-all duration-200 ease-in-out":d}),y={};return S?(y["aria-label"]=S,y["aria-hidden"]=false):h!==void 0?y["aria-hidden"]=h:y["aria-hidden"]=true,jsxRuntime.jsx("span",{ref:C,className:s("inline-flex items-center justify-center",ee,w,r),style:{width:i,height:i},...y,children:g&&H__default.default.createElement(g,{...Q,className:w,"aria-hidden":true})})});Xe.displayName="Icon";var xt=H__default.default.memo(Xe,(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"]),V=xt;V.displayName="Icon";var Ze=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"smile",...e}));Ze.displayName="EmotionIcon";var Qe=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"info",...e}));Qe.displayName="StatusIcon";var Je=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"loader",status:"loading",spin:true,"aria-label":"\uB85C\uB529 \uC911",...e}));Je.displayName="LoadingIcon";var eo=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"check",status:"success",variant:"success","aria-label":"\uC131\uACF5",...e}));eo.displayName="SuccessIcon";var oo=H__default.default.forwardRef((e,o)=>jsxRuntime.jsx(V,{ref:o,name:"alertCircle",status:"error",variant:"error","aria-label":"\uC624\uB958",...e}));oo.displayName="ErrorIcon";var ro=H__default.default.forwardRef(({isOpen:e,onClose:o,children:r,className:t,side:n="right",size:a="md",showBackdrop:R=true,backdropClassName:d,closeOnBackdropClick:k=true,closeOnEscape:E=true,closable:A=true,...b},S)=>{let h=e!=null?e:false,C=()=>{o==null||o();},[u,c]=H__default.default.useState(false),[i,m]=H__default.default.useState(false);if(H__default.default.useEffect(()=>{if(h){c(true),m(true);let f=setTimeout(()=>m(false),50);return ()=>clearTimeout(f)}else {m(true);let f=setTimeout(()=>{c(false),m(false);},300);return ()=>clearTimeout(f)}},[h]),H__default.default.useEffect(()=>{if(!E)return;let f=T=>{T.key==="Escape"&&h&&C();};return h&&(document.addEventListener("keydown",f),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",f),document.body.style.overflow="";}},[h,E]),!u)return null;let x={sm:n==="left"||n==="right"?"w-80":"h-64",md:n==="left"||n==="right"?"w-96":"h-96",lg:n==="left"||n==="right"?"w-[28rem]":"h-[32rem]",xl:n==="left"||n==="right"?"w-[32rem]":"h-[40rem]",full:n==="left"||n==="right"?"w-full":"h-full"},N={left:"left-0 top-0 h-full",right:"right-0 top-0 h-full",top:"top-0 left-0 w-full",bottom:"bottom-0 left-0 w-full"},L={left:h?"translate-x-0":"-translate-x-full",right:h?"translate-x-0":"translate-x-full",top:h?"translate-y-0":"-translate-y-full",bottom:h?"translate-y-0":"translate-y-full"};return jsxRuntime.jsxs("div",{className:"fixed inset-0 z-50",children:[R&&jsxRuntime.jsx("div",{className:s("absolute inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300",i?h?"opacity-100":"opacity-0":"",d),onClick:k?C:void 0}),jsxRuntime.jsx("div",{ref:S,className:s("absolute bg-background/95 backdrop-blur-xl border border-border/50 shadow-2xl transition-transform duration-300 ease-out",x[a],N[n],L[n],t),...b,children:r})]})});ro.displayName="Drawer";var to=H__default.default.forwardRef(({children:e,className:o,showCloseButton:r=true,onClose:t,...n},a)=>jsxRuntime.jsxs("div",{ref:a,className:s("flex items-center justify-between p-6 border-b border-border/50",o),...n,children:[jsxRuntime.jsx("div",{className:"flex-1",children:e}),r&&jsxRuntime.jsx("button",{onClick:t,className:"p-2 rounded-lg hover:bg-muted transition-colors",children:jsxRuntime.jsx(V,{name:"close",size:20})})]}));to.displayName="DrawerHeader";var no=H__default.default.forwardRef(({children:e,className:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("flex-1 p-6 overflow-y-auto",o),...r,children:e}));no.displayName="DrawerContent";var ao=H__default.default.forwardRef(({children:e,className:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("flex items-center justify-end gap-3 p-6 border-t border-border/50",o),...r,children:e}));ao.displayName="DrawerFooter";var io=H__default.default.forwardRef(({isOpen:e,onClose:o,children:r,className:t,height:n="md",showBackdrop:a=true,backdropClassName:R,closeOnBackdropClick:d=true,closeOnEscape:k=true,showDragHandle:E=true,closable:A=true,snapPoints:b=[25,50,75,100],defaultSnap:S=50,...h},C)=>{let u=e!=null?e:false,c=()=>{o==null||o();},[i,m]=H__default.default.useState(false),[x,N]=H__default.default.useState(false),[L,f]=H__default.default.useState(S),[T,p]=H__default.default.useState(false),[l,v]=H__default.default.useState(0),[I,W]=H__default.default.useState(0),w={sm:"h-64",md:"h-96",lg:"h-[32rem]",xl:"h-[40rem]",full:"h-full"};H__default.default.useEffect(()=>{if(u){m(true),N(true);let y=setTimeout(()=>N(false),50);return ()=>clearTimeout(y)}else {N(true);let y=setTimeout(()=>{m(false),N(false);},300);return ()=>clearTimeout(y)}},[u]),H__default.default.useEffect(()=>{if(!k)return;let y=O=>{O.key==="Escape"&&u&&c();};return u&&(document.addEventListener("keydown",y),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",y),document.body.style.overflow="";}},[u,k]);let g=y=>{p(true),v(y.touches[0].clientY),W(y.touches[0].clientY);},Q=y=>{T&&W(y.touches[0].clientY);},ee=()=>{if(!T)return;p(false);let y=I-l,O=100;if(y>O)c();else if(y<-O){let J=b.indexOf(L),$=Math.min(J+1,b.length-1);f(b[$]);}};return i?jsxRuntime.jsxs("div",{className:"fixed inset-0 z-50",children:[a&&jsxRuntime.jsx("div",{className:s("absolute inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300",x?u?"opacity-100":"opacity-0":"",R),onClick:d?c:void 0}),jsxRuntime.jsxs("div",{ref:C,className:s("absolute bottom-0 left-0 right-0 bg-background/95 backdrop-blur-xl border-t border-border/50 shadow-2xl rounded-t-lg transition-transform duration-300 ease-out pb-safe",n!=="full"?w[n]:"",x?u?"translate-y-0":"translate-y-full":"",t),style:{height:n==="full"?`${L}%`:void 0,maxHeight:n!=="full"?void 0:"100%",transform:T?`translateY(${I-l}px)`:void 0},onTouchStart:g,onTouchMove:Q,onTouchEnd:ee,...h,children:[E&&jsxRuntime.jsx("div",{className:"flex justify-center pt-3 pb-2",children:jsxRuntime.jsx("div",{className:"w-12 h-1.5 bg-muted-foreground/30 rounded-full"})}),r]})]}):null});io.displayName="BottomSheet";var lo=H__default.default.forwardRef(({children:e,className:o,showCloseButton:r=true,onClose:t,...n},a)=>jsxRuntime.jsxs("div",{ref:a,className:s("flex items-center justify-between px-6 py-4",o),...n,children:[jsxRuntime.jsx("div",{className:"flex-1",children:e}),r&&jsxRuntime.jsx("button",{onClick:t,className:"p-2 rounded-lg hover:bg-muted transition-colors",children:jsxRuntime.jsx(V,{name:"close",size:20})})]}));lo.displayName="BottomSheetHeader";var co=H__default.default.forwardRef(({children:e,className:o,...r},t)=>jsxRuntime.jsx("div",{ref:t,className:s("flex-1 px-6 pb-6 overflow-y-auto",o),...r,children:e}));co.displayName="BottomSheetContent";
|
|
2
2
|
exports.BottomSheet=io;exports.BottomSheetContent=co;exports.BottomSheetHeader=lo;exports.ConfirmModal=ke;exports.Drawer=ro;exports.DrawerContent=no;exports.DrawerFooter=ao;exports.DrawerHeader=to;exports.Dropdown=Se;exports.DropdownGroup=Pe;exports.DropdownItem=Le;exports.DropdownLabel=Te;exports.DropdownMenu=De;exports.DropdownSeparator=Me;exports.Modal=ne;exports.Popover=Re;exports.PopoverContent=Ie;exports.PopoverTrigger=Ne;//# sourceMappingURL=overlay.js.map
|
|
3
3
|
//# sourceMappingURL=overlay.js.map
|