@hua-labs/ui 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +1 -1
  2. package/dist/{ComponentLayout-DrZpz0yv.d.mts → ComponentLayout-BhM4VSoq.d.mts} +1 -1
  3. package/dist/advanced-dashboard.d.mts +1 -1
  4. package/dist/advanced-dashboard.mjs +3 -3
  5. package/dist/advanced-dashboard.mjs.map +1 -1
  6. package/dist/advanced-emotion.mjs +1 -1
  7. package/dist/advanced-motion.d.mts +9 -6
  8. package/dist/advanced-motion.mjs +1 -1
  9. package/dist/advanced.d.mts +3 -3
  10. package/dist/advanced.mjs +2 -2
  11. package/dist/advanced.mjs.map +1 -1
  12. package/dist/chunk-5DPW7SVD.mjs +4 -0
  13. package/dist/{chunk-AOSXB5JJ.mjs.map → chunk-5DPW7SVD.mjs.map} +1 -1
  14. package/dist/chunk-5L5HIPKA.mjs +3 -0
  15. package/dist/{chunk-3GAUTZXQ.mjs.map → chunk-5L5HIPKA.mjs.map} +1 -1
  16. package/dist/chunk-A5YOVVM5.mjs +3 -0
  17. package/dist/chunk-A5YOVVM5.mjs.map +1 -0
  18. package/dist/chunk-CNW22G24.mjs +13 -0
  19. package/dist/chunk-CNW22G24.mjs.map +1 -0
  20. package/dist/chunk-CW66UBQG.mjs +3 -0
  21. package/dist/{chunk-6HVJFEDA.mjs.map → chunk-CW66UBQG.mjs.map} +1 -1
  22. package/dist/chunk-EAZEI74V.mjs +3 -0
  23. package/dist/chunk-EAZEI74V.mjs.map +1 -0
  24. package/dist/chunk-EPY3432E.mjs +3 -0
  25. package/dist/{chunk-MDLCJASB.mjs.map → chunk-EPY3432E.mjs.map} +1 -1
  26. package/dist/chunk-F2M4YDDQ.mjs +3 -0
  27. package/dist/{chunk-OZNST3EZ.mjs.map → chunk-F2M4YDDQ.mjs.map} +1 -1
  28. package/dist/chunk-FHMFDCX2.mjs +3 -0
  29. package/dist/{chunk-4NJE7D6X.mjs.map → chunk-FHMFDCX2.mjs.map} +1 -1
  30. package/dist/chunk-HBIUCLFL.mjs +3 -0
  31. package/dist/chunk-HBIUCLFL.mjs.map +1 -0
  32. package/dist/chunk-HEBXAFRY.mjs +3 -0
  33. package/dist/{chunk-KJZGOL2Z.mjs.map → chunk-HEBXAFRY.mjs.map} +1 -1
  34. package/dist/chunk-IG47LMOD.mjs +3 -0
  35. package/dist/{chunk-42RGFEL2.mjs.map → chunk-IG47LMOD.mjs.map} +1 -1
  36. package/dist/chunk-J47ZEXEL.mjs +3 -0
  37. package/dist/{chunk-3CCF7U3P.mjs.map → chunk-J47ZEXEL.mjs.map} +1 -1
  38. package/dist/chunk-K2FOFIST.mjs +3 -0
  39. package/dist/{chunk-IJSYSNM5.mjs.map → chunk-K2FOFIST.mjs.map} +1 -1
  40. package/dist/chunk-LL6QPRD7.mjs +3 -0
  41. package/dist/{chunk-TZ4YSHMC.mjs.map → chunk-LL6QPRD7.mjs.map} +1 -1
  42. package/dist/chunk-NMJLOK6M.mjs +3 -0
  43. package/dist/{chunk-KYRIUUQP.mjs.map → chunk-NMJLOK6M.mjs.map} +1 -1
  44. package/dist/chunk-O24K56OS.mjs +3 -0
  45. package/dist/chunk-O24K56OS.mjs.map +1 -0
  46. package/dist/chunk-OIWG3IJ7.mjs +3 -0
  47. package/dist/chunk-OIWG3IJ7.mjs.map +1 -0
  48. package/dist/chunk-OLLU7ZFH.mjs +3 -0
  49. package/dist/{chunk-XL4KTJ4L.mjs.map → chunk-OLLU7ZFH.mjs.map} +1 -1
  50. package/dist/chunk-Q76JW7X5.mjs +73 -0
  51. package/dist/chunk-Q76JW7X5.mjs.map +1 -0
  52. package/dist/chunk-QEMPERUK.mjs +3 -0
  53. package/dist/chunk-QEMPERUK.mjs.map +1 -0
  54. package/dist/chunk-QRM66RQG.mjs +3 -0
  55. package/dist/{chunk-N56BUOCD.mjs.map → chunk-QRM66RQG.mjs.map} +1 -1
  56. package/dist/chunk-QRRP7TGF.mjs +13 -0
  57. package/dist/{chunk-RS6RKW5U.mjs.map → chunk-QRRP7TGF.mjs.map} +1 -1
  58. package/dist/chunk-SD6XGDAC.mjs +3 -0
  59. package/dist/chunk-SD6XGDAC.mjs.map +1 -0
  60. package/dist/chunk-SDFVGFXT.mjs +3 -0
  61. package/dist/{chunk-CVWWS25A.mjs.map → chunk-SDFVGFXT.mjs.map} +1 -1
  62. package/dist/chunk-SMLDNOV3.mjs +8 -0
  63. package/dist/{chunk-ZXZIHU7J.mjs.map → chunk-SMLDNOV3.mjs.map} +1 -1
  64. package/dist/{chunk-FX57OSYG.mjs → chunk-TAP6MYDW.mjs} +2 -2
  65. package/dist/{chunk-FX57OSYG.mjs.map → chunk-TAP6MYDW.mjs.map} +1 -1
  66. package/dist/{chunk-WP7VFE77.mjs → chunk-TBZ645BI.mjs} +2 -2
  67. package/dist/{chunk-WP7VFE77.mjs.map → chunk-TBZ645BI.mjs.map} +1 -1
  68. package/dist/{chunk-TXBZZJNR.mjs → chunk-V2DNYJR6.mjs} +2 -2
  69. package/dist/{chunk-TXBZZJNR.mjs.map → chunk-V2DNYJR6.mjs.map} +1 -1
  70. package/dist/{chunk-Z74YUUVT.mjs → chunk-VBABZXL7.mjs} +2 -2
  71. package/dist/{chunk-Z74YUUVT.mjs.map → chunk-VBABZXL7.mjs.map} +1 -1
  72. package/dist/chunk-WYBSHTGY.mjs +3 -0
  73. package/dist/{chunk-DYNBM24D.mjs.map → chunk-WYBSHTGY.mjs.map} +1 -1
  74. package/dist/chunk-ZQUMJQYV.mjs +3 -0
  75. package/dist/chunk-ZQUMJQYV.mjs.map +1 -0
  76. package/dist/chunk-ZY23NOT4.mjs +3 -0
  77. package/dist/chunk-ZY23NOT4.mjs.map +1 -0
  78. package/dist/components/Action.d.ts.map +1 -1
  79. package/dist/components/Badge.d.ts +1 -1
  80. package/dist/components/Button.d.ts.map +1 -1
  81. package/dist/components/DatePicker.d.ts.map +1 -1
  82. package/dist/components/Dropdown.d.ts +0 -50
  83. package/dist/components/Dropdown.d.ts.map +1 -1
  84. package/dist/components/Icon/Icon.d.ts.map +1 -1
  85. package/dist/components/Modal.d.ts.map +1 -1
  86. package/dist/components/Popover.d.ts.map +1 -1
  87. package/dist/components/Progress.d.ts +2 -2
  88. package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
  89. package/dist/components/advanced/Carousel.d.ts.map +1 -1
  90. package/dist/components/advanced/ImageReveal.d.ts.map +1 -1
  91. package/dist/components/advanced/Parallax.d.ts +9 -6
  92. package/dist/components/advanced/Parallax.d.ts.map +1 -1
  93. package/dist/components/advanced/TextReveal.d.ts.map +1 -1
  94. package/dist/data.mjs +2 -2
  95. package/dist/data.mjs.map +1 -1
  96. package/dist/feedback.mjs +1 -1
  97. package/dist/form.mjs +4 -4
  98. package/dist/form.mjs.map +1 -1
  99. package/dist/{icons-DmhQEH_E.d.mts → icons-DcOBy9Hf.d.mts} +4 -0
  100. package/dist/iconsax-extended.mjs +2 -2
  101. package/dist/iconsax-extended.mjs.map +1 -1
  102. package/dist/index.d.mts +6 -87
  103. package/dist/index.mjs +14 -14
  104. package/dist/index.mjs.map +1 -1
  105. package/dist/interactive.mjs +1 -1
  106. package/dist/interactive.mjs.map +1 -1
  107. package/dist/landing.mjs +7 -7
  108. package/dist/landing.mjs.map +1 -1
  109. package/dist/lib/icon-providers.d.ts +9 -25
  110. package/dist/lib/icon-providers.d.ts.map +1 -1
  111. package/dist/lib/icons.d.ts +4 -0
  112. package/dist/lib/icons.d.ts.map +1 -1
  113. package/dist/lib/utils.d.ts.map +1 -1
  114. package/dist/navigation.d.mts +1 -1
  115. package/dist/navigation.mjs +1 -1
  116. package/dist/navigation.mjs.map +1 -1
  117. package/dist/overlay.d.mts +0 -50
  118. package/dist/overlay.mjs +1 -1
  119. package/dist/overlay.mjs.map +1 -1
  120. package/dist/sdui.mjs +1 -1
  121. package/dist/sdui.mjs.map +1 -1
  122. package/dist/theme.d.mts +85 -0
  123. package/dist/theme.d.ts +14 -0
  124. package/dist/theme.d.ts.map +1 -0
  125. package/dist/theme.mjs +3 -0
  126. package/dist/theme.mjs.map +1 -0
  127. package/package.json +18 -14
  128. package/dist/advanced-dashboard.js +0 -39
  129. package/dist/advanced-dashboard.js.map +0 -1
  130. package/dist/advanced-emotion.js +0 -2
  131. package/dist/advanced-emotion.js.map +0 -1
  132. package/dist/advanced-motion.js +0 -82
  133. package/dist/advanced-motion.js.map +0 -1
  134. package/dist/advanced.js +0 -112
  135. package/dist/advanced.js.map +0 -1
  136. package/dist/chunk-3CCF7U3P.mjs +0 -3
  137. package/dist/chunk-3GAUTZXQ.mjs +0 -3
  138. package/dist/chunk-42RGFEL2.mjs +0 -3
  139. package/dist/chunk-4NJE7D6X.mjs +0 -3
  140. package/dist/chunk-6HVJFEDA.mjs +0 -3
  141. package/dist/chunk-7OYT3QSY.mjs +0 -3
  142. package/dist/chunk-7OYT3QSY.mjs.map +0 -1
  143. package/dist/chunk-ANYZ56VB.mjs +0 -3
  144. package/dist/chunk-ANYZ56VB.mjs.map +0 -1
  145. package/dist/chunk-AOSXB5JJ.mjs +0 -4
  146. package/dist/chunk-B544MRF7.mjs +0 -3
  147. package/dist/chunk-B544MRF7.mjs.map +0 -1
  148. package/dist/chunk-CVWWS25A.mjs +0 -3
  149. package/dist/chunk-DYNBM24D.mjs +0 -3
  150. package/dist/chunk-IJSYSNM5.mjs +0 -3
  151. package/dist/chunk-KJZGOL2Z.mjs +0 -3
  152. package/dist/chunk-KYRIUUQP.mjs +0 -3
  153. package/dist/chunk-LSA7DU3N.mjs +0 -73
  154. package/dist/chunk-LSA7DU3N.mjs.map +0 -1
  155. package/dist/chunk-MDLCJASB.mjs +0 -3
  156. package/dist/chunk-N56BUOCD.mjs +0 -3
  157. package/dist/chunk-OFYITQXI.mjs +0 -13
  158. package/dist/chunk-OFYITQXI.mjs.map +0 -1
  159. package/dist/chunk-OZNST3EZ.mjs +0 -3
  160. package/dist/chunk-RS6RKW5U.mjs +0 -13
  161. package/dist/chunk-TZ4YSHMC.mjs +0 -3
  162. package/dist/chunk-U6CTBZ2U.mjs +0 -3
  163. package/dist/chunk-U6CTBZ2U.mjs.map +0 -1
  164. package/dist/chunk-XCZMLKPK.mjs +0 -3
  165. package/dist/chunk-XCZMLKPK.mjs.map +0 -1
  166. package/dist/chunk-XGHT7WMO.mjs +0 -3
  167. package/dist/chunk-XGHT7WMO.mjs.map +0 -1
  168. package/dist/chunk-XL4KTJ4L.mjs +0 -3
  169. package/dist/chunk-ZXZIHU7J.mjs +0 -8
  170. package/dist/data.js +0 -3
  171. package/dist/data.js.map +0 -1
  172. package/dist/feedback.js +0 -12
  173. package/dist/feedback.js.map +0 -1
  174. package/dist/form.js +0 -8
  175. package/dist/form.js.map +0 -1
  176. package/dist/iconsax-extended.js +0 -3
  177. package/dist/iconsax-extended.js.map +0 -1
  178. package/dist/iconsax.js +0 -3
  179. package/dist/iconsax.js.map +0 -1
  180. package/dist/index.js +0 -51
  181. package/dist/index.js.map +0 -1
  182. package/dist/interactive.js +0 -2
  183. package/dist/interactive.js.map +0 -1
  184. package/dist/landing.js +0 -100
  185. package/dist/landing.js.map +0 -1
  186. package/dist/lib/phosphor-icons.d.ts +0 -6
  187. package/dist/lib/phosphor-icons.d.ts.map +0 -1
  188. package/dist/navigation.js +0 -12
  189. package/dist/navigation.js.map +0 -1
  190. package/dist/overlay.js +0 -3
  191. package/dist/overlay.js.map +0 -1
  192. package/dist/sdui.js +0 -9
  193. package/dist/sdui.js.map +0 -1
@@ -1,3 +0,0 @@
1
- "use client";
2
- import {b as b$1}from'./chunk-U6CTBZ2U.mjs';import o from'react';import {jsx}from'react/jsx-runtime';var b=o.forwardRef(({className:e,variant:t="default",size:a="md",...d},s)=>{let n=()=>{switch(t){case "bordered":return "border border-border divide-x divide-border";case "striped":return "divide-y divide-border";default:return ""}},c=()=>{switch(a){case "sm":return "text-sm";case "lg":return "text-base";default:return "text-sm"}};return jsx("div",{className:"w-full overflow-auto",children:jsx("table",{ref:s,className:b$1("w-full caption-bottom",n(),c(),e),...d})})});b.displayName="Table";var i=o.forwardRef(({className:e,...t},a)=>jsx("thead",{ref:a,className:b$1("[&_tr]:border-b",e),...t}));i.displayName="TableHeader";var T=o.forwardRef(({className:e,...t},a)=>jsx("tbody",{ref:a,className:b$1("[&_tr:last-child]:border-0",e),...t}));T.displayName="TableBody";var m=o.forwardRef(({className:e,...t},a)=>jsx("tfoot",{ref:a,className:b$1("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));m.displayName="TableFooter";var f=o.forwardRef(({className:e,variant:t="default",...a},d)=>jsx("tr",{ref:d,className:b$1("border-b transition-colors data-[state=selected]:bg-muted/50",t==="hover"?"hover:bg-muted/50":"",e),...a}));f.displayName="TableRow";var p=o.forwardRef(({className:e,...t},a)=>jsx("th",{ref:a,className:b$1("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",e),...t}));p.displayName="TableHead";var u=o.forwardRef(({className:e,...t},a)=>jsx("td",{ref:a,className:b$1("p-4 align-middle [&:has([role=checkbox])]:pr-0",e),...t}));u.displayName="TableCell";var R=o.forwardRef(({className:e,...t},a)=>jsx("caption",{ref:a,className:b$1("mt-4 text-sm text-muted-foreground",e),...t}));R.displayName="TableCaption";export{b as a,i as b,T as c,m as d,f as e,p as f,u as g,R as h};//# sourceMappingURL=chunk-KYRIUUQP.mjs.map
3
- //# sourceMappingURL=chunk-KYRIUUQP.mjs.map
@@ -1,73 +0,0 @@
1
- "use client";
2
- import {b}from'./chunk-U6CTBZ2U.mjs';import W,{useRef,useState,useEffect,useCallback}from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var Re=W.forwardRef(({children:n,className:o,direction:e="left",speed:r=50,pauseOnHover:m=true,pauseOnClick:R=false,gap:b$1=16,gradient:x=true,gradientColor:w="hsl(var(--background))",gradientWidth:d=100,style:c,...g},T)=>{let v=useRef(null),[f,E]=useState(0),[N,k]=useState(0),[p,s]=useState(false),M=e==="left"||e==="right",X=e==="right"||e==="down";useEffect(()=>{let P=v.current;if(!P)return;let S=P.firstElementChild;if(!S)return;let B=()=>{M?E(S.offsetWidth):k(S.offsetHeight);};B();let q=new ResizeObserver(B);return q.observe(S),()=>q.disconnect()},[M,n]);let O={"--marquee-duration":`${M?f/r:N/r}s`,"--marquee-gap":`${b$1}px`},j=x?{"--gradient-color":w,"--gradient-width":`${d}px`}:{};return jsxs("div",{ref:T,className:b("relative overflow-hidden",x&&"marquee-gradient",o),style:{...c,...j},onMouseEnter:()=>m&&s(true),onMouseLeave:()=>m&&s(false),onClick:()=>R&&s(!p),...g,children:[jsxs("div",{ref:v,className:b("flex",M?"flex-row":"flex-col",p?"animate-pause":"",M?X?"animate-marquee-right":"animate-marquee-left":X?"animate-marquee-down":"animate-marquee-up"),style:O,children:[jsx("div",{className:b("flex shrink-0",M?"flex-row":"flex-col"),style:{gap:b$1},children:n}),jsx("div",{className:b("flex shrink-0",M?"flex-row":"flex-col"),style:{gap:b$1,[M?"marginLeft":"marginTop"]:b$1},"aria-hidden":"true",children:n})]}),jsx("style",{dangerouslySetInnerHTML:{__html:`
3
- @keyframes marquee-left {
4
- from { transform: translateX(0); }
5
- to { transform: translateX(calc(-50% - var(--marquee-gap) / 2)); }
6
- }
7
- @keyframes marquee-right {
8
- from { transform: translateX(calc(-50% - var(--marquee-gap) / 2)); }
9
- to { transform: translateX(0); }
10
- }
11
- @keyframes marquee-up {
12
- from { transform: translateY(0); }
13
- to { transform: translateY(calc(-50% - var(--marquee-gap) / 2)); }
14
- }
15
- @keyframes marquee-down {
16
- from { transform: translateY(calc(-50% - var(--marquee-gap) / 2)); }
17
- to { transform: translateY(0); }
18
- }
19
- .animate-marquee-left { animation: marquee-left var(--marquee-duration) linear infinite; }
20
- .animate-marquee-right { animation: marquee-right var(--marquee-duration) linear infinite; }
21
- .animate-marquee-up { animation: marquee-up var(--marquee-duration) linear infinite; }
22
- .animate-marquee-down { animation: marquee-down var(--marquee-duration) linear infinite; }
23
- .animate-pause { animation-play-state: paused !important; }
24
- .marquee-gradient::before, .marquee-gradient::after {
25
- content: "";
26
- position: absolute;
27
- top: 0;
28
- bottom: 0;
29
- width: var(--gradient-width);
30
- z-index: 10;
31
- pointer-events: none;
32
- }
33
- .marquee-gradient::before {
34
- left: 0;
35
- background: linear-gradient(to right, var(--gradient-color), transparent);
36
- }
37
- .marquee-gradient::after {
38
- right: 0;
39
- background: linear-gradient(to left, var(--gradient-color), transparent);
40
- }
41
- `}})]})});Re.displayName="Marquee";var Te=W.forwardRef(({children:n,className:o,glowColor:e="rgba(120, 119, 198, 0.3)",glowSize:r=400,glowOpacity:m=.6,border:R=true,borderColor:b$1,style:x,...w},d)=>{let c=useRef(null),[g,T]=useState({x:0,y:0}),[v,f]=useState(false),E=useCallback(p=>{if(!c.current)return;let s=c.current.getBoundingClientRect();T({x:p.clientX-s.left,y:p.clientY-s.top});},[]),N={position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:"inherit",opacity:v?m:0,background:`radial-gradient(${r}px circle at ${g.x}px ${g.y}px, ${e}, transparent 40%)`,transition:"opacity 0.3s ease",pointerEvents:"none"},k=R?{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:"inherit",opacity:v?1:0,background:`radial-gradient(${r/2}px circle at ${g.x}px ${g.y}px, ${b$1||e}, transparent 40%)`,transition:"opacity 0.3s ease",pointerEvents:"none",mask:"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",maskComposite:"exclude",WebkitMaskComposite:"xor",padding:"1px"}:{};return jsxs("div",{ref:Ee(d,c),className:b("relative overflow-hidden rounded-xl bg-card border border-border p-6","transition-all duration-300",v&&"border-transparent",o),style:x,onMouseMove:E,onMouseEnter:()=>f(true),onMouseLeave:()=>f(false),...w,children:[jsx("div",{style:N,"aria-hidden":"true"}),R&&jsx("div",{style:k,"aria-hidden":"true"}),jsx("div",{className:"relative z-10",children:n})]})});Te.displayName="GlowCard";function Ee(...n){return o=>{n.forEach(e=>{typeof e=="function"?e(o):e&&typeof e=="object"&&(e.current=o);});}}var Se=W.forwardRef(({children:n,className:o,spotlightColor:e="rgba(255, 255, 255, 0.1)",spotlightSize:r=300,gradient:m=true,gradientFrom:R="rgba(255, 255, 255, 0.05)",gradientTo:b$1="transparent",style:x,...w},d)=>{let c=useRef(null),[g,T]=useState({x:0,y:0}),[v,f]=useState(false),E=useCallback(p=>{if(!c.current)return;let s=c.current.getBoundingClientRect();T({x:p.clientX-s.left,y:p.clientY-s.top});},[]),N={position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:"inherit",opacity:v?1:0,background:`radial-gradient(${r}px circle at ${g.x}px ${g.y}px, ${e}, transparent 60%)`,transition:"opacity 0.4s ease",pointerEvents:"none"},k=m?{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:"inherit",background:`linear-gradient(135deg, ${R} 0%, ${b$1} 100%)`,pointerEvents:"none"}:{};return jsxs("div",{ref:qe(d,c),className:b("relative overflow-hidden rounded-xl","bg-gray-900 border border-gray-800","transition-all duration-300",v&&"border-gray-700 shadow-2xl shadow-black/20",o),style:x,onMouseMove:E,onMouseEnter:()=>f(true),onMouseLeave:()=>f(false),...w,children:[m&&jsx("div",{style:k,"aria-hidden":"true"}),jsx("div",{style:N,"aria-hidden":"true"}),jsx("div",{className:"relative z-10",children:n})]})});Se.displayName="SpotlightCard";function qe(...n){return o=>{n.forEach(e=>{typeof e=="function"?e(o):e&&typeof e=="object"&&(e.current=o);});}}var Ae=["#ff0080","#7928ca","#0070f3","#00dfd8"],ze=W.forwardRef(({children:n,className:o,colors:e=Ae,speed:r=3,blur:m=true,blurAmount:R=100,type:b$1="mesh",animate:x=true,style:w,...d},c)=>{let[g,T]=useState(false),v=De(),f=x&&!v;useEffect(()=>{T(true);},[]);let E=()=>{switch(b$1){case "linear":return jsx("div",{className:"absolute inset-0",style:{background:`linear-gradient(
42
- ${f?"var(--gradient-angle, 0deg)":"135deg"},
43
- ${e.join(", ")}
44
- )`,animation:f?`gradient-rotate ${r}s linear infinite`:void 0}});case "radial":return jsx("div",{className:"absolute inset-0",style:{background:`radial-gradient(
45
- circle at ${f?"var(--gradient-x, 50%) var(--gradient-y, 50%)":"50% 50%"},
46
- ${e.join(", ")}
47
- )`,animation:f?`gradient-move ${r}s ease-in-out infinite`:void 0}});case "conic":return jsx("div",{className:"absolute inset-0",style:{background:`conic-gradient(
48
- from ${f?"var(--gradient-angle, 0deg)":"0deg"} at 50% 50%,
49
- ${e.join(", ")},
50
- ${e[0]}
51
- )`,animation:f?`gradient-spin ${r}s linear infinite`:void 0}});default:return g?jsx(Fragment,{children:e.map((N,k)=>{let p=360/e.length*k,s=r/e.length*k;return jsx("div",{className:"absolute rounded-full mix-blend-screen",style:{width:"60%",height:"60%",background:`radial-gradient(circle at center, ${N} 0%, transparent 70%)`,top:`${30+Math.sin(p*Math.PI/180)*20}%`,left:`${30+Math.cos(p*Math.PI/180)*20}%`,animation:f?`gradient-blob ${r}s ease-in-out infinite`:void 0,animationDelay:f?`${-s}s`:void 0}},k)})}):null}};return jsxs("div",{ref:c,className:b("relative overflow-hidden",o),style:w,...d,children:[jsx("div",{className:"absolute inset-0",style:{filter:m?`blur(${R}px)`:void 0},children:E()}),n&&jsx("div",{className:"relative z-10",children:n}),jsx("style",{dangerouslySetInnerHTML:{__html:`
52
- @keyframes gradient-rotate {
53
- 0% { --gradient-angle: 0deg; }
54
- 100% { --gradient-angle: 360deg; }
55
- }
56
- @keyframes gradient-spin {
57
- 0% { transform: rotate(0deg); }
58
- 100% { transform: rotate(360deg); }
59
- }
60
- @keyframes gradient-move {
61
- 0%, 100% { --gradient-x: 0%; --gradient-y: 0%; }
62
- 25% { --gradient-x: 100%; --gradient-y: 0%; }
63
- 50% { --gradient-x: 100%; --gradient-y: 100%; }
64
- 75% { --gradient-x: 0%; --gradient-y: 100%; }
65
- }
66
- @keyframes gradient-blob {
67
- 0%, 100% { transform: translate(0, 0) scale(1); }
68
- 25% { transform: translate(20%, -20%) scale(1.1); }
69
- 50% { transform: translate(0, 20%) scale(0.9); }
70
- 75% { transform: translate(-20%, -10%) scale(1.05); }
71
- }
72
- `}})]})});ze.displayName="AnimatedGradient";function De(){let[n,o]=useState(false);return useEffect(()=>{let e=window.matchMedia("(prefers-reduced-motion: reduce)");o(e.matches);let r=m=>{o(m.matches);};return e.addEventListener("change",r),()=>e.removeEventListener("change",r)},[]),n}var je=W.forwardRef(({children:n,autoPlay:o=false,interval:e=5e3,loop:r=true,pauseOnHover:m=true,indicators:R="dots",indicatorPosition:b$1="bottom",showArrows:x=true,arrowPosition:w="inside",transition:d="slide",transitionDuration:c=500,onSlideChange:g,showPlayPause:T=false,playPausePosition:v="right",className:f,style:E,...N},k)=>{let p=()=>d==="slide"&&r?1:0,[s,M]=useState(p),[X,Q]=useState(!o),[O,j]=useState(false),[P,S]=useState(false),[B,q]=useState(false),[ee,te]=useState(null),[re,ne]=useState(null),ae=useRef(null),h=W.Children.count(n),K=Be(),se=useCallback(t=>d!=="slide"||!r?t:t===0?h-1:t===h+1?0:t-1,[r,h,d]),A=useCallback(t=>{if(P)return;let a=t;if(r?d!=="slide"&&(t<0?a=h-1:t>=h&&(a=0)):a=Math.max(0,Math.min(t,h-1)),a!==s){S(true),M(a);let u=r&&d==="slide"?a===0?h-1:a===h+1?0:a-1:a;g==null||g(u),setTimeout(()=>S(false),c);}},[s,h,r,P,c,d,g]);useEffect(()=>{!r||P||d!=="slide"||(s===0?setTimeout(()=>{q(true),M(h),setTimeout(()=>q(false),50);},c):s===h+1&&setTimeout(()=>{q(true),M(1),setTimeout(()=>q(false),50);},c));},[s,h,r,P,c,d]);let z=useCallback(()=>{A(s+1);},[s,A]),Y=useCallback(()=>{A(s-1);},[s,A]),fe=useCallback(()=>{j(t=>!t);},[]);useCallback(()=>{j(false);},[]);useCallback(()=>{j(true);},[]);useEffect(()=>{if(!o||X||O||K)return;let t=setInterval(z,e);return ()=>clearInterval(t)},[o,e,X,O,z,K]);let me=t=>{te(t.targetTouches[0].clientX);},ge=t=>{ne(t.targetTouches[0].clientX);},be=()=>{if(!ee||!re)return;let t=ee-re;Math.abs(t)>=50&&(t>0?z():Y()),te(null),ne(null);};useEffect(()=>{let t=u=>{u.key==="ArrowLeft"?Y():u.key==="ArrowRight"&&z();},a=ae.current;return a==null||a.addEventListener("keydown",t),()=>a==null?void 0:a.removeEventListener("keydown",t)},[z,Y]);let he=()=>{let t=K||B?0:c,a=se(s);switch(d){case "fade":return W.Children.map(n,(u,y)=>jsx("div",{className:b("absolute inset-0 w-full h-full",y===a?"z-10":"z-0"),style:{opacity:y===a?1:0,transition:`opacity ${t}ms ease-in-out`},children:u},y));case "scale":return W.Children.map(n,(u,y)=>jsx("div",{className:b("absolute inset-0 w-full h-full",y===a?"z-10":"z-0"),style:{opacity:y===a?1:0,transform:`scale(${y===a?1:.9})`,transition:`opacity ${t}ms ease-in-out, transform ${t}ms ease-in-out`},children:u},y));default:{let u=W.Children.toArray(n);return (r?[u[u.length-1],...u,u[0]]:u).map((H,D)=>jsx("div",{className:"absolute inset-0 w-full h-full",style:{transform:`translateX(${(D-s)*100}%)`,transition:B?"none":`transform ${t}ms ease-in-out`},children:H},D))}}},ie=()=>{if(R==="none")return null;let t=b$1.includes("inside"),a=b$1.includes("top"),u=se(s),y=b("flex items-center justify-center gap-2",t?b("absolute left-1/2 -translate-x-1/2 z-20",a?"top-4":"bottom-4"):b("mt-4",a&&"order-first mb-4 mt-0")),H=D=>{A(r&&d==="slide"?D+1:D);};return jsx("div",{className:y,role:"tablist",children:Array.from({length:h},(D,C)=>{let G=C===u;switch(R){case "bars":return jsx("button",{onClick:()=>H(C),className:b("h-1 rounded-full transition-all duration-300",G?"w-8 bg-white":"w-4 bg-white/50 hover:bg-white/70"),role:"tab","aria-selected":G,"aria-label":`\uC2AC\uB77C\uC774\uB4DC ${C+1}`},C);case "numbers":return jsx("button",{onClick:()=>H(C),className:b("w-8 h-8 rounded-full text-sm font-medium transition-all duration-300",G?"bg-white text-gray-900":"bg-white/30 text-white hover:bg-white/50"),role:"tab","aria-selected":G,"aria-label":`\uC2AC\uB77C\uC774\uB4DC ${C+1}`,children:C+1},C);default:return jsx("button",{onClick:()=>H(C),className:b("w-2.5 h-2.5 rounded-full transition-all duration-300",G?"bg-white scale-125":"bg-white/50 hover:bg-white/70"),role:"tab","aria-selected":G,"aria-label":`\uC2AC\uB77C\uC774\uB4DC ${C+1}`},C)}})})},ve=()=>{if(!T||!o)return null;let t=!O;return jsx("button",{onClick:fe,className:b("absolute bottom-4 z-20","w-8 h-8 rounded-full flex items-center justify-center","bg-white/80 hover:bg-white text-gray-800","transition-all duration-200","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white",{left:"left-4",center:"left-1/2 -translate-x-1/2",right:"right-4"}[v]),"aria-label":t?"\uC77C\uC2DC\uC815\uC9C0":"\uC7AC\uC0DD",children:t?jsx(Qe,{className:"w-4 h-4"}):jsx(_e,{className:"w-4 h-4"})})},pe=()=>{if(!x||w==="hidden")return null;let t=r||s>0,a=r||s<h-1,u=b("absolute top-1/2 -translate-y-1/2 z-20","w-10 h-10 rounded-full flex items-center justify-center","bg-white/80 hover:bg-white text-gray-800","transition-all duration-200","disabled:opacity-30 disabled:cursor-not-allowed","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white"),y=w==="outside"?"-left-14":"left-4",H=w==="outside"?"-right-14":"right-4";return jsxs(Fragment,{children:[jsx("button",{onClick:Y,disabled:!t,className:b(u,y),"aria-label":"\uC774\uC804 \uC2AC\uB77C\uC774\uB4DC",children:jsx(We,{className:"w-5 h-5"})}),jsx("button",{onClick:z,disabled:!a,className:b(u,H),"aria-label":"\uB2E4\uC74C \uC2AC\uB77C\uC774\uB4DC",children:jsx(Ye,{className:"w-5 h-5"})})]})};return jsxs("div",{ref:k,className:b("flex flex-col w-full h-full",w==="outside"&&"px-16",f),style:E,...N,children:[jsxs("div",{ref:ae,className:"relative overflow-hidden w-full flex-1",onMouseEnter:()=>m&&Q(true),onMouseLeave:()=>m&&Q(false),onTouchStart:me,onTouchMove:ge,onTouchEnd:be,tabIndex:0,role:"region","aria-roledescription":"carousel","aria-label":"\uC774\uBBF8\uC9C0 \uC2AC\uB77C\uC774\uB354",children:[he(),pe(),ve(),b$1.includes("inside")&&ie()]}),!b$1.includes("inside")&&ie()]})});je.displayName="Carousel";function Be(){let[n,o]=useState(false);return useEffect(()=>{let e=window.matchMedia("(prefers-reduced-motion: reduce)");o(e.matches);let r=m=>{o(m.matches);};return e.addEventListener("change",r),()=>e.removeEventListener("change",r)},[]),n}function We({className:n}){return jsx("svg",{className:n,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"})})}function Ye({className:n}){return jsx("svg",{className:n,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})}function _e({className:n}){return jsx("svg",{className:n,fill:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{d:"M8 5v14l11-7z"})})}function Qe({className:n}){return jsx("svg",{className:n,fill:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{d:"M6 4h4v16H6V4zm8 0h4v16h-4V4z"})})}export{Re as a,Te as b,Se as c,ze as d,je as e};//# sourceMappingURL=chunk-LSA7DU3N.mjs.map
73
- //# sourceMappingURL=chunk-LSA7DU3N.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/advanced/Marquee.tsx","../src/components/advanced/GlowCard.tsx","../src/components/advanced/SpotlightCard.tsx","../src/components/advanced/AnimatedGradient.tsx","../src/components/advanced/Carousel.tsx"],"names":["Marquee","React","children","className","direction","speed","pauseOnHover","pauseOnClick","gap","gradient","gradientColor","gradientWidth","style","props","ref","containerRef","useRef","contentWidth","setContentWidth","useState","contentHeight","setContentHeight","isPaused","setIsPaused","isHorizontal","isReverse","useEffect","container","firstChild","updateSize","resizeObserver","animationStyle","gradientStyle","jsxs","merge","jsx","GlowCard","glowColor","glowSize","glowOpacity","border","borderColor","cardRef","mousePosition","setMousePosition","isHovered","setIsHovered","handleMouseMove","useCallback","e","rect","glowStyle","borderStyle","mergeRefs","refs","value","SpotlightCard","spotlightColor","spotlightSize","gradientFrom","gradientTo","spotlightStyle","gradientOverlayStyle","defaultColors","AnimatedGradient","colors","blur","blurAmount","type","animate","mounted","setMounted","prefersReducedMotion","useReducedMotion","shouldAnimate","renderGradient","Fragment","color","index","angle","delay","setPrefersReducedMotion","mediaQuery","handleChange","Carousel","autoPlay","interval","loop","indicators","indicatorPosition","showArrows","arrowPosition","transition","transitionDuration","onSlideChange","showPlayPause","playPausePosition","getInitialIndex","currentIndex","setCurrentIndex","isManuallyPaused","setIsManuallyPaused","isTransitioning","setIsTransitioning","noTransition","setNoTransition","touchStart","setTouchStart","touchEnd","setTouchEnd","slideCount","getActualIndex","goToSlide","newIndex","actualIndex","nextSlide","prevSlide","togglePlayPause","prev","timer","handleTouchStart","handleTouchMove","handleTouchEnd","distance","handleKeyDown","renderSlides","duration","child","childArray","renderIndicators","isInside","isTop","indicatorContainerClass","handleIndicatorClick","_","isActive","renderPlayPause","isPlaying","PauseIcon","PlayIcon","renderArrows","canGoPrev","canGoNext","arrowBaseClass","prevPosition","nextPosition","ChevronLeft","ChevronRight"],"mappings":"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","file":"chunk-LSA7DU3N.mjs","sourcesContent":["\"use client\";\n\nimport React, { useRef, useEffect, useState } from \"react\";\nimport { merge } from \"../../lib/utils\";\n\n/**\n * Marquee 컴포넌트의 props / Marquee component props\n * @property {\"left\" | \"right\" | \"up\" | \"down\"} [direction=\"left\"] - 이동 방향 / Movement direction\n * @property {number} [speed=50] - 속도 (px/s) / Speed in pixels per second\n * @property {boolean} [pauseOnHover=true] - 호버시 일시정지 / Pause on hover\n * @property {boolean} [pauseOnClick=false] - 클릭시 일시정지 / Pause on click\n * @property {number} [gap=16] - 아이템 간격 (px) / Gap between items in pixels\n * @property {boolean} [gradient=true] - 양쪽 페이드 그라디언트 / Fade gradient on edges\n * @property {string} [gradientColor=\"hsl(var(--background))\"] - 그라디언트 색상 / Gradient color\n * @property {number} [gradientWidth=100] - 그라디언트 너비 (px) / Gradient width in pixels\n */\nexport interface MarqueeProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"left\" | \"right\" | \"up\" | \"down\";\n speed?: number;\n pauseOnHover?: boolean;\n pauseOnClick?: boolean;\n gap?: number;\n gradient?: boolean;\n gradientColor?: string;\n gradientWidth?: number;\n}\n\n/**\n * Marquee 컴포넌트 / Marquee component\n *\n * 무한 스크롤 애니메이션을 제공하는 컴포넌트입니다.\n * 로고, 텍스트, 이미지 등을 자동으로 흐르게 표시합니다.\n *\n * Component that provides infinite scroll animation.\n * Displays logos, text, images, etc. with automatic scrolling.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Marquee>\n * <span>Item 1</span>\n * <span>Item 2</span>\n * <span>Item 3</span>\n * </Marquee>\n *\n * @example\n * // 로고 캐러셀 / Logo carousel\n * <Marquee speed={30} pauseOnHover gradient>\n * {logos.map(logo => <img key={logo.id} src={logo.src} />)}\n * </Marquee>\n */\nconst Marquee = React.forwardRef<HTMLDivElement, MarqueeProps>(\n (\n {\n children,\n className,\n direction = \"left\",\n speed = 50,\n pauseOnHover = true,\n pauseOnClick = false,\n gap = 16,\n gradient = true,\n gradientColor = \"hsl(var(--background))\",\n gradientWidth = 100,\n style,\n ...props\n },\n ref\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [contentWidth, setContentWidth] = useState(0);\n const [contentHeight, setContentHeight] = useState(0);\n const [isPaused, setIsPaused] = useState(false);\n\n const isHorizontal = direction === \"left\" || direction === \"right\";\n const isReverse = direction === \"right\" || direction === \"down\";\n\n // Measure content size\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const firstChild = container.firstElementChild as HTMLElement;\n if (!firstChild) return;\n\n const updateSize = () => {\n if (isHorizontal) {\n setContentWidth(firstChild.offsetWidth);\n } else {\n setContentHeight(firstChild.offsetHeight);\n }\n };\n\n updateSize();\n\n const resizeObserver = new ResizeObserver(updateSize);\n resizeObserver.observe(firstChild);\n\n return () => resizeObserver.disconnect();\n }, [isHorizontal, children]);\n\n // Calculate animation duration\n const duration = isHorizontal\n ? contentWidth / speed\n : contentHeight / speed;\n\n const animationStyle: React.CSSProperties = {\n [\"--marquee-duration\" as string]: `${duration}s`,\n [\"--marquee-gap\" as string]: `${gap}px`,\n };\n\n // Gradient styles\n const gradientStyle = gradient\n ? {\n [\"--gradient-color\" as string]: gradientColor,\n [\"--gradient-width\" as string]: `${gradientWidth}px`,\n }\n : {};\n\n return (\n <div\n ref={ref}\n className={merge(\n \"relative overflow-hidden\",\n gradient && \"marquee-gradient\",\n className\n )}\n style={{ ...style, ...gradientStyle }}\n onMouseEnter={() => pauseOnHover && setIsPaused(true)}\n onMouseLeave={() => pauseOnHover && setIsPaused(false)}\n onClick={() => pauseOnClick && setIsPaused(!isPaused)}\n {...props}\n >\n <div\n ref={containerRef}\n className={merge(\n \"flex\",\n isHorizontal ? \"flex-row\" : \"flex-col\",\n isPaused ? \"animate-pause\" : \"\",\n isHorizontal\n ? isReverse\n ? \"animate-marquee-right\"\n : \"animate-marquee-left\"\n : isReverse\n ? \"animate-marquee-down\"\n : \"animate-marquee-up\"\n )}\n style={animationStyle}\n >\n {/* Original content */}\n <div\n className={merge(\n \"flex shrink-0\",\n isHorizontal ? \"flex-row\" : \"flex-col\"\n )}\n style={{ gap }}\n >\n {children}\n </div>\n {/* Duplicated content for seamless loop */}\n <div\n className={merge(\n \"flex shrink-0\",\n isHorizontal ? \"flex-row\" : \"flex-col\"\n )}\n style={{ gap, [isHorizontal ? \"marginLeft\" : \"marginTop\"]: gap }}\n aria-hidden=\"true\"\n >\n {children}\n </div>\n </div>\n\n {/* CSS for animations - injected as style element */}\n <style dangerouslySetInnerHTML={{ __html: `\n @keyframes marquee-left {\n from { transform: translateX(0); }\n to { transform: translateX(calc(-50% - var(--marquee-gap) / 2)); }\n }\n @keyframes marquee-right {\n from { transform: translateX(calc(-50% - var(--marquee-gap) / 2)); }\n to { transform: translateX(0); }\n }\n @keyframes marquee-up {\n from { transform: translateY(0); }\n to { transform: translateY(calc(-50% - var(--marquee-gap) / 2)); }\n }\n @keyframes marquee-down {\n from { transform: translateY(calc(-50% - var(--marquee-gap) / 2)); }\n to { transform: translateY(0); }\n }\n .animate-marquee-left { animation: marquee-left var(--marquee-duration) linear infinite; }\n .animate-marquee-right { animation: marquee-right var(--marquee-duration) linear infinite; }\n .animate-marquee-up { animation: marquee-up var(--marquee-duration) linear infinite; }\n .animate-marquee-down { animation: marquee-down var(--marquee-duration) linear infinite; }\n .animate-pause { animation-play-state: paused !important; }\n .marquee-gradient::before, .marquee-gradient::after {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n width: var(--gradient-width);\n z-index: 10;\n pointer-events: none;\n }\n .marquee-gradient::before {\n left: 0;\n background: linear-gradient(to right, var(--gradient-color), transparent);\n }\n .marquee-gradient::after {\n right: 0;\n background: linear-gradient(to left, var(--gradient-color), transparent);\n }\n `}} />\n </div>\n );\n }\n);\n\nMarquee.displayName = \"Marquee\";\n\nexport { Marquee };\n","\"use client\";\n\nimport React, { useRef, useState, useCallback } from \"react\";\nimport { merge } from \"../../lib/utils\";\n\n/**\n * GlowCard 컴포넌트의 props / GlowCard component props\n * @property {string} [glowColor=\"rgba(120, 119, 198, 0.3)\"] - 글로우 색상 / Glow color\n * @property {number} [glowSize=400] - 글로우 크기 (px) / Glow size in pixels\n * @property {number} [glowOpacity=0.6] - 글로우 투명도 / Glow opacity\n * @property {boolean} [border=true] - 글로우 보더 표시 / Show glow border\n * @property {string} [borderColor] - 보더 색상 (기본: glowColor) / Border color (default: glowColor)\n */\nexport interface GlowCardProps extends React.HTMLAttributes<HTMLDivElement> {\n glowColor?: string;\n glowSize?: number;\n glowOpacity?: number;\n border?: boolean;\n borderColor?: string;\n}\n\n/**\n * GlowCard 컴포넌트 / GlowCard component\n *\n * 마우스를 따라다니는 글로우 효과가 있는 카드 컴포넌트입니다.\n * SaaS 랜딩 페이지, 프리미엄 UI에 적합합니다.\n *\n * Card component with mouse-following glow effect.\n * Perfect for SaaS landing pages and premium UI.\n *\n * @component\n * @example\n * <GlowCard glowColor=\"rgba(59, 130, 246, 0.4)\">\n * <h3>Premium Feature</h3>\n * <p>This is a premium feature card</p>\n * </GlowCard>\n */\nconst GlowCard = React.forwardRef<HTMLDivElement, GlowCardProps>(\n (\n {\n children,\n className,\n glowColor = \"rgba(120, 119, 198, 0.3)\",\n glowSize = 400,\n glowOpacity = 0.6,\n border = true,\n borderColor,\n style,\n ...props\n },\n ref\n ) => {\n const cardRef = useRef<HTMLDivElement>(null);\n const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!cardRef.current) return;\n const rect = cardRef.current.getBoundingClientRect();\n setMousePosition({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n });\n },\n []\n );\n\n const glowStyle: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: \"inherit\",\n opacity: isHovered ? glowOpacity : 0,\n background: `radial-gradient(${glowSize}px circle at ${mousePosition.x}px ${mousePosition.y}px, ${glowColor}, transparent 40%)`,\n transition: \"opacity 0.3s ease\",\n pointerEvents: \"none\",\n };\n\n const borderStyle: React.CSSProperties = border\n ? {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: \"inherit\",\n opacity: isHovered ? 1 : 0,\n background: `radial-gradient(${glowSize / 2}px circle at ${mousePosition.x}px ${mousePosition.y}px, ${borderColor || glowColor}, transparent 40%)`,\n transition: \"opacity 0.3s ease\",\n pointerEvents: \"none\",\n mask: \"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)\",\n maskComposite: \"exclude\",\n WebkitMaskComposite: \"xor\",\n padding: \"1px\",\n }\n : {};\n\n return (\n <div\n ref={mergeRefs(ref, cardRef)}\n className={merge(\n \"relative overflow-hidden rounded-xl bg-card border border-border p-6\",\n \"transition-all duration-300\",\n isHovered && \"border-transparent\",\n className\n )}\n style={style}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n {/* Glow effect */}\n <div style={glowStyle} aria-hidden=\"true\" />\n\n {/* Border glow */}\n {border && <div style={borderStyle as React.CSSProperties} aria-hidden=\"true\" />}\n\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n }\n);\n\nGlowCard.displayName = \"GlowCard\";\n\n// Utility to merge refs\nfunction mergeRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref && typeof ref === \"object\") {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n\nexport { GlowCard };\n","\"use client\";\n\nimport React, { useRef, useState, useCallback } from \"react\";\nimport { merge } from \"../../lib/utils\";\n\n/**\n * SpotlightCard 컴포넌트의 props / SpotlightCard component props\n * @property {string} [spotlightColor=\"rgba(255, 255, 255, 0.1)\"] - 스포트라이트 색상 / Spotlight color\n * @property {number} [spotlightSize=300] - 스포트라이트 크기 (px) / Spotlight size in pixels\n * @property {boolean} [gradient=true] - 그라디언트 배경 효과 / Gradient background effect\n * @property {string} [gradientFrom=\"rgba(255, 255, 255, 0.05)\"] - 그라디언트 시작 색상 / Gradient start color\n * @property {string} [gradientTo=\"transparent\"] - 그라디언트 끝 색상 / Gradient end color\n */\nexport interface SpotlightCardProps extends React.HTMLAttributes<HTMLDivElement> {\n spotlightColor?: string;\n spotlightSize?: number;\n gradient?: boolean;\n gradientFrom?: string;\n gradientTo?: string;\n}\n\n/**\n * SpotlightCard 컴포넌트 / SpotlightCard component\n *\n * 마우스 위치에 스포트라이트 효과를 표시하는 프리미엄 카드 컴포넌트입니다.\n * 다크 테마 랜딩 페이지, 프리미엄 UI에 적합합니다.\n *\n * Premium card component that displays a spotlight effect at mouse position.\n * Perfect for dark theme landing pages and premium UI.\n *\n * @component\n * @example\n * <SpotlightCard className=\"bg-gray-900 text-white p-8\">\n * <h3>Premium Feature</h3>\n * <p>Discover our exclusive features</p>\n * </SpotlightCard>\n */\nconst SpotlightCard = React.forwardRef<HTMLDivElement, SpotlightCardProps>(\n (\n {\n children,\n className,\n spotlightColor = \"rgba(255, 255, 255, 0.1)\",\n spotlightSize = 300,\n gradient = true,\n gradientFrom = \"rgba(255, 255, 255, 0.05)\",\n gradientTo = \"transparent\",\n style,\n ...props\n },\n ref\n ) => {\n const cardRef = useRef<HTMLDivElement>(null);\n const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!cardRef.current) return;\n const rect = cardRef.current.getBoundingClientRect();\n setMousePosition({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n });\n },\n []\n );\n\n const spotlightStyle: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: \"inherit\",\n opacity: isHovered ? 1 : 0,\n background: `radial-gradient(${spotlightSize}px circle at ${mousePosition.x}px ${mousePosition.y}px, ${spotlightColor}, transparent 60%)`,\n transition: \"opacity 0.4s ease\",\n pointerEvents: \"none\",\n };\n\n const gradientOverlayStyle: React.CSSProperties = gradient\n ? {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: \"inherit\",\n background: `linear-gradient(135deg, ${gradientFrom} 0%, ${gradientTo} 100%)`,\n pointerEvents: \"none\",\n }\n : {};\n\n return (\n <div\n ref={mergeRefs(ref, cardRef)}\n className={merge(\n \"relative overflow-hidden rounded-xl\",\n \"bg-gray-900 border border-gray-800\",\n \"transition-all duration-300\",\n isHovered && \"border-gray-700 shadow-2xl shadow-black/20\",\n className\n )}\n style={style}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n {/* Gradient overlay */}\n {gradient && <div style={gradientOverlayStyle} aria-hidden=\"true\" />}\n\n {/* Spotlight effect */}\n <div style={spotlightStyle} aria-hidden=\"true\" />\n\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n }\n);\n\nSpotlightCard.displayName = \"SpotlightCard\";\n\n// Utility to merge refs\nfunction mergeRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref && typeof ref === \"object\") {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n\nexport { SpotlightCard };\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { merge } from \"../../lib/utils\";\n\n/**\n * AnimatedGradient 컴포넌트의 props / AnimatedGradient component props\n * @property {string[]} [colors] - 그라디언트 색상 배열 / Array of gradient colors\n * @property {number} [speed=3] - 애니메이션 속도 (초) / Animation speed in seconds\n * @property {boolean} [blur=true] - 블러 효과 / Blur effect\n * @property {number} [blurAmount=100] - 블러 양 (px) / Blur amount in pixels\n * @property {\"linear\" | \"radial\" | \"conic\" | \"mesh\"} [type=\"mesh\"] - 그라디언트 타입 / Gradient type\n * @property {boolean} [animate=true] - 애니메이션 활성화 / Enable animation\n */\nexport interface AnimatedGradientProps extends React.HTMLAttributes<HTMLDivElement> {\n colors?: string[];\n speed?: number;\n blur?: boolean;\n blurAmount?: number;\n type?: \"linear\" | \"radial\" | \"conic\" | \"mesh\";\n animate?: boolean;\n}\n\nconst defaultColors = [\n \"#ff0080\",\n \"#7928ca\",\n \"#0070f3\",\n \"#00dfd8\",\n];\n\n/**\n * AnimatedGradient 컴포넌트 / AnimatedGradient component\n *\n * 아름다운 애니메이션 그라디언트 배경을 제공합니다.\n * 히어로 섹션, 배경, 오버레이에 적합합니다.\n *\n * Provides beautiful animated gradient backgrounds.\n * Perfect for hero sections, backgrounds, and overlays.\n *\n * @component\n * @example\n * // 메쉬 그라디언트 / Mesh gradient\n * <AnimatedGradient type=\"mesh\" className=\"absolute inset-0 -z-10\" />\n *\n * @example\n * // 커스텀 색상 / Custom colors\n * <AnimatedGradient\n * colors={[\"#667eea\", \"#764ba2\", \"#f093fb\"]}\n * speed={5}\n * type=\"conic\"\n * />\n */\nconst AnimatedGradient = React.forwardRef<HTMLDivElement, AnimatedGradientProps>(\n (\n {\n children,\n className,\n colors = defaultColors,\n speed = 3,\n blur = true,\n blurAmount = 100,\n type = \"mesh\",\n animate = true,\n style,\n ...props\n },\n ref\n ) => {\n const [mounted, setMounted] = useState(false);\n const prefersReducedMotion = useReducedMotion();\n const shouldAnimate = animate && !prefersReducedMotion;\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n const renderGradient = () => {\n switch (type) {\n case \"linear\":\n return (\n <div\n className=\"absolute inset-0\"\n style={{\n background: `linear-gradient(\n ${shouldAnimate ? \"var(--gradient-angle, 0deg)\" : \"135deg\"},\n ${colors.join(\", \")}\n )`,\n animation: shouldAnimate ? `gradient-rotate ${speed}s linear infinite` : undefined,\n }}\n />\n );\n\n case \"radial\":\n return (\n <div\n className=\"absolute inset-0\"\n style={{\n background: `radial-gradient(\n circle at ${shouldAnimate ? \"var(--gradient-x, 50%) var(--gradient-y, 50%)\" : \"50% 50%\"},\n ${colors.join(\", \")}\n )`,\n animation: shouldAnimate ? `gradient-move ${speed}s ease-in-out infinite` : undefined,\n }}\n />\n );\n\n case \"conic\":\n return (\n <div\n className=\"absolute inset-0\"\n style={{\n background: `conic-gradient(\n from ${shouldAnimate ? \"var(--gradient-angle, 0deg)\" : \"0deg\"} at 50% 50%,\n ${colors.join(\", \")},\n ${colors[0]}\n )`,\n animation: shouldAnimate ? `gradient-spin ${speed}s linear infinite` : undefined,\n }}\n />\n );\n\n case \"mesh\":\n default:\n // Render blobs only after mount to prevent SSR hydration mismatch\n // (Math.sin/cos produce floating-point values that differ between server and client)\n if (!mounted) return null;\n return (\n <>\n {colors.map((color, index) => {\n const angle = (360 / colors.length) * index;\n const delay = (speed / colors.length) * index;\n return (\n <div\n key={index}\n className=\"absolute rounded-full mix-blend-screen\"\n style={{\n width: \"60%\",\n height: \"60%\",\n background: `radial-gradient(circle at center, ${color} 0%, transparent 70%)`,\n top: `${30 + Math.sin((angle * Math.PI) / 180) * 20}%`,\n left: `${30 + Math.cos((angle * Math.PI) / 180) * 20}%`,\n animation: shouldAnimate\n ? `gradient-blob ${speed}s ease-in-out infinite`\n : undefined,\n animationDelay: shouldAnimate ? `${-delay}s` : undefined,\n }}\n />\n );\n })}\n </>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n className={merge(\n \"relative overflow-hidden\",\n className\n )}\n style={style}\n {...props}\n >\n {/* Gradient layer */}\n <div\n className=\"absolute inset-0\"\n style={{\n filter: blur ? `blur(${blurAmount}px)` : undefined,\n }}\n >\n {renderGradient()}\n </div>\n\n {/* Content */}\n {children && <div className=\"relative z-10\">{children}</div>}\n\n {/* Animation keyframes - injected as style element */}\n <style dangerouslySetInnerHTML={{ __html: `\n @keyframes gradient-rotate {\n 0% { --gradient-angle: 0deg; }\n 100% { --gradient-angle: 360deg; }\n }\n @keyframes gradient-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n @keyframes gradient-move {\n 0%, 100% { --gradient-x: 0%; --gradient-y: 0%; }\n 25% { --gradient-x: 100%; --gradient-y: 0%; }\n 50% { --gradient-x: 100%; --gradient-y: 100%; }\n 75% { --gradient-x: 0%; --gradient-y: 100%; }\n }\n @keyframes gradient-blob {\n 0%, 100% { transform: translate(0, 0) scale(1); }\n 25% { transform: translate(20%, -20%) scale(1.1); }\n 50% { transform: translate(0, 20%) scale(0.9); }\n 75% { transform: translate(-20%, -10%) scale(1.05); }\n }\n `}} />\n </div>\n );\n }\n);\n\nAnimatedGradient.displayName = \"AnimatedGradient\";\n\n// Hook to check for reduced motion preference\nfunction useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setPrefersReducedMotion(mediaQuery.matches);\n\n const handleChange = (e: MediaQueryListEvent) => {\n setPrefersReducedMotion(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n\nexport { AnimatedGradient };\n","\"use client\";\n\nimport React, { useRef, useState, useCallback, useEffect } from \"react\";\nimport { merge } from \"../../lib/utils\";\n\n/**\n * Carousel 컴포넌트의 props / Carousel component props\n * @property {boolean} [autoPlay=false] - 자동 재생 / Auto play\n * @property {number} [interval=5000] - 자동 재생 간격 (ms) / Auto play interval\n * @property {boolean} [loop=true] - 무한 루프 / Infinite loop\n * @property {boolean} [pauseOnHover=true] - 호버시 일시정지 / Pause on hover\n * @property {\"dots\" | \"bars\" | \"numbers\" | \"none\"} [indicators=\"dots\"] - 인디케이터 타입 / Indicator type\n * @property {\"bottom\" | \"top\" | \"inside-bottom\" | \"inside-top\"} [indicatorPosition=\"bottom\"] - 인디케이터 위치 / Indicator position\n * @property {boolean} [showArrows=true] - 화살표 버튼 표시 / Show arrow buttons\n * @property {\"inside\" | \"outside\" | \"hidden\"} [arrowPosition=\"inside\"] - 화살표 위치 / Arrow position\n * @property {\"slide\" | \"fade\" | \"scale\"} [transition=\"slide\"] - 전환 효과 / Transition effect\n * @property {number} [transitionDuration=500] - 전환 시간 (ms) / Transition duration\n * @property {(index: number) => void} [onSlideChange] - 슬라이드 변경 콜백 / Slide change callback\n * @property {boolean} [showPlayPause=false] - 재생/일시정지 버튼 표시 / Show play/pause button\n * @property {\"left\" | \"right\" | \"center\"} [playPausePosition=\"right\"] - 재생/일시정지 버튼 위치 / Play/pause button position\n */\nexport interface CarouselProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n children: React.ReactNode[];\n autoPlay?: boolean;\n interval?: number;\n loop?: boolean;\n pauseOnHover?: boolean;\n indicators?: \"dots\" | \"bars\" | \"numbers\" | \"none\";\n indicatorPosition?: \"bottom\" | \"top\" | \"inside-bottom\" | \"inside-top\";\n showArrows?: boolean;\n arrowPosition?: \"inside\" | \"outside\" | \"hidden\";\n transition?: \"slide\" | \"fade\" | \"scale\";\n transitionDuration?: number;\n onSlideChange?: (index: number) => void;\n showPlayPause?: boolean;\n playPausePosition?: \"left\" | \"right\" | \"center\";\n}\n\n/**\n * Carousel 컴포넌트 / Carousel component\n *\n * 슬라이드 캐러셀 컴포넌트입니다.\n * 다양한 인디케이터, 화살표, 전환 효과를 지원합니다.\n *\n * Slide carousel component.\n * Supports various indicators, arrows, and transition effects.\n *\n * @component\n * @example\n * <Carousel autoPlay interval={3000} indicators=\"bars\">\n * <img src=\"/slide1.jpg\" alt=\"Slide 1\" />\n * <img src=\"/slide2.jpg\" alt=\"Slide 2\" />\n * <img src=\"/slide3.jpg\" alt=\"Slide 3\" />\n * </Carousel>\n */\nconst Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n children,\n autoPlay = false,\n interval = 5000,\n loop = true,\n pauseOnHover = true,\n indicators = \"dots\",\n indicatorPosition = \"bottom\",\n showArrows = true,\n arrowPosition = \"inside\",\n transition = \"slide\",\n transitionDuration = 500,\n onSlideChange,\n showPlayPause = false,\n playPausePosition = \"right\",\n className,\n style,\n ...props\n },\n ref\n ) => {\n // For slide transition with loop: start at 1 (account for cloned first slide)\n // For fade/scale: always start at 0 (no cloned slides)\n const getInitialIndex = () => {\n if (transition === \"slide\" && loop) return 1;\n return 0;\n };\n const [currentIndex, setCurrentIndex] = useState(getInitialIndex);\n const [isPaused, setIsPaused] = useState(!autoPlay);\n const [isManuallyPaused, setIsManuallyPaused] = useState(false);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [noTransition, setNoTransition] = useState(false);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const slideCount = React.Children.count(children);\n\n // Check for reduced motion preference\n const prefersReducedMotion = useReducedMotion();\n\n // Get actual slide index for display (accounting for cloned slides in loop mode for slide transition)\n const getActualIndex = useCallback((index: number) => {\n // For fade/scale transitions, currentIndex is the actual index\n if (transition !== \"slide\") return index;\n // For slide transition without loop, index is actual\n if (!loop) return index;\n // For slide transition with loop, account for cloned slides\n if (index === 0) return slideCount - 1;\n if (index === slideCount + 1) return 0;\n return index - 1;\n }, [loop, slideCount, transition]);\n\n // Go to specific slide\n const goToSlide = useCallback(\n (index: number) => {\n if (isTransitioning) return;\n\n let newIndex = index;\n if (!loop) {\n newIndex = Math.max(0, Math.min(index, slideCount - 1));\n } else if (transition !== \"slide\") {\n // For fade/scale with loop, wrap around without cloned slides\n if (index < 0) {\n newIndex = slideCount - 1;\n } else if (index >= slideCount) {\n newIndex = 0;\n }\n }\n\n if (newIndex !== currentIndex) {\n setIsTransitioning(true);\n setCurrentIndex(newIndex);\n const actualIndex = loop && transition === \"slide\"\n ? (newIndex === 0 ? slideCount - 1 : newIndex === slideCount + 1 ? 0 : newIndex - 1)\n : newIndex;\n onSlideChange?.(actualIndex);\n setTimeout(() => setIsTransitioning(false), transitionDuration);\n }\n },\n [currentIndex, slideCount, loop, isTransitioning, transitionDuration, transition, onSlideChange]\n );\n\n // Handle infinite loop jump (when reaching cloned slides)\n useEffect(() => {\n if (!loop || isTransitioning || transition !== \"slide\") return;\n\n // Jump to real slide without animation when on cloned slides\n if (currentIndex === 0) {\n // At cloned last slide -> jump to real last slide\n setTimeout(() => {\n setNoTransition(true);\n setCurrentIndex(slideCount);\n setTimeout(() => setNoTransition(false), 50);\n }, transitionDuration);\n } else if (currentIndex === slideCount + 1) {\n // At cloned first slide -> jump to real first slide\n setTimeout(() => {\n setNoTransition(true);\n setCurrentIndex(1);\n setTimeout(() => setNoTransition(false), 50);\n }, transitionDuration);\n }\n }, [currentIndex, slideCount, loop, isTransitioning, transitionDuration, transition]);\n\n // Next slide\n const nextSlide = useCallback(() => {\n goToSlide(currentIndex + 1);\n }, [currentIndex, goToSlide]);\n\n // Previous slide\n const prevSlide = useCallback(() => {\n goToSlide(currentIndex - 1);\n }, [currentIndex, goToSlide]);\n\n // Toggle play/pause manually\n const togglePlayPause = useCallback(() => {\n setIsManuallyPaused(prev => !prev);\n }, []);\n\n // Play function\n const play = useCallback(() => {\n setIsManuallyPaused(false);\n }, []);\n\n // Pause function\n const pause = useCallback(() => {\n setIsManuallyPaused(true);\n }, []);\n\n // Auto play\n useEffect(() => {\n if (!autoPlay || isPaused || isManuallyPaused || prefersReducedMotion) return;\n\n const timer = setInterval(nextSlide, interval);\n return () => clearInterval(timer);\n }, [autoPlay, interval, isPaused, isManuallyPaused, nextSlide, prefersReducedMotion]);\n\n // Touch handlers for swipe\n const handleTouchStart = (e: React.TouchEvent) => {\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const handleTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n\n const distance = touchStart - touchEnd;\n const minSwipeDistance = 50;\n\n if (Math.abs(distance) >= minSwipeDistance) {\n if (distance > 0) {\n nextSlide();\n } else {\n prevSlide();\n }\n }\n\n setTouchStart(null);\n setTouchEnd(null);\n };\n\n // Keyboard navigation\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"ArrowLeft\") {\n prevSlide();\n } else if (e.key === \"ArrowRight\") {\n nextSlide();\n }\n };\n\n const container = containerRef.current;\n container?.addEventListener(\"keydown\", handleKeyDown);\n return () => container?.removeEventListener(\"keydown\", handleKeyDown);\n }, [nextSlide, prevSlide]);\n\n // Render slides with transition\n const renderSlides = () => {\n const duration = prefersReducedMotion || noTransition ? 0 : transitionDuration;\n const actualIndex = getActualIndex(currentIndex);\n\n switch (transition) {\n case \"fade\":\n return React.Children.map(children, (child, index) => (\n <div\n key={index}\n className={merge(\n \"absolute inset-0 w-full h-full\",\n index === actualIndex ? \"z-10\" : \"z-0\"\n )}\n style={{\n opacity: index === actualIndex ? 1 : 0,\n transition: `opacity ${duration}ms ease-in-out`,\n }}\n >\n {child}\n </div>\n ));\n\n case \"scale\":\n return React.Children.map(children, (child, index) => (\n <div\n key={index}\n className={merge(\n \"absolute inset-0 w-full h-full\",\n index === actualIndex ? \"z-10\" : \"z-0\"\n )}\n style={{\n opacity: index === actualIndex ? 1 : 0,\n transform: `scale(${index === actualIndex ? 1 : 0.9})`,\n transition: `opacity ${duration}ms ease-in-out, transform ${duration}ms ease-in-out`,\n }}\n >\n {child}\n </div>\n ));\n\n case \"slide\":\n default: {\n const childArray = React.Children.toArray(children);\n // For infinite loop: clone last slide at beginning and first slide at end\n const slides = loop\n ? [childArray[childArray.length - 1], ...childArray, childArray[0]]\n : childArray;\n\n // 각 슬라이드를 fade/scale처럼 absolute로 배치하고 translateX로 위치 조정\n return slides.map((child, index) => (\n <div\n key={index}\n className=\"absolute inset-0 w-full h-full\"\n style={{\n transform: `translateX(${(index - currentIndex) * 100}%)`,\n transition: noTransition ? 'none' : `transform ${duration}ms ease-in-out`,\n }}\n >\n {child}\n </div>\n ));\n }\n }\n };\n\n // Render indicators\n const renderIndicators = () => {\n if (indicators === \"none\") return null;\n\n const isInside = indicatorPosition.includes(\"inside\");\n const isTop = indicatorPosition.includes(\"top\");\n const actualIndex = getActualIndex(currentIndex);\n\n const indicatorContainerClass = merge(\n \"flex items-center justify-center gap-2\",\n isInside\n ? merge(\n \"absolute left-1/2 -translate-x-1/2 z-20\",\n isTop ? \"top-4\" : \"bottom-4\"\n )\n : merge(\n \"mt-4\",\n isTop && \"order-first mb-4 mt-0\"\n )\n );\n\n // Handle indicator click - go to the correct index accounting for loop mode\n const handleIndicatorClick = (index: number) => {\n if (loop && transition === \"slide\") {\n goToSlide(index + 1); // +1 because of cloned first slide (only for slide transition)\n } else {\n goToSlide(index);\n }\n };\n\n return (\n <div className={indicatorContainerClass} role=\"tablist\">\n {Array.from({ length: slideCount }, (_, index) => {\n const isActive = index === actualIndex;\n\n switch (indicators) {\n case \"bars\":\n return (\n <button\n key={index}\n onClick={() => handleIndicatorClick(index)}\n className={merge(\n \"h-1 rounded-full transition-all duration-300\",\n isActive\n ? \"w-8 bg-white\"\n : \"w-4 bg-white/50 hover:bg-white/70\"\n )}\n role=\"tab\"\n aria-selected={isActive}\n aria-label={`슬라이드 ${index + 1}`}\n />\n );\n\n case \"numbers\":\n return (\n <button\n key={index}\n onClick={() => handleIndicatorClick(index)}\n className={merge(\n \"w-8 h-8 rounded-full text-sm font-medium transition-all duration-300\",\n isActive\n ? \"bg-white text-gray-900\"\n : \"bg-white/30 text-white hover:bg-white/50\"\n )}\n role=\"tab\"\n aria-selected={isActive}\n aria-label={`슬라이드 ${index + 1}`}\n >\n {index + 1}\n </button>\n );\n\n case \"dots\":\n default:\n return (\n <button\n key={index}\n onClick={() => handleIndicatorClick(index)}\n className={merge(\n \"w-2.5 h-2.5 rounded-full transition-all duration-300\",\n isActive\n ? \"bg-white scale-125\"\n : \"bg-white/50 hover:bg-white/70\"\n )}\n role=\"tab\"\n aria-selected={isActive}\n aria-label={`슬라이드 ${index + 1}`}\n />\n );\n }\n })}\n </div>\n );\n };\n\n // Render play/pause button\n const renderPlayPause = () => {\n if (!showPlayPause || !autoPlay) return null;\n\n const isPlaying = !isManuallyPaused;\n const positionClasses = {\n left: \"left-4\",\n center: \"left-1/2 -translate-x-1/2\",\n right: \"right-4\"\n };\n\n return (\n <button\n onClick={togglePlayPause}\n className={merge(\n \"absolute bottom-4 z-20\",\n \"w-8 h-8 rounded-full flex items-center justify-center\",\n \"bg-white/80 hover:bg-white text-gray-800\",\n \"transition-all duration-200\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white\",\n positionClasses[playPausePosition]\n )}\n aria-label={isPlaying ? \"일시정지\" : \"재생\"}\n >\n {isPlaying ? <PauseIcon className=\"w-4 h-4\" /> : <PlayIcon className=\"w-4 h-4\" />}\n </button>\n );\n };\n\n // Render arrows\n const renderArrows = () => {\n if (!showArrows || arrowPosition === \"hidden\") return null;\n\n const canGoPrev = loop || currentIndex > 0;\n const canGoNext = loop || currentIndex < slideCount - 1;\n\n const arrowBaseClass = merge(\n \"absolute top-1/2 -translate-y-1/2 z-20\",\n \"w-10 h-10 rounded-full flex items-center justify-center\",\n \"bg-white/80 hover:bg-white text-gray-800\",\n \"transition-all duration-200\",\n \"disabled:opacity-30 disabled:cursor-not-allowed\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white\"\n );\n\n const prevPosition = arrowPosition === \"outside\" ? \"-left-14\" : \"left-4\";\n const nextPosition = arrowPosition === \"outside\" ? \"-right-14\" : \"right-4\";\n\n return (\n <>\n <button\n onClick={prevSlide}\n disabled={!canGoPrev}\n className={merge(arrowBaseClass, prevPosition)}\n aria-label=\"이전 슬라이드\"\n >\n <ChevronLeft className=\"w-5 h-5\" />\n </button>\n <button\n onClick={nextSlide}\n disabled={!canGoNext}\n className={merge(arrowBaseClass, nextPosition)}\n aria-label=\"다음 슬라이드\"\n >\n <ChevronRight className=\"w-5 h-5\" />\n </button>\n </>\n );\n };\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex flex-col w-full h-full\",\n arrowPosition === \"outside\" && \"px-16\",\n className\n )}\n style={style}\n {...props}\n >\n <div\n ref={containerRef}\n className=\"relative overflow-hidden w-full flex-1\"\n onMouseEnter={() => pauseOnHover && setIsPaused(true)}\n onMouseLeave={() => pauseOnHover && setIsPaused(false)}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n tabIndex={0}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label=\"이미지 슬라이더\"\n >\n {renderSlides()}\n {renderArrows()}\n {renderPlayPause()}\n {indicatorPosition.includes(\"inside\") && renderIndicators()}\n </div>\n {!indicatorPosition.includes(\"inside\") && renderIndicators()}\n </div>\n );\n }\n);\n\nCarousel.displayName = \"Carousel\";\n\n// Hook to check for reduced motion preference\nfunction useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setPrefersReducedMotion(mediaQuery.matches);\n\n const handleChange = (e: MediaQueryListEvent) => {\n setPrefersReducedMotion(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n\n// Simple icon components\nfunction ChevronLeft({ className }: { className?: string }) {\n return (\n <svg className={className} 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 );\n}\n\nfunction ChevronRight({ className }: { className?: string }) {\n return (\n <svg className={className} 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 );\n}\n\nfunction PlayIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n );\n}\n\nfunction PauseIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n </svg>\n );\n}\n\nexport { Carousel };\n"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import {b}from'./chunk-U6CTBZ2U.mjs';var K={50:"50",100:"100",200:"200",300:"300",400:"400",500:"500",600:"600",700:"700",800:"800",900:"900"};function o(t,r,e=""){return `${e}${t}-${K[r]}`}function d(t,r){return `${t} dark:${r}`}var n={default:{border:{light:200,dark:700},background:{light:50,dark:900,opacity:"50"}},outline:{border:{light:300,dark:600},background:"transparent",text:{light:600,dark:400}},elevated:{border:{light:200,dark:700},background:{light:"white",dark:"gray-800"},shadow:"lg"},icon:{background:{light:100,dark:900,opacity:"30"},text:{light:600,dark:400}},badge:{background:{light:50,dark:900,opacity:"30"},text:{light:700,dark:300}}},U={from:500,to:600,border:{light:400,dark:500}};function j(t,r){var g,s,u,c,b$1,h,k,p,x,S,y,C,f,$,m;let e={default:(r==null?void 0:r.default)||n.default,gradient:(r==null?void 0:r.gradient)||U,outline:(r==null?void 0:r.outline)||n.outline,elevated:(r==null?void 0:r.elevated)||n.elevated,icon:(r==null?void 0:r.icon)||n.icon,badge:(r==null?void 0:r.badge)||n.badge},l=(g=e.default)!=null&&g.border?d(`border-${o(t,e.default.border.light)}`,`border-${o(t,e.default.border.dark||e.default.border.light)}`):"",v=(s=e.default)!=null&&s.background?d(`bg-${o(t,e.default.background.light)}${e.default.background.opacity?`/${e.default.background.opacity}`:""}`,`bg-${o(t,e.default.background.dark||e.default.background.light)}${e.default.background.opacity?`/${e.default.background.opacity}`:""}`):"",w=b(l,v),z=(u=e.gradient)!=null&&u.from?`from-${o(t,e.gradient.from)}`:"",B=(c=e.gradient)!=null&&c.to?`to-${o(t,e.gradient.to)}`:"",M=(b$1=e.gradient)!=null&&b$1.border?d(`border-${o(t,e.gradient.border.light)}`,`border-${o(t,e.gradient.border.dark||e.gradient.border.light)}`):"",R=b("bg-gradient-to-br",z,B,M),E=(h=e.outline)!=null&&h.border?`border-2 ${d(`border-${o(t,e.outline.border.light)}`,`border-${o(t,e.outline.border.dark||e.outline.border.light)}`)}`:"",_=((k=e.outline)==null?void 0:k.background)||"bg-transparent",H=(p=e.outline)!=null&&p.text?d(`text-${o(t,e.outline.text.light)}`,`text-${o(t,e.outline.text.dark||e.outline.text.light)}`):"",T=b(E,_,H),N=(x=e.elevated)!=null&&x.border?d(`border-${o(t,e.elevated.border.light)}`,`border-${o(t,e.elevated.border.dark||e.elevated.border.light)}`):"",P=(S=e.elevated)!=null&&S.background?d(`bg-${e.elevated.background.light}`,`bg-${e.elevated.background.dark}`):"",V=(y=e.elevated)!=null&&y.shadow?`shadow-${e.elevated.shadow}`:"",A=b(N,P,V),G=(C=e.icon)!=null&&C.background?d(`bg-${o(t,e.icon.background.light)}${e.icon.background.opacity?`/${e.icon.background.opacity}`:""}`,`bg-${o(t,e.icon.background.dark||e.icon.background.light)}${e.icon.background.opacity?`/${e.icon.background.opacity}`:""}`):"",I=(f=e.icon)!=null&&f.text?d(`text-${o(t,e.icon.text.light)}`,`text-${o(t,e.icon.text.dark||e.icon.text.light)}`):"",O=b(G,I),D=($=e.badge)!=null&&$.background?d(`bg-${o(t,e.badge.background.light)}${e.badge.background.opacity?`/${e.badge.background.opacity}`:""}`,`bg-${o(t,e.badge.background.dark||e.badge.background.light)}${e.badge.background.opacity?`/${e.badge.background.opacity}`:""}`):"",F=(m=e.badge)!=null&&m.text?d(`text-${o(t,e.badge.text.light)}`,`text-${o(t,e.badge.text.dark||e.badge.text.light)}`):"",J=b(D,F);return {default:w,gradient:R,outline:T,elevated:A,icon:O,badge:J}}var i=new Map;function L(t,r){let e=`${t}-${JSON.stringify(r||{})}`;return i.has(e)||i.set(e,j(t,r)),i.get(e)}function X(t,r){let e="rounded-2xl border transition-all duration-200";switch(t){case "default":return b(e,r.default);case "gradient":return b(e,"text-white",r.gradient);case "outline":return b(e,r.outline);case "elevated":return b(e,r.elevated);default:return e}}function Y(t="md"){return {sm:{container:"p-4",icon:"h-4 w-4",iconContainer:"w-8 h-8",text:"text-xs",title:"text-xs",description:"text-xs"},md:{container:"p-6",icon:"h-6 w-6",iconContainer:"w-12 h-12",text:"text-base",title:"text-sm",description:"text-sm"},lg:{container:"p-8",icon:"h-8 w-8",iconContainer:"w-16 h-16",text:"text-lg",title:"text-base",description:"text-base"},xl:{container:"p-10",icon:"h-10 w-10",iconContainer:"w-20 h-20",text:"text-xl",title:"text-lg",description:"text-lg"}}[t]}function Z(t="md"){return {sm:"rounded",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl",full:"rounded-full",none:"rounded-none"}[t]}function ee(t="md"){return t==="none"?"":`shadow-${t}`}var te="cubic-bezier(0.34, 1.56, 0.64, 1)";function re(t="springy",r=false){if(r||t==="none")return "";let e="[transition:transform_180ms_cubic-bezier(0.34,1.56,0.64,1),box-shadow_200ms_ease-out]";return {springy:`hover:scale-[1.015] hover:shadow-md active:scale-[0.985] ${e} 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 ${e} transform-gpu`,none:""}[t]}export{j as a,L as b,X as c,Y as d,Z as e,ee as f,te as g,re as h};//# sourceMappingURL=chunk-MDLCJASB.mjs.map
3
- //# sourceMappingURL=chunk-MDLCJASB.mjs.map
@@ -1,3 +0,0 @@
1
- "use client";
2
- import {l}from'./chunk-7OYT3QSY.mjs';import {b}from'./chunk-U6CTBZ2U.mjs';import f from'react';import {jsx,jsxs}from'react/jsx-runtime';var M=f.forwardRef(({children:s,className:r,type:o="single",defaultValue:a,value:n,onValueChange:c,collapsible:u=false,...v},m)=>{let[l,d]=f.useState(n?Array.isArray(n)?n:[n]:a?Array.isArray(a)?a:[a]:[]);f.useEffect(()=>{n!==void 0&&d(Array.isArray(n)?n:[n]);},[n]);let y=e=>{let t;o==="single"?l.includes(e)?t=u?[]:l:t=[e]:l.includes(e)?t=l.filter(i=>i!==e):t=[...l,e],d(t),c==null||c(o==="single"?t[0]||"":t);},p=f.useMemo(()=>{let e=[];return f.Children.forEach(s,t=>{if(f.isValidElement(t)){let i=t.props;i.value&&e.push(i.value);}}),e},[s]),h=e=>{var D;let t=e.target;if(!t.hasAttribute("data-accordion-trigger"))return;let i=t.getAttribute("data-accordion-value");if(!i)return;let x=p.indexOf(i);if(x===-1)return;let T=x;if(e.key==="ArrowDown"?(e.preventDefault(),T=x<p.length-1?x+1:0):e.key==="ArrowUp"?(e.preventDefault(),T=x>0?x-1:p.length-1):e.key==="Home"?(e.preventDefault(),T=0):e.key==="End"&&(e.preventDefault(),T=p.length-1),T!==x&&p[T]){let P=(D=t.closest("[data-accordion-item]"))==null?void 0:D.querySelector(`[data-accordion-value="${p[T]}"]`);P==null||P.focus();}};return jsx("div",{ref:m,className:b("space-y-2",r),onKeyDown:h,...v,children:f.Children.map(s,e=>f.isValidElement(e)?f.cloneElement(e,{openItems:l,onToggle:y}):e)})});M.displayName="Accordion";var k=f.forwardRef(({value:s,children:r,className:o,disabled:a=false,openItems:n=[],onToggle:c,...u},v)=>{let m=n.includes(s);return jsx("div",{ref:v,"data-accordion-item":true,className:b("border border-border/50 rounded-lg overflow-hidden",a&&"opacity-50 pointer-events-none",o),...u,children:f.Children.map(r,l=>f.isValidElement(l)?f.cloneElement(l,{value:s,isOpen:m,disabled:a,onToggle:()=>c==null?void 0:c(s),"data-accordion-value":s}):l)})});k.displayName="AccordionItem";var I=f.forwardRef(({children:s,className:r,icon:o,iconPosition:a="right",value:n,isOpen:c=false,disabled:u=false,onToggle:v,...m},l$1)=>{let d=jsx(l,{name:"chevronDown",size:20,className:b("transition-transform duration-300 ease-out text-muted-foreground",c&&"rotate-180")}),y=`accordion-content-${n}`,p=`accordion-trigger-${n}`;return jsxs("button",{ref:l$1,id:p,"data-accordion-trigger":true,"data-accordion-value":n,"aria-expanded":c,"aria-controls":y,onClick:v,disabled:u,className:b("flex w-full items-center justify-between px-6 py-4 text-left font-medium transition-all hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",r),...m,children:[jsxs("div",{className:"flex items-center gap-3 flex-1",children:[a==="left"&&(o||d),jsx("span",{className:"flex-1",children:s})]}),a==="right"&&(o||d)]})});I.displayName="AccordionTrigger";var C=f.forwardRef(({children:s,className:r,isOpen:o=false,value:a,"data-accordion-value":n,...c},u)=>{let[v,m]=f.useState(0),l=f.useRef(null),d=a||n||"unknown";f.useEffect(()=>{l.current&&m(o?l.current.scrollHeight:0);},[o,s]);let y=`accordion-trigger-${d}`,p=`accordion-content-${d}`;return jsx("div",{ref:u,id:p,role:"region","aria-labelledby":y,hidden:!o,className:"overflow-hidden transition-all duration-300 ease-out",style:{height:`${v}px`},...c,children:jsx("div",{ref:l,className:b("px-6 pt-2 pb-4",r),children:s})})});C.displayName="AccordionContent";var L=f.forwardRef(({className:s,value:r,active:o,children:a,...n},c)=>o===false?null:jsx("div",{ref:c,role:"tabpanel",id:`tabpanel-${r}`,"aria-labelledby":`tab-${r}`,hidden:!o,className:b("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2",s),...n,children:a}));L.displayName="TabsContent";var A=f.forwardRef(({className:s,value:r,defaultValue:o,onValueChange:a,orientation:n="horizontal",variant:c="default",size:u="md",children:v,...m},l)=>{let[d,y]=f.useState(r||o||""),p=r!==void 0,h=p?r:d,e=t=>{p||y(t),a==null||a(t);};return f.useEffect(()=>{r!==void 0&&y(r);},[r]),jsx("div",{ref:l,className:b("w-full",n==="vertical"&&"flex",s),...m,children:f.Children.map(v,t=>{if(f.isValidElement(t)){if(t.type===L){let i=t.props;return f.cloneElement(t,{active:i.value===h})}if(t.type===N)return f.cloneElement(t,{value:h,onValueChange:e,orientation:n,variant:c,size:u});if(typeof t.type!="string")return f.cloneElement(t,{value:h,onValueChange:e,orientation:n,variant:c,size:u})}return t})})});A.displayName="Tabs";var N=f.forwardRef(({className:s,value:r,onValueChange:o,orientation:a="horizontal",variant:n="default",size:c="md",children:u,...v},m)=>{let l=f.useRef(null);f.useImperativeHandle(m,()=>l.current);let d=f.useMemo(()=>{let e=[];return f.Children.forEach(u,t=>{if(f.isValidElement(t)){let i=t.props;i.value&&e.push(i.value);}}),e},[u]),y=e=>{var x;if(!r||d.length===0)return;let t=d.indexOf(r);if(t===-1)return;let i=t;if(a==="horizontal"?e.key==="ArrowLeft"?(e.preventDefault(),i=t>0?t-1:d.length-1):e.key==="ArrowRight"?(e.preventDefault(),i=t<d.length-1?t+1:0):e.key==="Home"?(e.preventDefault(),i=0):e.key==="End"&&(e.preventDefault(),i=d.length-1):e.key==="ArrowUp"?(e.preventDefault(),i=t>0?t-1:d.length-1):e.key==="ArrowDown"?(e.preventDefault(),i=t<d.length-1?t+1:0):e.key==="Home"?(e.preventDefault(),i=0):e.key==="End"&&(e.preventDefault(),i=d.length-1),i!==t&&d[i]){o==null||o(d[i]);let T=(x=l.current)==null?void 0:x.querySelector(`[data-tab-value="${d[i]}"]`);T==null||T.focus();}},p=()=>{switch(n){case "pills":return "bg-muted p-3 rounded-xl border border-border/50";case "underline":return "border-b border-border";case "cards":return "bg-muted/80 p-3 rounded-xl border border-border/50";default:return "bg-muted p-3 rounded-xl border border-border/50"}},h=()=>{switch(c){case "sm":return "h-12";case "lg":return "h-16";default:return "h-14"}};return jsx("div",{ref:l,role:"tablist","aria-orientation":a,onKeyDown:y,className:b("flex items-center justify-center",a==="vertical"&&"flex-col",p(),h(),s),...v,children:f.Children.map(u,e=>{if(f.isValidElement(e)){if(typeof e.type=="string")return e;let t=e.props;return f.cloneElement(e,{onValueChange:o,orientation:a,variant:n,size:c,active:t.value===r})}return e})})});N.displayName="TabsList";var z=f.forwardRef(({className:s,value:r,onValueChange:o,orientation:a="horizontal",variant:n="default",size:c="md",active:u=false,children:v,...m},l)=>{let d=()=>{switch(n){case "pills":return b("inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"bg-background text-foreground shadow-md":"text-muted-foreground hover:text-foreground hover:bg-muted");case "underline":return b("inline-flex items-center justify-center whitespace-nowrap border-b-2 px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground");case "cards":return b("inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"bg-background text-foreground shadow-md":"text-muted-foreground hover:text-foreground hover:bg-muted");default:return b("inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"bg-background text-foreground shadow-md":"text-muted-foreground hover:text-foreground hover:bg-muted")}},y=()=>{switch(c){case "sm":return "h-10 px-4 py-2 text-xs";case "lg":return "h-14 px-6 py-3 text-base";default:return "h-12 px-5 py-2.5 text-sm"}},p=()=>{o&&o(r);};return jsx("button",{ref:l,role:"tab","aria-selected":u,"aria-controls":`tabpanel-${r}`,id:`tab-${r}`,"data-tab-value":r,tabIndex:u?0:-1,className:b(d(),y(),s),onClick:p,type:"button",...m,children:v})});z.displayName="TabsTrigger";var $=f.forwardRef((s,r)=>jsx(A,{ref:r,variant:"pills",...s}));$.displayName="TabsPills";var S=f.forwardRef((s,r)=>jsx(A,{ref:r,variant:"underline",...s}));S.displayName="TabsUnderline";var K=f.forwardRef((s,r)=>jsx(A,{ref:r,variant:"cards",...s}));K.displayName="TabsCards";export{M as a,k as b,I as c,C as d,L as e,A as f,N as g,z as h,$ as i,S as j,K as k};//# sourceMappingURL=chunk-N56BUOCD.mjs.map
3
- //# sourceMappingURL=chunk-N56BUOCD.mjs.map
@@ -1,13 +0,0 @@
1
- "use client";
2
- import {l}from'./chunk-7OYT3QSY.mjs';import {b}from'./chunk-U6CTBZ2U.mjs';import X,{useState,useRef,useCallback,useEffect,useMemo,createContext,useContext}from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var G=X.forwardRef(({children:r,className:e,type:t="fade",duration:o=500,easing:a="smooth",delay:i=0,autoStart:p=true,onStart:v,onComplete:g,showProgress:s=false,progressClassName:h},m)=>{let[f,c]=useState(false),[l,n]=useState(0),[b$1,T]=useState(false),E=useRef(null),d=useRef(null),u=M=>({linear:P=>P,"ease-in":P=>P*P,"ease-out":P=>1-Math.pow(1-P,2),"ease-in-out":P=>P<.5?2*P*P:1-Math.pow(-2*P+2,2)/2,bounce:P=>P<.36363636363636365?7.5625*P*P:P<.7272727272727273?7.5625*(P-=.5454545454545454)*P+.75:P<.9090909090909091?7.5625*(P-=.8181818181818182)*P+.9375:7.5625*(P-=.9545454545454546)*P+.984375,elastic:P=>Math.pow(2,-10*P)*Math.sin((P-.075)*(2*Math.PI)/.3)+1,smooth:P=>P*P*(3-2*P)})[M],w=useCallback(M=>{d.current||(d.current=M);let k=M-d.current,P=u(a),B=Math.min(k/o,1);B=P(B),n(B),c(B>.1),B<1?E.current=requestAnimationFrame(z=>w(z)):(T(false),n(1),g==null||g());},[o,a,g]),y=useCallback(()=>{T(true),n(0),v==null||v(),d.current=null,E.current=requestAnimationFrame(w);},[w,v]);useEffect(()=>{if(p){let M=setTimeout(()=>{y();},i);return ()=>clearTimeout(M)}},[p,i,y]),useEffect(()=>()=>{E.current&&cancelAnimationFrame(E.current);},[]);let C=(()=>{switch(t){case "fade":return {opacity:f?1:0,transform:"none"};case "slide":return {opacity:f?1:0,transform:`translateX(${(1-l)*100}%)`};case "slide-up":return {opacity:f?1:0,transform:`translateY(${(1-l)*100}%)`};case "slide-down":return {opacity:f?1:0,transform:`translateY(-${(1-l)*100}%)`};case "slide-left":return {opacity:f?1:0,transform:`translateX(-${(1-l)*100}%)`};case "slide-right":return {opacity:f?1:0,transform:`translateX(${(1-l)*100}%)`};case "scale":return {opacity:f?1:0,transform:`scale(${.8+l*.2})`};case "flip":return {opacity:f?1:0,transform:`perspective(1000px) rotateY(${(1-l)*90}deg)`};case "morph":return {opacity:f?1:0,transform:`scale(${.9+l*.1}) rotate(${(1-l)*5}deg)`};case "cube":return {opacity:f?1:0,transform:`perspective(1000px) rotateX(${(1-l)*90}deg) rotateY(${(1-l)*45}deg)`};case "zoom":return {opacity:f?1:0,transform:`scale(${.5+l*.5})`};default:return {opacity:f?1:0,transform:"none"}}})();return jsxs("div",{className:"relative",children:[s&&jsxs("div",{className:b("fixed top-4 right-4 z-50 bg-background rounded-lg px-3 py-2 shadow-lg border",h),children:[jsxs("div",{className:"text-sm font-medium text-foreground",children:["Progress: ",Math.round(l*100),"%"]}),jsx("div",{className:"w-24 h-2 bg-muted rounded-full mt-2",children:jsx("div",{className:"h-full bg-primary rounded-full transition-all duration-100",style:{width:`${l*100}%`}})})]}),jsx("div",{ref:m,className:b("transition-all duration-500 ease-out",e),style:{...C,transitionDuration:`${o}ms`,transitionTimingFunction:a==="smooth"?"cubic-bezier(0.4, 0, 0.2, 1)":a==="bounce"?"cubic-bezier(0.68, -0.55, 0.265, 1.55)":a==="elastic"?"cubic-bezier(0.175, 0.885, 0.32, 1.275)":a},children:r})]})});G.displayName="AdvancedPageTransition";var zt=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"fade",...r})),Dt=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"slide",...r})),Vt=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"scale",...r})),qt=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"flip",...r})),Ot=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"morph",...r})),_t=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"cube",...r})),Ut=X.forwardRef((r,e)=>jsx(G,{ref:e,type:"zoom",...r}));zt.displayName="FadePageTransition";Dt.displayName="SlidePageTransition";Vt.displayName="ScalePageTransition";qt.displayName="FlipPageTransition";Ot.displayName="MorphPageTransition";_t.displayName="CubePageTransition";Ut.displayName="ZoomPageTransition";var Gt=(r={})=>{let[e,t]=useState({isTransitioning:false,isVisible:false,currentStep:0,progress:0}),o=useRef(null),a=useRef(null),i=useRef({type:"fade",duration:500,easing:"smooth",delay:0,stagger:0,direction:"forward",...r}),p=useCallback(c=>({linear:n=>n,"ease-in":n=>n*n,"ease-out":n=>1-Math.pow(1-n,2),"ease-in-out":n=>n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2,bounce:n=>n<.36363636363636365?7.5625*n*n:n<.7272727272727273?7.5625*(n-=.5454545454545454)*n+.75:n<.9090909090909091?7.5625*(n-=.8181818181818182)*n+.9375:7.5625*(n-=.9545454545454546)*n+.984375,elastic:n=>Math.pow(2,-10*n)*Math.sin((n-.075)*(2*Math.PI)/.3)+1,smooth:n=>n*n*(3-2*n)})[c],[]),v=useCallback(c=>{var E;a.current||(a.current=c);let l=c-a.current,n=i.current,b=p(n.easing),T=Math.min(l/n.duration,1);T=b(T),t(d=>({...d,progress:T,isVisible:n.direction==="forward"?T>.1:T<.9,currentStep:Math.floor(T*10)})),T<1?o.current=requestAnimationFrame(v):(t(d=>({...d,isTransitioning:false,progress:n.direction==="forward"?1:0})),(E=n.onComplete)==null||E.call(n));},[p]),g=useCallback(async c=>new Promise(l=>{var b;c&&(i.current={...i.current,...c});let n=i.current;n.onComplete=()=>l(),t(T=>({...T,isTransitioning:true,progress:n.direction==="forward"?0:1})),a.current=null,(b=n.onStart)==null||b.call(n),n.delay?setTimeout(()=>{o.current=requestAnimationFrame(v);},n.delay):o.current=requestAnimationFrame(v);}),[v]),s=useCallback(async()=>new Promise(c=>{let l=i.current;l.direction="backward",l.onComplete=()=>c(),g();}),[g]),h=useCallback(()=>{o.current&&cancelAnimationFrame(o.current);},[]),m=useCallback(()=>{e.isTransitioning&&(o.current=requestAnimationFrame(v));},[e.isTransitioning,v]),f=useCallback(()=>{o.current&&cancelAnimationFrame(o.current),t({isTransitioning:false,isVisible:false,currentStep:0,progress:0});},[]);return useEffect(()=>()=>{o.current&&cancelAnimationFrame(o.current);},[]),[e,{start:g,reverse:s,pause:h,resume:m,reset:f}]};var Kt=(r={})=>{let{defaultType:e="fade",defaultDuration:t=500,defaultEasing:o="smooth",enableHistory:a=true,enableProgress:i=true,enableDebug:p=false}=r,[v,g]=useState({isTransitioning:false,currentTransition:null,transitionHistory:[],totalTransitions:0,averageDuration:0}),s=useRef(new Map),h=useRef(0),m=useCallback((d,u)=>{p&&console.log(`[PageTransitionManager] ${d}`,u);},[p]),f=useCallback(d=>{g(u=>{let w=a?[...u.transitionHistory,d]:u.transitionHistory,y=w.length,R=w.reduce((C,M)=>C+M.duration,0)/y;return {...u,totalTransitions:y,averageDuration:R,transitionHistory:w}});},[a]),c=useCallback(async d=>{let u=`transition_${++h.current}`,w={type:e,duration:t,easing:o,...d},y={id:u,type:w.type,duration:w.duration,easing:w.easing,timestamp:Date.now(),status:"pending"};m("Starting transition",{id:u,config:w}),g(C=>({...C,isTransitioning:true,currentTransition:y}));let R=setTimeout(()=>{var M;let C={...y,status:"completed"};g(k=>({...k,isTransitioning:false,currentTransition:null})),f(C),s.current.delete(u),m("Transition completed",{id:u}),(M=w.onComplete)==null||M.call(w);},w.duration);return s.current.set(u,{timer:R,config:w}),setTimeout(()=>{g(C=>({...C,currentTransition:{...C.currentTransition,status:"active"}}));},50),u},[e,t,o,m,f]),l=useCallback(d=>{let u=s.current.get(d);u&&(clearTimeout(u.timer),s.current.delete(d),g(w=>{var y;return {...w,isTransitioning:s.current.size>0,currentTransition:((y=w.currentTransition)==null?void 0:y.id)===d?null:w.currentTransition}}),m("Transition cancelled",{id:d}));},[m]),n=useCallback(()=>{s.current.forEach(({timer:d},u)=>{clearTimeout(d),m("Transition paused",{id:u});});},[m]),b=useCallback(()=>{s.current.forEach(({config:d},u)=>{c(d);});},[c]),T=useCallback(()=>{g(d=>({...d,transitionHistory:[],totalTransitions:0,averageDuration:0})),m("History cleared");},[m]),E=useCallback(()=>{let{transitionHistory:d}=v,u=d.reduce((y,R)=>(y[R.type]=(y[R.type]||0)+1,y),{}),w=d.reduce((y,R)=>(y[R.status]=(y[R.status]||0)+1,y),{});return {total:d.length,average:v.averageDuration,byType:u,byStatus:w}},[v]);return useEffect(()=>{let d=s.current;return ()=>{d.forEach(({timer:u})=>{clearTimeout(u);}),d.clear();}},[]),[v,{startTransition:c,cancelTransition:l,pauseAll:n,resumeAll:b,clearHistory:T,getTransitionStats:E}]};var pt=X.forwardRef(({children:r,className:e,speed:t=.5,direction:o="up",offset:a=0,disabled:i=false,scale:p=false,opacity:v=false,rotate:g=false,rotateDirection:s="cw",style:h,...m},f)=>{let c=useRef(null),[l,n]=useState({x:0,y:0,scale:1,opacity:1,rotate:0}),b$1=er(),T=useCallback(()=>{if(i||b$1)return;let d=c.current;if(!d)return;let u=d.getBoundingClientRect(),w=window.innerHeight,R=u.top+u.height/2,M=(w/2-R)/w,k=M*t*100+a,P=0,B=0;switch(o){case "up":B=-k;break;case "down":B=k;break;case "left":P=-k;break;case "right":P=k;break}let z=p?1+Math.abs(M)*.1:1,q=v?Math.max(.3,1-Math.abs(M)*.5):1,A=g?M*10*(s==="cw"?1:-1):0;n({x:P,y:B,scale:z,opacity:q,rotate:A});},[i,b$1,t,o,a,p,v,g,s]);useEffect(()=>{if(i||b$1)return;T();let d=()=>{requestAnimationFrame(T);};return window.addEventListener("scroll",d,{passive:true}),window.addEventListener("resize",d,{passive:true}),()=>{window.removeEventListener("scroll",d),window.removeEventListener("resize",d);}},[T,i,b$1]);let E={...h,transform:i||b$1?void 0:`translate3d(${l.x}px, ${l.y}px, 0) scale(${l.scale}) rotate(${l.rotate}deg)`,opacity:i||b$1?1:l.opacity,willChange:i||b$1?void 0:"transform, opacity"};return jsx("div",{ref:tr(f,c),className:b("transition-none",e),style:E,...m,children:r})});pt.displayName="Parallax";function er(){let[r,e]=useState(false);return useEffect(()=>{let t=window.matchMedia("(prefers-reduced-motion: reduce)");e(t.matches);let o=a=>{e(a.matches);};return t.addEventListener("change",o),()=>t.removeEventListener("change",o)},[]),r}function tr(...r){return e=>{r.forEach(t=>{typeof t=="function"?t(e):t&&typeof t=="object"&&(t.current=e);});}}var bt=X.forwardRef(({text:r,className:e,revealColor:t="currentColor",hiddenColor:o="rgba(128, 128, 128, 0.3)",threshold:a=.5,byWord:i=false,byChar:p=false,style:v,...g},s)=>{let h=useRef(null),[m,f]=useState(0),c=sr(),l=useCallback(()=>{if(!h.current)return;let b=h.current.getBoundingClientRect(),T=window.innerHeight,E=T*(1-a),d=T*a,u=b.top+b.height/2,w=0;u<=E&&u>=d?w=(E-u)/(E-d):u<d&&(w=1),f(Math.max(0,Math.min(1,w)));},[a]);useEffect(()=>{if(c){f(1);return}l();let b=()=>{requestAnimationFrame(l);};return window.addEventListener("scroll",b,{passive:true}),window.addEventListener("resize",b,{passive:true}),()=>{window.removeEventListener("scroll",b),window.removeEventListener("resize",b);}},[l,c]);let n=()=>{if(p){let b=r.split("");return b.map((T,E)=>{let d=m*b.length,u=E<d;return jsx("span",{style:{color:u?t:o,transition:"color 0.1s ease-out"},children:T},E)})}if(i){let b=r.split(" ");return b.map((T,E)=>{let d=m*b.length,u=E<d;return jsxs("span",{children:[jsx("span",{style:{color:u?t:o,transition:"color 0.15s ease-out"},children:T}),E<b.length-1&&" "]},E)})}return jsx("span",{style:{background:`linear-gradient(90deg, ${t} ${m*100}%, ${o} ${m*100}%)`,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent",backgroundClip:"text",transition:"background 0.1s ease-out"},children:r})};return jsx("div",{ref:ir(s,h),className:b("font-medium",e),style:v,...g,children:n()})});bt.displayName="TextReveal";function sr(){let[r,e]=useState(false);return useEffect(()=>{let t=window.matchMedia("(prefers-reduced-motion: reduce)");e(t.matches);let o=a=>{e(a.matches);};return t.addEventListener("change",o),()=>t.removeEventListener("change",o)},[]),r}function ir(...r){return e=>{r.forEach(t=>{typeof t=="function"?t(e):t&&typeof t=="object"&&(t.current=e);});}}var yt=X.forwardRef(({children:r,className:e,maxTilt:t=15,perspective:o=1e3,scale:a=1.02,speed:i=400,glare:p=true,maxGlare:v=.3,reset:g=true,style:s,...h},m)=>{let f=useRef(null),[c,l]=useState({rotateX:0,rotateY:0,scale:1}),[n,b$1]=useState({x:50,y:50}),[T,E]=useState(false),d=useCallback(M=>{if(!f.current)return;let k=f.current.getBoundingClientRect(),P=k.left+k.width/2,B=k.top+k.height/2,z=M.clientX-P,q=M.clientY-B,A=z/(k.width/2)*t,U=-(q/(k.height/2))*t;l({rotateX:U,rotateY:A,scale:a});let ve=(M.clientX-k.left)/k.width*100,ee=(M.clientY-k.top)/k.height*100;b$1({x:ve,y:ee});},[t,a]),u=()=>{E(true);},w=()=>{E(false),g&&l({rotateX:0,rotateY:0,scale:1});},y={...s,perspective:`${o}px`},R={transform:`rotateX(${c.rotateX}deg) rotateY(${c.rotateY}deg) scale(${c.scale})`,transition:T?"none":`transform ${i}ms ease-out`,transformStyle:"preserve-3d"},C={position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:"inherit",background:`linear-gradient(
3
- ${Math.atan2(n.y-50,n.x-50)*(180/Math.PI)+90}deg,
4
- rgba(255, 255, 255, ${T?v:0}) 0%,
5
- transparent 80%
6
- )`,transition:T?"opacity 0.1s ease-out":`opacity ${i}ms ease-out`,pointerEvents:"none",opacity:T?1:0};return jsx("div",{ref:gr(m,f),className:b("relative",e),style:y,onMouseMove:d,onMouseEnter:u,onMouseLeave:w,...h,children:jsxs("div",{style:R,className:"relative",children:[r,p&&jsx("div",{style:C,"aria-hidden":"true"})]})})});yt.displayName="TiltCard";function gr(...r){return e=>{r.forEach(t=>{typeof t=="function"?t(e):t&&typeof t=="object"&&(t.current=e);});}}var Tt=X.forwardRef(({src:r,type:e="native",poster:t,autoPlay:o=true,loop:a=true,muted:i=true,controls:p=false,objectFit:v="cover",overlay:g=true,overlayColor:s="rgba(0, 0, 0, 0.4)",gradient:h=false,gradientDirection:m="bottom",playbackRate:f=1,fadeIn:c=true,children:l,className:n,style:b$1,...T},E)=>{let d=useRef(null),[u,w]=useState(false),[y,R]=useState(false);useEffect(()=>{e==="native"&&d.current&&(d.current.playbackRate=f);},[f,e]);let C=()=>{w(true);},M=()=>{R(true);},k=A=>{let U=new URLSearchParams({autoplay:o?"1":"0",mute:i?"1":"0",loop:a?"1":"0",controls:p?"1":"0",playlist:A,modestbranding:"1",rel:"0",showinfo:"0",iv_load_policy:"3",disablekb:"1",enablejsapi:"1",playsinline:"1"});return `https://www.youtube.com/embed/${A}?${U.toString()}`},P=A=>{let U=new URLSearchParams({autoplay:o?"1":"0",muted:i?"1":"0",loop:a?"1":"0",controls:p?"1":"0",background:"1",quality:"auto",dnt:"1"});return `https://player.vimeo.com/video/${A}?${U.toString()}`},B=()=>{let A={cover:"object-cover",contain:"object-contain",fill:"object-fill"}[v];switch(e){case "youtube":return jsx("iframe",{src:k(r),className:b("absolute inset-0 w-full h-full pointer-events-none","scale-[1.2]"),style:{opacity:u||!c?1:0,transition:c?"opacity 0.8s ease-out":void 0},allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:true,onLoad:()=>w(true),title:"YouTube video background"});case "vimeo":return jsx("iframe",{src:P(r),className:"absolute inset-0 w-full h-full pointer-events-none",style:{opacity:u||!c?1:0,transition:c?"opacity 0.8s ease-out":void 0},allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:true,onLoad:()=>w(true),title:"Vimeo video background"});default:return jsx("video",{ref:d,src:r,poster:t,autoPlay:o,loop:a,muted:i,controls:p,playsInline:true,className:b("absolute inset-0 w-full h-full",A),style:{opacity:y||!c?1:0,transition:c?"opacity 0.8s ease-out":void 0},onLoadedData:C,onPlaying:M})}},z=()=>{if(!h)return null;let A=[];return (m==="top"||m==="both")&&A.push(jsx("div",{className:"absolute top-0 left-0 right-0 h-1/3",style:{background:`linear-gradient(to bottom, ${s}, transparent)`},"aria-hidden":"true"},"top")),(m==="bottom"||m==="both")&&A.push(jsx("div",{className:"absolute bottom-0 left-0 right-0 h-1/3",style:{background:`linear-gradient(to top, ${s}, transparent)`},"aria-hidden":"true"},"bottom")),jsx(Fragment,{children:A})},q=n&&/\b(fixed|absolute|sticky)\b/.test(n);return jsxs("div",{ref:E,className:b("overflow-hidden",!q&&"relative",n),style:b$1,...T,children:[t&&c&&!u&&!y&&jsx("div",{className:"absolute inset-0 bg-cover bg-center",style:{backgroundImage:`url(${t})`},"aria-hidden":"true"}),B(),g&&!h&&jsx("div",{className:"absolute inset-0",style:{backgroundColor:s},"aria-hidden":"true"}),z(),l&&jsx("div",{className:"relative z-10 h-full",children:l})]})});Tt.displayName="VideoBackground";var Pt=X.forwardRef(({src:r,alt:e,direction:t="left",threshold:o=.3,height:a="400px",overlayColor:i,className:p,style:v,...g},s)=>{let h=useRef(null),[m,f]=useState(0),c=wr(),l=useCallback(()=>{if(!h.current)return;let b=h.current.getBoundingClientRect(),T=window.innerHeight,E=T*(1-o),d=T*o,u=b.top+b.height/2,w=0;u<=E&&u>=d?w=(E-u)/(E-d):u<d&&(w=1),f(Math.max(0,Math.min(1,w)));},[o]);useEffect(()=>{if(c){f(1);return}l();let b=()=>requestAnimationFrame(l);return window.addEventListener("scroll",b,{passive:true}),window.addEventListener("resize",b,{passive:true}),()=>{window.removeEventListener("scroll",b),window.removeEventListener("resize",b);}},[l,c]);let n=Er(t,m);return jsxs("div",{ref:Pr(s,h),className:b("relative overflow-hidden",p),style:{height:a,...v},...g,children:[jsx("img",{src:r,alt:e,className:"absolute inset-0 w-full h-full object-cover",style:{clipPath:n,transition:"clip-path 0.1s ease-out"}}),i&&jsx("div",{className:"absolute inset-0 pointer-events-none",style:{background:i,opacity:1-m,transition:"opacity 0.3s ease-out"},"aria-hidden":"true"})]})});Pt.displayName="ImageReveal";function Er(r,e){switch(r){case "left":return `inset(0 ${100-e*100}% 0 0)`;case "right":return `inset(0 0 0 ${100-e*100}%)`;case "up":return `inset(0 0 ${100-e*100}% 0)`;case "down":return `inset(${100-e*100}% 0 0 0)`;default:return `inset(0 ${100-e*100}% 0 0)`}}function wr(){let[r,e]=useState(false);return useEffect(()=>{let t=window.matchMedia("(prefers-reduced-motion: reduce)");e(t.matches);let o=a=>e(a.matches);return t.addEventListener("change",o),()=>t.removeEventListener("change",o)},[]),r}function Pr(...r){return e=>{r.forEach(t=>{typeof t=="function"?t(e):t&&typeof t=="object"&&(t.current=e);});}}var Mt=X.forwardRef(({items:r,position:e="right",activeColor:t="bg-primary",inactiveColor:o="bg-muted-foreground/30",className:a,...i},p)=>{let[v,g]=useState(0),s=useCallback(()=>{let f=window.innerHeight,c=0,l=1/0;r.forEach((n,b)=>{let T=document.getElementById(n.id);if(!T)return;let E=T.getBoundingClientRect(),d=Math.abs(E.top-f*.3);d<l&&(l=d,c=b);}),g(c);},[r]);useEffect(()=>(s(),window.addEventListener("scroll",s,{passive:true}),()=>window.removeEventListener("scroll",s)),[s]);let h=useCallback(f=>{let c=document.getElementById(f);c&&c.scrollIntoView({behavior:"smooth",block:"start"});},[]),m=useMemo(()=>e==="left"?"left-4":"right-4",[e]);return jsx("nav",{ref:p,className:b("fixed top-1/2 -translate-y-1/2 z-40 flex flex-col gap-3",m,a),"aria-label":"Section navigation",...i,children:r.map((f,c)=>jsx("button",{onClick:()=>h(f.id),className:b("group relative w-3 h-3 rounded-full transition-all duration-300",c===v?`${t} scale-125`:`${o} hover:scale-110`),"aria-label":f.label||f.id,"aria-current":c===v?"true":void 0,children:f.label&&jsx("span",{className:b("absolute top-1/2 -translate-y-1/2 whitespace-nowrap px-2 py-1 text-xs rounded bg-popover text-popover-foreground shadow-md opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none",e==="right"?"right-full mr-2":"left-full ml-2"),children:f.label})},f.id))})});Mt.displayName="DotNav";var Nt=X.forwardRef(({children:r,heightMultiplier:e=1,snap:t=false,onProgress:o,className:a,style:i,...p},v)=>{let g=useRef(null),s=useRef(null),[h,m]=useState(0),[f,c]=useState(0);useEffect(()=>{if(!s.current)return;let T=()=>{s.current&&m(s.current.scrollWidth-window.innerWidth);};T();let E=new ResizeObserver(T);return E.observe(s.current),()=>E.disconnect()},[r]);let l=useCallback(()=>{if(!g.current||h<=0)return;let T=g.current.getBoundingClientRect(),E=g.current.offsetHeight-window.innerHeight,d=-T.top,u=Math.max(0,Math.min(1,d/E));c(u),o==null||o(u);},[h,o]);useEffect(()=>(window.addEventListener("scroll",l,{passive:true}),()=>window.removeEventListener("scroll",l)),[l]);let b$1=`${X.Children.count(r)*e*100}vh`;return jsx("div",{ref:Lr(v,g),className:b("relative",a),style:{height:b$1,...i},...p,children:jsx("div",{className:"sticky top-0 h-screen overflow-hidden",children:jsx("div",{ref:s,className:b("flex h-full will-change-transform",t&&"scroll-snap-x"),style:{transform:`translateX(${-f*h}px)`},children:X.Children.map(r,(T,E)=>jsx("div",{className:b("flex-shrink-0 w-screen h-full",t&&"snap-start"),children:T},E))})})})});Nt.displayName="HorizontalScroll";function Lr(...r){return e=>{r.forEach(t=>{typeof t=="function"?t(e):t&&typeof t=="object"&&(t.current=e);});}}function Se(r){return r.toLowerCase().replace(/[^a-z0-9가-힣ぁ-んァ-ン一-龯_.~\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"").trim()}function Sr(r){return !r||r.length===0||r.length>200?false:/^[a-z0-9가-힣ぁ-んァ-ン一-龯_.~-]+$/.test(r)}function He(r){return r.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9가-힣ぁ-んァ-ン一-龯_.~-]/g,"").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}var $r={pageTitle:"\uC0C8 \uAE00 \uC791\uC131",editTitle:"\uAE00 \uC218\uC815",preview:"\uBBF8\uB9AC\uBCF4\uAE30",editMode:"\uD3B8\uC9D1",basicInfo:"\uAE30\uBCF8 \uC815\uBCF4",slug:"\uC2AC\uB7EC\uADF8",slugPrefix:"/blog/",tags:"\uD0DC\uADF8",tagsPlaceholder:"\uAC1C\uBC1C, \uC77C\uC0C1, \uC5C5\uB370\uC774\uD2B8",coverImage:"\uCEE4\uBC84 \uC774\uBBF8\uC9C0 URL",coverImagePlaceholder:"https://example.com/image.jpg",publishDate:"\uBC1C\uD589 \uC608\uC57D\uC77C\uC2DC",publishDateHint:"\uBE44\uC6CC\uB450\uBA74 \uC989\uC2DC \uBC1C\uD589\uB428",expiresAt:"\uB9CC\uB8CC \uC77C\uC2DC",expiresAtHint:"\uBE44\uC6CC\uB450\uBA74 \uB9CC\uB8CC\uB418\uC9C0 \uC54A\uC74C",titleLabel:"\uC81C\uBAA9",titlePlaceholder:"\uC81C\uBAA9\uC744 \uC785\uB825\uD558\uC138\uC694",excerpt:"\uC694\uC57D",excerptPlaceholder:"\uCE74\uB4DC\uC5D0 \uD45C\uC2DC\uB420 \uC9E7\uC740 \uC694\uC57D",contentLabel:"\uBCF8\uBB38",contentPlaceholder:"\uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC791\uC131\uD558\uC138\uC694...",cancel:"\uCDE8\uC18C",saveDraft:"\uC784\uC2DC\uC800\uC7A5",publish:"\uBC1C\uD589",update:"\uC218\uC815 \uC644\uB8CC",saving:"\uC800\uC7A5 \uC911...",translateHint:"AI \uBC88\uC5ED \uAE30\uB2A5",translateButton:"AI \uBC88\uC5ED",translating:"\uBC88\uC5ED \uC911...",translateSuccess:"\uBC88\uC5ED \uC644\uB8CC!",requiredFields:"\uD544\uC218 \uD544\uB4DC\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694",saveError:"\uC800\uC7A5 \uC911 \uC624\uB958 \uBC1C\uC0DD",translateError:"\uBC88\uC5ED \uC911 \uC624\uB958 \uBC1C\uC0DD",noTitle:"\uC81C\uBAA9 \uC5C6\uC74C",bold:"\uAD75\uAC8C",italic:"\uAE30\uC6B8\uC784",strikethrough:"\uCDE8\uC18C\uC120",heading:"\uC81C\uBAA9",link:"\uB9C1\uD06C",image:"\uC774\uBBF8\uC9C0",code:"\uCF54\uB4DC",codeBlock:"\uCF54\uB4DC\uBE14\uB85D",quote:"\uC778\uC6A9\uBB38",list:"\uBAA9\uB85D",orderedList:"\uC21C\uC11C \uBAA9\uB85D",horizontalRule:"\uC218\uD3C9\uC120"},Ir={enableSlug:true,enableTags:true,enableCoverImage:true,enablePublishDate:true,enableExcerpt:true,enableTranslation:true,enablePreview:true,enableMarkdownToolbar:true,enableAutoSave:true,enableExpiresAt:false},Fr=[{key:"ko",label:"\uD55C\uAD6D\uC5B4",isPrimary:true,flag:"\u{1F1F0}\u{1F1F7}"},{key:"en",label:"English",flag:"\u{1F1FA}\u{1F1F8}"},{key:"ja",label:"\u65E5\u672C\u8A9E",flag:"\u{1F1EF}\u{1F1F5}"}];function $e(r){let e={};return r.forEach(t=>{e[t.key]="";}),e}function zr(r,e){var t,o,a,i,p,v,g,s;return {slug:(t=e==null?void 0:e.slug)!=null?t:"",title:(o=e==null?void 0:e.title)!=null?o:$e(r),excerpt:(a=e==null?void 0:e.excerpt)!=null?a:$e(r),content:(i=e==null?void 0:e.content)!=null?i:$e(r),tags:(p=e==null?void 0:e.tags)!=null?p:[],coverImage:(v=e==null?void 0:e.coverImage)!=null?v:"",publishedAt:(g=e==null?void 0:e.publishedAt)!=null?g:null,expiresAt:(s=e==null?void 0:e.expiresAt)!=null?s:null}}var Ht=createContext(null);function H(){let r=useContext(Ht);if(!r)throw new Error("useBlogEditor must be used within a BlogEditorProvider");return r}function Ie({children:r,initialData:e,isEditMode:t=false,languages:o=Fr,defaultLanguage:a,labels:i,callbacks:p,features:v,variant:g="default",autoSaveKey:s,autoSaveInterval:h=3e3}){var et,tt,rt,ot;let m=(ot=(rt=(et=o.find(L=>L.isPrimary))==null?void 0:et.key)!=null?rt:(tt=o[0])==null?void 0:tt.key)!=null?ot:"ko",f=a!=null?a:m,c=useMemo(()=>({...$r,...i}),[i]),l=useMemo(()=>({...Ir,...v}),[v]),[n,b]=useState(()=>zr(o,e)),[T,E]=useState(f),[d,u]=useState(false),[w,y]=useState(false),[R,C]=useState(false),[M,k]=useState(false),[P,B]=useState(null),[z,q]=useState(false),[A,U]=useState(t||!!(e!=null&&e.slug)),[ve,ee]=useState("idle"),ne=useRef(null),Ye=useRef(true),Y=s||(t?null:"blog-editor-draft");useEffect(()=>{if(!(!l.enableAutoSave||!Y||t))try{let L=localStorage.getItem(Y);if(L){let F=JSON.parse(L);b(F);}}catch{}},[]),useEffect(()=>{if(!(!l.enableAutoSave||!Y)){if(Ye.current){Ye.current=false;return}return ne.current&&clearTimeout(ne.current),ee("saving"),ne.current=setTimeout(()=>{try{localStorage.setItem(Y,JSON.stringify(n)),ee("saved"),setTimeout(()=>ee("idle"),2e3);}catch{ee("idle");}},h),()=>{ne.current&&clearTimeout(ne.current);}}},[n,l.enableAutoSave,Y,h]);let Xe=useCallback(()=>{if(Y)try{localStorage.removeItem(Y);}catch{}},[Y]),Ge=useCallback((L,F)=>{b(K=>({...K,[L]:F}));},[]),We=useCallback((L,F,K)=>{b(Q=>({...Q,[L]:{...Q[L],[F]:K}}));},[]),je=useCallback(L=>Se(L),[]),Ke=useCallback(async L=>{let F=n.title[m],K=n.content[m];if(!F||!K){B(c.requiredFields);return}if(l.enableSlug&&!n.slug){B(c.requiredFields);return}y(true),B(null);try{await p.onSave(n,L),Xe();}catch{B(c.saveError);}finally{y(false);}},[n,m,c,l,p,Xe]),Qe=useCallback(async()=>{if(!p.onTranslate)return;let L=n.title[m],F=n.content[m],K=n.excerpt[m];if(!L||!F){B(c.requiredFields);return}C(true),B(null),q(false);try{let Q=await p.onTranslate({sourceLanguage:m,title:L,content:F,excerpt:K||void 0});b(ye=>{let nt={...ye.title},at={...ye.content},st={...ye.excerpt};return Object.keys(Q).forEach(ae=>{if(ae!==m){let Re=Q[ae];if(typeof Re=="object"&&Re!==null){let te=Re;te.title&&(nt[ae]=te.title),te.content&&(at[ae]=te.content),te.excerpt&&(st[ae]=te.excerpt);}}}),{...ye,title:nt,content:at,excerpt:st}}),q(!0),setTimeout(()=>q(!1),3e3);}catch{B(c.translateError);}finally{C(false);}},[n,m,c,p]),Je=useCallback(async L=>{if(!p.onUploadImage)return null;k(true),B(null);try{return await p.onUploadImage(L)}catch{return B("\uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC \uC2E4\uD328"),null}finally{k(false);}},[p]),Ze=useCallback(()=>{var L;(L=p.onCancel)==null||L.call(p);},[p]),Ft=useMemo(()=>({formData:n,activeLanguage:T,showPreview:d,submitting:w,translating:R,uploading:M,error:P,translateSuccess:z,autoSaveStatus:ve,languages:o,features:l,labels:c,variant:g,isEditMode:t,setActiveLanguage:E,setShowPreview:u,updateField:Ge,updateMultilingualField:We,handleSave:Ke,handleTranslate:Qe,handleUploadImage:Je,handleCancel:Ze,setError:B,generateSlug:je,slugManuallyEdited:A,setSlugManuallyEdited:U}),[n,T,d,w,R,M,P,z,ve,o,l,c,g,t,Ge,We,Ke,Qe,Je,Ze,je,A,U]);return jsx(Ht.Provider,{value:Ft,children:r})}var se=X.forwardRef(({onBack:r,backLink:e,className:t},o)=>{let{labels:a,isEditMode:i,formData:p}=H();return jsx("header",{ref:o,className:b("flex items-center justify-between mb-8",t),children:jsxs("div",{className:"flex items-center gap-4",children:[e||r&&jsx("button",{type:"button",onClick:r,className:"p-2 text-muted-foreground hover:text-foreground transition-colors","aria-label":"\uB4A4\uB85C\uAC00\uAE30",children:jsx(l,{name:"chevronLeft",size:24})}),jsxs("div",{children:[jsx("h1",{className:"text-2xl font-bold text-foreground",children:i?a.editTitle:a.pageTitle}),i&&p.slug&&jsxs("p",{className:"text-sm text-muted-foreground",children:[a.slugPrefix,p.slug]})]})]})})});se.displayName="BlogEditorHeader";var ie=X.forwardRef(({className:r},e)=>{var u,w;let{formData:t,updateField:o,features:a,labels:i,variant:p,handleUploadImage:v,uploading:g,setSlugManuallyEdited:s}=H(),[h,m]=useState(""),f=useRef(null),c=b("rounded-xl p-6 space-y-4",p==="glass"?"bg-white/10 backdrop-blur-sm border border-white/20 dark:bg-background/20 dark:border-border/50":p==="minimal"?"bg-transparent":"bg-background",r),l$1="w-full px-3 py-2 border border-border rounded-lg bg-background text-foreground focus:ring-1 focus:ring-ring focus:border-transparent transition-colors",n="block text-sm font-medium text-foreground mb-1",b$1=useCallback(y=>{let R=y.trim();R&&!t.tags.includes(R)&&o("tags",[...t.tags,R]),m("");},[t.tags,o]),T=useCallback(y=>{o("tags",t.tags.filter(R=>R!==y));},[t.tags,o]),E=useCallback(y=>{let R=y.target.value;if(R.includes(",")){let C=R.split(",");C.forEach((M,k)=>{k<C.length-1?b$1(M):m(M);});}else m(R);},[b$1]),d=useCallback(y=>{y.key==="Enter"?(y.preventDefault(),b$1(h)):y.key==="Backspace"&&!h&&t.tags.length>0&&T(t.tags[t.tags.length-1]);},[h,t.tags,b$1,T]);return jsxs("div",{ref:e,className:c,children:[jsx("h2",{className:"font-semibold text-foreground",children:i.basicInfo}),jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[a.enableSlug&&jsxs("div",{children:[jsxs("label",{className:n,children:[i.slug," *"]}),jsxs("div",{className:"flex items-center",children:[jsx("span",{className:"text-muted-foreground mr-1 text-sm",children:i.slugPrefix}),jsx("input",{type:"text",value:t.slug,onChange:y=>{o("slug",He(y.target.value)),s(true);},className:b(l$1,"flex-1"),placeholder:"my-post-slug"})]})]}),a.enableTags&&jsxs("div",{children:[jsx("label",{className:n,children:i.tags}),jsxs("div",{className:b("flex flex-wrap items-center gap-2 min-h-[42px] px-3 py-2 border border-border rounded-lg bg-background focus-within:ring-1 focus-within:ring-ring focus-within:border-transparent transition-colors"),children:[t.tags.map(y=>jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary text-sm rounded-md",children:[y,jsx("button",{type:"button",onClick:()=>T(y),className:"hover:text-primary transition-colors","aria-label":`${y} \uD0DC\uADF8 \uC0AD\uC81C`,children:jsx(l,{name:"x",size:14})})]},y)),jsx("input",{type:"text",value:h,onChange:E,onKeyDown:d,className:"flex-1 min-w-[100px] bg-transparent outline-none text-foreground text-sm",placeholder:t.tags.length===0?i.tagsPlaceholder:"\uD0DC\uADF8 \uCD94\uAC00..."})]}),jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"\uC27C\uD45C(,) \uB610\uB294 Enter\uB85C \uD0DC\uADF8 \uCD94\uAC00"})]})]}),a.enableCoverImage&&jsxs("div",{children:[jsx("label",{className:n,children:i.coverImage}),jsxs("div",{className:"space-y-3",children:[t.coverImage&&jsxs("div",{className:"relative w-full h-40 rounded-lg overflow-hidden bg-muted",children:[jsx("img",{src:t.coverImage,alt:"\uCEE4\uBC84 \uC774\uBBF8\uC9C0 \uBBF8\uB9AC\uBCF4\uAE30",className:"w-full h-full object-cover"}),jsx("button",{type:"button",onClick:()=>o("coverImage",""),className:"absolute top-2 right-2 p-1.5 bg-red-500 text-white rounded-full hover:bg-red-600 transition-colors","aria-label":"\uC774\uBBF8\uC9C0 \uC0AD\uC81C",children:jsx(l,{name:"x",size:14})})]}),jsxs("div",{className:"flex gap-2",children:[jsx("input",{type:"text",value:t.coverImage,onChange:y=>o("coverImage",y.target.value),className:b(l$1,"flex-1"),placeholder:i.coverImagePlaceholder}),jsx("input",{ref:f,type:"file",accept:"image/*",className:"hidden",onChange:async y=>{var C;let R=(C=y.target.files)==null?void 0:C[0];if(R){let M=await v(R);M&&o("coverImage",M);}y.target.value="";}}),jsx("button",{type:"button",onClick:()=>{var y;return (y=f.current)==null?void 0:y.click()},disabled:g,className:"px-3 py-2 border border-border rounded-lg hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed transition-colors",title:"\uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC",children:g?jsx(l,{name:"loader",size:20,spin:true}):jsx(l,{name:"upload",size:20})})]})]})]}),jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[a.enablePublishDate&&jsxs("div",{children:[jsx("label",{className:n,children:i.publishDate}),jsx("input",{type:"datetime-local",value:(u=t.publishedAt)!=null?u:"",onChange:y=>o("publishedAt",y.target.value||null),className:l$1}),jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:i.publishDateHint})]}),a.enableExpiresAt&&jsxs("div",{children:[jsx("label",{className:n,children:i.expiresAt}),jsx("input",{type:"datetime-local",value:(w=t.expiresAt)!=null?w:"",onChange:y=>o("expiresAt",y.target.value||null),className:l$1}),jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:i.expiresAtHint})]})]})]})});ie.displayName="BlogEditorMetadata";var le=X.forwardRef(({className:r},e)=>{let{languages:t,activeLanguage:o,setActiveLanguage:a,showPreview:i,setShowPreview:p,features:v,labels:g}=H();return jsxs("div",{ref:e,className:b("flex items-center border-b border-border sticky top-0 z-10 bg-background",r),role:"tablist","aria-label":"\uC5B8\uC5B4 \uC120\uD0DD",children:[jsx("div",{className:"flex flex-1",children:t.map(s=>{let h=o===s.key,m=s.isPrimary;return jsxs("button",{type:"button",role:"tab","aria-selected":h,"aria-controls":`tabpanel-${s.key}`,id:`tab-${s.key}`,onClick:()=>a(s.key),className:b("flex-1 px-4 py-3 text-sm font-medium transition-colors",h?"bg-primary/10 text-primary border-b-2 border-primary":"text-muted-foreground hover:bg-muted"),children:[s.flag&&jsx("span",{className:"mr-1.5",children:s.flag}),s.label,m&&" *"]},s.key)})}),v.enablePreview&&jsxs("button",{type:"button",onClick:()=>p(!i),className:"inline-flex items-center gap-1.5 px-3 py-2 mx-2 text-sm border border-border rounded-lg hover:bg-muted transition-colors shrink-0",children:[jsx(l,{name:i?"pencil":"eye",size:14}),i?g.editMode:g.preview]})]})});le.displayName="BlogEditorLanguageTabs";var ue=X.forwardRef(({className:r,textareaRef:e},t)=>{var d;let{formData:o,activeLanguage:a,updateMultilingualField:i,updateField:p,features:v,labels:g,languages:s,generateSlug:h,isEditMode:m,slugManuallyEdited:f}=H(),c=((d=s.find(u=>u.isPrimary))==null?void 0:d.key)===a,l=s.find(u=>u.key===a),n="w-full px-3 py-2 border border-border rounded-lg bg-background text-foreground focus:ring-1 focus:ring-ring focus:border-transparent transition-colors",b$1="block text-sm font-medium text-foreground mb-1",T=u=>{i("title",a,u),a==="en"&&!m&&!f&&p("slug",h(u));},E=u=>c?`${u} *`:`${u} (${(l==null?void 0:l.label)||a})`;return jsxs("div",{ref:t,className:b("p-6 space-y-4",r),children:[jsxs("div",{children:[jsx("label",{className:b$1,children:E(g.titleLabel)}),jsx("input",{type:"text",value:o.title[a]||"",onChange:u=>T(u.target.value),className:n,placeholder:g.titlePlaceholder})]}),v.enableExcerpt&&jsxs("div",{children:[jsx("label",{className:b$1,children:E(g.excerpt)}),jsx("textarea",{value:o.excerpt[a]||"",onChange:u=>i("excerpt",a,u.target.value),rows:2,className:b(n,"resize-none"),placeholder:g.excerptPlaceholder})]}),jsxs("div",{children:[jsxs("label",{className:b$1,children:[E(g.contentLabel)," (\uB9C8\uD06C\uB2E4\uC6B4)"]}),jsx("textarea",{ref:e,value:o.content[a]||"",onChange:u=>i("content",a,u.target.value),rows:15,className:b(n,"font-mono text-sm resize-y min-h-[300px]"),placeholder:g.contentPlaceholder})]})]})});ue.displayName="BlogEditorContent";function Xr(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function Ve(r){if(!r)return "";let e=r;return e=e.replace(/```(\w*)\n?([\s\S]*?)```/g,(t,o,a)=>`<pre class="bg-gray-100 dark:bg-gray-800 rounded-lg p-4 overflow-x-auto my-4"><code class="text-sm">${Xr(a.trim())}</code></pre>`),e=e.replace(/`([^`]+)`/g,'<code class="bg-gray-100 dark:bg-gray-700 px-1.5 py-0.5 rounded text-sm">$1</code>'),e=e.replace(/^######\s+(.+)$/gm,'<h6 class="text-base font-semibold mt-4 mb-2">$1</h6>'),e=e.replace(/^#####\s+(.+)$/gm,'<h5 class="text-lg font-semibold mt-4 mb-2">$1</h5>'),e=e.replace(/^####\s+(.+)$/gm,'<h4 class="text-xl font-semibold mt-5 mb-2">$1</h4>'),e=e.replace(/^###\s+(.+)$/gm,'<h3 class="text-2xl font-semibold mt-5 mb-3">$1</h3>'),e=e.replace(/^##\s+(.+)$/gm,'<h2 class="text-2xl font-bold mt-6 mb-3">$1</h2>'),e=e.replace(/^#\s+(.+)$/gm,'<h1 class="text-3xl font-bold mt-6 mb-4">$1</h1>'),e=e.replace(/^---+$/gm,'<hr class="my-6 border-gray-300 dark:border-gray-600" />'),e=e.replace(/^>\s+(.+)$/gm,'<blockquote class="border-l-4 border-gray-300 dark:border-gray-600 pl-4 my-4 italic text-gray-600 dark:text-gray-400">$1</blockquote>'),e=e.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),e=e.replace(/\*(.+?)\*/g,"<em>$1</em>"),e=e.replace(/~~(.+?)~~/g,'<del class="text-gray-500">$1</del>'),e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" class="text-cyan-600 hover:text-cyan-700 dark:text-cyan-400 dark:hover:text-cyan-300 underline" target="_blank" rel="noopener noreferrer">$1</a>'),e=e.replace(/^[-*]\s+(.+)$/gm,'<li class="ml-4">$1</li>'),e=e.replace(/(<li[^>]*>.*<\/li>\n?)+/g,t=>`<ul class="list-disc list-inside my-4 space-y-1">${t}</ul>`),e=e.replace(/\n(?!<)/g,`<br />
7
- `),e=e.replace(/(<br \/>[\n\s]*){3,}/g,`<br /><br />
8
- `),e}function At(r){return r?r.replace(/```[\s\S]*?```/g,"").replace(/`[^`]+`/g,"").replace(/^#{1,6}\s+/gm,"").replace(/\*\*(.+?)\*\*/g,"$1").replace(/\*(.+?)\*/g,"$1").replace(/~~(.+?)~~/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/^[-*]\s+/gm,"").replace(/^>\s+/gm,"").replace(/^---+$/gm,"").replace(/\n{3,}/g,`
9
-
10
- `).trim():""}function Gr(r,e=150){let t=At(r);return t.length<=e?t:t.slice(0,e).trim()+"..."}function qe(r,e,t,o,a){let i=r.slice(e,t),p=r.slice(0,e),v=r.slice(t),g=p+o+i+a+v,s=e+o.length+i.length+a.length;return {text:g,cursorPosition:s}}var Kr=[{icon:"bold",label:"bold",markdown:{before:"**",after:"**"},shortcut:"Ctrl+B"},{icon:"italic",label:"italic",markdown:{before:"*",after:"*"},shortcut:"Ctrl+I"},{icon:"strikethrough",label:"strikethrough",markdown:{before:"~~",after:"~~"}},{icon:"heading",label:"heading",markdown:{before:"## ",after:""}},{icon:"link",label:"link",markdown:{before:"[",after:"](url)"},shortcut:"Ctrl+K"},{icon:"image",label:"image",markdown:{before:"![alt](",after:")"}},{icon:"code",label:"code",markdown:{before:"`",after:"`"}},{icon:"fileCode",label:"codeBlock",markdown:{before:"```\n",after:"\n```"}},{icon:"quote",label:"quote",markdown:{before:"> ",after:""}},{icon:"list",label:"list",markdown:{before:"- ",after:""}},{icon:"listOrdered",label:"orderedList",markdown:{before:"1. ",after:""}},{icon:"minus",label:"horizontalRule",markdown:{before:`
11
- ---
12
- `,after:""}}],ge=X.forwardRef(({textareaRef:r,className:e},t)=>{let{labels:o,activeLanguage:a,updateMultilingualField:i,formData:p,features:v}=H(),g=useCallback(s=>{let h=r.current;if(!h)return;let{selectionStart:m,selectionEnd:f}=h,c=p.content[a]||"",{text:l,cursorPosition:n}=qe(c,m,f,s.markdown.before,s.markdown.after);i("content",a,l),requestAnimationFrame(()=>{h.focus(),h.setSelectionRange(n,n);});},[r,p,a,i]);return v.enableMarkdownToolbar?jsx("div",{ref:t,className:b("flex flex-wrap gap-1 px-4 py-2 border-b border-border bg-muted",e),role:"toolbar","aria-label":"\uB9C8\uD06C\uB2E4\uC6B4 \uC11C\uC2DD",children:Kr.map(s=>jsx("button",{type:"button",onClick:()=>g(s),className:"p-2 text-muted-foreground hover:text-foreground hover:bg-muted rounded transition-colors",title:`${o[s.label]||s.label}${s.shortcut?` (${s.shortcut})`:""}`,"aria-label":o[s.label]||s.label,children:jsx(l,{name:s.icon,size:16})},s.icon))}):null});ge.displayName="BlogEditorToolbar";var pe=X.forwardRef(({renderMarkdown:r,className:e},t)=>{var m,f;let{formData:o,activeLanguage:a,languages:i,labels:p}=H(),v=((m=i.find(c=>c.isPrimary))==null?void 0:m.key)||((f=i[0])==null?void 0:f.key),g=o.title[a]||o.title[v]||p.noTitle,s=o.content[a]||o.content[v]||"",h=X.useMemo(()=>r?r(s):jsx("div",{dangerouslySetInnerHTML:{__html:Ve(s)}}),[s,r]);return jsxs("div",{ref:t,className:b("p-6",e),children:[jsx("h3",{className:"text-xl font-bold text-foreground mb-4",children:g}),jsx("div",{className:"prose dark:prose-invert max-w-none",children:h})]})});pe.displayName="BlogEditorPreview";var me=X.forwardRef(({cancelLink:r,className:e},t)=>{let{labels:o,submitting:a,handleSave:i,handleCancel:p,isEditMode:v,autoSaveStatus:g,features:s}=H();return jsxs("div",{ref:t,className:b("flex items-center justify-end gap-3",e),children:[s.enableAutoSave&&g!=="idle"&&jsxs("span",{className:"text-sm text-muted-foreground flex items-center gap-1",children:[g==="saving"&&jsxs(Fragment,{children:[jsx(l,{name:"loader",size:14,spin:true}),"\uC800\uC7A5 \uC911..."]}),g==="saved"&&jsxs(Fragment,{children:[jsx(l,{name:"check",size:14}),"\uC790\uB3D9\uC800\uC7A5\uB428"]})]}),r||jsx("button",{type:"button",onClick:p,className:"px-4 py-2 text-foreground hover:text-foreground transition-colors",children:o.cancel}),jsx("button",{type:"button",onClick:()=>i(false),disabled:a,className:"px-4 py-2 border border-border rounded-lg hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:o.saveDraft}),jsx("button",{type:"button",onClick:()=>i(true),disabled:a,className:"px-6 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed inline-flex items-center gap-2 transition-colors",children:a?jsxs(Fragment,{children:[jsx(l,{name:"loader",size:16,spin:true}),o.saving]}):jsxs(Fragment,{children:[jsx(l,{name:"check",size:16}),v?o.update:o.publish]})})]})});me.displayName="BlogEditorActions";var be=X.forwardRef(({hint:r,className:e},t)=>{var l$1,n;let{labels:o,translating:a,translateSuccess:i,handleTranslate:p,formData:v,languages:g,features:s}=H();if(!s.enableTranslation)return null;let h=((l$1=g.find(b=>b.isPrimary))==null?void 0:l$1.key)||((n=g[0])==null?void 0:n.key),m=v.title[h]||"",f=v.content[h]||"",c=m&&f;return jsxs("div",{ref:t,className:b("px-6 py-3 bg-muted border-b border-border flex items-center justify-between",e),children:[jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[jsx(l,{name:"sparkles",size:16}),jsx("span",{children:r||o.translateHint})]}),jsx("button",{type:"button",onClick:p,disabled:a||!c,className:b("inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-lg transition-colors",i?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-primary text-white hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed"),children:a?jsxs(Fragment,{children:[jsx(l,{name:"loader",size:16,spin:true}),o.translating]}):i?jsxs(Fragment,{children:[jsx(l,{name:"check",size:16}),o.translateSuccess]}):jsxs(Fragment,{children:[jsx(l,{name:"sparkles",size:16}),o.translateButton]})})]})});be.displayName="BlogEditorTranslate";function ro({onBack:r,backLink:e,cancelLink:t,renderMarkdown:o,translateHint:a,maxWidth:i="max-w-4xl",className:p,children:v}){let{showPreview:g,error:s,variant:h,features:m}=H(),f=useRef(null),c=b(h==="glass"?"bg-gradient-to-br from-gray-100 to-gray-200 dark:from-gray-900 dark:to-gray-800":h==="minimal"?"":"bg-muted"),l=b("rounded-xl overflow-hidden",h==="glass"?"bg-white/10 backdrop-blur-sm border border-white/20 dark:bg-slate-800/20 dark:border-slate-700/50":h==="minimal"?"bg-transparent border border-border":"bg-background");return v?jsx("div",{className:b(c,p),children:jsx("div",{className:b(i,"mx-auto px-4 py-8"),children:v})}):jsx("div",{className:b(c,p),children:jsxs("div",{className:b(i,"mx-auto px-4 py-8"),children:[jsx(se,{onBack:r,backLink:e}),s&&jsx("div",{className:"mb-6 p-4 bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 rounded-lg text-red-600 dark:text-red-400",children:s}),jsxs("div",{className:"space-y-6",children:[jsx(ie,{}),jsxs("div",{className:l,children:[m.enableTranslation&&jsx(be,{hint:a}),jsx(le,{}),g?jsx(pe,{renderMarkdown:o}):jsxs(Fragment,{children:[m.enableMarkdownToolbar&&jsx(ge,{textareaRef:f}),jsx(ue,{textareaRef:f})]})]}),jsx(me,{cancelLink:t})]})]})})}var It=X.forwardRef(({initialData:r,isEditMode:e,languages:t,defaultLanguage:o,labels:a,callbacks:i,features:p,variant:v,onBack:g,backLink:s,cancelLink:h,renderMarkdown:m,translateHint:f,maxWidth:c,className:l,children:n,autoSaveKey:b,autoSaveInterval:T},E)=>jsx(Ie,{initialData:r,isEditMode:e,languages:t,defaultLanguage:o,labels:a,callbacks:i,features:p,variant:v,autoSaveKey:b,autoSaveInterval:T,children:jsx("div",{ref:E,children:jsx(ro,{onBack:g,backLink:s,cancelLink:h,renderMarkdown:m,translateHint:f,maxWidth:c,className:l,children:n})})}));It.displayName="BlogEditor";var _=It;_.Header=se;_.Metadata=ie;_.LanguageTabs=le;_.Content=ue;_.Toolbar=ge;_.Preview=pe;_.Actions=me;_.Translate=be;export{Ve as A,At as B,Gr as C,qe as D,ge as E,pe as F,me as G,be as H,_ as I,G as a,zt as b,Dt as c,Vt as d,qt as e,Ot as f,_t as g,Ut as h,Gt as i,Kt as j,pt as k,bt as l,yt as m,Tt as n,Pt as o,Mt as p,Nt as q,Se as r,Sr as s,He as t,H as u,Ie as v,se as w,ie as x,le as y,ue as z};//# sourceMappingURL=chunk-OFYITQXI.mjs.map
13
- //# sourceMappingURL=chunk-OFYITQXI.mjs.map